Skip links to private notes.
This commit is contained in:
parent
250bcde6d5
commit
d023955ee0
@ -57,6 +57,18 @@ ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|||||||
|
|
||||||
STATIC_PATH = os.path.join(ROOT_DIR, 'static')
|
STATIC_PATH = os.path.join(ROOT_DIR, 'static')
|
||||||
|
|
||||||
|
class NonExistingLocalNoteError(AssertionError):
|
||||||
|
def __init__(self, note_id, src_headline):
|
||||||
|
AssertionError.__init__(self)
|
||||||
|
self.note_id = note_id
|
||||||
|
self.src_headline = src_headline
|
||||||
|
|
||||||
|
def get_message(self):
|
||||||
|
return ("Cannot follow link to '{}' on headline '{}' ({})"
|
||||||
|
.format(self.note_id,
|
||||||
|
self.src_headline.id,
|
||||||
|
self.src_headline.title.get_text().strip()))
|
||||||
|
|
||||||
def is_git_path(path):
|
def is_git_path(path):
|
||||||
return any([chunk == ".git" for chunk in path.split(os.sep)])
|
return any([chunk == ".git" for chunk in path.split(os.sep)])
|
||||||
|
|
||||||
@ -312,10 +324,7 @@ def get_headline_with_name(target_name, doc):
|
|||||||
|
|
||||||
def assert_id_exists(id, src_headline, graph):
|
def assert_id_exists(id, src_headline, graph):
|
||||||
if id not in graph["nodes"]:
|
if id not in graph["nodes"]:
|
||||||
raise AssertionError("Cannot follow link to '{}' on headline '{}' ({})"
|
raise NonExistingLocalNoteError(id, src_headline)
|
||||||
.format(id,
|
|
||||||
src_headline.id,
|
|
||||||
src_headline.title.get_text()))
|
|
||||||
|
|
||||||
def print_tree(tree, indentation=0, headline=None):
|
def print_tree(tree, indentation=0, headline=None):
|
||||||
# if headline and headline.id != INDEX_ID:
|
# if headline and headline.id != INDEX_ID:
|
||||||
@ -447,47 +456,52 @@ def render_text_tokens(tokens, acc, headline, graph):
|
|||||||
elif isinstance(chunk, Link):
|
elif isinstance(chunk, Link):
|
||||||
link_target = chunk.value
|
link_target = chunk.value
|
||||||
is_internal_link = True
|
is_internal_link = True
|
||||||
if link_target.startswith('id:'):
|
|
||||||
assert_id_exists(link_target[3:], headline, graph)
|
|
||||||
link_target = './' + link_target[3:] + '.node.html'
|
|
||||||
elif link_target.startswith('./') or link_target.startswith('../'):
|
|
||||||
if '::' in link_target:
|
|
||||||
logging.warn('Not implemented headline links to other files. Used on {}'.format(link_target))
|
|
||||||
|
|
||||||
else:
|
|
||||||
target_path = os.path.abspath(os.path.join(os.path.dirname(headline.doc.path), link_target))
|
|
||||||
if target_path not in graph['main_headlines']:
|
|
||||||
logging.warn('Link to doc not in graph: {}'.format(target_path))
|
|
||||||
else:
|
|
||||||
assert_id_exists(graph['main_headlines'][target_path].id, headline, graph)
|
|
||||||
link_target = './' + graph['main_headlines'][target_path].id + '.node.html'
|
|
||||||
elif link_target.startswith('attachment:'):
|
|
||||||
logging.warn('Not implemented `attachment:` links. Used on {}'.format(link_target))
|
|
||||||
elif link_target.startswith('* '):
|
|
||||||
target_headline = get_headline_with_name(link_target.lstrip('* '), headline.doc)
|
|
||||||
if target_headline is None:
|
|
||||||
logging.warn('No headline found corresponding to {}. On file {}'.format(link_target, headline.doc.path))
|
|
||||||
else:
|
|
||||||
assert_id_exists(target_headline.id, headline, graph)
|
|
||||||
link_target = './' + target_headline.id + '.node.html'
|
|
||||||
else:
|
|
||||||
is_internal_link = False
|
|
||||||
if not (
|
|
||||||
link_target.startswith('https://')
|
|
||||||
or link_target.startswith('http://')
|
|
||||||
or link_target.startswith('/')
|
|
||||||
):
|
|
||||||
raise NotImplementedError('Unknown link type: {}'
|
|
||||||
.format(link_target))
|
|
||||||
description = chunk.description
|
description = chunk.description
|
||||||
if description is None:
|
if description is None:
|
||||||
description = chunk.value
|
description = chunk.value
|
||||||
|
|
||||||
acc.append('<a href="{}" class="{}" >{}</a>'.format(
|
try:
|
||||||
html.escape(link_target),
|
if link_target.startswith('id:'):
|
||||||
'internal' if is_internal_link else 'external',
|
assert_id_exists(link_target[3:], headline, graph)
|
||||||
html.escape(description),
|
link_target = './' + link_target[3:] + '.node.html'
|
||||||
))
|
elif link_target.startswith('./') or link_target.startswith('../'):
|
||||||
|
if '::' in link_target:
|
||||||
|
logging.warn('Not implemented headline links to other files. Used on {}'.format(link_target))
|
||||||
|
|
||||||
|
else:
|
||||||
|
target_path = os.path.abspath(os.path.join(os.path.dirname(headline.doc.path), link_target))
|
||||||
|
if target_path not in graph['main_headlines']:
|
||||||
|
logging.warn('Link to doc not in graph: {}'.format(target_path))
|
||||||
|
else:
|
||||||
|
assert_id_exists(graph['main_headlines'][target_path].id, headline, graph)
|
||||||
|
link_target = './' + graph['main_headlines'][target_path].id + '.node.html'
|
||||||
|
elif link_target.startswith('attachment:'):
|
||||||
|
logging.warn('Not implemented `attachment:` links. Used on {}'.format(link_target))
|
||||||
|
elif link_target.startswith('* '):
|
||||||
|
target_headline = get_headline_with_name(link_target.lstrip('* '), headline.doc)
|
||||||
|
if target_headline is None:
|
||||||
|
logging.warn('No headline found corresponding to {}. On file {}'.format(link_target, headline.doc.path))
|
||||||
|
else:
|
||||||
|
assert_id_exists(target_headline.id, headline, graph)
|
||||||
|
link_target = './' + target_headline.id + '.node.html'
|
||||||
|
else:
|
||||||
|
is_internal_link = False
|
||||||
|
if not (
|
||||||
|
link_target.startswith('https://')
|
||||||
|
or link_target.startswith('http://')
|
||||||
|
or link_target.startswith('/')
|
||||||
|
):
|
||||||
|
raise NotImplementedError('Unknown link type: {}'
|
||||||
|
.format(link_target))
|
||||||
|
|
||||||
|
acc.append('<a href="{}" class="{}" >{}</a>'.format(
|
||||||
|
html.escape(link_target),
|
||||||
|
'internal' if is_internal_link else 'external',
|
||||||
|
html.escape(description),
|
||||||
|
))
|
||||||
|
except NonExistingLocalNoteError as err:
|
||||||
|
logging.warning(err.get_message())
|
||||||
|
acc.append(html.escape(description))
|
||||||
# else:
|
# else:
|
||||||
# raise NotImplementedError('TextToken: {}'.format(chunk))
|
# raise NotImplementedError('TextToken: {}'.format(chunk))
|
||||||
acc.append('</p>')
|
acc.append('</p>')
|
||||||
|
Loading…
Reference in New Issue
Block a user