[py-svn] r37812 - in py/trunk/py/apigen: . testing

guido at codespeak.net guido at codespeak.net
Fri Feb 2 16:50:00 CET 2007


Author: guido
Date: Fri Feb  2 16:49:58 2007
New Revision: 37812

Added:
   py/trunk/py/apigen/html.py
Modified:
   py/trunk/py/apigen/htmlgen.py
   py/trunk/py/apigen/layout.py
   py/trunk/py/apigen/style.css
   py/trunk/py/apigen/testing/test_apigen_example.py
Log:
Using style.css from the doc directory for apigen now, with some overrides in
a seperate stylesheet. Cleaned up the stylesheet and script handling a bit:
stylesheets and scripts are now defined in the LayoutPage class (where they're
easily customizable). Also removed some old unused code and moved the H class
(html related) stuff to its own file. The idea is that this will become the
place where all the layout is defined.


Added: py/trunk/py/apigen/html.py
==============================================================================
--- (empty file)
+++ py/trunk/py/apigen/html.py	Fri Feb  2 16:49:58 2007
@@ -0,0 +1,81 @@
+
+from py.xml import html
+
+# HTML related stuff
+class H(html):
+    class Content(html.div):
+        pass # style = html.Style(margin_left='15em')
+
+    class Description(html.div):
+        pass
+    
+    class NamespaceDescription(Description):
+        pass
+
+    class NamespaceItem(html.div):
+        pass
+
+    class NamespaceDef(html.h1):
+        pass
+
+    class ClassDescription(Description):
+        pass
+
+    class ClassDef(html.h1):
+        pass
+
+    class MethodDescription(Description):
+        pass
+
+    class MethodDef(html.h2):
+        pass
+
+    class FunctionDescription(Description):
+        pass
+
+    class FunctionDef(html.h2):
+        pass
+
+    class ParameterDescription(html.div):
+        pass
+
+    class Docstring(html.pre):
+        style = html.Style(width='100%')
+        pass
+
+    class Navigation(html.div):
+        #style = html.Style(min_height='99%', float='left', margin_top='1.2em',
+        #                   overflow='auto', width='15em', white_space='nowrap')
+        pass
+
+    class NavigationItem(html.div):
+        pass
+
+    class BaseDescription(html.a):
+        pass
+
+    class SourceDef(html.div):
+        pass
+
+    class NonPythonSource(html.pre):
+        pass # style = html.Style(margin_left='15em')
+
+    class DirList(html.div):
+        pass # style = html.Style(margin_left='15em')
+
+    class DirListItem(html.div):
+        pass
+
+    class ValueDescList(html.ul):
+        def __init__(self, *args, **kwargs):
+            super(H.ValueDescList, self).__init__(*args, **kwargs)
+
+    class ValueDescItem(html.li):
+        pass
+
+    class CallStackDescription(Description):
+        pass
+
+    class CallStackItem(html.div):
+        class_ = 'callstackitem'
+

Modified: py/trunk/py/apigen/htmlgen.py
==============================================================================
--- py/trunk/py/apigen/htmlgen.py	(original)
+++ py/trunk/py/apigen/htmlgen.py	Fri Feb  2 16:49:58 2007
@@ -8,6 +8,7 @@
 from py.__.apigen.tracer.description import is_private
 from py.__.apigen.rest.genrest import split_of_last_part
 from py.__.apigen.linker import relpath
+from py.__.apigen.html import H
 
 sorted = py.builtin.sorted
 html = py.xml.html
@@ -45,83 +46,6 @@
             ret.append(line[deindent:])
     return '%s\n' % (linesep.join(ret),)
 
