WebKit.SidebarPage | index /usr/local/share/webware/WebKit/SidebarPage.py

Classes

``

WebKit.Page.Page(WebKit.HTTPContent.HTTPContent)
  SidebarPage

class SidebarPage(WebKit.Page.Page)

``

`WebKit page template class for pages with a sidebar.
SidebarPage is an abstract superclass for pages that have a sidebar
(as well as a header and "content well"). Sidebars are normally used
for navigation (e.g., a menu or list of links), showing small bits
of info and occasionally a simple form (such as login or search).
Subclasses should override cornerTitle(), writeSidebar() and
writeContent() (and title() if necessary; see Page).
The utility methods menuHeading() and menuItem() can be used by
subclasses, typically in their implementation of writeSidebar().
WebKit itself uses this class: Examples/ExamplePage and Admin/AdminPage
both inherit from it.
TO DO
* More consequent use style sheets; get rid of tables completely.
* The header, corner and colors are not easy to customize via subclasses.
`

Method resolution order:
  SidebarPage
  WebKit.Page.Page
  WebKit.HTTPContent.HTTPContent
  WebKit.HTTPServlet.HTTPServlet
  WebKit.Servlet.Servlet
  WebKit.Object.Object
  __builtin__.object
  MiscUtils.NamedValueAccess.NamedValueAccess

Methods defined here:

cornerTitle(self)

menuHeading(self, title)

menuItem(self, title, url=None, suffix=None, indentLevel=1)

writeBanner(self)

writeBodyParts(self)

writeContent(self)

writeContextsMenu(self)

writeSidebar(self)

writeStyleSheet(self)
  `We're using a simple internal style sheet.
  This way we avoid having to care about where an external style
  sheet should be located when this class is used in another context.`

writeVersions(self)

writeWebKitSidebarSections(self)
  `Write sidebar sections.
  This method (and consequently the methods it invokes)
  are provided for WebKit's example and admin pages.
  It writes sections such as contexts, e-mails, exits and versions.`

writeWebwareEmailMenu(self)

writeWebwareExitsMenu(self)

Methods inherited from WebKit.Page.Page:

defaultAction(self)
  `The default action in a Page is to writeHTML().`

htBodyArgs(self)
  `The atrributes for the <body> element.
  Returns the arguments used for the HTML <body> tag.
  Invoked by writeBody().
  With the prevalence of stylesheets (CSS), you can probably skip
  this particular HTML feature, but for historical reasons this sets
  the page to black text on white.`

htTitle(self)
  `The page title as HTML.
  Return title(). Subclasses sometimes override this to provide
  an HTML enhanced version of the title. This is the method that should
  be used when including the page title in the actual page contents.`

htmlDecode(self, s)
  `HTML decode special characters.
  Alias for `WebUtils.Funcs.htmlDecode`. Decodes HTML entities.`

htmlEncode(self, s)
  `HTML encode special characters.
  Alias for `WebUtils.Funcs.htmlEncode`, quotes the special characters
  &, <, >, and "`

postAction(self, actionName)
  `Things to do after actions.
  Simply close the html tag (</html>).`

preAction(self, actionName)
  `Things to do before actions.
  For a page, we first writeDocType(), <html>, and then writeHead().`

title(self)
  `The page title.
  Subclasses often override this method to provide a custom title.
  This title should be absent of HTML tags. This implementation
  returns the name of the class, which is sometimes appropriate
  and at least informative.`

validateHTML(self, closingTags='</body></html>')
  `Validate the response.
  Validate the current response data using Web Design Group's
  HTML validator available at
  http://www.htmlhelp.com/tools/validator/
  Make sure you install the offline validator (called
  ``validate``) which can be called from the command-line.
  The ``validate`` script must be in your path.
  Add this method to your SitePage (the servlet from
  which all your servlets inherit), override
  Page.writeBodyParts() in your SitePage like so::
  def writeBodyParts(self):
  Page.writeBodyParts()
  validateHTML()
  The ``closingtags`` param is a string which is appended
  to the page before validation. Typically, it would be
  the string ``</body></html>``. At the point this method
  is called (e.g. from `writeBodyParts`) the page is not
  yet 100% complete, so we have to fake it.`

