witten
/
luminotes
Archived
1
0
Fork 0
This repository has been archived on 2023-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
luminotes/view/Note_tree_area.py

142 lines
5.2 KiB
Python
Raw Normal View History

import re
from model.Notebook import Notebook
from Tags import Div, Span, H4, A, Table, Tbody, Tr, Td, Img, P, Br, Input
from Search_form import Search_form
class Note_tree_area( Div ):
LINK_PATTERN = re.compile( u'<a\s+(?:[^>]+\s)?href="[^"]+"[^>]*>', re.IGNORECASE )
def __init__( self, notebook, root_notes, recent_notes, total_notes_count, user ):
2008-10-27 23:23:27 +00:00
tags = [ tag for tag in notebook.tags if tag.name == u"forum" ]
if tags:
forum_name = tags[ 0 ].value
forum_tag = True
else:
forum_name = None
forum_tag = False
Div.__init__(
self,
Div(
Div(
Search_form(),
class_ = u"link_area_item",
),
2008-10-27 23:23:27 +00:00
H4(
forum_tag and u"posts" or u"notes",
Span(
Span( total_notes_count, id = u"total_notes_count" ), u"total",
class_ = u"small_text link_area_item",
),
notebook.read_write != Notebook.READ_ONLY and Input(
type = u"button",
class_ = u"note_button small_text",
id = u"save_button",
value = u"saved",
disabled = u"true",
title = u"save your work",
) or None,
id = u"note_tree_area_title",
2008-10-27 23:23:27 +00:00
) or None,
( not forum_tag ) and self.make_tree(
[ self.make_item(
title = note.title,
link_attributes = u'href="/notebooks/%s?note_id=%s"' % ( notebook.object_id, note.object_id ),
link_class = u"note_tree_link",
has_children = ( notebook.name != u"trash" ) and self.LINK_PATTERN.search( note.contents ) or False,
root_note_id = note.object_id,
) for note in root_notes ],
Tr(
Td(),
( notebook.name != u"trash" and notebook.read_write == Notebook.READ_WRITE ) and Td(
Input(
type = u"button",
class_ = u"note_button",
id = u"new_note_tree_link_button",
value = u"+ note link",
title = u"Add one of your notes to this list.",
),
Span( id = u"new_note_tree_link_area" ),
) or None,
id = u"new_note_tree_link_row",
) or None,
2008-04-13 19:59:52 +00:00
tree_id = "note_tree_root_table",
2008-10-27 23:23:27 +00:00
) or None,
( not forum_tag and recent_notes is not None and notebook.name != u"trash" ) and Span(
H4( u"recent updates",
id = u"recent_notes_area_title",
),
self.make_tree(
Tr( id = "recent_notes_top" ),
[ self.make_item(
title = note.title,
link_attributes = u'href="/notebooks/%s?note_id=%s"' % ( notebook.object_id, note.object_id ),
link_class = u"recent_note_link",
has_children = False,
root_note_id = note.object_id,
base_name = u"recent_note",
) for note in recent_notes ],
navigation = Tbody( Tr( id = "recent_notes_spacer" ), Tr(
Td(),
Td(
A( u"more", href = u"#", id = u"recent_notes_more_link", class_ = u"undisplayed" ),
A( u"less", href = u"#", id = u"recent_notes_less_link", class_ = u"undisplayed" ),
),
), id = u"recent_notes_navigation" ),
tree_id = "recent_notes_table",
),
) or None,
( user.username is None ) and P(
A( u"Download", href = u"/download", class_ = u"hook_action" ),
Span( u" or ", class_ = u"hook_action_or" ),
A( u"Sign up", href = u"/pricing", class_ = u"hook_action" ), Br(),
Span( "Get started in seconds.", class_ = u"hook_action_detail" ),
class_ = u"hook_action_area",
separator = u"",
) or None,
id = u"note_tree_area_holder",
),
Span( id = "tree_arrow_hover_preload" ),
Span( id = "tree_arrow_down_preload" ),
Span( id = "tree_arrow_down_hover_preload" ),
id = u"note_tree_area",
)
@staticmethod
def make_item( title, link_attributes, link_class, has_children = False, root_note_id = None, target = None, base_name = None ):
if base_name is None:
base_name = u"note_tree"
return Tr(
has_children and \
Td( Div( id = root_note_id and u"%s_expander_%s" % ( base_name, root_note_id ) or None, class_ = u"tree_expander" ) ) or
Td( Div( id = root_note_id and u"%s_expander_%s" % ( base_name, root_note_id ) or None, class_ = u"tree_expander_empty" ) ),
Td(
u'<a %s%s%s class="%s">%s</a>' % (
link_attributes,
root_note_id and u' id="%s_link_%s"' % ( base_name, root_note_id ) or "",
target and u' target="%s"' % target or "",
link_class,
title or u"untitled note",
),
),
id = root_note_id and u"%s_item_%s" % ( base_name, root_note_id ) or None,
class_ = u"%s_item" % base_name,
)
@staticmethod
def make_tree( first_node, second_node = None, third_node = None, navigation = None, tree_id = None ):
return Table(
Tbody(
first_node,
second_node,
third_node,
id = tree_id and tree_id + "_body" or None,
),
navigation,
2008-04-13 19:59:52 +00:00
id = tree_id or None,
class_ = u"note_tree_table",
)