from cgi import escape from Page import Page from Tags import Input, Div, Span, H2, H4, A, Br, Strong, Script, Img from Search_form import Search_form from User_area import User_area from Link_area import Link_area from Toolbar import Toolbar from Json import Json from Rounded_div import Rounded_div class Main_page( Page ): def __init__( self, user, rate_plan, notebooks, notebook, parent_id = None, login_url = None, logout_url = None, startup_notes = None, total_notes_count = None, notes = None, note_read_write = True, start = None, count = None, http_url = None, conversion = None, rename = False, deleted_id = None, invites = None, invite_id = None, after_login = None, signup_plan = None, ): startup_note_ids = [ startup_note.object_id for startup_note in startup_notes ] static_notes = Div( notes and [ Div( note.contents, id = "static_note_%s" % note.object_id, ) for note in notes ] or [ Div( startup_note.contents, id = "static_note_%s" % startup_note.object_id ) for startup_note in startup_notes ], id = "static_notes", ) # Since the contents of these notes are included in the static_notes section below, don't # include them again in the hidden fields here. Accomplish this by making custom dicts for # sending to the client. startup_note_dicts = [ { u"object_id" : startup_note.object_id, u"revision" : startup_note.revision, u"deleted_from_id" : startup_note.deleted_from_id, } for startup_note in startup_notes ] note_dicts = [ { u"object_id" : note.object_id, u"revision" : note.revision, u"deleted_from_id" : note.deleted_from_id, u"creation" : note.creation, } for note in notes ] def json( string ): return escape( unicode( Json( string ) ), quote = True ) if len( notes ) == 1: title = notes[ 0 ].title else: title = None if notebook.name == u"Luminotes": notebook_path = u"/" elif notebook.name == u"Luminotes user guide": notebook_path = u"/guide" elif notebook.name == u"Luminotes blog": notebook_path = u"/blog" else: notebook_path = u"/notebooks/%s" % notebook.object_id conversion_html = None if conversion: try: conversion_html = file( u"static/html/%s_conversion.html" % conversion ).read() except IOError: pass Page.__init__( self, title, Script( type = u"text/javascript", src = u"/static/js/MochiKit.js" ) or None, Script( type = u"text/javascript", src = u"/static/js/Invoker.js" ) or None, Script( type = u"text/javascript", src = u"/static/js/Editor.js" ) or None, Script( type = u"text/javascript", src = u"/static/js/Wiki.js" ) or None, Input( type = u"hidden", name = u"storage_bytes", id = u"storage_bytes", value = user.storage_bytes ), Input( type = u"hidden", name = u"rate_plan", id = u"rate_plan", value = json( rate_plan ) ), Input( type = u"hidden", name = u"notebooks", id = u"notebooks", value = json( notebooks ) ), Input( type = u"hidden", name = u"notebook_id", id = u"notebook_id", value = notebook.object_id ), Input( type = u"hidden", name = u"parent_id", id = u"parent_id", value = parent_id or "" ), Input( type = u"hidden", name = u"startup_notes", id = u"startup_notes", value = json( startup_note_dicts ) ), Input( type = u"hidden", name = u"current_notes", id = u"current_notes", value = json( note_dicts ) ), Input( type = u"hidden", name = u"note_read_write", id = u"note_read_write", value = json( note_read_write ) ), Input( type = u"hidden", name = u"rename", id = u"rename", value = json( rename ) ), Input( type = u"hidden", name = u"deleted_id", id = u"deleted_id", value = deleted_id ), Input( type = u"hidden", name = u"invites", id = u"invites", value = json( invites ) ), Input( type = u"hidden", name = u"invite_id", id = u"invite_id", value = invite_id ), Input( type = u"hidden", name = u"after_login", id = u"after_login", value = after_login ), Input( type = u"hidden", name = u"signup_plan", id = u"signup_plan", value = signup_plan ), Div( id = u"status_area", ), Div( Div( Br(), Toolbar( hide_toolbar = parent_id or not notebook.read_write ), id = u"toolbar_area", ), Link_area( notebooks, notebook, total_notes_count, parent_id, notebook_path, user ), Div( Div( Div( User_area( user, login_url, logout_url ), Div( Search_form(), id = u"search_area", ), id = u"search_and_user_area", ), Div( A( Img( src = u"/static/images/luminotes_title_full.png", width = u"206", height = u"69" ), href = u"/", title = u"Luminotes personal wiki notebook" ), id = u"title_area", ), id = u"top_area", ), Rounded_div( ( notebook.name == u"trash" ) and u"trash_notebook" or u"current_notebook", ( notebook.name == u"trash" or not notebook.read_write ) \ and ( len( notes ) == 1 and A( Strong( notebook.name ), href = notebook_path ) or Strong( notebook.name ) ) \ or Span( Strong( notebook.name ), id = u"notebook_header_name" ), parent_id and Span( u" | ", A( u"empty trash", href = u"/notebooks/%s" % notebook.object_id, id = u"empty_trash_link" ), u" | ", A( u"return to notebook", href = u"/notebooks/%s" % parent_id ), ) or None, id = u"notebook_header_area", corners = ( u"tl", u"tr", u"br" ), ), Div( Rounded_div( ( notebook.name == u"trash" ) and u"trash_notebook_inner" or u"current_notebook_inner", Div( id = u"deleted_notebooks", ), Div( Span( id = u"notes_top" ), id = u"notes", ), notebook.read_write and Div( id = u"blank_note_stub", class_ = u"blank_note_stub_hidden_border", ) or None, static_notes, # Sort of simulate the