summaryrefslogtreecommitdiff
path: root/examples/filebrowser/sitepage.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/filebrowser/sitepage.py')
-rw-r--r--examples/filebrowser/sitepage.py38
1 files changed, 15 insertions, 23 deletions
diff --git a/examples/filebrowser/sitepage.py b/examples/filebrowser/sitepage.py
index 10ac1a5..62b31ad 100644
--- a/examples/filebrowser/sitepage.py
+++ b/examples/filebrowser/sitepage.py
@@ -4,8 +4,8 @@ import os
import urllib
from paste.wareweb import *
from paste import wsgilib
+from paste import CONFIG
from ZPTKit.zptwareweb import ZPTComponent
-from py.path import local
import handlers
class SitePage(Servlet):
@@ -16,32 +16,23 @@ class SitePage(Servlet):
def awake(self):
super(SitePage, self).awake(call_setup=False)
- self.root = local(self.config['browse_path'])
- if 'browser.filepath' in self.environ:
- self.pathinfo = self.environ['browser.filepath']
- self.path = self.root.join(self.pathinfo)
- else:
- self.pathinfo = ''
- self.path = None
+ self.pathcontext = self.environ['filebrowser.pathcontext']
self.pathurl = URL(self.environ,
script_name=self.app_url,
- path_info=self.pathinfo)
+ path_info=self.path_info)
+ # While this is the URL that points to the non-file-specific
+ # application (for things like copy and past)
self.globalurl = URL(self.environ,
script_name=self.app_url + '/_app',
path_info='')
self.icons = Icon(self.app_url + '/_icons')
self.app_static_url = self.app_url + '/_static'
+ # Prototype adds this special _ variable for Ajax requests:
self.fragment = '_' in self.fields
self.copybin = self.session.setdefault('copybin', {})
self.update_copybin_display()
self.setup()
- def rootedpath(self, path):
- path = str(path)
- assert path.startswith(str(self.root)), (
- "Bad path: %r (doesn't start with %r)" % (path, self.root))
- return path[len(str(self.root)):]
-
def handler(self, path=None):
path = path or self.file
handler = handlers.get_handler(path)
@@ -49,10 +40,10 @@ class SitePage(Servlet):
def update_copybin_display(self):
files = self.options.copyfiles = []
for filename, cutcopy in self.copybin.items():
- path = local(self.root).join(filename)
+ path = self.pathcontext.path(filename)
files.append(
{'filename': filename,
- 'url': self.app_url + filename,
+ 'url': self.app_url + filename + "?action=view",
'path': path,
'name': path.basename,
'cut': cutcopy=='cut',
@@ -62,14 +53,12 @@ class SitePage(Servlet):
files.sort(key=lambda x: x['filename'])
def pathid(self, prefix, path):
- if isinstance(path, local):
- path = self.rootedpath(path)
- return prefix + path.replace('/', '__')
+ return prefix + str(path).replace('/', '__')
def copybutton(self, path, copytype='copy'):
assert copytype in ('copy', 'cut')
copyurl = self.globalurl('copybin', **{
- copytype: self.rootedpath(path)})
+ copytype: path})
remote = copyurl.remote(
id='copybin',
onComplete='function (req) {new Effect.Highlight(%r)}'
@@ -79,7 +68,7 @@ class SitePage(Servlet):
return remote.link(img)
def pastebutton(self, path):
- copyurl = self.globalurl('copybin', paste=self.rootedpath(path),
+ copyurl = self.globalurl('copybin', paste=path,
back=wsgilib.construct_url(self.environ))
return '<a href="%s">%s</a>' % (
copyurl, self.icons('editpaste', alt="paste",
@@ -155,6 +144,9 @@ class URL(object):
def name(self):
return self.path_info.split('/')[-1]
+ def js_set_location(self):
+ return 'location.href = %r' % str(self)
+
_idgen_count = itertools.count()
def idgen():
return 'node%s' % hex(_idgen_count.next() % 0xffffff)[2:]
@@ -190,7 +182,7 @@ class JSRemote(object):
class JSToggle(JSRemote):
def javascript(self):
- return "lazyToggle(%r, %r, {link: this, parameters: %r}); return false" % (
+ return "lazyToggle(%r, %r, %s); return false" % (
self.id, self.url.url_without_qs,
self.option_js(parameters=repr(urllib.urlencode(self.url.vars.items())),
link='this'))