witten
/
luminotes
Archived
1
0
Fork 0

There is now a downloadable free trial for Luminotes Desktop. Also made export plugins work on Windows.

This commit is contained in:
Dan Helfman 2009-02-23 00:11:48 -08:00
parent 1d4f3e8300
commit 81388ed36b
12 changed files with 111 additions and 22 deletions

3
NEWS
View File

@ -1,4 +1,4 @@
1.6.7: ?
1.6.7: February 23, 2009
* When you export your notebook as an HTML or CSV file, the saved filename is
now based on the name of your notebook, for instance "my-to-do-list.html"
or "ideas-for-my-novel.csv".
@ -6,6 +6,7 @@
* Converted the existing HTML and CSV export features to work as separate
export plugins. This means that a new export format can be implemented as
a new plugin.
* There is now a downloadable free trial for Luminotes Desktop!
1.6.6: February 16, 2009
* Luminotes now recognizes "mailto:" links as external links, so you can

View File

@ -1 +1,2 @@
VERSION = u"1.6.7"
TRIAL = True

View File

@ -361,7 +361,9 @@ class Root( object ):
result[ "first_notebook" ] = None
result[ "download_products" ] = self.__settings[ u"global" ].get( u"luminotes.download_products" )
result[ "upgrade" ] = upgrade
referer = cherrypy.request.headerMap.get( u"Referer" )
result[ "upgrade" ] = upgrade or ( referer and u"localhost:" in referer )
return result

View File

@ -3,8 +3,7 @@ import plugins
def invoke( plugin_type, plugin_name, *args, **kwargs ):
plugin_name = u"%s_%s" % ( plugin_type, plugin_name )
plugin_location = imp.find_module( plugin_name, plugins.__path__ )
plugin_module = imp.load_module( plugin_name, *plugin_location )
plugin_module = getattr( plugins, plugin_name )
function = getattr( plugin_module, plugin_type )
return apply( function, args, kwargs )

View File

@ -0,0 +1,3 @@
# for the benefit of py2exe
import export_html
import export_csv

View File

