from ledgplom.ledger import DEFAULT_INDENT, Ledger
-PATH_TEMPLATES = Path('templates')
+_PATH_TEMPLATES = Path('templates')
_PREFIX_EDIT = 'edit'
_PREFIX_FILE = 'file'
_PREFIX_LEDGER = 'ledger'
_SERVER_HOST = '127.0.0.1'
_SERVER_PORT = 8084
-SUFFIX_HTML = '.html'
-SUFFIX_JS = '.js'
+_SUFFIX_HTML = '.html'
+_SUFFIX_JS = '.js'
_SUFFIX_STRUCTURED = 'structured'
_PAGENAME_EDIT_STRUCTURED = f'{_PREFIX_EDIT}_{_SUFFIX_STRUCTURED}'
-def render_ctx_on_path(ledger, short_path_toks):
- 'Prepare template rendering context based on ledger and path.'
- pagename = short_path_toks[0]
- prefix, suffix = (pagename + '_').split('_')[:2]
- method = getattr(ledger, f'view_ctx_{prefix}')
- method_kwargs = {}
- if prefix != _PREFIX_LEDGER:
- method_kwargs['id_'] = -1
- if len(short_path_toks) > 1:
- id_str = short_path_toks[1] or '-1'
- if id_str.isdigit() or (id_str[1:].isdigit() and id_str[0] == '-'):
- method_kwargs['id_'] = int(id_str)
- if prefix == _PREFIX_EDIT:
- method_kwargs['raw'] = suffix != _SUFFIX_STRUCTURED
- return method(**method_kwargs)
-
-
class Server(PlomHttpServer):
'Extends parent by loading .dat file into database for Handler.'
def __init__(self, path_dat: Path, *args, **kwargs) -> None:
- super().__init__(PATH_TEMPLATES,
+ super().__init__(_PATH_TEMPLATES,
(_SERVER_HOST, _SERVER_PORT),
_Handler)
self.ledger = Ledger(path_dat)
+ self.jinja.trim_blocks = True
class _Handler(PlomHttpHandler):
Path(f'/{_PAGENAME_EDIT_STRUCTURED}', self.path_toks[2]))
ctx: dict[str, Any] = {}
template_names = tuple(str(path.parts[-1])
- for path in PATH_TEMPLATES.iterdir())
- if self.pagename.endswith(SUFFIX_JS):
+ for path in _PATH_TEMPLATES.iterdir())
+ if self.pagename.endswith(_SUFFIX_JS):
if self.pagename not in template_names:
return send_404()
if self.pagename.startswith(_PAGENAME_EDIT_STRUCTURED):
+ [tf_line.as_dict
for tf_line in block.booking.transfer_lines]
) if block.booking else []
- self.send_http(
+ return self.send_http(
bytes(self.server.jinja.get_template(self.pagename
).render(**ctx),
encoding='utf8'),
[('Content-Type', 'text/javascript')])
- return
- template_name = f'{self.pagename}{SUFFIX_HTML}'
+ template_name = f'{self.pagename}{_SUFFIX_HTML}'
if template_name not in template_names:
return send_404()
ctx['path'] = self.path
ctx['unsaved_changes'] = self.server.ledger.tainted
- ctx |= render_ctx_on_path(self.server.ledger, self.path_toks[1:])
- self.send_rendered(Path(f'{self.pagename}{SUFFIX_HTML}'), ctx)
+ prefix, suffix = (self.pagename + '_').split('_')[:2]
+ method_kwargs = {}
+ if prefix != _PREFIX_LEDGER:
+ method_kwargs['id_'] = -1
+ if len(self.path_toks) > 2:
+ id_str = self.path_toks[2] or '-1'
+ if id_str.isdigit() or (id_str[1:].isdigit()
+ and id_str[0] == '-'):
+ method_kwargs['id_'] = int(id_str)
+ if prefix == _PREFIX_EDIT:
+ method_kwargs['raw'] = suffix != _SUFFIX_STRUCTURED
+ ctx |= getattr(self.server.ledger,
+ f'view_ctx_{prefix}')(**method_kwargs)
+ return self.send_rendered(Path(f'{self.pagename}{_SUFFIX_HTML}'), ctx)
# built-ins
from sys import exit as sys_exit
from pathlib import Path
-from typing import Any, Optional
+from threading import Thread
+from typing import Optional
# requirements.txt
-from jinja2 import (Environment as JinjaEnv,
- FileSystemLoader as JinjaFSLoader)
+from playwright.sync_api import sync_playwright
# ourselves
-from ledgplom.http import (PATH_TEMPLATES, SUFFIX_HTML, SUFFIX_JS,
- render_ctx_on_path)
-from ledgplom.ledger import Ledger
+from ledgplom.http import Server
+from plomlib.web import PlomHttpServer
_EXT_DAT = '.dat'
def run_tests() -> None:
'Run tests from tests directory.'
- def fail(abort_msg: str, msg_prefix: str, idx: Optional[int]) -> None:
- for jdx, line in enumerate(lines_rendered[:idx], start=1):
- print(f'{jdx}: [{line}]')
- print(f'{msg_prefix} FAILED – {abort_msg}')
- sys_exit(1)
-
- jinja = JinjaEnv(loader=JinjaFSLoader(PATH_TEMPLATES),
- autoescape=True,
- trim_blocks=True)
paths = tuple(_PATH_TESTS.iterdir())
- for dat_path in [p for p in paths if p.parts[-1].endswith(_EXT_DAT)]:
- ledger = Ledger(dat_path)
+
+ def f(dat_path: Path, server: PlomHttpServer):
+
+ def fail(abort_msg: str, msg_prefix: str, idx: Optional[int]) -> None:
+ for jdx, line in enumerate(lines_rendered[:idx], start=1):
+ print(f'{jdx}: [{line}]')
+ print(f'{msg_prefix} FAILED – {abort_msg}')
+ sys_exit(1)
+
+ test_name = str(dat_path.parts[-1])[:-len(_EXT_DAT)]
+ pw = sync_playwright().start()
+ page = pw.firefox.launch().new_page()
for test_path in [p for p in paths
if p != dat_path
- and p.parts[-1].startswith(
- str(dat_path.parts[-1])[:-len(_EXT_DAT)] + '.')]:
- path_toks = str(test_path.parts[-1]).split('.')[1:]
- tmpl_name = path_toks[0]
- ctx: dict[str, Any] = {}
- if tmpl_name.endswith(SUFFIX_JS.replace('.', '_')):
- tmpl_name = tmpl_name[:-len(SUFFIX_JS)] + SUFFIX_JS
- else:
- tmpl_name += SUFFIX_HTML
- ctx |= render_ctx_on_path(ledger, path_toks)
- lines_rendered = jinja.get_template(tmpl_name).render(ctx
- ).split('\n')
+ and p.parts[-1].startswith(f'{test_name}.')]:
+ path = str(test_path.parts[-1]
+ ).split('.', maxsplit=1)[1].replace('.', '/')
+ page.goto(f'http://localhost:8084/{path}')
+ lines_rendered = page.content().split('\n')
with test_path.open('r', encoding='utf8') as f:
lines_expected = tuple(line.rstrip('\n')
for line in f.readlines())
if len(lines_expected) > idx1:
fail(f'more lines expected line {idx1}', msg_prefix, None)
print(f'{msg_prefix} passed')
+ pw.stop()
+ server.shutdown()
+
+ for dat_path in [p for p in paths if p.parts[-1].endswith(_EXT_DAT)]:
+ server = Server(dat_path)
+ Thread(target=f, args=(dat_path, server,)).start()
+ server.serve()
Jinja2==3.1.5
+playwright==1.57.0
{% if unsaved_changes %}
<span class="critical">
· unsaved changes:
- <input type="submit"name="file_load" value="reload" />
- · <input type="submit" name="file_save" value="save">
+ <input type="submit" name="file_load" value="reload" />
+ · <input type="submit" name="file_save" value="save" />
</span>
{% else %}
{% macro ledger_block_columns(mode, block) %}
<tr></tr><!-- keep the background-color alternation in proper order -->
<tr id="block_{{ block.id_ }}">
- <td rowspan={{ block.lines | length + 1 }} {# -#}
+ <td rowspan={{ block.lines | length + 1 }}
class="block_column{{ ' critical' if block.date_error }}">
<input type="submit"
name="ledger_moveup_{{ block.id_ }}"
value="^"
- {{- '
- disabled' if not block.can_move(1) }}
+ {{ 'disabled' if not block.can_move(1) }}
/>
<br />
<input type="submit"
name="ledger_movedown_{{ block.id_ }}"
value="v"
- {{- '
- disabled' if not block.can_move(0) }}
+ {{ 'disabled' if not block.can_move(0) }}
/>
<br />
- <input type="submit" {# -#}
- name="ledger_copy_{{ block.id_ }}" {# -#}
- value="C"{# -#}
+ <input type="submit"
+ name="ledger_copy_{{ block.id_ }}"
+ value="C"
/>
</td>
- <td rowspan={{ block.lines | length + 1 }} {# -#}
+ <td rowspan={{ block.lines | length + 1 }}
class="block_column{{ ' critical' if block.booking
and block.booking.sink_error }}">
[<a href="#block_{{ block.id_ }}">#</a>]<br />
{######}{% macro td_wealth(wealth_dict) %}
<td>
<table>
+ <tbody>
{##########}{% for curr, amt in wealth_dict.items() %}
<tr>
<td class="balance amount">
</td>
</tr>
{##########}{% endfor %}
+ </tbody>
</table>
</td>{##}
{######}{% endmacro %}
{##}{% endmacro -%}
<table class="alternating{{ ' critical' if not valid }}">
+<tbody>
<tr>
<th>account</th>
<th>before</th>
{% for root in roots %}
{{- booking_balance_account_with_children(root) -}}
{% endfor %}
+</tbody>
</table>
{%- endmacro %}
{{_()}} <td class="money">
{##}{% if account.get_wealth_at(block_id).moneys | length == 1 %}
{{_()}} <table>
+{{_()}} <tbody>
{######}{% for cur, amt in account.get_wealth_at(block_id).moneys.items() %}
{{- tr_money_balance(amt, cur) -}}
{######}{% endfor %}
+{{_()}} </tbody>
{{_()}} </table>
{##}{% else %}
{{_()}} <details>
{{_()}} <summary>
{{_()}} <table>
+{{_()}} <tbody>
{######}{% for cur, amt in account.get_wealth_at(block_id).moneys.items() %}
{{- tr_money_balance(amt, cur, i=6)
if 1 == loop.index -}}
{######}{% endfor %}
+{{_()}} </tbody>
{{_()}} </table>
{{_()}} </summary>
{{_()}} <table>
+{{_()}} <tbody>
{######}{% for cur, amt in account.get_wealth_at(block_id).moneys.items() %}
{{- tr_money_balance(amt, cur, 5) if 1 < loop.index -}}
{######}{% endfor %}
+{{_()}} </tbody>
{{_()}} </table>
{{_()}} </details>
{##}{% endif %}
</a>
</p>
<table class="alternating {% if not valid %}critical{% endif %}">
+<tbody>
{% for root in roots %}
{{ account_with_children(block.id_, root, name_indent=0) -}}
{% endfor %}
+</tbody>
</table>
{% endblock %}
</form>
<datalist id="all_accounts">
{% for acc in all_accounts %}
-<option value="{{ acc }}">{{ acc }}</a>
+<option value="{{ acc }}">{{ acc }}</option>
{% endfor %}
</datalist>
<hr />
<form action="/ledger_raw" method="POST">
{{ macros.ledger_empty_lines_fix(has_redundant_empty_lines) -}}
<table class="alternating">
+<tbody>
{% for block in blocks %}
{{ macros.ledger_block_columns('raw', block) -}}
{##}{% for line in block.lines %}
</tr>
{##}{% endfor %}
{% endfor %}
+</tbody>
</table>
</form>
{% endblock %}
<form action="/ledger_structured" method="POST">
{{ macros.ledger_empty_lines_fix(has_redundant_empty_lines) -}}
<table class="alternating">
+<tbody>
{% for block in blocks %}
{{ macros.ledger_block_columns('structured', block) -}}
{##}{% if block.booking %}
</tr>
{##}{% endfor %}
{% endfor %}
+</tbody>
</table>
<input type="submit" name="add_booking" value="add booking" />
</form>
-<!DOCTYPE html>
-<html>
-<head>
+<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<style>
html {
</head>
<body>
<div id="header">
- <form action="" method="POST">
+ <form action="/balance" method="POST">
<span class="disable_on_taint">
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" />
+ · <input type="submit" name="file_load" value="reload">
</span>
</form>
</div>
balance after <a href="/blocks/0">booking 0 (: )</a>
</p>
<table class="alternating ">
+<tbody>
+</tbody>
</table>
-</body>
-</html>
+
+</body></html>
-<!DOCTYPE html>
-<html>
-<head>
+<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<style>
html {
</head>
<body>
<div id="header">
- <form action="" method="POST">
+ <form action="/ledger_raw" method="POST">
<span class="disable_on_taint">
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" />
+ · <input type="submit" name="file_load" value="reload">
</span>
</form>
</div>
<form action="/ledger_raw" method="POST">
<table class="alternating">
+<tbody>
<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 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/0">b</a>]<br />
+ <td rowspan="2" class="block_column">
+ [<a href="#block_0">#</a>]<br>
+ [<a href="/balance/0">b</a>]<br>
[<a href="/edit_raw/0">e</a>]
</td>
</tr>
<tr><td> </td></tr>
+</tbody>
</table>
</form>
-</body>
-</html>
+
+</body></html>
-<!DOCTYPE html>
-<html>
-<head>
+<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<style>
html {
</head>
<body>
<div id="header">
- <form action="" method="POST">
+ <form action="/ledger_structured" method="POST">
<span class="disable_on_taint">
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" />
+ · <input type="submit" name="file_load" value="reload">
</span>
</form>
</div>
<form action="/ledger_structured" method="POST">
<table class="alternating">
+<tbody>
<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 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/0">b</a>]<br />
+ <td rowspan="2" class="block_column">
+ [<a href="#block_0">#</a>]<br>
+ [<a href="/balance/0">b</a>]<br>
[<a href="/edit_structured/0">e</a>]
</td>
</tr>
<tr>
- <td colspan=4> </td>
+ <td colspan="4"> </td>
</tr>
+</tbody>
</table>
-<input type="submit" name="add_booking" value="add booking" />
+<input type="submit" name="add_booking" value="add booking">
</form>
-</body>
-</html>
+
+</body></html>
-<!DOCTYPE html>
-<html>
-<head>
+<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<style>
html {
</head>
<body>
<div id="header">
- <form action="" method="POST">
+ <form action="/balance" method="POST">
<span class="disable_on_taint">
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" />
+ · <input type="submit" name="file_load" value="reload">
</span>
</form>
</div>
balance after <a href="/blocks/4">booking 4 (2001-01-01: test)</a>
</p>
<table class="alternating critical">
+<tbody>
<tr>
<td class="money">
<details>
<summary>
<table>
+ <tbody>
<tr>
<td class="balance amount">-9</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</summary>
<table>
+ <tbody>
<tr>
<td class="balance amount">-1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</details>
</td>
<tr>
<td class="money">
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<tr>
<td class="money">
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<tr>
<td class="money">
<table>
+ <tbody>
<tr>
<td class="balance amount">-1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<tr>
<td class="money">
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<details>
<summary>
<table>
+ <tbody>
<tr>
<td class="balance amount">20</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</summary>
<table>
+ <tbody>
<tr>
<td class="balance amount">1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</details>
</td>
<details>
<summary>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</summary>
<table>
+ <tbody>
<tr>
<td class="balance amount">1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</details>
</td>
</td>
<td></td>
</tr>
+</tbody>
</table>
-</body>
-</html>
+
+</body></html>
-<!DOCTYPE html>
-<html>
-<head>
+<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<script type="module" src="/taint.js">
</script>
</head>
<body>
<div id="header">
- <form action="" method="POST">
+ <form action="/edit_raw/1" method="POST">
<span class="disable_on_taint">
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" />
+ · <input type="submit" name="file_load" value="reload">
</span>
</form>
</div>
<a href="/blocks/0">prev</a>
<a href="/blocks/2">next</a>
</span>
-<input class="enable_on_taint"
- type="submit"
- name="apply"
- value="apply"
- disabled
- />
-<input class="enable_on_taint"
- type="submit"
- name="revert"
- value="revert"
- disabled
- />
+<input class="enable_on_taint" type="submit" name="apply" value="apply" disabled="">
+<input class="enable_on_taint" type="submit" name="revert" value="revert" disabled="">
<span class="disable_on_taint">
<a href="/edit_structured/1">switch to structured</a>
·
·
<a href="/ledger_raw/#block_1">in ledger</a>
</span>
-<hr />
+<hr>
-<textarea name="raw_lines"
- class="tainter"
- cols=100
- rows=5
- >
-2001-01-01 test ; foo
+<textarea name="raw_lines" class="tainter" cols="100" rows="5">2001-01-01 test ; foo
foo 10 €
bar -10 €
</textarea>
</form>
<table class="alternating">
+<tbody>
<tr>
<th>account</th>
<th>before</th>
<td class="direct_target">bar</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td class="direct_target">foo</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
+</tbody>
</table>
-</body>
-</html>
+
+</body></html>
-<!DOCTYPE html>
-<html>
-<head>
+<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<script type="module" src="/taint.js">
</script>
</head>
<body>
<div id="header">
- <form action="" method="POST">
+ <form action="/edit_raw/4" method="POST">
<span class="disable_on_taint">
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" />
+ · <input type="submit" name="file_load" value="reload">
</span>
</form>
</div>
<a href="/blocks/3">prev</a>
<del>next</del>
</span>
-<input class="enable_on_taint"
- type="submit"
- name="apply"
- value="apply"
- disabled
- />
-<input class="enable_on_taint"
- type="submit"
- name="revert"
- value="revert"
- disabled
- />
+<input class="enable_on_taint" type="submit" name="apply" value="apply" disabled="">
+<input class="enable_on_taint" type="submit" name="revert" value="revert" disabled="">
<span class="disable_on_taint">
<a href="/edit_structured/4">switch to structured</a>
·
·
<a href="/ledger_raw/#block_4">in ledger</a>
</span>
-<hr />
+<hr>
<div class="critical">
block-wide errors:
date < previous date
– and:
</div>
-<hr />
+<hr>
-<textarea name="raw_lines"
- class="tainter"
- cols=100
- rows=7
- >
-2001-01-01 test
+<textarea name="raw_lines" class="tainter" cols="100" rows="7">2001-01-01 test
foo:x 10 €
foo:x 1 USD
bar:x:y -10 €
</textarea>
</form>
<table class="alternating critical">
+<tbody>
<tr>
<th>account</th>
<th>before</th>
<td>bar:</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">1</td>
<td class="balance currency">€</td>
<td class="balance amount">0</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
<td class="balance amount">-1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-9</td>
<td class="balance currency">€</td>
<td class="balance amount">-1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td>bar:x:</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td class="direct_target">bar:x:y</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td class="direct_target">bar:z</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td>foo:</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
<td class="balance amount">0</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
<td class="balance amount">1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">20</td>
<td class="balance currency">€</td>
<td class="balance amount">1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td class="direct_target">foo:x</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">€</td>
<td class="balance amount">0</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
<td class="balance amount">1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
<td class="balance amount">1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
+</tbody>
</table>
-</body>
-</html>
+
+</body></html>
-<!DOCTYPE html>
-<html>
-<head>
+<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<script type="module" src="/edit_structured.js/1">
</script>
</head>
<body>
<div id="header">
- <form action="" method="POST">
+ <form action="/edit_structured/1" method="POST">
<span class="disable_on_taint">
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" />
+ · <input type="submit" name="file_load" value="reload">
</span>
</form>
</div>
<a href="/blocks/0">prev</a>
<a href="/blocks/2">next</a>
</span>
-<input class="enable_on_taint"
- type="submit"
- name="apply"
- value="apply"
- disabled
- />
-<input class="enable_on_taint"
- type="submit"
- name="revert"
- value="revert"
- disabled
- />
+<input class="enable_on_taint" type="submit" name="apply" value="apply" disabled="">
+<input class="enable_on_taint" type="submit" name="revert" value="revert" disabled="">
<span class="disable_on_taint">
<a href="/edit_raw/1">switch to raw</a>
·
·
<a href="/ledger_structured/#block_1">in ledger</a>
</span>
-<hr />
+<hr>
<span class="disable_on_taint">
<input id="btn_mirror" type="button" value="mirror">
|
<input id="btn_replace" type="button" value="replace string">
from
-<input id="replace_from" />
+<input id="replace_from">
to
-<input id="replace_to" />
+<input id="replace_to">
</span>
-<hr />
-<table id="booking_lines" class="alternating">
-</table>
+<hr>
+<table id="booking_lines" class="alternating"><tr><td colspan="1"></td><td colspan="3"><input name="line_0_date" size="10" id="date_input"><input name="line_0_target" size="37"></td><td colspan="1"><input name="line_0_comment" size="40"></td><td colspan="1"><button type="button">add new</button></td></tr><tr><td colspan="1"><button type="button" disabled="">^</button><button type="button">v</button></td><td colspan="1"><input name="line_1_account" size="30" list="all_accounts" autocomplete="off"></td><td colspan="1"><input name="line_1_amount" size="12" pattern="^-?[0-9]+(.[0-9]+)?$" class="amount"></td><td colspan="1"><input name="line_1_currency" size="3" placeholder="€"></td><td colspan="1"><input name="line_1_comment" size="40"></td><td colspan="1"><button type="button">add new</button><button type="button">delete</button></td></tr><tr><td colspan="1"><button type="button">^</button><button type="button">v</button></td><td colspan="1"><input name="line_2_account" size="30" list="all_accounts" autocomplete="off"></td><td colspan="1"><input name="line_2_amount" size="12" pattern="^-?[0-9]+(.[0-9]+)?$" class="amount"></td><td colspan="1"><input name="line_2_currency" size="3" placeholder="€"></td><td colspan="1"><input name="line_2_comment" size="40"></td><td colspan="1"><button type="button">add new</button><button type="button">delete</button></td></tr></table>
<div>Gap:</div>
-<textarea id="gap_lines"
- name="raw_lines"
- cols=100
- rows=2
- class="tainter"
- >
-</textarea>
+<textarea id="gap_lines" name="raw_lines" cols="100" rows="2" class="tainter"></textarea>
</form>
<datalist id="all_accounts">
-<option value="bar">bar</a>
-<option value="bar:x">bar:x</a>
-<option value="bar:x:y">bar:x:y</a>
-<option value="bar:z">bar:z</a>
-<option value="baz">baz</a>
-<option value="foo">foo</a>
-<option value="foo:x">foo:x</a>
+<option value="bar">bar</option>
+<option value="bar:x">bar:x</option>
+<option value="bar:x:y">bar:x:y</option>
+<option value="bar:z">bar:z</option>
+<option value="baz">baz</option>
+<option value="foo">foo</option>
+<option value="foo:x">foo:x</option>
</datalist>
-<hr />
+<hr>
<table class="alternating">
+<tbody>
<tr>
<th>account</th>
<th>before</th>
<td class="direct_target">bar</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td class="direct_target">foo</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
+</tbody>
</table>
-</body>
-</html>
+
+</body></html>
-<!DOCTYPE html>
-<html>
-<head>
+<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<script type="module" src="/edit_structured.js/4">
</script>
</head>
<body>
<div id="header">
- <form action="" method="POST">
+ <form action="/edit_structured/4" method="POST">
<span class="disable_on_taint">
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" />
+ · <input type="submit" name="file_load" value="reload">
</span>
</form>
</div>
<a href="/blocks/3">prev</a>
<del>next</del>
</span>
-<input class="enable_on_taint"
- type="submit"
- name="apply"
- value="apply"
- disabled
- />
-<input class="enable_on_taint"
- type="submit"
- name="revert"
- value="revert"
- disabled
- />
+<input class="enable_on_taint" type="submit" name="apply" value="apply" disabled="">
+<input class="enable_on_taint" type="submit" name="revert" value="revert" disabled="">
<span class="disable_on_taint">
<a href="/edit_raw/4">switch to raw</a>
·
·
<a href="/ledger_structured/#block_4">in ledger</a>
</span>
-<hr />
+<hr>
<div class="critical">
block-wide errors:
date < previous date
– and:
</div>
-<hr />
+<hr>
<span class="disable_on_taint">
<input id="btn_mirror" type="button" value="mirror">
|
<input id="btn_replace" type="button" value="replace string">
from
-<input id="replace_from" />
+<input id="replace_from">
to
-<input id="replace_to" />
+<input id="replace_to">
</span>
-<hr />
-<table id="booking_lines" class="alternating">
-</table>
+<hr>
+<table id="booking_lines" class="alternating"><tr><td colspan="1"></td><td colspan="3"><input name="line_0_date" size="10" id="date_input"><input name="line_0_target" size="37"></td><td colspan="1"><input name="line_0_comment" size="40"></td><td colspan="1"><button type="button">add new</button></td></tr><tr><td colspan="1"><button type="button" disabled="">^</button><button type="button">v</button></td><td colspan="1"><input name="line_1_account" size="30" list="all_accounts" autocomplete="off"></td><td colspan="1"><input name="line_1_amount" size="12" pattern="^-?[0-9]+(.[0-9]+)?$" class="amount"></td><td colspan="1"><input name="line_1_currency" size="3" placeholder="€"></td><td colspan="1"><input name="line_1_comment" size="40"></td><td colspan="1"><button type="button">add new</button><button type="button">delete</button></td></tr><tr><td colspan="1"><button type="button">^</button><button type="button">v</button></td><td colspan="1"><input name="line_2_account" size="30" list="all_accounts" autocomplete="off"></td><td colspan="1"><input name="line_2_amount" size="12" pattern="^-?[0-9]+(.[0-9]+)?$" class="amount"></td><td colspan="1"><input name="line_2_currency" size="3" placeholder="€"></td><td colspan="1"><input name="line_2_comment" size="40"></td><td colspan="1"><button type="button">add new</button><button type="button">delete</button></td></tr><tr><td colspan="1"><button type="button">^</button><button type="button">v</button></td><td colspan="1"><input name="line_3_account" size="30" list="all_accounts" autocomplete="off"></td><td colspan="1"><input name="line_3_amount" size="12" pattern="^-?[0-9]+(.[0-9]+)?$" class="amount"></td><td colspan="1"><input name="line_3_currency" size="3" placeholder="€"></td><td colspan="1"><input name="line_3_comment" size="40"></td><td colspan="1"><button type="button">add new</button><button type="button">delete</button></td></tr><tr><td colspan="1"><button type="button">^</button><button type="button">v</button></td><td colspan="1"><input name="line_4_account" size="30" list="all_accounts" autocomplete="off"></td><td colspan="1"><input name="line_4_amount" size="12" pattern="^-?[0-9]+(.[0-9]+)?$" class="amount"></td><td colspan="1"><input name="line_4_currency" size="3" placeholder="€"></td><td colspan="1"><input name="line_4_comment" size="40"></td><td colspan="1"><button type="button">add new</button><button type="button">delete</button></td></tr></table>
<div>Gap:</div>
-<textarea id="gap_lines"
- name="raw_lines"
- cols=100
- rows=2
- class="tainter"
- >
-</textarea>
+<textarea id="gap_lines" name="raw_lines" cols="100" rows="2" class="tainter"></textarea>
</form>
<datalist id="all_accounts">
-<option value="bar">bar</a>
-<option value="bar:x">bar:x</a>
-<option value="bar:x:y">bar:x:y</a>
-<option value="bar:z">bar:z</a>
-<option value="baz">baz</a>
-<option value="foo">foo</a>
-<option value="foo:x">foo:x</a>
+<option value="bar">bar</option>
+<option value="bar:x">bar:x</option>
+<option value="bar:x:y">bar:x:y</option>
+<option value="bar:z">bar:z</option>
+<option value="baz">baz</option>
+<option value="foo">foo</option>
+<option value="foo:x">foo:x</option>
</datalist>
-<hr />
+<hr>
<table class="alternating critical">
+<tbody>
<tr>
<th>account</th>
<th>before</th>
<td>bar:</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">1</td>
<td class="balance currency">€</td>
<td class="balance amount">0</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
<td class="balance amount">-1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-9</td>
<td class="balance currency">€</td>
<td class="balance amount">-1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td>bar:x:</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td class="direct_target">bar:x:y</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-10</td>
<td class="balance currency">€</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td class="direct_target">bar:z</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">-1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td>foo:</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
<td class="balance amount">0</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
<td class="balance amount">1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">20</td>
<td class="balance currency">€</td>
<td class="balance amount">1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
<td class="direct_target">foo:x</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">0</td>
<td class="balance currency">€</td>
<td class="balance amount">0</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
<td class="balance amount">1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
<td>
<table>
+ <tbody>
<tr>
<td class="balance amount">10</td>
<td class="balance currency">€</td>
<td class="balance amount">1</td>
<td class="balance currency">USD</td>
</tr>
+ </tbody>
</table>
</td>
</tr>
+</tbody>
</table>
-</body>
-</html>
+
+</body></html>
-<!DOCTYPE html>
-<html>
-<head>
+<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<style>
html {
</head>
<body>
<div id="header">
- <form action="" method="POST">
+ <form action="/ledger_raw" method="POST">
<span class="disable_on_taint">
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" />
+ · <input type="submit" name="file_load" value="reload">
</span>
</form>
</div>
<form action="/ledger_raw" method="POST">
-Detected redundant empty lines in gaps, <input type="submit" name="remove_redundant_empty_lines" value="fix?" />
-<hr />
+Detected redundant empty lines in gaps, <input type="submit" name="remove_redundant_empty_lines" value="fix?">
+<hr>
<table class="alternating">
+<tbody>
<tr></tr><!-- keep the background-color alternation in proper order -->
<tr id="block_0">
- <td rowspan=3 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 rowspan="3" 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=3 class="block_column">
- [<a href="#block_0">#</a>]<br />
- [<a href="/balance/0">b</a>]<br />
+ <td rowspan="3" class="block_column">
+ [<a href="#block_0">#</a>]<br>
+ [<a href="/balance/0">b</a>]<br>
[<a href="/edit_raw/0">e</a>]
</td>
</tr>
<tr><td> </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 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/1">b</a>]<br />
+ <td rowspan="5" class="block_column">
+ [<a href="#block_1">#</a>]<br>
+ [<a href="/balance/1">b</a>]<br>
[<a href="/edit_raw/1">e</a>]
</td>
</tr>
<tr><td> </td></tr>
<tr></tr><!-- keep the background-color alternation in proper order -->
<tr id="block_2">
- <td rowspan=7 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 rowspan="7" 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=7 class="block_column">
- [<a href="#block_2">#</a>]<br />
- [<a href="/balance/2">b</a>]<br />
+ <td rowspan="7" class="block_column">
+ [<a href="#block_2">#</a>]<br>
+ [<a href="/balance/2">b</a>]<br>
[<a href="/edit_raw/2">e</a>]
</td>
</tr>
<tr><td> </td></tr>
<tr></tr><!-- keep the background-color alternation in proper order -->
<tr id="block_3">
- <td rowspan=6 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 rowspan="6" 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=6 class="block_column critical">
- [<a href="#block_3">#</a>]<br />
- [<a href="/balance/3">b</a>]<br />
+ <td rowspan="6" class="block_column critical">
+ [<a href="#block_3">#</a>]<br>
+ [<a href="/balance/3">b</a>]<br>
[<a href="/edit_raw/3">e</a>]
</td>
</tr>
<tr><td> </td></tr>
<tr></tr><!-- keep the background-color alternation in proper order -->
<tr id="block_4">
- <td rowspan=7 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 rowspan="7" 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=7 class="block_column">
- [<a href="#block_4">#</a>]<br />
- [<a href="/balance/4">b</a>]<br />
+ <td rowspan="7" class="block_column">
+ [<a href="#block_4">#</a>]<br>
+ [<a href="/balance/4">b</a>]<br>
[<a href="/edit_raw/4">e</a>]
</td>
</tr>
<tr><td> bar:x:y -10 € </td></tr>
<tr><td> bar:z -1 USD </td></tr>
<tr><td> </td></tr>
+</tbody>
</table>
</form>
-</body>
-</html>
+
+</body></html>
-<!DOCTYPE html>
-<html>
-<head>
+<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<style>
html {
</head>
<body>
<div id="header">
- <form action="" method="POST">
+ <form action="/ledger_structured" method="POST">
<span class="disable_on_taint">
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" />
+ · <input type="submit" name="file_load" value="reload">
</span>
</form>
</div>
<form action="/ledger_structured" method="POST">
-Detected redundant empty lines in gaps, <input type="submit" name="remove_redundant_empty_lines" value="fix?" />
-<hr />
+Detected redundant empty lines in gaps, <input type="submit" name="remove_redundant_empty_lines" value="fix?">
+<hr>
<table class="alternating">
+<tbody>
<tr></tr><!-- keep the background-color alternation in proper order -->
<tr id="block_0">
- <td rowspan=3 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 rowspan="3" 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=3 class="block_column">
- [<a href="#block_0">#</a>]<br />
- [<a href="/balance/0">b</a>]<br />
+ <td rowspan="3" class="block_column">
+ [<a href="#block_0">#</a>]<br>
+ [<a href="/balance/0">b</a>]<br>
[<a href="/edit_structured/0">e</a>]
</td>
</tr>
<tr>
- <td colspan=4>; #def bar:x bla bla bla </td>
+ <td colspan="4">; #def bar:x bla bla bla </td>
</tr>
<tr>
- <td colspan=4> </td>
+ <td colspan="4"> </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 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/1">b</a>]<br />
+ <td rowspan="5" class="block_column">
+ [<a href="#block_1">#</a>]<br>
+ [<a href="/balance/1">b</a>]<br>
[<a href="/edit_structured/1">e</a>]
</td>
</tr>
<tr>
- <td colspan=3>2001-01-01 test</td>
+ <td colspan="3">2001-01-01 test</td>
<td>foo</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
- <td colspan=4> </td>
+ <td colspan="4"> </td>
</tr>
<tr></tr><!-- keep the background-color alternation in proper order -->
<tr id="block_2">
- <td rowspan=7 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 rowspan="7" 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=7 class="block_column">
- [<a href="#block_2">#</a>]<br />
- [<a href="/balance/2">b</a>]<br />
+ <td rowspan="7" class="block_column">
+ [<a href="#block_2">#</a>]<br>
+ [<a href="/balance/2">b</a>]<br>
[<a href="/edit_structured/2">e</a>]
</td>
</tr>
<tr>
- <td colspan=3>2001-01-02 test</td>
+ <td colspan="3">2001-01-02 test</td>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
- <td colspan=4> </td>
+ <td colspan="4"> </td>
</tr>
<tr>
- <td colspan=4> </td>
+ <td colspan="4"> </td>
</tr>
<tr></tr><!-- keep the background-color alternation in proper order -->
<tr id="block_3">
- <td rowspan=6 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 rowspan="6" 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=6 class="block_column critical">
- [<a href="#block_3">#</a>]<br />
- [<a href="/balance/3">b</a>]<br />
+ <td rowspan="6" class="block_column critical">
+ [<a href="#block_3">#</a>]<br>
+ [<a href="/balance/3">b</a>]<br>
[<a href="/edit_structured/3">e</a>]
</td>
</tr>
<tr>
- <td colspan=3>2001-01-02 test</td>
+ <td colspan="3">2001-01-02 test</td>
<td></td>
</tr>
<tr>
<td>baz</td>
</tr>
<tr>
- <td colspan=4> </td>
+ <td colspan="4"> </td>
</tr>
<tr></tr><!-- keep the background-color alternation in proper order -->
<tr id="block_4">
- <td rowspan=7 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 rowspan="7" 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=7 class="block_column">
- [<a href="#block_4">#</a>]<br />
- [<a href="/balance/4">b</a>]<br />
+ <td rowspan="7" class="block_column">
+ [<a href="#block_4">#</a>]<br>
+ [<a href="/balance/4">b</a>]<br>
[<a href="/edit_structured/4">e</a>]
</td>
</tr>
<tr>
- <td colspan=3>2001-01-01 test</td>
+ <td colspan="3">2001-01-01 test</td>
<td></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
- <td colspan=4> </td>
+ <td colspan="4"> </td>
</tr>
+</tbody>
</table>
-<input type="submit" name="add_booking" value="add booking" />
+<input type="submit" name="add_booking" value="add booking">
</form>
-</body>
-</html>
+
+</body></html>
+++ /dev/null
-../templates/taint.js
\ No newline at end of file