import os
import py
from templess import templess
import helpers

class _sidebar(object):

    def get_items(self, serverroot, siteroot, reserved):
        paths = (py.path.local(serverroot) / siteroot).listdir()
        ret = []
        for p in paths:
            name = p.purebasename.replace('_', ' ')
            if (p.basename.startswith('.') or
                    (p.check(file=True) and p.basename in reserved)):
                continue
            url = self.mkurl(serverroot, p)
            ret.append({
                'url': url,
                'name': name,
            })
        ret.sort(lambda a, b: cmp(a['name'], b['name']))
        return ret

    def render(self, context):
        request = context['request']
        options = request.get_options()
        f = helpers.templatepath(request) / 'sidebar.html'
        t = templess.template(f, options.get('charset', 'UTF-8'))
        serverroot = options['serverroot']
        siteroot = options['siteroot']
        reserved = [x.strip() for x in options['defaultindexes'].split(',')]
        env = {
            'homeurl': siteroot,
            'items': self.get_items(serverroot, siteroot, reserved),
        }
        return t.render(env).xpath('//body/*')

    def mkurl(self, serverroot, p):
        path = str(p)[len(serverroot):].replace(os.path.sep, '/')
        if not path.startswith('/'):
            path = '/%s' % path
        return path

sidebar = _sidebar()