writeBody(self)
  `Write the <body> element of the page.
  Writes the ``<body>`` portion of the page by writing the
  ``<body>...</body>`` (making use of `htBodyArgs`) and
  invoking `writeBodyParts` in between.`

writeDocType(self)
  `Write the DOCTYPE tag.
  Invoked by `writeHTML` to write the ``<!DOCTYPE ...>`` tag.
  By default this gives the HTML 4.01 Transitional DOCTYPE,
  which is a good guess for what most people send. Be
  warned, though, that some browsers render HTML differently
  based on the DOCTYPE (particular newer browsers, like
  Mozilla, do this).
  Subclasses may override to specify something else.
  You can find out more about doc types by searching for
  DOCTYPE on the web, or visiting:
  http://www.htmlhelp.com/tools/validator/doctype.html`

writeHTML(self)
  `Write all the HTML for the page.
  Subclasses may override this method (which is invoked by `_respond`)
  or more commonly its constituent methods, `writeDocType`, `writeHead`
  and `writeBody`.
  You will want to override this method if:
  * you want to format the entire HTML page yourself
  * if you want to send an HTML page that has already
  been generated
  * if you want to use a template that generates the entire
  page
  * if you want to send non-HTML content (be sure to
  call ``response().setHeader('Content-type',
  'mime/type')`` in this case).`

writeHead(self)
  `Write the <head> element of the page.
  Writes the ``<head>`` portion of the page by writing the
  ``<head>...</head>`` tags and invoking `writeHeadParts` in between.`

writeHeadParts(self)
  `Write the parts included in the <head> element.
  Writes the parts inside the ``<head>...</head>`` tags.
  Invokes `writeTitle` and `writeStyleSheet`. Subclasses
  can override this to add additional items and should
  invoke super.`

writeTitle(self)
  `Write the <title> element of the page.
  Writes the ``<title>`` portion of the page.
  Uses `title`, which is where you should override..`

Methods inherited from WebKit.HTTPContent.HTTPContent:

actions(self)
  `The allowed actions.
  Returns a list of method names that are allowable
  actions from HTML forms. The default implementation
  returns []. See `_respond` for more about actions.`

application(self)
  `The `Application` instance we're using.`

awake(self, transaction)
  `Let servlet awake.
  Makes instance variables from the transaction. This is
  where Page becomes unthreadsafe, as the page is tied to
  the transaction. This is also what allows us to
  implement functions like `write`, where you don't
  need to pass in the transaction or response.`

callMethodOfServlet(self, URL, method, *args, **kwargs)
  `Call a method of another servlet.
  See `Application.callMethodOfServlet` for details.
  The main difference is that here you don't have
  to pass in the transaction as the first argument.
  A `context` keyword argument is also possible, even
  though it isn't present in the method signature.`

canBeThreaded(self)
  `Declares whether servlet can be threaded.
  Returns 0 because of the instance variables we set up in `awake`.`

endResponse(self)
  `End response.
  When this method is called during `awake` or
  `respond`, servlet processing will end immediately,
  and the accumulated response will be sent.
  Note that `sleep` will still be called, providing a
  chance to clean up or free any resources.`

forward(self, URL, context=None)
  `Forward request.
  Forwards this request to another servlet.
  See `Application.forward` for details.
  The main difference is that here you don't have
  to pass in the transaction as the first argument.`

handleAction(self, action)
  `Handle action.
  Invoked by `_respond` when a legitimate action has
  been found in a form. Invokes `preAction`, the actual
  action method and `postAction`.
  Subclasses rarely override this method.`