-# HTML related stuff
-class H(html):
-    class Content(html.div):
-        style = html.Style(margin_left='15em')
-
-    class Description(html.div):
-        pass
-    
-    class NamespaceDescription(Description):
-        pass
-
-    class NamespaceItem(html.div):
-        pass
-
-    class NamespaceDef(html.h1):
-        pass
-
-    class ClassDescription(Description):
-        pass
-
-    class ClassDef(html.h1):
-        pass
-
-    class MethodDescription(Description):
-        pass
-
-    class MethodDef(html.h2):
-        pass
-
-    class FunctionDescription(Description):
-        pass
-
-    class FunctionDef(html.h2):
-        pass
-
-    class ParameterDescription(html.div):
-        pass
-
-    class Docstring(html.pre):
-        #style = html.Style(white_space='pre', min_height='3em')
-        pass
-
-    class Navigation(html.div):
-        style = html.Style(min_height='99%', float='left', margin_top='1.2em',
-                           overflow='auto', width='15em', white_space='nowrap')
-
-    class NavigationItem(html.div):
-        pass
-
-    class BaseDescription(html.a):
-        pass
-
-    class SourceDef(html.div):
-        pass
-
-    class NonPythonSource(html.pre):
-        style = html.Style(margin_left='15em')
-
-    class DirList(html.div):
-        style = html.Style(margin_left='15em')
-
-    class DirListItem(html.div):
-        pass
-
-    class ValueDescList(html.ul):
-        def __init__(self, *args, **kwargs):
-            super(H.ValueDescList, self).__init__(*args, **kwargs)
-
-    class ValueDescItem(html.li):
-        pass
-
-    class CallStackDescription(Description):
-        pass
-
-    class CallStackItem(html.div):
-        class_ = 'callstackitem'
-
 def get_param_htmldesc(linker, func):
     """ get the html for the parameters of a function """
     import inspect
@@ -174,18 +98,11 @@
                 ret[ns].append(itempath)
     return ret
 
-def wrap_page(project, title, contentel, navel, outputpath, stylesheeturl,
-              scripturls):
+def wrap_page(project, title, contentel, navel, relbase, basepath):
     page = LayoutPage(project, title, nav=navel, encoding='UTF-8',
-                      stylesheeturl=stylesheeturl, scripturls=scripturls)
+                      relpath=relbase)
     page.set_content(contentel)
-    here = py.magic.autopath().dirpath()
-    style = here.join(stylesheeturl.split('/')[-1]).read()
-    outputpath.join(stylesheeturl.split('/')[-1]).write(style)
-    for spath in scripturls:
-        sname = spath.split('/')[-1]
-        sdata = here.join(sname).read()
-        outputpath.join(sname).write(sdata)
+    page.setup_scripts_styles(basepath)
     return page
 
 # the PageBuilder classes take care of producing the docs (using the stuff
@@ -193,12 +110,9 @@
 class AbstractPageBuilder(object):
     def write_page(self, title, reltargetpath, project, tag, nav):
         targetpath = self.base.join(reltargetpath)
-        stylesheeturl = relpath('%s%s' % (targetpath.dirpath(), os.path.sep),
-                                self.base.join('style.css').strpath)
-        scripturls = [relpath('%s%s' % (targetpath.dirpath(), os.path.sep),
-                              self.base.join('api.js').strpath)]
-        page = wrap_page(project, title,
-                         tag, nav, self.base, stylesheeturl, scripturls)
+        relbase= relpath('%s%s' % (targetpath.dirpath(), targetpath.sep),
+                         self.base.strpath + '/')
+        page = wrap_page(project, title, tag, nav, relbase, self.base)
         content = self.linker.call_withbase(reltargetpath, page.unicode)
         targetpath.ensure()
         targetpath.write(content.encode("utf8"))
@@ -212,7 +126,7 @@
         self.capture = capture
     
     def build_navigation(self, fspath):
-        nav = H.Navigation()
+        nav = H.Navigation(class_='sidebar')
         relpath = fspath.relto(self.projroot)
         path = relpath.split(os.path.sep)
         indent = 0
@@ -613,40 +527,7 @@
             return navitems
 
         navitems += build_nav_level(dotted_name)
-        return H.Navigation(*navitems)
-
-
-    
-        navitems = []
-
-        # top namespace, index.html
-        module_name = self.dsa.get_module_name().split('/')[-1]
-        navitems.append(build_navitem_html(self.linker, module_name, '', 0,
-                                           (selection == '')))
-
-        indent = 1
-        path = dotted_name.split('.')
-        if dotted_name != '':
-            # build html for each item in path to dotted_name item
-            for i in xrange(len(path)):
-                name = path[i]
-                item_dotted_name = '.'.join(path[:i+1])
-                selected = (selection == item_dotted_name)
-                navitems.append(build_navitem_html(self.linker, name,
-                                                   item_dotted_name, indent,
-                                                   selected))
-                indent += 1
-
-        # build sub items of dotted_name item
-        for item_dotted_name in py.builtin.sorted(item_dotted_names):
-            itemname = item_dotted_name.split('.')[-1]
-            if is_private(itemname):
-                continue
-            selected = (item_dotted_name == selection)
-            navitems.append(build_navitem_html(self.linker, itemname,
-                                               item_dotted_name, indent,
-                                               selected))
-        return H.Navigation(*navitems)
+        return H.Navigation(class_='sidebar', *navitems)
 
     def build_callable_signature_description(self, dotted_name):
         args, retval = self.dsa.get_function_signature(dotted_name)

