Open Tradon processes inside Tryton
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
import base64
|
||||
import html
|
||||
import json
|
||||
import mimetypes
|
||||
import os
|
||||
import posixpath
|
||||
@@ -24,26 +23,39 @@ class ProcessDocumentation(ModelSingleton, ModelSQL, ModelView):
|
||||
content = fields.Function(fields.Text('Content'), 'get_content')
|
||||
|
||||
def get_content(self, name):
|
||||
pages = _documentation_pages()
|
||||
return HTML_TEMPLATE % {
|
||||
'initial': pages.get('README.md', ''),
|
||||
'pages': json.dumps(pages).replace('</', '<\\/'),
|
||||
'content': _documentation_content(),
|
||||
}
|
||||
|
||||
|
||||
def _documentation_pages():
|
||||
pages = {}
|
||||
def _documentation_content():
|
||||
sections = []
|
||||
index = DOCUMENTATION_ROOT / 'README.md'
|
||||
if index.exists():
|
||||
sections.append(_render_page(index))
|
||||
|
||||
for path in sorted(DOCUMENTATION_ROOT.rglob('*.md')):
|
||||
relative_name = _relative_name(path)
|
||||
markdown = path.read_text(encoding='utf-8')
|
||||
pages[relative_name] = _markdown_to_html(markdown, relative_name)
|
||||
return pages
|
||||
if path == index:
|
||||
continue
|
||||
sections.append(_render_page(path))
|
||||
return '\n'.join(sections)
|
||||
|
||||
|
||||
def _render_page(path):
|
||||
relative_name = _relative_name(path)
|
||||
markdown = path.read_text(encoding='utf-8')
|
||||
return '<section id="%s">%s</section>' % (
|
||||
_anchor(relative_name), _markdown_to_html(markdown, relative_name))
|
||||
|
||||
|
||||
def _relative_name(path):
|
||||
return path.relative_to(DOCUMENTATION_ROOT.resolve()).as_posix()
|
||||
|
||||
|
||||
def _anchor(filename):
|
||||
return 'doc-' + re.sub(r'[^a-zA-Z0-9_-]+', '-', filename)
|
||||
|
||||
|
||||
def _resolve_link(current_file, target):
|
||||
if target.startswith(('#', 'http://', 'https://', 'mailto:')):
|
||||
return target
|
||||
@@ -81,8 +93,8 @@ def _inline(markdown, current_file):
|
||||
else:
|
||||
parts.append(label)
|
||||
elif resolved.endswith('.md'):
|
||||
parts.append('<a href="#" data-doc="%s">%s</a>' % (
|
||||
html.escape(resolved, quote=True), label))
|
||||
parts.append('<a href="#%s">%s</a>' % (
|
||||
html.escape(_anchor(resolved), quote=True), label))
|
||||
elif resolved.startswith(('#', 'http://', 'https://', 'mailto:')):
|
||||
parts.append('<a href="%s">%s</a>' % (
|
||||
html.escape(resolved, quote=True), label))
|
||||
@@ -144,7 +156,7 @@ def _markdown_to_html(markdown, current_file):
|
||||
|
||||
if current_file != 'README.md':
|
||||
body.insert(
|
||||
0, '<p><a href="#" data-doc="README.md">Back to index</a></p>')
|
||||
0, '<p><a href="#doc-README-md">Back to index</a></p>')
|
||||
return '\n'.join(body)
|
||||
|
||||
|
||||
@@ -212,27 +224,7 @@ HTML_TEMPLATE = '''<!DOCTYPE html>
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main id="content">%(initial)s</main>
|
||||
<script>
|
||||
const pages = %(pages)s;
|
||||
const content = document.getElementById('content');
|
||||
|
||||
function showDocument(name) {
|
||||
content.innerHTML = pages[name] || pages['README.md'];
|
||||
window.scrollTo(0, 0);
|
||||
}
|
||||
|
||||
document.addEventListener('click', function(event) {
|
||||
const link = event.target.closest('a[data-doc]');
|
||||
if (!link) {
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
showDocument(link.dataset.doc);
|
||||
});
|
||||
|
||||
showDocument('README.md');
|
||||
</script>
|
||||
<main>%(content)s</main>
|
||||
</body>
|
||||
</html>
|
||||
'''
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<form col="4">
|
||||
<group colspan="4" col="4">
|
||||
<field name="content" widget="html_viewer" height="900" colspan="4"/>
|
||||
<group id="documentation" colspan="4" col="4">
|
||||
<field name="content" widget="html" height="900" colspan="4"/>
|
||||
</group>
|
||||
</form>
|
||||
|
||||
Reference in New Issue
Block a user