includeURL(self, URL, context=None)
  `Include output from other servlet.
  Includes the response of another servlet
  in the current servlet's response.
  See `Application.includeURL` for details.
  The main difference is that here you don't have
  to pass in the transaction as the first argument.`

methodNameForAction(self, name)
  `Return method name for an action name.
  Invoked by _respond() to determine the method name for a given action
  name which has been derived as the value of an ``_action_`` field.
  Since this is usually the label of an HTML submit button in a form,
  it is often needed to transform it in order to get a valid method name
  (for instance, blanks could be replaced by underscores and the like).
  This default implementation of the name transformation is the identity,
  it simply returns the name. Subclasses should override this method
  when action names don't match their method names; they could "mangle"
  the action names or look the method names up in a dictionary.`

request(self)
  `The request (`HTTPRequest`) we're handling.`

respondToGet(self, transaction)
  `Respond to GET.
  Invoked in response to a GET request method. All methods
  are passed to `_respond`.`

respondToPost(self, transaction)
  `Respond to POST.
  Invoked in response to a POST request method. All methods
  are passed to `_respond`.`

response(self)
  `The response (`HTTPResponse`) we're handling.`

sendRedirectAndEnd(self, url)
  `Send redirect and end.
  Sends a redirect back to the client and ends the
  response. This is a very popular pattern.`

session(self)
  `The session object.
  This provides a state for the current user
  (associated with a browser instance, really).
  If no session exists, then a session will be created.`

sessionEncode(self, url=None)
  `Utility function to access `Session.sessionEncode`.
  Takes a url and adds the session ID as a parameter.
  This is for cases where you don't know if the client
  will accepts cookies.`

sleep(self, transaction)
  `Let servlet sleep again.
  We unset some variables. Very boring.`

transaction(self)
  `The `Transaction` we're currently handling.`

urlDecode(self, s)
  `Alias for `WebUtils.Funcs.urlDecode`.
  Turns special % characters into actual characters.`

urlEncode(self, s)
  `Alias for `WebUtils.Funcs.urlEncode`.
  Quotes special characters using the % substitutions.`

write(self, *args)
  `Write to output.
  Writes the arguments, which are turned to strings (with `str`)
  and concatenated before being written to the response.`

writeExceptionReport(self, handler)
  `Write extra information to the exception report.
  The `handler` argument is the exception handler, and
  information is written there (using `writeTitle`,
  `write`, and `writeln`). This information is added
  to the exception report.
  See `WebKit.ExceptionHandler` for more information.`

writeln(self, *args)
  `Write to output with newline.
  Writes the arguments (like `write`), adding a newline after.`

Methods inherited from WebKit.HTTPServlet.HTTPServlet:

__init__(self)

lastModified(self, trans)
  `Get time of last modification.
  Return this object's Last-Modified time (as a float),
  or None (meaning don't know or not applicable).`

notImplemented(self, trans)

respond(self, trans)
  `Respond to a request.
  Invokes the appropriate respondToSomething() method depending on the
  type of request (e.g., GET, POST, PUT, ...).`

respondToHead(self, trans)
  `Respond to a HEAD request.
  A correct but inefficient implementation.`

Methods inherited from WebKit.Servlet.Servlet:

canBeReused(self)
  `Returns whether a single servlet instance can be reused.
  The default is True, but subclasses con override to return False.
  Keep in mind that performance may seriously be degraded if instances
  can't be reused. Also, there's no known good reasons not to reuse
  an instance. Remember the awake() and sleep() methods are invoked
  for every transaction. But just in case, your servlet can refuse
  to be reused.`

close(self, trans)

log(self, message)
  `Log a message.
  This can be invoked to print messages concerning the servlet.
  This is often used by self to relay important information back
  to developers.`

name(self)
  `Return the name which is simple the name of the class.
  Subclasses should *not* override this method.
  It is used for logging and debugging.`

