Use first line of sourcedoc as title
This commit is contained in:
parent
ea1fa43d5b
commit
12f36e938d
|
@ -1,6 +1,7 @@
|
|||
from flask import url_for
|
||||
from .database import session
|
||||
from .parse import parse_link, parse_sourcedoc_facet, parse_span
|
||||
from .text import first_non_empty_line
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy import Column, ForeignKey
|
||||
from sqlalchemy.types import String, Unicode, Integer, DateTime, Boolean, UnicodeText, Enum
|
||||
|
@ -203,18 +204,18 @@ class Item(TimeStampedModel):
|
|||
def set_title_url(self):
|
||||
return self.view_url('set_title')
|
||||
|
||||
def title(self, titles=None):
|
||||
def title_from_link(self, titles=None):
|
||||
if not titles:
|
||||
titles = XanaLink.get_all_titles()
|
||||
return self.type + ": " + titles.get(self, self.hashid)
|
||||
return titles.get(self)
|
||||
|
||||
def title(self, titles=None):
|
||||
return self.type + ': ' + (self.title_from_link(titles) or self.hashid)
|
||||
|
||||
def has_title(self):
|
||||
titles = XanaLink.get_all_titles()
|
||||
return self in titles
|
||||
|
||||
def title_from_link(self):
|
||||
return XanaLink.get_all_titles().get(self)
|
||||
|
||||
def set_title(self, title, user):
|
||||
title_source_doc = SourceDoc(text=title, user=user)
|
||||
session.add(title_source_doc)
|
||||
|
@ -278,7 +279,7 @@ class XanaLink(Item):
|
|||
if titles is None:
|
||||
titles = XanaLink.get_all_titles()
|
||||
if self in titles:
|
||||
return self.type + ": " + titles[self]
|
||||
return self.type + ': ' + titles[self]
|
||||
|
||||
parsed = self.parse()
|
||||
|
||||
|
@ -348,5 +349,15 @@ class SourceDoc(Item):
|
|||
result = s[:length - len(end)].rsplit(' ', 1)[0]
|
||||
return result + end
|
||||
|
||||
def title(self, titles=None):
|
||||
titles = XanaLink.get_all_titles()
|
||||
from_link = self.title_from_link(titles=titles)
|
||||
if from_link:
|
||||
return self.type + ': ' + from_link
|
||||
first_line = first_non_empty_line(self.text)
|
||||
if first_line:
|
||||
return self.type + ': ' + first_line
|
||||
return self.type + ': ' + self.hashid
|
||||
|
||||
|
||||
configure_mappers()
|
||||
|
|
|
@ -39,3 +39,9 @@ def add_highlight(text, span_start, span_length):
|
|||
cur.append({'text': after})
|
||||
|
||||
yield start, cur
|
||||
|
||||
def first_non_empty_line(text):
|
||||
for start, cur in iter_lines(text):
|
||||
tidy = cur.strip()
|
||||
if tidy:
|
||||
return tidy
|
||||
|
|
21
tests/test_text.py
Normal file
21
tests/test_text.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
from sourcing import text
|
||||
|
||||
def test_find_newlines():
|
||||
sample = ''
|
||||
assert list(text.find_newlines(sample)) == []
|
||||
|
||||
sample = 'aaa\nbbb\nccc\n'
|
||||
assert list(text.find_newlines(sample)) == [4, 8, 12]
|
||||
|
||||
def test_iter_lines():
|
||||
sample = ''
|
||||
result = list(text.iter_lines(sample))
|
||||
assert result == []
|
||||
|
||||
sample = 'aaa\nbbb\nccc\n'
|
||||
result = list(text.iter_lines(sample))
|
||||
assert result == [(0, 'aaa\n'), (4, 'bbb\n'), (8, 'ccc\n')]
|
||||
|
||||
def test_first_non_empty_line():
|
||||
assert text.first_non_empty_line('') is None
|
||||
assert text.first_non_empty_line(' \n \n') is None
|
Loading…
Reference in a new issue