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')
|
||||
|
||||
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):
|
||||
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):
|
||||
if id not in graph["nodes"]:
|
||||
raise AssertionError("Cannot follow link to '{}' on headline '{}' ({})"
|
||||
.format(id,
|
||||
src_headline.id,
|
||||
src_headline.title.get_text()))
|
||||
raise NonExistingLocalNoteError(id, src_headline)
|
||||
|
||||
def print_tree(tree, indentation=0, headline=None):
|
||||
# if headline and headline.id != INDEX_ID:
|
||||
@ -447,47 +456,52 @@ def render_text_tokens(tokens, acc, headline, graph):
|
||||
elif isinstance(chunk, Link):
|
||||
link_target = chunk.value
|
||||
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
|
||||
if description is None:
|
||||
description = chunk.value
|
||||
|
||||
acc.append('<a href="{}" class="{}" >{}</a>'.format(
|
||||
html.escape(link_target),
|
||||
'internal' if is_internal_link else 'external',
|
||||
html.escape(description),
|
||||
))
|
||||
try:
|
||||
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))
|
||||
|
||||
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:
|
||||
# raise NotImplementedError('TextToken: {}'.format(chunk))
|
||||
acc.append('</p>')
|
||||
|
Loading…
Reference in New Issue
Block a user