There is now a downloadable free trial for Luminotes Desktop. Also made export plugins work on Windows.
This commit is contained in:
parent
1d4f3e8300
commit
81388ed36b
3
NEWS
3
NEWS
|
@ -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
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
VERSION = u"1.6.7"
|
VERSION = u"1.6.7"
|
||||||
|
TRIAL = True
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 )
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
# for the benefit of py2exe
|
||||||
|
import export_html
|
||||||
|
import export_csv
|
8
setup.py
8
setup.py
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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.
|
@ -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",
|
||||||
),
|
),
|
||||||
|
|
|
@ -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" ),
|
||||||
|
|
Reference in New Issue