<%inherit file="local:templates.master"/>
##
<%!
from bazbase import structure
from bazbase.conversion import render
from bazbase.flavors import FLAVORS
from bazbase.benchmark import benchmarking
from bazki.translators import url
import pylons, tg
from simplejson import dumps

def asTree(elms):
    """Formats elms as a tree.

    elms should be a list of elements ordered by treeleft.
    The return value is a list of roots.  A node is either a leaf
    or a subtree.
    A leaf is [element].  A subtree is [element, [<>], [<>]]."""
    ret = []
    stack = [ret]
    while len(elms) > 0:
        e = elms.pop(0)
        while len(stack) > 1 and stack[-1][0].treeright < e.treeleft:
            stack.pop()
        bubble = [e]
        stack[-1].append(bubble)
        stack.append(bubble)
        return ret
%>
##
<%def name="render_title()">${render(structure.get_element(u'AppConfig'), u'appname')}</%def>
##
## -! Better to precompute...
<%def name="element_tree(tree,sp)">
'${r"\u00A0\u00A0"*sp}${tree[0].ename}',
%for c in tree[1:]:
${element_tree(c,sp+1)}
%endfor
</%def>
##
<%def name="head()">
${parent.head()}

<%
bhbm = benchmarking("base head")
bhbm.__enter__()
%>
    ## Codemirror
    <script src="${url('/bazki/codemirror-2.36/lib/codemirror.js')}"></script>
    <link rel="stylesheet" 
          href="${url('/bazki/codemirror-2.36/lib/codemirror.css',
                      prefixtype='image')}">
    <script src="${url('/bazki/javascript/creole.js')}?v=1"></script>

    <script type="text/javascript" src="${url('/bazki/jsdifflib-master/difflib.js')}"></script>
    <script type="text/javascript" src="${url('/bazki/jsdifflib-master/diffview.js')}"></script>
    <link rel="stylesheet" type="text/css"
          href="${url('/bazki/jsdifflib-master/diffview.css', prefixtype='image')}" />

    <link rel="stylesheet" type="text/css"
          href="${url('/bazki/css/edit.css', prefixtype='image')}?v=4" />
    <script type="text/javascript" src="${url('/bazki/javascript/MochiKit.js')}"></script>
    
<%
bhbm.__exit__(None, None, None)
bhbm = benchmarking("base head2")
bhbm.__enter__()
%>
<script type="text/javascript">
ALL_ELEMENTS=[${element_tree(asTree(structure.list_all_elements())[0],0)|n}];
FLAVOR_MAP = {${','.join("%s:%s" % (dumps(p.name),dumps(p.flavor)) 
                         for p in structure.list_all_props())|n}}
DEFAULT_FLAVOR = ${tg.config['bazki.default_flavor']|n,dumps};
FLAVORS = ${dict((f, dict(binary=FLAVORS[f].binary))
            for f in FLAVORS)|n,dumps};
</script>
<% bhbm.__exit__(None, None, None) %>
</%def>
##
<%
bbm = benchmarking("base")
bbm.__enter__()

site_config = structure.get_element(u'SiteConfig')
%>
<div class="edithead">
%if site_config is not None:
%try:
     ${render(site_config, u'admin_header', u'html')|n}
%except KeyError:
    <i><a href="${url('/edit')}/SiteConfig">SiteConfig</a> has no '${u'admin_header'}' prop.</i>
%endtry
%else:
    <i><a href="${url('/edit')}/SiteConfig" class="broken">SiteConfig</a> not defined.</i>
%endif
</div>
##
<% bbm.__exit__(None, None, None) %>
##
${next.body()}
