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

View File

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

View File

@ -361,7 +361,9 @@ class Root( object ):
result[ "first_notebook" ] = None result[ "first_notebook" ] = None
result[ "download_products" ] = self.__settings[ u"global" ].get( u"luminotes.download_products" ) 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 return result

View File

@ -3,8 +3,7 @@ import plugins
def invoke( plugin_type, plugin_name, *args, **kwargs ): def invoke( plugin_type, plugin_name, *args, **kwargs ):
plugin_name = u"%s_%s" % ( plugin_type, plugin_name ) plugin_name = u"%s_%s" % ( plugin_type, plugin_name )
plugin_location = imp.find_module( plugin_name, plugins.__path__ ) plugin_module = getattr( plugins, plugin_name )
plugin_module = imp.load_module( plugin_name, *plugin_location )
function = getattr( plugin_module, plugin_type ) function = getattr( plugin_module, plugin_type )
return apply( function, args, kwargs ) 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 #!/usr/bin/python
import os import os
import os.path
import sys import sys
from glob import glob from glob import glob
from distutils.core import setup, Distribution from distutils.core import setup, Distribution
@ -148,6 +149,11 @@ class InnoScript:
print >> ofi, r"end;" print >> ofi, r"end;"
def compile(self): def compile(self):
import os
if os.environ.get( "CYGWIN" ):
print "Running in Cygwin, so skipping compile"
return
try: try:
import ctypes import ctypes
except ImportError: except ImportError:
@ -276,7 +282,7 @@ setup(
options = dict( options = dict(
py2exe = dict( py2exe = dict(
packages = "cherrypy.filters", packages = "cherrypy.filters",
includes = "email.header,simplejson", includes = "email.header,simplejson,plugins.*",
compressed = 1, compressed = 1,
optimize = 2, optimize = 2,
) )

View File

@ -498,6 +498,11 @@
padding-bottom: 0.5em; padding-bottom: 0.5em;
} }
.trial_button_area {
padding-top: 1em;
padding-bottom: 0.5em;
}
.download_button_area { .download_button_area {
padding-top: 1em; padding-top: 1em;
padding-bottom: 0.5em; padding-bottom: 0.5em;
@ -543,3 +548,9 @@
margin-bottom: 0.5em; margin-bottom: 0.5em;
border: 1px solid #999999; 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-size: 72%;
font-weight: normal; 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 MEGABYTE = 1024 * 1024
# for now, just assume there's a single download package # 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 news_url = u"http://luminotes.com/hg/luminotes/file/%s/NEWS" % VERSION
Product_page.__init__( Product_page.__init__(
@ -66,14 +66,16 @@ class Download_page( Product_page ):
class_ = u"version_text", class_ = u"version_text",
), ),
class_ = u"plan_name_area download_plan_width", 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( Tr(
Td( Td(
Span( u"Solo", class_ = u"highlight" ), u"note taking", Span( u"Solo", class_ = u"highlight" ), u"note taking",
title = u"Luminotes Desktop is designed for individuals.", title = u"Luminotes Desktop is designed for individuals.",
class_ = u"feature_value", class_ = u"feature_value",
colspan = "2",
), ),
), ),
Tr( Tr(
@ -81,6 +83,7 @@ class Download_page( Product_page ):
u"Runs on your", Span( u"own computer", class_ = u"highlight" ), 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.", title = u"All of your notes are stored privately on your own computer or on a USB drive.",
class_ = u"feature_value", class_ = u"feature_value",
colspan = "2",
), ),
), ),
Tr( Tr(
@ -88,6 +91,7 @@ class Download_page( Product_page ):
Span( u"Unlimited", class_ = u"highlight" ), u"storage", Span( u"Unlimited", class_ = u"highlight" ), u"storage",
title = u"Add as many notes, documents, and files as you want.", title = u"Add as many notes, documents, and files as you want.",
class_ = u"feature_value", class_ = u"feature_value",
colspan = "2",
), ),
), ),
Tr( Tr(
@ -95,30 +99,57 @@ class Download_page( Product_page ):
u"Works", Span( "offline", class_ = u"highlight" ), 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.", 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", class_ = u"feature_value",
colspan = "2",
), ),
), ),
Tr( Td(), class_ = u"spacer_row" ), Tr( Td( colspan = "2" ), class_ = u"spacer_row" ),
Tr( Tr(
Td( Td(
u"Windows XP/Vista,", A( u"Linux source", href = u"/source_code" ), u"Windows XP/Vista,", A( u"Linux source", href = u"/source_code" ),
class_ = u"small_text", class_ = u"small_text",
colspan = "2",
), ),
), ),
Tr( Tr(
Td( Td(
u"Firefox 2+, Internet Explorer 7+, Chrome 1+, Safari 3+", u"Firefox 2+, Internet Explorer 7+, Chrome 1+, Safari 3+",
class_ = u"small_text", class_ = u"small_text",
colspan = "2",
), ),
), ),
Tr( Td( colspan = "2" ), class_ = u"spacer_row" ),
Tr( 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( Div(
download_button, download_button,
Div(
u"Fast and secure",
class_ = u"tiny_text",
),
class_ = u"download_button_area", 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", border = u"1",
id = u"upgrade_table", 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" ), H4( u"Can I try before I buy?", class_ = u"upgrade_question" ),
P( 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" ), A( u"online demo", href = "/users/demo" ),
""" """
to see Luminotes for yourself. The only difference is that Luminotes Desktop runs in to see Luminotes for yourself.
a browser on your own computer instead of on the web.
""", """,
class_ = u"upgrade_text", class_ = u"upgrade_text",
), ),
@ -221,15 +255,31 @@ class Download_page( Product_page ):
Th( Th(
Span( u"Luminotes Desktop", class_ = u"plan_name" ), Span( u"Luminotes Desktop", class_ = u"plan_name" ),
class_ = u"plan_name_area", class_ = u"plan_name_area",
colspan = "2",
) )
), ),
Tr( 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( Div(
download_button, download_button,
class_ = u"download_button_area", class_ = u"download_button_area",
), ),
), colspan = upgrade and "2" or "1",
) or None,
), ),
id = u"upgrade_table_small", id = u"upgrade_table_small",
), ),

View File

@ -1,5 +1,5 @@
from Tags import Div, A, Img, Span from Tags import Div, A, Img, Span, B
from config.Version import VERSION from config.Version import VERSION, TRIAL
class Header( Div ): class Header( Div ):
def __init__( self, user, first_notebook, login_url, logout_url, note_title, rate_plan = None ): 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", 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": if rate_plan and rate_plan.get( u"name" ) == u"desktop":
Div.__init__( Div.__init__(
self, self,
@ -16,8 +25,8 @@ class Header( Div ):
( note_title == u"home" ) and title_image or ( note_title == u"home" ) and title_image or
A( title_image, href = u"http://luminotes.com/", target = "_new" ), A( title_image, href = u"http://luminotes.com/", target = "_new" ),
Div( Div(
u"version", VERSION, u" | ", ( TRIAL and u"trial" or u"" ), u"version", VERSION, u" | ",
A( u"upgrade", href = u"http://luminotes.com/download?upgrade=True", target = "_new" ), 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"community", href = u"http://luminotes.com/community", target = "_new" ), u" | ",
A( u"blog", href = u"http://luminotes.com/blog/", target = "_new" ), u" | ", A( u"blog", href = u"http://luminotes.com/blog/", target = "_new" ), u" | ",
A( u"close", href = u"/close" ), A( u"close", href = u"/close" ),