Working on styled text editing on web app

svn: r19690
This commit is contained in:
Doug Blank 2012-05-28 22:52:23 +00:00
parent d7dea255b9
commit 3073f58940
3 changed files with 58 additions and 25 deletions

View File

@ -295,15 +295,22 @@ class DjangoInterface(object):
citation_list, note_list, media_list, attribute_list,
change, private)
def get_note(self, note):
styled_text = [note.text, []]
def get_note_markup(self, note):
retval = []
markups = models.Markup.objects.filter(note=note).order_by("order")
for markup in markups:
value = markup.string
# FIXME: not all of these are strings; bummer
if markup.string and markup.string.isdigit():
value = int(markup.string)
else:
value = markup.string
start_stop_list = markup.start_stop_list
ss_list = eval(start_stop_list)
styled_text[1] += [(tuple(markup.markup_type),
value, ss_list)]
retval += [(tuple(markup.markup_type), value, ss_list)]
return retval
def get_note(self, note):
styled_text = [note.text, self.get_note_markup(note)]
changed = totime(note.last_changed)
return (str(note.handle),
note.gramps_id,
@ -1243,6 +1250,20 @@ class DjangoInterface(object):
Dummy method for consistency with other two-pass adds.
"""
pass
def save_note_markup(self, note, markup_list):
# delete any prexisting markup:
models.Markup.objects.filter(note=note).delete()
count = 1
for markup in markup_list:
markup_code, value, start_stop_list = markup
m = models.Markup(note=note, order=count,
markup_type=models.get_type(models.MarkupType,
markup_code,
get_or_create=True),
string=value,
start_stop_list=str(start_stop_list))
m.save()
def add_note(self, data):
# Unpack from the BSDDB:
@ -1258,16 +1279,7 @@ class DjangoInterface(object):
note_type=models.get_type(models.NoteType, note_type))
#n.cache = base64.encodestring(cPickle.dumps(data))
n.save()
count = 1
for markup in markup_list:
markup_code, value, start_stop_list = markup
m = models.Markup(note=n, order=count,
markup_type=models.get_type(models.MarkupType,
markup_code,
get_or_create=True),
string=value,
start_stop_list=str(start_stop_list))
m.save()
self.save_note_markup(n, markup_list)
def add_family(self, data):
# Unpack from the BSDDB:

View File

@ -1,7 +1,7 @@
#### This sets up Django so you can interact with it via the Python
#### command line.
#### Start with something like:
#### $ PYTHONPATH=.. python -i shell.py
#### $ PYTHONPATH=..:../plugins/lib python -i shell.py
#### >>> Person.objects.all()
from django.conf import settings
@ -30,8 +30,11 @@ dp = parser.parse
# "/home/dblank/gramps/trunk/example/gramps/data.gramps",
# cli.user.User())
#from webapp.utils import StyledNoteFormatter
#snf = StyledNoteFormatter(db)
#for n in Note.objects.all():
# note = db.get_note_from_handle(n.handle)
# print snf.get_note_format(note)
from webapp.utils import StyledNoteFormatter
snf = StyledNoteFormatter(db)
for n in Note.objects.all():
note = db.get_note_from_handle(n.handle)
print snf.get_note_format(note)
#note = Note.objects.get(handle="aef30789d3d2090abe2")
#st = gen.lib.StyledText(note.text, dji.get_note_markup(note))

View File

@ -733,13 +733,31 @@ register_plugins()
# works after registering plugins:
import HtmlDoc
from libhtmlbackend import HtmlBackend, process_spaces
from libhtmlbackend import HtmlBackend, DocBackend, process_spaces
from libhtml import Html
class WebAppBackend(HtmlBackend):
SUPPORTED_MARKUP = [
DocBackend.BOLD,
DocBackend.ITALIC,
DocBackend.UNDERLINE,
DocBackend.FONTFACE,
DocBackend.FONTSIZE,
DocBackend.FONTCOLOR,
DocBackend.LINK,
]
STYLETAG_MARKUP = {
DocBackend.BOLD : ("<b>", "</b>"),
DocBackend.ITALIC : ("<i>", "</i>"),
DocBackend.UNDERLINE : ('<u>', '</u>'),
}
### Taken from Narrated Web Report
class StyledNoteFormatter(object):
def __init__(self, database):
self.database = database
self._backend = HtmlBackend()
self._backend = WebAppBackend()
self._backend.build_link = self.build_link
#self.report = report
@ -770,7 +788,7 @@ class StyledNoteFormatter(object):
s_tags = styledtext.get_tags()
markuptext = self._backend.add_markup_from_styled(text, s_tags,
split='\n')
htmllist = Html("div", class_="grampsstylednote")
htmllist = [] # Html("p") #"div", class_="grampsstylednote")
if contains_html:
htmllist += text
else:
@ -799,7 +817,7 @@ class StyledNoteFormatter(object):
if sigcount == 0:
linelist = ["&nbsp;"]
htmllist.extend(Html('p') + linelist)
return htmllist
return "".join(htmllist)
def build_link(self, prop, handle, obj_class):
"""