Modified: py/trunk/py/apigen/layout.py
==============================================================================
--- py/trunk/py/apigen/layout.py	(original)
+++ py/trunk/py/apigen/layout.py	Fri Feb  2 16:49:58 2007
@@ -4,14 +4,19 @@
 """
 
 import py
-from py.__.doc.confrest import Page
+from py.__.doc import confrest
+from py.__.apigen import linker
 
-class LayoutPage(Page):
+class LayoutPage(confrest.PyPage):
     """ this provides the layout and style information """
 
+    stylesheets = [(py.path.local('../doc/style.css'), 'style.css'),
+                   (py.path.local('style.css'), 'apigen_style.css')]
+    scripts = [(py.path.local('api.js'), 'api.js')]
+
     def __init__(self, *args, **kwargs):
         self.nav = kwargs.pop('nav')
-        self.scripturls = kwargs.pop('scripturls', [])
+        self.relpath = kwargs.pop('relpath')
         super(LayoutPage, self).__init__(*args, **kwargs)
 
     def set_content(self, contentel):
@@ -19,9 +24,19 @@
 
     def fill(self):
         super(LayoutPage, self).fill()
-        self.menubar[:] = []
-        self.menubar.append(self.nav)
-        for scripturl in self.scripturls:
+        #self.menubar[:] = []
+        self.body.insert(0, self.nav)
+
+    def setup_scripts_styles(self, copyto=None):
+        for path, name in self.stylesheets:
+            if copyto:
+                copyto.join(name).write(path.read())
+            self.head.append(py.xml.html.link(type='text/css',
+                                              rel='stylesheet',
+                                              href=self.relpath + name))
+        for path, name in self.scripts:
+            if copyto:
+                copyto.join(name).write(path.read())
             self.head.append(py.xml.html.script(type="text/javascript",
-                                         src=scripturl))
+                                                src=self.relpath + name))
 

Modified: py/trunk/py/apigen/style.css
==============================================================================
--- py/trunk/py/apigen/style.css	(original)
+++ py/trunk/py/apigen/style.css	Fri Feb  2 16:49:58 2007
@@ -1,12 +1,18 @@
-#sidebar {
-  width: 9em;
-  float: left;
+div.sidebar {
+  font-family: Verdana, Helvetica, Arial, sans-serif;
+  width: 155px;
   vertical-align: top;
   margin-top: 0.5em;
+  position: absolute;
+  top: 130px;
+  left: 4px;
+  bottom: 4px;
+  overflow: auto;
 }
 
-#main {
-  margin-left: 10em;
+div.sidebar .selected a {
+  color: white;
+  background-color: #3ba6ec; 
 }
 
 #content {
@@ -15,47 +21,6 @@
   width: 100%;
 }
 
-#breadcrumb {
-  height: 5%;
-  display: none;
-}
-
-#logo {
-  /* float: left; */
-}
-
-#logo img {
-  border-width: 0px;
-}
-
-#menubar a {
-  text-decoration: none;
-  color: blue;
-}
-
-#menubar div.selected a {
-  color: purple;
-}
-
-.project_title {
-  font-size: 2em;
-  font-weight: bold;
-}
-
-body {
-  background-color: #FFE;
-  color: black;
-}
-
-body, div, p, h1, h2, h3, h4 {
-  font-family: Trebuchet MS, Verdana, Arial;
-}
-
-a {
-  color: #006;
-  text-decoration: none;
-}
-
 ul {
   padding-left: 0em;
   margin-top: 0px;
@@ -71,10 +36,6 @@
   text-decoration: none;
 }
 
-a:hover {
-  color: #005;
-}
-
 .lineno {
   text-align: right;
   color: #555;

Modified: py/trunk/py/apigen/testing/test_apigen_example.py
==============================================================================
--- py/trunk/py/apigen/testing/test_apigen_example.py	(original)
+++ py/trunk/py/apigen/testing/test_apigen_example.py	Fri Feb  2 16:49:58 2007
@@ -204,6 +204,7 @@
         print html
         run_string_sequence_test(html, [
             'href="../style.css"',
+            'href="../apigen_style.css"',
             'src="../api.js"',
             'href="index.html">pkg',
             'href="main.html">main',



More information about the pytest-commit mailing list