@ -1,6 +1,7 @@
#!/usr/bin/python
import os
import os.path
import sys
from glob import glob
from distutils.core import setup, Distribution
@ -148,6 +149,11 @@ class InnoScript:
print >> ofi, r"end;"
def compile(self):
import os
if os.environ.get( "CYGWIN" ):
print "Running in Cygwin, so skipping compile"
return
try:
import ctypes
except ImportError:
@ -276,7 +282,7 @@ setup(
options = dict(
py2exe = dict(
packages = "cherrypy.filters",
includes = "email.header,simplejson",
includes = "email.header,simplejson,plugins.*",
compressed = 1,
optimize = 2,
)

View File

@ -498,6 +498,11 @@
padding-bottom: 0.5em;
}
.trial_button_area {
padding-top: 1em;
padding-bottom: 0.5em;
}
.download_button_area {
padding-top: 1em;
padding-bottom: 0.5em;
@ -543,3 +548,9 @@
margin-bottom: 0.5em;
border: 1px solid #999999;
}
.tiny_text {
font-size: 60%;
line-height: 140%;
font-weight: normal;
}

View File

@ -1233,3 +1233,10 @@ h1 {
font-size: 72%;
font-weight: normal;
}
.trial_upgrade_link {
font-weight: bold;
background-color: #ffcc66;
padding: 0.5em;
font-size: 110%;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

View File

@ -8,7 +8,7 @@ class Download_page( Product_page ):
MEGABYTE = 1024 * 1024
# for now, just assume there's a single download package
download_button = download_products[ 0 ].get( "button" )
download_button = download_products[ 0 ].get( "button" ).strip()
news_url = u"http://luminotes.com/hg/luminotes/file/%s/NEWS" % VERSION
Product_page.__init__(
@ -66,14 +66,16 @@ class Download_page( Product_page ):
class_ = u"version_text",
),
class_ = u"plan_name_area download_plan_width",
)
colspan = "2",
),
),
Tr( Td(), class_ = u"spacer_row" ),
Tr( Td( colspan = "2" ), class_ = u"spacer_row" ),
Tr(
Td(
Span( u"Solo", class_ = u"highlight" ), u"note taking",
title = u"Luminotes Desktop is designed for individuals.",
class_ = u"feature_value",
colspan = "2",
),
),
Tr(
@ -81,6 +83,7 @@ class Download_page( Product_page ):
u"Runs on your", Span( u"own computer", class_ = u"highlight" ),
title = u"All of your notes are stored privately on your own computer or on a USB drive.",
class_ = u"feature_value",
colspan = "2",
),
),
Tr(
@ -88,6 +91,7 @@ class Download_page( Product_page ):
Span( u"Unlimited", class_ = u"highlight" ), u"storage",
title = u"Add as many notes, documents, and files as you want.",
class_ = u"feature_value",
colspan = "2",
),
),
Tr(
@ -95,30 +99,57 @@ class Download_page( Product_page ):
u"Works", Span( "offline", class_ = u"highlight" ),
title = u"Take notes in meetings, in class, or while on the go. Runs in a web browser, but doesn't need an internet connection.",
class_ = u"feature_value",
colspan = "2",
),
),
Tr( Td(), class_ = u"spacer_row" ),
Tr( Td( colspan = "2" ), class_ = u"spacer_row" ),
Tr(
Td(
u"Windows XP/Vista,", A( u"Linux source", href = u"/source_code" ),
class_ = u"small_text",
colspan = "2",
),
),
Tr(
Td(
u"Firefox 2+, Internet Explorer 7+, Chrome 1+, Safari 3+",
class_ = u"small_text",
colspan = "2",
),
),
Tr( Td( colspan = "2" ), class_ = u"spacer_row" ),
Tr(
Td(
( not upgrade ) and Td(
Div(
A(
Img(
src = u"/static/images/trial_button.png",
width = u"107", height = u"26",
alt = u"download trial",
),
href = "/static/luminotes.exe",
),
Div(
u"Completely free",
class_ = u"tiny_text",
),
class_ = u"trial_button_area",
),
colspan = download_button and "1" or "2",
) or None,
download_button and Td(
Div(
download_button,
Div(
u"Fast and secure",
class_ = u"tiny_text",
),
class_ = u"download_button_area",
),
),
colspan = upgrade and "2" or "1",
) or None,
),
Tr( Td(), class_ = u"spacer_row" ),
Tr( Td( colspan = "2" ), class_ = u"spacer_row" ),
border = u"1",
id = u"upgrade_table",
),
@ -165,12 +196,15 @@ class Download_page( Product_page ):
H4( u"Can I try before I buy?", class_ = u"upgrade_question" ),
P(
"""
Sure! Just check out the full-featured
Sure! Just
""",
A( u"download the full-featured free trial", href = "/static/luminotes.exe" ),
"""
or check out the
""",
A( u"online demo", href = "/users/demo" ),
"""
to see Luminotes for yourself. The only difference is that Luminotes Desktop runs in
a browser on your own computer instead of on the web.
to see Luminotes for yourself.
""",
class_ = u"upgrade_text",
),
@ -221,15 +255,31 @@ class Download_page( Product_page ):
Th(
Span( u"Luminotes Desktop", class_ = u"plan_name" ),
class_ = u"plan_name_area",
colspan = "2",
)
),
Tr(
Td(
( not upgrade ) and Td(
Div(
A(
Img(
src = u"/static/images/trial_button.png",
width = u"107", height = u"26",
alt = u"download trial",
),
href = "/static/luminotes.exe",
),
class_ = u"trial_button_area",
),
colspan = download_button and "1" or "2",
) or None,
download_button and Td(
Div(
download_button,
class_ = u"download_button_area",
),
),
colspan = upgrade and "2" or "1",
) or None,
),
id = u"upgrade_table_small",
),

View File

@ -1,5 +1,5 @@
from Tags import Div, A, Img, Span
from config.Version import VERSION
from Tags import Div, A, Img, Span, B
from config.Version import VERSION, TRIAL
class Header( Div ):
def __init__( self, user, first_notebook, login_url, logout_url, note_title, rate_plan = None ):
@ -9,6 +9,15 @@ class Header( Div ):
alt = u"Luminotes",
)
trial_expired = False
if TRIAL:
from pytz import utc
from datetime import datetime, timedelta
trial_age = datetime.now( tz = utc ) - first_notebook.revision
if trial_age > timedelta( days = 30 ):
trial_expired = True
if rate_plan and rate_plan.get( u"name" ) == u"desktop":
Div.__init__(
self,
@ -16,8 +25,8 @@ class Header( Div ):
( note_title == u"home" ) and title_image or
A( title_image, href = u"http://luminotes.com/", target = "_new" ),
Div(
u"version", VERSION, u" | ",
A( u"upgrade", href = u"http://luminotes.com/download?upgrade=True", target = "_new" ), u" | ",
( TRIAL and u"trial" or u"" ), u"version", VERSION, u" | ",
A( u"upgrade", href = u"http://luminotes.com/download", target = "_new", class_ = trial_expired and "trial_upgrade_link" or u"" ), u" | ",
A( u"community", href = u"http://luminotes.com/community", target = "_new" ), u" | ",
A( u"blog", href = u"http://luminotes.com/blog/", target = "_new" ), u" | ",
A( u"close", href = u"/close" ),