runMethodForTransaction(self, trans, method, *args, **kw)

runTransaction(self, trans)

serverSidePath(self, path=None)
  `Return the filesystem path of the page on the server.`

setFactory(self, factory)

Methods inherited from WebKit.Object.Object:

deprecated(self, method)
  `Output a deprecation warning.
  The implementation of WebKit sometimes invokes this method which prints
  a warning that the method you are using has been deprecated.
  This method expects that deprecated methods say so at the beginning of
  their doc string and terminate that msg with @. For example:
  DEPRECATED: Class.foo() on 01/24/01 in ver 0.5. Use Class.bar() instead. @
  Putting this information in the doc string is important for accuracy
  in the generated docs.
  Example call:
  deprecated(self.foo)`

Data and other attributes inherited from WebKit.Object.Object:

__dict__ = <dictproxy object>
  `dictionary for instance variables (if defined)`

__weakref__ = <attribute '__weakref__' of 'Object' objects>
  `list of weak references to the object (if defined)`

Methods inherited from MiscUtils.NamedValueAccess.NamedValueAccess:

hasValueForKey(self, key)
  `Returns true if the key is available, although that does not
  guarantee that there will not be errors caused by retrieving the key.`

hasValueForName(self, keysString)

resetKeyBindings(self)

setValueForKey(self, key, value)
  `Suppose key is 'foo'. This method sets the value with the following precedence:
  1. Public attributes before private attributes
  2. Methods before non-methods
  More specifically, this method then uses one of the following:
  @@ 2000-03-04 ce: fill in
  ...or invokes handleUnknownSetKey().`

valueForKey(self, key, default=<class MiscUtils.NoDefault>)
  `Suppose key is 'foo'. This method returns the value with the following precedence:
  1. Methods before non-methods
  2. Public attributes before private attributes
  More specifically, this method then returns one of the following:
  * foo()
  * _foo()
  * self.foo
  * self._foo
  ...or default, if it was specified,
  otherwise invokes and returns result of valueForUnknownKey().
  Note that valueForUnknownKey(), normally returns an exception.
  See valueForName() which is a more advanced version of this method that allows
  multiple, qualified keys.`

valueForKeySequence(self, listOfKeys, default=None)

valueForName(self, keysString, default=None)
  `Returns the value for the given keysString. This is the more advanced version of
  valueForKey(), which can only handle single names. This method can handle
  'foo', 'foo1.foo2', 'a.b.c.d', etc. It will traverse dictionaries if needed.`

valueForUnknownKey(self, key, default)
  `# Errors`

valuesForNames(self, keys, default=None, defaults=None, forgive=0, includeNames=0)
  `Returns a list of values that match the given keys, each of which is passed
  through valueForName() and so could be of the form 'a.b.c'.
  keys is a sequence. default is any kind of object. defaults is a sequence.
  forgive and includeNames is a flag.
  If default is not None, then it is substituted when a key is not found.
  Otherwise, if defaults is not None, then it's corresponding/parallel value
  for the current key is substituted when a key is not found.
  Otherwise, if forgive=1, then unknown keys simply don't produce any values.
  Otherwise, if default and defaults are None, and forgive=0, then the unknown
  keys will probably raise an exception through valueForUnknownKey() although
  that method can always return a final, default value.
  if keys is None, then None is returned. If keys is an empty list, then None
  is returned.
  Often these last four arguments are specified by key.
  Examples:
  names = ['origin.x', 'origin.y', 'size.width', 'size.height']
  obj.valuesForNames(names)
  obj.valuesForNames(names, default=0.0)
  obj.valuesForNames(names, defaults=[0.0, 0.0, 100.0, 100.0])
  obj.valuesForNames(names, forgive=0)
  @@ 2000-03-04 ce: includeNames is only supported when forgive=1.
  It should be supported for the other cases.
  It should be documented.
  It should be included in the test cases.`