Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

compile docs

  • Loading branch information...
commit 23b2ab0e974692d990a03c99132b36f017cb96c1 1 parent 21fcaf7
Lance Pollard lancejpollard authored
Showing with 16,780 additions and 14,134 deletions.
  1. +10 −1 README.md
  2. +30 −4 grunt.coffee
  3. +0 −27 lib/md.rb
  4. +8 −7 package.json
  5. +330 −425 public/api/README.md.html
  6. +1 −1  public/api/assets/codo.css
  7. +11 −13 public/api/assets/codo.js
  8. +1 −0  public/api/assets/search_data.js
  9. +2,033 −228 public/api/class_index.html
  10. +562 −291 public/api/class_list.html
  11. +0 −96 public/api/classes/App/PostsController.html
  12. +0 −55 public/api/classes/Tower.html
  13. +349 −0 public/api/classes/Tower/Ability.html
  14. +105 −326 public/api/classes/Tower/Application.html
  15. +0 −114 public/api/classes/Tower/Application/Configuration.html
  16. +0 −396 public/api/classes/Tower/Class.html
  17. +0 −130 public/api/classes/Tower/Command/Console.html
  18. +0 −105 public/api/classes/Tower/Command/Generate.html
  19. +0 −105 public/api/classes/Tower/Command/Info.html
  20. +0 −105 public/api/classes/Tower/Command/New.html
  21. +0 −105 public/api/classes/Tower/Command/Server.html
  22. +195 −0 public/api/classes/Tower/CommandConsole.html
  23. +198 −0 public/api/classes/Tower/CommandDatabase.html
  24. +178 −0 public/api/classes/Tower/CommandGenerate.html
  25. +178 −0 public/api/classes/Tower/CommandInfo.html
  26. +178 −0 public/api/classes/Tower/CommandNew.html
  27. +178 −0 public/api/classes/Tower/CommandServer.html
  28. +211 −101 public/api/classes/Tower/Controller.html
  29. +123 −20 public/api/classes/Tower/{Controller/Responder.html → ControllerResponder.html}
  30. +0 −103 public/api/classes/Tower/Dispatch/Agent.html
  31. +0 −106 public/api/classes/Tower/Dispatch/Cookies.html
  32. +0 −249 public/api/classes/Tower/Dispatch/Param.html
  33. +0 −113 public/api/classes/Tower/Dispatch/Param/Array.html
  34. +0 −130 public/api/classes/Tower/Dispatch/Param/Date.html
  35. +0 −130 public/api/classes/Tower/Dispatch/Param/Number.html
  36. +0 −113 public/api/classes/Tower/Dispatch/Param/String.html
  37. +0 −83 public/api/classes/Tower/Dispatch/Request.html
  38. +0 −171 public/api/classes/Tower/Dispatch/Response.html
  39. +0 −308 public/api/classes/Tower/Dispatch/Route.html
  40. +0 −513 public/api/classes/Tower/Dispatch/Route/DSL.html
  41. +0 −133 public/api/classes/Tower/Dispatch/Url.html
  42. +194 −44 public/api/classes/Tower/Engine.html
  43. +320 −0 public/api/classes/Tower/Factory.html
  44. +105 −114 public/api/classes/Tower/Generator.html
  45. +0 −158 public/api/classes/Tower/Generator/AppGenerator.html
  46. +0 −141 public/api/classes/Tower/Generator/AssetsGenerator.html
  47. +0 −141 public/api/classes/Tower/Generator/ControllerGenerator.html
  48. +0 −141 public/api/classes/Tower/Generator/HelperGenerator.html
  49. +0 −143 public/api/classes/Tower/Generator/Jasmine/ControllerGenerator.html
  50. +0 −143 public/api/classes/Tower/Generator/Jasmine/IntegrationGenerator.html
  51. +0 −143 public/api/classes/Tower/Generator/Jasmine/ModelGenerator.html
  52. +0 −141 public/api/classes/Tower/Generator/MailerGenerator.html
  53. +0 −143 public/api/classes/Tower/Generator/Mocha/ControllerGenerator.html
  54. +0 −143 public/api/classes/Tower/Generator/Mocha/ModelGenerator.html
  55. +0 −143 public/api/classes/Tower/Generator/Mocha/ViewGenerator.html
  56. +0 −141 public/api/classes/Tower/Generator/ModelGenerator.html
  57. +0 −141 public/api/classes/Tower/Generator/ScaffoldGenerator.html
  58. +0 −141 public/api/classes/Tower/Generator/ViewGenerator.html
  59. +140 −0 public/api/classes/Tower/GeneratorAppGenerator.html
  60. +140 −0 public/api/classes/Tower/GeneratorAssetsGenerator.html
  61. +140 −0 public/api/classes/Tower/GeneratorControllerGenerator.html
  62. +140 −0 public/api/classes/Tower/GeneratorHelperGenerator.html
  63. +180 −0 public/api/classes/Tower/GeneratorLibraryGenerator.html
  64. +140 −0 public/api/classes/Tower/GeneratorMailerGenerator.html
  65. +163 −0 public/api/classes/Tower/GeneratorMochaControllerGenerator.html
  66. +163 −0 public/api/classes/Tower/GeneratorMochaModelGenerator.html
  67. +163 −0 public/api/classes/Tower/GeneratorMochaViewGenerator.html
  68. +140 −0 public/api/classes/Tower/GeneratorModelGenerator.html
  69. +140 −0 public/api/classes/Tower/GeneratorScaffoldGenerator.html
  70. +140 −0 public/api/classes/Tower/GeneratorTemplateGenerator.html
  71. +140 −0 public/api/classes/Tower/GeneratorViewGenerator.html
  72. +140 −0 public/api/classes/Tower/GithubDownloadStore.html
  73. +0 −105 public/api/classes/Tower/HTTP/Agent.html
  74. +0 −108 public/api/classes/Tower/HTTP/Cookies.html
  75. +0 −117 public/api/classes/Tower/HTTP/Param/Array.html
  76. +0 −134 public/api/classes/Tower/HTTP/Param/Date.html
  77. +0 −134 public/api/classes/Tower/HTTP/Param/Number.html
  78. +0 −117 public/api/classes/Tower/HTTP/Param/Order.html
  79. +0 −117 public/api/classes/Tower/HTTP/Param/String.html
  80. +0 −85 public/api/classes/Tower/HTTP/Request.html
  81. +0 −311 public/api/classes/Tower/HTTP/Route.html
  82. +0 −135 public/api/classes/Tower/HTTP/Url.html
  83. +93 −43 public/api/classes/Tower/Hook.html
  84. +92 −42 public/api/classes/Tower/Mailer.html
  85. +196 −161 public/api/classes/Tower/Model.html
  86. +0 −156 public/api/classes/Tower/Model/Attribute.html
  87. +0 −470 public/api/classes/Tower/Model/Criteria.html
  88. +0 −154 public/api/classes/Tower/Model/Field.html
  89. +0 −197 public/api/classes/Tower/Model/Relation.html
  90. +0 −128 public/api/classes/Tower/Model/Relation/BelongsTo.html
  91. +0 −106 public/api/classes/Tower/Model/Relation/HasMany.html
  92. +0 −106 public/api/classes/Tower/Model/Relation/HasOne.html
  93. +0 −241 public/api/classes/Tower/Model/Scope.html
  94. +0 −168 public/api/classes/Tower/Model/Validator.html
  95. +0 −107 public/api/classes/Tower/Model/Validator/Format.html
  96. +0 −158 public/api/classes/Tower/Model/Validator/Length.html
  97. +0 −103 public/api/classes/Tower/Model/Validator/Presence.html
  98. +0 −103 public/api/classes/Tower/Model/Validator/Uniqueness.html
  99. +401 −0 public/api/classes/Tower/ModelAttribute.html
  100. +202 −0 public/api/classes/Tower/ModelCursor.html
  101. +146 −0 public/api/classes/Tower/ModelRelation.html
  102. +140 −0 public/api/classes/Tower/ModelRelationBelongsTo.html
  103. +140 −0 public/api/classes/Tower/ModelRelationBelongsToCursor.html
  104. +147 −0 public/api/classes/Tower/ModelRelationCursor.html
  105. +154 −0 public/api/classes/Tower/ModelRelationHasMany.html
  106. +140 −0 public/api/classes/Tower/ModelRelationHasManyCursor.html
  107. +140 −0 public/api/classes/Tower/ModelRelationHasManyThrough.html
  108. +140 −0 public/api/classes/Tower/ModelRelationHasManyThroughCursor.html
  109. +140 −0 public/api/classes/Tower/ModelRelationHasOne.html
  110. +140 −0 public/api/classes/Tower/ModelRelationHasOneCursor.html
  111. +946 −0 public/api/classes/Tower/ModelScope.html
  112. +419 −0 public/api/classes/Tower/ModelValidator.html
  113. +204 −0 public/api/classes/Tower/ModelValidatorFormat.html
  114. +323 −0 public/api/classes/Tower/ModelValidatorLength.html
  115. +183 −0 public/api/classes/Tower/ModelValidatorPresence.html
  116. +204 −0 public/api/classes/Tower/ModelValidatorSet.html
  117. +204 −0 public/api/classes/Tower/ModelValidatorUniqueness.html
  118. +286 −0 public/api/classes/Tower/NetAgent.html
  119. +146 −0 public/api/classes/Tower/NetConnection.html
  120. +151 −0 public/api/classes/Tower/NetConnectionBase.html
  121. +181 −0 public/api/classes/Tower/NetCookies.html
  122. +116 −79 public/api/classes/Tower/{HTTP/Param.html → NetParam.html}
  123. +179 −0 public/api/classes/Tower/NetParamArray.html
  124. +196 −0 public/api/classes/Tower/NetParamBoolean.html
  125. +196 −0 public/api/classes/Tower/NetParamDate.html
  126. +179 −0 public/api/classes/Tower/NetParamGeo.html
  127. +258 −0 public/api/classes/Tower/NetParamNumber.html
  128. +189 −0 public/api/classes/Tower/NetParamOrder.html
  129. +219 −0 public/api/classes/Tower/NetParamString.html
  130. +178 −0 public/api/classes/Tower/NetRequest.html
  131. +93 −20 public/api/classes/Tower/{HTTP/Response.html → NetResponse.html}
  132. +140 −0 public/api/classes/Tower/NetRoute.html
  133. +95 −24 public/api/classes/Tower/{HTTP/Route/DSL.html → NetRouteDSL.html}
  134. +178 −0 public/api/classes/Tower/NetUrl.html
  135. +105 −337 public/api/classes/Tower/Store.html
  136. +0 −706 public/api/classes/Tower/Store/Ajax.html
  137. +0 −131 public/api/classes/Tower/Store/Cassandra.html
  138. +0 −130 public/api/classes/Tower/Store/CouchDB.html
  139. +0 −373 public/api/classes/Tower/Store/FileSystem.html
  140. +0 −203 public/api/classes/Tower/Store/Local.html
  141. +0 −216 public/api/classes/Tower/Store/Memory.html
  142. +0 −129 public/api/classes/Tower/Store/MongoDB.html
  143. +0 −129 public/api/classes/Tower/Store/MySQL.html
  144. +0 −134 public/api/classes/Tower/Store/Neo4j.html
  145. +0 −129 public/api/classes/Tower/Store/PostgreSQL.html
  146. +0 −361 public/api/classes/Tower/Store/Redis.html
  147. +0 −130 public/api/classes/Tower/Store/Riak.html
  148. +0 −129 public/api/classes/Tower/Store/SQLite3.html
  149. +146 −0 public/api/classes/Tower/StoreBatch.html
  150. +146 −0 public/api/classes/Tower/StoreCassandra.html
  151. +146 −0 public/api/classes/Tower/StoreCouchDB.html
  152. +140 −0 public/api/classes/Tower/StoreFileSystem.html
  153. +220 −0 public/api/classes/Tower/StoreLocalStorage.html
  154. +144 −0 public/api/classes/Tower/StoreMemory.html
  155. +146 −0 public/api/classes/Tower/StoreMongodb.html
  156. +146 −0 public/api/classes/Tower/StoreMySQL.html
Sorry, we could not display the entire diff because too many files (570) changed.
11 README.md
View
@@ -10,4 +10,13 @@
- /examples
- /tutorials
- /contributors
-- /roadmap
+- /roadmap
+
+## Development
+
+Create a symlink to the tower wiki:
+
+```
+cd towerjs.org
+ln -s /Users/viatropos/Documents/git/modules/tower/wiki
+```
34 grunt.coffee
View
@@ -12,6 +12,22 @@ module.exports = (grunt) ->
# @todo grunt.loadNpmTasks('tower-tasks')
require(require('path').join(Tower.srcRoot, 'lib/tower-tasks/tasks'))(grunt)
+ grunt.registerMultiTask 'wiki', 'Compile wiki for towerjs.org', ->
+ markdown = require('github-flavored-markdown')
+
+ wikiRoot = Tower.join(Tower.srcRoot, 'wiki')
+ docs = file.expand(Tower.join(wikiRoot, 'en/docs/**/*.md'))
+ guides = file.expand(Tower.join(wikiRoot, 'en/guides/**/*.md'))
+ cheatSheets = file.expand(Tower.join(wikiRoot, 'en/cheat-sheets/**/*.md'))
+
+ renderMarkdown = (doc) ->
+ filePath = Tower.join(Tower.root, 'public/docs', Tower.basename(doc, '.md') + '.html')
+ Tower.writeFileSync(filePath, markdown.parse(Tower.readFileSync(doc, 'utf-8')))
+
+ docs.forEach(renderMarkdown)
+ guides.forEach(renderMarkdown)
+ cheatSheets.forEach(renderMarkdown)
+
# script files
scriptPaths = file.expand([
'app/!(templates)/**/*.coffee'
@@ -48,14 +64,23 @@ module.exports = (grunt) ->
files: ['app/stylesheets/client/application.styl']
tasks: ['stylus']
copy:
- js:
+ javascripts:
src: ['vendor/**/*.js']
dest: 'public/javascripts'
- css:
+ stylesheets:
src: ['vendor/**/*.css']
dest: 'public/stylesheets'
+ images:
+ src: ['vendor/**/*.{png,gif,jpg}']
+ dest: 'public/images'
+ api:
+ src: [Tower.join(Tower.srcRoot, 'doc/**/*')]
+ strip: "#{Tower.srcRoot}/doc#{Tower.pathSeparator}"
+ dest: 'public/api'
+ wiki:
+ compile: {}
templates:
- all: {}
+ compile: {}
stylus:
compile:
options:
@@ -87,5 +112,6 @@ module.exports = (grunt) ->
grunt.initConfig(config)
- grunt.registerTask 'default', 'copy:js copy:css coffee:all less stylus templates'
+ grunt.registerTask 'copy:assets', 'copy:api copy:stylesheets copy:javascripts copy:images'
+ grunt.registerTask 'default', 'copy:assets wiki coffee:all less stylus templates'
grunt.registerTask 'start', 'default watch'
27 lib/md.rb
View
@@ -1,27 +0,0 @@
-require 'rubygems'
-require 'redcarpet'
-require 'json'
-require 'albino'
-
-# create a custom renderer that allows highlighting of code blocks
-class HTMLwithAlbino < Redcarpet::Render::HTML
- def block_code(code, language)
- Albino.colorize(code, language)
- end
-end
-
-STDOUT.sync = true
-io = STDOUT
-json = STDIN.read
-json = JSON.parse(json)
-input = json.delete("input")
-markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML,#HTMLwithAlbino,
- :autolink => true,
- :space_after_headers => true,
- :fenced_code_blocks => true,
- :hard_wrap => true,
- :gh_blockcode => true,
- :filter_html => false,
- :safe_links_only => true
-)
-io.write markdown.render(input)
15 package.json
View
@@ -10,13 +10,13 @@
"keywords": [
"node"
],
- "maintainers": [{
- "name": "Lance Pollard",
- "email": "lancejpollard@gmail.com"
- }],
- "contributors": [
-
+ "maintainers": [
+ {
+ "name": "Lance Pollard",
+ "email": "lancejpollard@gmail.com"
+ }
],
+ "contributors": [],
"licenses": [
{
"type": "MIT",
@@ -42,7 +42,8 @@
"socket.io": ">= 0.8.7",
"socket.io-client": ">= 0.9.5",
"tower": ">= 0.4.2",
- "which": ">= 1.0.5"
+ "which": ">= 1.0.5",
+ "github-flavored-markdown": "~1.0.1"
},
"optionalDependencies": {
"nodemailer": ">= 0.3.28",
755 public/api/README.md.html
View
@@ -1,553 +1,458 @@
<!DOCTYPE html>
<html>
<head>
- <title>CoffeeScript API Documentation</title>
+ <meta charset='UTF-8'>
+ <title>Tower API Documentation</title>
<link rel='stylesheet' href='assets/codo.css' type='text/css'>
<script src='assets/codo.js'></script>
+ <script src='assets/search_data.js'></script>
</head>
<body>
- <div id='header'>
+ <div id='base' data-path=''></div>
+<div id='header'>
<div id='menu'>
<a href='class_index.html' title='Index'>Index</a>
&raquo;
<span class='title'>README.md</span>
<nav>
<ul>
- <li class='frames'>
- (<a class='frames' href='frames.html'>frames</a>)
- </li>
<li class='noframes'>
(<a class='noframes' href='#'>no frames</a>)
</li>
</ul>
</nav>
<div id='search'>
- <a id='class_list_link' href='class_list.html'>Class List</a>
- <a id='method_list_link' href='method_list.html'>Method List</a>
- <a id='file_list_link' href='file_list.html'>File List</a>
+ <a id='class_list_link' href='class_list.html'>Classes</a>
+ <a id='mixin_list_link' href='mixin_list.html'>Mixins</a>
+ <a id='file_list_link' href='file_list.html'>Files</a>
+ <a id='method_list_link' href='method_list.html'>Methods</a>
+ <a id='extra_list_link' href='extra_list.html'>Extras</a>
</div>
</div>
<iframe id='search_frame'></iframe>
+ <div id='fuzzySearch'>
+ <input type='text'>
+ <ol></ol>
+ </div>
+ <div id='help'>
+ <p>
+ Quickly fuzzy find classes, mixins, methods, file:
+ </p>
+ <ul>
+ <li>
+ <span>Ctrl-T</span>
+ Open fuzzy finder dialog
+ </li>
+ </ul>
+ <p>
+ In frame mode you can toggle the list naviation frame on the left side:
+ </p>
+ <ul>
+ <li>
+ <span>Ctrl-L</span>
+ Toggle list view
+ </li>
+ </ul>
+ <p>
+ You can focus a list in frame mode or toggle a tab in frameless mode:
+ </p>
+ <ul>
+ <li>
+ <span>Ctrl-C</span>
+ Class list
+ </li>
+ <li>
+ <span>Ctrl-I</span>
+ Mixin list
+ </li>
+ <li>
+ <span>Ctrl-F</span>
+ File list
+ </li>
+ <li>
+ <span>Ctrl-M</span>
+ Method list
+ </li>
+ <li>
+ <span>Ctrl-E</span>
+ Extras list
+ </li>
+ </ul>
+ <p>
+ You can focus and blur the search input:
+ </p>
+ <ul>
+ <li>
+ <span>Ctrl-S</span>
+ Focus search input
+ </li>
+ <li>
+ <span>Esc</span>
+ Blur search input
+ </li>
+ </ul>
+ <p>
+ In frameless mode you can close the list tab:
+ </p>
+ <ul>
+ <li>
+ <span>Esc</span>
+ Close list tab
+ </li>
+ </ul>
+ </div>
</div>
<div id='content'>
+ <nav class='toc'>
+ <p class='title'>
+ <a class='hide_toc' href='#'>
+ <strong>Table of Contents</strong>
+ </a>
+ <small>
+ (<a class='float_toc' href='#'>left</a>)
+ </small>
+ </p>
+ </nav>
<div id='filecontents'>
- <h1>Tower.js <img src="http://i.imgur.com/e3VLW.png"/></h1>
-<blockquote>
-<p>Full Stack Web Framework for Node.js and the Browser.
-
-</p>
-</blockquote>
-<p>Built on top of Node&#39;s Connect and Express, modeled after Ruby on Rails. Built for the client and server from the ground up.
-
-</p>
-<p><a href="http://travis-ci.org/viatropos/tower"><img src="https://secure.travis-ci.org/viatropos/tower.png" alt="Build Status"></a>
-
-</p>
-<p>Follow me <a href="http://twitter.com/viatropos">@viatropos</a>.
-
-</p>
-<p>Docs are a work in progress.
-
-</p>
-<h2>Default Development Stack</h2>
-<ul>
-<li>MongoDB (database)</li>
-<li>Redis (background jobs)</li>
-<li>CoffeeScript</li>
-<li>Stylus (LESS is also supported)</li>
-<li>Mocha (tests)</li>
-<li>jQuery</li>
-</ul>
-<p>Includes a database-agnostic ORM with browser (memory) and MongoDB support, modeled after ActiveRecord and Mongoid for Ruby. Includes a controller architecture that works the same on both the client and server, modeled after Rails. The routing API is pretty much exactly like Rails 3&#39;s. Templates work on client and server as well (and you can swap in any template engine no problem). Includes asset pipeline that works just like Rails 3&#39;s - minifies and gzips assets with an md5-hashed name for optimal browser caching, only if you so desire. And it includes a watcher that automatically injects javascripts and stylesheets into the browser as you develop. It solves a lot of our problems, hope it solves yours too. If not, let me know!
-
-</p>
-<h2>Install</h2>
-<pre><code class="bash">npm install tower -g
-npm install design.io -g</code></pre>
-<h2>Generate</h2>
-<pre><code class="bash">tower new app
+ <h1>Tower.js <img src="http://cloud.github.com/downloads/viatropos/tower/tower.png"/></h1> <blockquote><p>Full Stack Web Framework for Node.js and the Browser.</p></blockquote><p>Built on top of Node&#39;s Connect and Express, modeled after Ruby on Rails. Built for the client and server from the ground up.</p><p><a href="http://travis-ci.org/viatropos/tower"><img src="https://secure.travis-ci.org/viatropos/tower.png" alt="Build Status"></a> </p><p>Follow me <a href="http://twitter.com/viatropos">@viatropos</a>.</p> <ul><li><strong>IRC</strong>: #towerjs on irc.freenode.net</li> <li><strong>Ask a question</strong>: <a href="http://stackoverflow.com/questions/tagged/towerjs">http://stackoverflow.com/questions/tagged/towerjs</a></li> <li><strong>Issues</strong>: <a href="https://github.com/viatropos/tower/issues">https://github.com/viatropos/tower/issues</a></li> <li><strong>Roadmap</strong>: <a href="https://github.com/viatropos/tower/blob/master/ROADMAP.md">https://github.com/viatropos/tower/blob/master/ROADMAP.md</a></li> <li><strong>Latest Docs</strong>: <a href="https://github.com/viatropos/tower-docs">https://github.com/viatropos/tower-docs</a></li> </ul><p>Note, Tower is still very early alpha. Check out the <a href="https://github.com/viatropos/tower/blob/master/ROADMAP.md">roadmap</a> to see where we&#39;re going. If your up for it please contribute! The 0.5.0 release will have most of the features and will be roughly equivalent to a beta release. From there, it&#39;s performance optimization, workflow streamlining, and creating some awesome examples. 1.0 will be a plug-and-chug real-time app framework.</p><p>Master branch will always be functional, and for the most part in sync with the version installed through the npm registry.</p><h2>Default Development Stack</h2> <ul><li>Ember</li> <li>jQuery</li> <li>Handlebars (templating)</li> <li>Stylus (LESS is also supported)</li> <li>MongoDB (database)</li> <li>Redis (background jobs)</li> <li>Mocha (tests)</li> <li>CoffeeScript</li> <li>Twitter Bootstrap</li> </ul><p>Includes a database-agnostic ORM with browser (memory and ajax) and MongoDB support, modeled after ActiveRecord and Mongoid for Ruby. Includes a controller architecture that works the same on both the client and server, modeled after Rails. The routing API is pretty much exactly like Rails 3&#39;s. Templates work on client and server as well (and you can swap in any template engine no problem). Includes asset pipeline that works just like Rails 3&#39;s - minifies and gzips assets with an md5-hashed name for optimal browser caching, only if you so desire. And it includes a watcher that automatically injects javascripts and stylesheets into the browser as you develop. It solves a lot of our problems, hope it solves yours too.</p><h2>Install</h2><pre><code>npm install tower -g</code></pre><p>You can grab the latest client tower.js <a href="http://cloud.github.com/downloads/viatropos/tower/tower.js">here</a>, although you don&#39;t need to (when you generate a new app it will be downloaded automatically).</p><p>You will also need <a href="https://github.com/cowboy/grunt">grunt</a>, an awesome build tool:</p><pre><code>npm install grunt -g</code></pre><p>Finally, make sure you have mongodb installed and running:</p><pre><code>brew install mongodb
+mongod # starts server</code></pre><p>If you would like to try out the background-worker code, you can also install and start redis:</p><pre><code>brew install redis
+redis-server</code></pre><h2>Generate</h2><pre><code>tower new app
cd app
npm install
+cake watch
tower generate scaffold Post title:string body:text
-node server</code></pre>
-<h2>Structure</h2>
-<p>Here&#39;s how you might organize a blog:
-
-</p>
-<pre><code class="bash">.
-|-- app
-| |-- client
-| | |-- stylesheets
-| |-- controllers
-| | |-- admin
-| | | |-- postsController.coffee
-| | | `-- usersController.coffee
-| | |-- commentsController.coffee
-| | |-- postsController.coffee
-| | |-- sessionsController.coffee
-| | `-- usersController.coffee
-| |-- models
-| | |-- comment.coffee
-| | |-- post.coffee
-| | `-- user.coffee
-| |-- views
-| | |-- admin
-| | | `-- posts
-| | | |-- _form.coffee
-| | | |-- edit.coffee
-| | | |-- index.coffee
-| | | |-- new.coffee
-| | | |-- show.coffee
-| | |-- layouts
-| | | `-- application.coffee
-| | |-- shared
-| | `-- posts
-| | |-- index.coffee
-| | `-- show.coffee
-| `-- helpers
-| |-- admin
-| | |-- postsHelper.coffee
-| | `-- usersHelper.coffee
-| `-- postsHelper.coffee
-`-- config
-| |-- application.coffee
-| |-- assets.coffee
-| |-- databases.coffee
-| |-- environments
-| |-- development
-| |-- production
-| `-- test
-| |-- locale
-| `-- en.coffee
-| |-- routes.coffee
-`-- test
-| |-- helper.coffee
-| |-- models
-| | |-- postTest.coffee
-| | |-- userTest.coffee
-| `-- acceptance
-| |-- login.coffee
-| |-- signup.coffee
-| `-- posts.coffee</code></pre>
-<h2>Application</h2>
-<pre><code class="coffeescript"># config/application.coffee
-class App extends Tower.Application
- @configure -&gt;
- @use &quot;favicon&quot;, Tower.publicPath + &quot;/favicon.ico&quot;
- @use &quot;static&quot;, Tower.publicPath, maxAge: Tower.publicCacheDuration
- @use &quot;profiler&quot; if Tower.env != &quot;production&quot;
- @use &quot;logger&quot;
- @use &quot;query&quot;
- @use &quot;cookieParser&quot;, Tower.session.secret
- @use &quot;session&quot;, Tower.session.key
- @use &quot;bodyParser&quot;
- @use &quot;csrf&quot;
- @use &quot;methodOverride&quot;, &quot;_method&quot;
- @use Tower.Middleware.Agent
- @use Tower.Middleware.Location
- @use Tower.Middleware.Router
-
-module.exports = global.App = App</code></pre>
-<h2>Models</h2>
-<pre><code class="coffeescript"># app/models/user.coffee
+tower generate scaffold User firstName:string lastName:string email:string
+node server</code></pre><p>If you run into an error during <code>npm install</code>, remove the <code>node_modules</code> folder and try again.</p><p>To restart your server automatically if it crashes, run with forever:</p><pre><code>npm install forever -g
+forever server.js</code></pre><h2>Application</h2><pre><code class="lang-coffeescript"># app/config/shared/application.coffee
+global.App = Tower.Application.create()</code></pre><h2>Models</h2><pre><code class="lang-coffeescript"># app/models/shared/user.coffee
class App.User extends Tower.Model
- @field &quot;firstName&quot;
- @field &quot;lastName&quot;
- @field &quot;email&quot;
- @field &quot;activatedAt&quot;, type: &quot;Date&quot;, default: -&gt; new Date()
+ @field &#39;firstName&#39;, required: true
+ @field &#39;lastName&#39;
+ @field &#39;email&#39;, format: /\w+@\w+.com/
+ @field &#39;activatedAt&#39;, type: &#39;Date&#39;, default: -&gt; new Date()
- @hasOne &quot;address&quot;, embed: true
+ @hasOne &#39;address&#39;, embed: true
- @hasMany &quot;posts&quot;
- @hasMany &quot;comments&quot;
+ @hasMany &#39;posts&#39;
+ @hasMany &#39;comments&#39;
- @scope &quot;thisWeek&quot;, -&gt; @where(createdAt: &quot;&gt;=&quot;: -&gt; require(&#39;moment&#39;)().subtract(&#39;days&#39;, 7))
+ @scope &#39;recent&#39;, -&gt; createdAt: &#39;&gt;=&#39;: -&gt; _(3).days().ago().toDate()
- @validates &quot;firstName&quot;, presence: true
- @validates &quot;email&quot;, format: /\w+@\w+.com/
+ @validates &#39;firstName&#39;, &#39;email&#39;, presence: true
- @after &quot;create&quot;, &quot;welcome&quot;
+ @after &#39;create&#39;, &#39;welcome&#39;
welcome: -&gt;
- Tower.Mailer.welcome(@).deliver()</code></pre>
-<pre><code class="coffeescript"># app/models/post.coffee
+ Tower.Mailer.welcome(@).deliver()</code></pre><pre><code class="lang-coffeescript"># app/models/shared/post.coffee
class App.Post extends Tower.Model
- @field &quot;title&quot;
- @field &quot;body&quot;
- @field &quot;tags&quot;, type: [&quot;String&quot;], default: []
- @field &quot;slug&quot;
+ @field &#39;title&#39;
+ @field &#39;body&#39;
+ @field &#39;tags&#39;, type: [&#39;String&#39;], default: []
+ @field &#39;slug&#39;
- @belongsTo &quot;author&quot;, type: &quot;User&quot;
+ @belongsTo &#39;author&#39;, type: &#39;User&#39;
- @hasMany &quot;comments&quot;, as: &quot;commentable&quot;
+ @hasMany &#39;comments&#39;, as: &#39;commentable&#39;
+ @hasMany &#39;commenters&#39;, through: &#39;comments&#39;, type: &#39;User&#39;
- @before &quot;validate&quot;, &quot;slugify&quot;
+ @before &#39;validate&#39;, &#39;slugify&#39;
slugify: -&gt;
- @set &quot;slug&quot;, @get(&quot;title&quot;).replace(/[^a-z0-9]+/g, &quot;-&quot;).toLowerCase()</code></pre>
-<pre><code class="coffeescript"># app/models/comment.coffee
+ @set &#39;slug&#39;, @get(&#39;title&#39;).replace(/[^a-z0-9]+/g, &#39;-&#39;).toLowerCase()</code></pre><pre><code class="lang-coffeescript"># app/models/shared/comment.coffee
class App.Comment extends Tower.Model
- @field &quot;message&quot;
+ @field &#39;message&#39;
- @belongsTo &quot;author&quot;, type: &quot;User&quot;
- @belongsTo &quot;commentable&quot;, polymorphic: true</code></pre>
-<pre><code class="coffeescript"># app/models/address.coffee
+ @belongsTo &#39;author&#39;, type: &#39;User&#39;
+ @belongsTo &#39;commentable&#39;, polymorphic: true</code></pre><pre><code class="lang-coffeescript"># app/models/shared/address.coffee
class App.Address extends Tower.Model
- @field &quot;street&quot;
- @field &quot;city&quot;
- @field &quot;state&quot;
- @field &quot;zip&quot;
- @field &quot;coordinates&quot;, type: &quot;Geo&quot;
-
- @belongsTo &quot;user&quot;, embed: true</code></pre>
-<h3>Chainable Scopes, Queries, and Pagination</h3>
-<pre><code class="coffeescript">App.User
- .where(createdAt: &quot;&gt;=&quot;: _(2).days().ago(), &quot;&lt;=&quot;: new Date())
- .desc(&quot;createdAt&quot;)
- .asc(&quot;firstName&quot;)
+ @field &#39;street&#39;
+ @field &#39;city&#39;
+ @field &#39;state&#39;
+ @field &#39;zip&#39;
+ @field &#39;coordinates&#39;, type: &#39;Geo&#39;
+
+ @belongsTo &#39;user&#39;, embed: true</code></pre><h3>Chainable Scopes, Queries, and Pagination</h3><pre><code class="lang-coffeescript">App.User
+ .where(createdAt: &#39;&gt;=&#39;: _(2).days().ago(), &#39;&lt;=&#39;: new Date())
+ .desc(&#39;createdAt&#39;)
+ .asc(&#39;firstName&#39;)
.paginate(page: 5)
- .all()</code></pre>
-<h3>Associations</h3>
-<pre><code class="coffeescript">user = App.User.first()
+ .all()</code></pre><h3>Associations</h3><pre><code class="lang-coffeescript">user = App.User.first()
-# hasMany &quot;posts&quot;
-posts = user.posts().where(title: &quot;First Post&quot;).first()
-post = user.posts().build(title: &quot;A Post!&quot;)
-post = user.posts().create(title: &quot;A Saved Post!&quot;)
-posts = user.posts().all()
+# hasMany &#39;posts&#39;
+posts = user.get(&#39;posts&#39;).where(title: &#39;First Post&#39;).first()
+post = user.get(&#39;posts&#39;).build(title: &#39;A Post!&#39;)
+post = user.get(&#39;posts&#39;).create(title: &#39;A Saved Post!&#39;)
+posts = user.get(&#39;posts&#39;).all()
post = App.Post.first()
-# belongsTo &quot;author&quot;
-user = post.author()</code></pre>
-<h3>Validations</h3>
-<pre><code class="coffeescript">user = new User
-user.save() #=&gt; false
-user.errors #=&gt; {&quot;email&quot;: [&quot;Email must be present&quot;]}
-user.email = &quot;me@gmail.com&quot;
-user.save() #=&gt; true
-user.errors #=&gt; {}</code></pre>
-<h2>Routes</h2>
-<pre><code class="coffeescript"># config/routes.coffee
-Tower.Route.draw -&gt;
- @match &quot;/login&quot;, &quot;sessions#new&quot;, via: &quot;get&quot;, as: &quot;login&quot;
- @match &quot;/logout&quot;, &quot;sessions#destroy&quot;, via: &quot;get&quot;, as: &quot;logout&quot;
-
- @resources &quot;posts&quot;, -&gt;
- @resources &quot;comments&quot;
-
- @namespace &quot;admin&quot;, -&gt;
- @resources &quot;users&quot;
- @resources &quot;posts&quot;, -&gt;
- @resources &quot;comments&quot;
+# belongsTo &#39;author&#39;
+user = post.get(&#39;author&#39;)</code></pre><h3>Validations</h3><pre><code class="lang-coffeescript">user = App.User.build()
+user.save() #=&gt; false
+user.get(&#39;errors&#39;) #=&gt; {&quot;email&quot;: [&quot;Email must be present&quot;]}
+user.set(&#39;email&#39;, &#39;me@gmail.com&#39;)
+user.save() #=&gt; true
+user.get(&#39;errors&#39;) #=&gt; {}</code></pre><h2>Routes</h2><pre><code class="lang-coffeescript"># config/routes.coffee
+App.routes -&gt;
+ @match &#39;/login&#39;, &#39;sessions#new&#39;, via: &#39;get&#39;, as: &#39;login&#39;
+ @match &#39;/logout&#39;, &#39;sessions#destroy&#39;, via: &#39;get&#39;, as: &#39;logout&#39;
+
+ @resources &#39;posts&#39;, -&gt;
+ @resources &#39;comments&#39;
+
+ @namespace &#39;admin&#39;, -&gt;
+ @resources &#39;users&#39;
+ @resources &#39;posts&#39;, -&gt;
+ @resources &#39;comments&#39;
@constraints subdomain: /^api$/, -&gt;
- @resources &quot;posts&quot;, -&gt;
- @resources &quot;comments&quot;
-
- @match &quot;(/*path)&quot;, to: &quot;application#index&quot;, via: &quot;get&quot;</code></pre>
-<h2>Views</h2>
-<p>Views adhere to the <a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap 2.x</a> markup conventions.
-
-</p>
-<h3>Forms</h3>
-<pre><code class="coffeescript"># app/views/posts/new.coffee
-formFor &quot;post&quot;, (f) -&gt;
- f.fieldset (fields) -&gt;
- fields.field &quot;title&quot;, as: &quot;string&quot;
- fields.field &quot;body&quot;, as: &quot;text&quot;
-
- f.fieldset (fields) -&gt;
- fields.submit &quot;Submit&quot;</code></pre>
-<h3>Tables</h3>
-<pre><code class="coffeescript"># app/views/posts/index.coffee
-tableFor &quot;posts&quot;, (t) -&gt;
- t.head -&gt;
- t.row -&gt;
- t.cell &quot;title&quot;, sort: true
- t.cell &quot;body&quot;, sort: true
- t.cell()
- t.cell()
- t.cell()
- t.body -&gt;
- for post in @posts
- t.row -&gt;
- t.cell post.get(&quot;title&quot;)
- t.cell post.get(&quot;body&quot;)
- t.cell linkTo &#39;Show&#39;, post
- t.cell linkTo &#39;Edit&#39;, Tower.urlFor(post, action: &quot;edit&quot;)
- t.cell linkTo &#39;Destroy&#39;, post, method: &quot;delete&quot;
- linkTo &#39;New Post&#39;, Tower.urlFor(App.Post, action: &quot;new&quot;)</code></pre>
-<h3>Layouts</h3>
-<pre><code class="coffeescript"># app/views/layouts/application.coffee
-doctype 5
-html -&gt;
- head -&gt;
- meta charset: &quot;utf-8&quot;
-
- title t(&quot;title&quot;)
-
- meta name: &quot;description&quot;, content: t(&quot;description&quot;)
- meta name: &quot;keywords&quot;, content: t(&quot;keywords&quot;)
- meta name: &quot;robots&quot;, content: t(&quot;robots&quot;)
- meta name: &quot;author&quot;, content: t(&quot;author&quot;)
-
- csrfMetaTag()
-
- appleViewportMetaTag width: &quot;device-width&quot;, max: 1, scalable: false
-
- stylesheets &quot;lib&quot;, &quot;vendor&quot;, &quot;application&quot;
-
- javascriptTag &quot;https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js&quot;
- javascripts &quot;vendor&quot;, &quot;lib&quot;, &quot;application&quot;
-
- body role: &quot;application&quot;, -&gt;
- if hasContentFor &quot;templates&quot;
- yield &quot;templates&quot;
+ @resources &#39;posts&#39;, -&gt;
+ @resources &#39;comments&#39;
- nav id: &quot;navigation&quot;, role: &quot;navigation&quot;, -&gt;
- div class: &quot;frame&quot;, -&gt;
- partial &quot;shared/navigation&quot;
-
- header id: &quot;header&quot;, role: &quot;banner&quot;, -&gt;
- div class: &quot;frame&quot;, -&gt;
- partial &quot;shared/header&quot;
-
- section id: &quot;body&quot;, role: &quot;main&quot;, -&gt;
- div class: &quot;frame&quot;, -&gt;
- yields &quot;body&quot;
- aside id: &quot;sidebar&quot;, role: &quot;complementary&quot;, -&gt;
- if hasContentFor &quot;sidebar&quot;
- yields &quot;sidebar&quot;
-
- footer id: &quot;footer&quot;, role: &quot;contentinfo&quot;, -&gt;
- div class: &quot;frame&quot;, -&gt;
- partial &quot;shared/footer&quot;
-
- if hasContentFor &quot;popups&quot;
- aside id: &quot;popups&quot;, -&gt;
- yields &quot;popups&quot;
-
- if hasContentFor &quot;bottom&quot;
- yields &quot;bottom&quot;</code></pre>
-<p>The default templating engine is <a href="http://coffeekup.org/">CoffeeKup</a>, which is pure CoffeeScript. It&#39;s much more powerful than Jade, and it&#39;s just as performant if not more so. You can set Jade or any other templating engine as the default by setting <code>Tower.View.engine = &quot;jade&quot;</code> in <code>config/application</code>. Tower uses <a href="http://github.com/viatropos/mint.js">Mint.js</a>, which is a normalized interface to most of the Node.js templating languages.
-
-</p>
-<h2>Styles</h2>
-<p>It&#39;s all using Twitter Bootstrap, so check out their docs. <a href="http://twitter.github.com/bootstrap/">http://twitter.github.com/bootstrap/</a>
-
-</p>
-<h2>Controllers</h2>
-<pre><code class="coffeescript"># app/controllers/postsController.coffee
+ @match &#39;(/*path)&#39;, to: &#39;application#index&#39;, via: &#39;get&#39;</code></pre><h2>Controllers</h2><pre><code class="lang-coffeescript"># app/controllers/server/postsController.coffee
class App.PostsController extends Tower.Controller
index: -&gt;
App.Post.all (error, posts) =&gt;
- @render &quot;index&quot;, locals: posts: posts
+ @render &#39;index&#39;, locals: posts: posts
new: -&gt;
- @post = new App.Post
- @render &quot;new&quot;
+ @post = App.Post.build()
+ @render &#39;new&#39;
create: -&gt;
- @post = new App.Post(@params.post)
+ @post = App.Post.build(@params.post)
super (success, failure) -&gt;
- @success.html =&gt; @render &quot;posts/edit&quot;
- @success.json =&gt; @render text: &quot;success!&quot;
- @failure.html =&gt; @render text: &quot;Error&quot;, status: 404
- @failure.json =&gt; @render text: &quot;Error&quot;, status: 404
+ @success.html =&gt; @render &#39;posts/edit&#39;
+ @success.json =&gt; @render text: &#39;success!&#39;
+ @failure.html =&gt; @render text: &#39;Error&#39;, status: 404
+ @failure.json =&gt; @render text: &#39;Error&#39;, status: 404
show: -&gt;
App.Post.find @params.id, (error, post) =&gt;
- @render &quot;show&quot;
+ @render &#39;show&#39;
edit: -&gt;
App.Post.find @params.id, (error, post) =&gt;
- @render &quot;edit&quot;
+ @render &#39;edit&#39;
update: -&gt;
App.Post.find @params.id, (error, post) =&gt;
post.updateAttributes @params.post, (error) =&gt;
- @redirectTo action: &quot;show&quot;
+ @redirectTo action: &#39;show&#39;
destroy: -&gt;
App.Post.find @params.id, (error, post) =&gt;
post.destroy (error) =&gt;
- @redirectTo action: &quot;index&quot;</code></pre>
-<p>Actually, all that&#39;s built in! So for the simple case you don&#39;t even need to write anything in your controllers (skinny controllers, fat models). The default implementation is actually a lot more robust than that, just wanted to show a simple example.
-
-</p>
-<h2>Databases</h2>
-<pre><code class="coffeescript"># config/databases.coffee
+ @redirectTo action: &#39;index&#39;</code></pre><h2>Views</h2><p>Views are all Ember.</p><h2>Templates</h2><p>Templates adhere to the <a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap 2.x</a> markup conventions.</p><p>The default templating engine is <a href="http://easydoc.org/coffeecup">CoffeeCup</a>, which is pure CoffeeScript. It&#39;s much more powerful than Jade, and it&#39;s just as performant if not more so. You can set Jade or any other templating engine as the default by setting <code>Tower.View.engine = &quot;jade&quot;</code> in <code>config/application</code>. Tower uses <a href="http://github.com/viatropos/mint.js">Mint.js</a>, which is a normalized interface to most of the Node.js templating languages.</p><h2>Styles</h2><p>It&#39;s all using Twitter Bootstrap, so check out their docs. <a href="http://twitter.github.com/bootstrap/">http://twitter.github.com/bootstrap/</a> </p><p>Actually, all that&#39;s built in! So for the simple case you don&#39;t even need to write anything in your controllers (skinny controllers, fat models). The default implementation is actually a lot more robust than that, just wanted to show a simple example.</p><h2>Databases</h2><pre><code class="lang-coffeescript"># app/config/server/databases.coffee
module.exports =
mongodb:
development:
- name: &quot;app-development&quot;
+ name: &#39;app-development&#39;
port: 27017
- host: &quot;127.0.0.1&quot;
+ host: &#39;127.0.0.1&#39;
test:
- name: &quot;app-test&quot;
+ name: &#39;app-test&#39;
port: 27017
- host: &quot;127.0.0.1&quot;
+ host: &#39;127.0.0.1&#39;
staging:
- name: &quot;app-staging&quot;
+ name: &#39;app-staging&#39;
port: 27017
- host: &quot;127.0.0.1&quot;
+ host: &#39;127.0.0.1&#39;
production:
- name: &quot;app-production&quot;
+ name: &#39;app-production&#39;
port: 27017
- host: &quot;127.0.0.1&quot;</code></pre>
-<h2>Mailers</h2>
-<pre><code class="coffeescript">class App.Notification extends Tower.Mailer
+ host: &#39;127.0.0.1&#39;</code></pre><h2>Mailers</h2><pre><code class="lang-coffeescript">class App.Notification extends Tower.Mailer
# app/views/mailers/welcome.coffee template
@welcome: (user) -&gt;
- @mail to: user.email, from: &quot;me@gmail.com&quot;</code></pre>
-<h2>Internationalization</h2>
-<pre><code class="coffeescript"># config/locales/en.coffee
+ @mail to: user.email, from: &#39;me@gmail.com&#39;</code></pre><h2>Internationalization</h2><pre><code class="lang-coffeescript"># app/config/shared/locales/en.coffee
module.exports =
- hello: &quot;world&quot;
+ hello: &#39;world&#39;
forms:
titles:
- signup: &quot;Signup&quot;
+ signup: &#39;Signup&#39;
pages:
titles:
- home: &quot;Welcome to %{site}&quot;
+ home: &#39;Welcome to %{site}&#39;
posts:
comments:
- none: &quot;No comments&quot;
- one: &quot;1 comment&quot;
- other: &quot;%{count} comments&quot;
+ none: &#39;No comments&#39;
+ one: &#39;1 comment&#39;
+ other: &#39;%{count} comments&#39;
messages:
past:
- none: &quot;You never had any messages&quot;
- one: &quot;You had 1 message&quot;
- other: &quot;You had %{count} messages&quot;
+ none: &#39;You never had any messages&#39;
+ one: &#39;You had 1 message&#39;
+ other: &#39;You had %{count} messages&#39;
present:
- one: &quot;You have 1 message&quot;
+ one: &#39;You have 1 message&#39;
future:
- one: &quot;You might have 1 message&quot;</code></pre>
-<h2>Helpers</h2>
-<p>Since all of the controller/routing code is available on the client, you can go directly through that system just like you would the server.
-
-</p>
-<pre><code class="coffeescript"># Just request the url, and let it do it&#39;s thing
+ one: &#39;You might have 1 message&#39;</code></pre><h2>Helpers</h2><p>Since all of the controller/routing code is available on the client, you can go directly through that system just like you would the server.</p><pre><code class="lang-coffeescript"># Just request the url, and let it do it&#39;s thing
Tower.get &#39;/posts&#39;
# Same thing, this time passing parameters
Tower.get &#39;/posts&#39;, createdAt: &quot;2011-10-26..2011-10-31&quot;
# Dynamic
-Tower.urlFor(Post.first()) #=&gt; &quot;/posts/the-id&quot;</code></pre>
-<p>Those methods pass through the router and client-side middleware so you have access to <code>request</code> and <code>response</code> objects like you would on the server.
-
-</p>
-<h2>Middleware</h2>
-<p>It&#39;s built on <a href="http://github.com/sencha/connect">connect</a>, so you can use any of the middleware libs out there.
-
-</p>
-<h2>Assets</h2>
-<pre><code class="coffeescript"># config/assets.coffee
+Tower.urlFor(Post.first()) #=&gt; &quot;/posts/the-id&quot;</code></pre><p>Those methods pass through the router and client-side middleware so you have access to <code>request</code> and <code>response</code> objects like you would on the server.</p><h2>Middleware</h2><p>It&#39;s built on <a href="http://github.com/sencha/connect">connect</a>, so you can use any of the middleware libs out there.</p><h2>Assets</h2><pre><code class="lang-coffeescript"># app/config/server/assets.coffee
module.exports =
javascripts:
vendor: [
- &quot;/vendor/javascripts/jquery.js&quot;
- &quot;/vendor/javascripts/underscore.js&quot;
- &quot;/vendor/javascripts/socket.io&quot;
- &quot;/vendor/javascripts/tower.js&quot;
+ &#39;/vendor/javascripts/jquery.js&#39;
+ &#39;/vendor/javascripts/underscore.js&#39;
+ &#39;/vendor/javascripts/socket.io&#39;
+ &#39;/vendor/javascripts/tower.js&#39;
]
lib: [
- &quot;/lib/grid.js&quot;
- &quot;/lib/profiler.js&quot;
+ &#39;/lib/grid.js&#39;
+ &#39;/lib/profiler.js&#39;
]
application: [
- &quot;/app/models/post.js&quot;
- &quot;/app/models/comment.js&quot;
+ &#39;/app/models/shared/post.js&#39;
+ &#39;/app/models/shared/comment.js&#39;
]
stylesheets:
vendor: [
- &quot;/vendor/stylesheets/reset.css&quot;
+ &#39;/vendor/stylesheets/reset.css&#39;
]
application: [
- &quot;/app/assets/stylesheets/application.css&quot;
- &quot;/app/assets/stylesheets/theme.css&quot;
- ]</code></pre>
-<p>All assets are read from <code>/public</code>, which is the compiled output of everything in <code>/app</code>, <code>/lib</code>, <code>/vendor</code>, and wherever else you might put things. The default is to use stylus for css in <code>/app/assets/stylesheets</code>.
-
-</p>
-<p>By having this <code>assets.coffee</code> file, you can specify exactly how you want to compile your files for the client so it&#39;s as optimized and cacheable as possible in production.
-
-</p>
-<h3>Minify and Gzip</h3>
-<pre><code class="bash">cake assets:compile</code></pre>
-<h3>Push to S3</h3>
-<pre><code class="bash">cake assets:publish</code></pre>
-<h2>Watchfile</h2>
-<pre><code class="coffeescript">require(&#39;design.io&#39;).extension(&#39;watchfile&#39;)
-
-# stylesheet watcher
-require(&quot;design.io-stylesheets&quot;)
- ignore: /(public|node_modules|zzz|less)/
- outputPath: (path) -&gt;
- &quot;public/stylesheets/#{path}&quot;.replace(/\.(css|styl|less)$/, &quot;.css&quot;)
-
-# javascript watcher
-require(&quot;design.io-javascripts&quot;)
- ignore: /(public|node_modules|server|spec.*[sS]pec)/
- outputPath: (path) -&gt;
- &quot;public/javascripts/#{path}&quot;.replace(/\.(js|coffee)$/, &quot;.js&quot;)
-
-watch /app\/views\/.+\.mustache/
- update: (path) -&gt;
- # do anything!</code></pre>
-<h2>Test</h2>
-<pre><code class="bash">npm test</code></pre>
-<h2>Examples</h2>
-<ul>
-<li><a href="https://github.com/viatropos/towerjs.org">towerjs.org (project site)</a></li>
-</ul>
-<h2>Accent Libraries</h2>
-<p>Tower.js is just the bare bones, so you&#39;re free to choose a date parsing library, a template engine, or a form validation library, whatever.
-
-</p>
-<p>Here&#39;s some other useful libraries:
-
-</p>
-<ul>
-<li><a href="http://momentjs.com/">moment.js</a> for date parsing</li>
-<li><a href="http://documentcloud.github.com/underscore/">underscore.js</a></li>
-<li><a href="http://socket.io/">socket.io</a> for web sockets.</li>
-<li><a href="https://github.com/caolan/async">async.js</a> for taming callback spaghetti</li>
-<li><a href="https://github.com/manuelbieh/Geolib">geolib</a> for geo calculations</li>
-<li><a href="https://github.com/viatropos/tiny-require.js">tiny-require.js</a> for using <code>require()</code> in the browser</li>
-<li><a href="https://github.com/viatropos/mint.js">mint.js</a> for a generic interface to the JavaScript template engines</li>
-</ul>
-<h2>License</h2>
-<p>(The MIT License)
-
-</p>
-<p>Copyright &copy; 2012 <a href="http://twitter.com/viatropos">Lance Pollard</a> &lt;lancejpollard@gmail.com&gt;
-
-</p>
-<p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &#39;Software&#39;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-</p>
-<p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-</p>
-<p>THE SOFTWARE IS PROVIDED &#39;AS IS&#39;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
-
+ &#39;/app/assets/stylesheets/application.css&#39;
+ &#39;/app/assets/stylesheets/theme.css&#39;
+ ]</code></pre><h2>Structure</h2><p>Here&#39;s the structure of a newly generated app with a <code>Post</code> model:</p><pre><code>.
+├── app
+│   ├── config
+│   │   ├── client
+│   │   │   ├── bootstrap.coffee
+│   │   │   └── watch.coffee
+│   │   ├── server
+│   │   │   ├── environments
+│   │   │   │   ├── development.coffee
+│   │   │   │   ├── production.coffee
+│   │   │   │   └── test.coffee
+│   │   │   ├── initializers
+│   │   │   ├── assets.coffee
+│   │   │   ├── bootstrap.coffee
+│   │   │   ├── credentials.coffee
+│   │   │   ├── databases.coffee
+│   │   │   └── session.coffee
+│   │   └── shared
+│   │   ├── locales
+│   │   │   └── en.coffee
+│   │   ├── application.coffee
+│   │   └── routes.coffee
+│   ├── controllers
+│   │   ├── client
+│   │   │   ├── applicationController.coffee
+│   │   │   └── postsController.coffee
+│   │   └── server
+│   │   ├── applicationController.coffee
+│   │   └── postsController.coffee
+│   ├── models
+│   │   ├── client
+│   │   ├── server
+│   │   └── shared
+│   │   └── post.coffee
+│   ├── stylesheets
+│   │   ├── client
+│   │   │   └── application.styl
+│   │   └── server
+│   │   └── email.styl
+│   ├── templates
+│   │   ├── server
+│   │   │   └── layout
+│   │   │   ├── _meta.coffee
+│   │   │   └── application.coffee
+│   │   └── shared
+│   │   ├── layout
+│   │   │   ├── _body.coffee
+│   │   │   ├── _flash.coffee
+│   │   │   ├── _footer.coffee
+│   │   │   ├── _header.coffee
+│   │   │   ├── _navigation.coffee
+│   │   │   └── _sidebar.coffee
+│   │   ├── posts
+│   │   │   ├── _flash.coffee
+│   │   │   ├── _form.coffee
+│   │   │   ├── _item.coffee
+│   │   │   ├── _list.coffee
+│   │   │   ├── _table.coffee
+│   │   │   ├── edit.coffee
+│   │   │   ├── index.coffee
+│   │   │   ├── new.coffee
+│   │   │   └── show.coffee
+│   │   └── welcome.coffee
+│   └── views
+│   └── client
+│   ├── layout
+│   │   └── application.coffee
+│   └── posts
+│   ├── form.coffee
+│   ├── index.coffee
+│   └── show.coffee
+├── data
+│   └── seeds.coffee
+├── lib
+├── log
+├── public
+│   ├── fonts
+│   ├── images
+│   ├── javascripts
+│   ├── stylesheets
+│   ├── swfs
+│   ├── uploads
+│   ├── 404.html
+│   ├── 500.html
+│   ├── favicon.ico
+│   ├── humans.txt
+│   └── robots.txt
+├── scripts
+│   └── tower
+├── test
+│   ├── cases
+│   │   ├── controllers
+│   │   │   ├── client
+│   │   │   └── server
+│   │   └── postsControllerTest.coffee
+│   │   ├── features
+│   │   │   └── client
+│   │   └── models
+│   │   ├── client
+│   │   ├── server
+│   │   └── shared
+│   │   └── postTest.coffee
+│   ├── factories
+│   │   └── postFactory.coffee
+│   ├── client.coffee
+│   ├── mocha.opts
+│   └── server.coffee
+├── tmp
+├── wiki
+│   ├── _sidebar.md
+│   └── home.md
+├── Cakefile
+├── grunt.coffee
+├── package.json
+├── Procfile
+├── README.md
+└── server.js</code></pre><p>All assets are read from <code>/public</code>, which is the compiled output of everything in <code>/app</code>, <code>/lib</code>, <code>/vendor</code>, and wherever else you might put things. The default is to use stylus for css in <code>/app/assets/stylesheets</code>.</p><p>By having this <code>assets.coffee</code> file, you can specify exactly how you want to compile your files for the client so it&#39;s as optimized and cacheable as possible in production.</p><h3>Minify and Gzip</h3><pre><code class="lang-bash">cake assets:compile</code></pre><h3>Push to S3</h3><pre><code class="lang-bash">cake assets:publish</code></pre><h2>Test</h2><pre><code class="lang-bash">npm test</code></pre><p>Run individual test file:</p><pre><code class="lang-bash">mocha $(find test -name &quot;*persistenceTest.coffee&quot;)</code></pre><p>Run test matching pattern:</p><pre><code class="lang-bash">mocha $(find test -name &quot;*persistenceTest.coffee&quot;) -g &quot;string property$&quot;</code></pre><p>Run tests matching directory and pattern:</p><pre><code class="lang-bash">mocha $(find test -name &quot;*Test.coffee&quot; | egrep &quot;/*view*/&quot;)</code></pre><p><a href="http://stackoverflow.com/a/12255734/169992">Run tests <em>not</em> matching directory and pattern</a>:</p><pre><code class="lang-bash"># run all tests except for client tests
+mocha $(find test -name client -prune -o -name &#39;*Test.coffee&#39; -print)</code></pre><h2>Examples</h2> <ul><li><a href="https://github.com/viatropos/tower-authentication-example">Facebook/Twitter Authentication (Passport)</a></li> <li><a href="https://github.com/viatropos/towerjs.org">towerjs.org (project site)</a></li> </ul><h2>Contributing to Tower</h2><pre><code>git clone https://github.com/viatropos/tower.git
+cd tower</code></pre><h3>Building Tower</h3><p>You can build Tower manually with:</p><pre><code>make</code></pre><p>Or you can have it recompile the files when you change them:</p><pre><code>make watch</code></pre><h3>&quot;Linking&quot; Tower</h3><p>You can symlink your local tower repo to your global npm node_modules directory, which makes it so you can use it in your apps (so if you make changes to the tower repo, you&#39;ll see them in your app). Very useful.</p><p>In the tower repo:</p><pre><code>npm link</code></pre><p>In a tower app:</p><pre><code>npm link tower</code></pre><p>If you want to try installing tower from the remote npm registry, you can just unlink it and run <code>npm install</code>:</p><pre><code>npm unlink tower
+npm install tower</code></pre><p>Using <code>npm link</code> makes it very easy to mess with the source.</p><h3>Running Tests</h3><p>In the tower repo, run server tests with:</p><pre><code>make test-server</code></pre><p>To run client tests, first compile the test app and start its server:</p><pre><code>make build-test-client
+make start-test-client</code></pre><p>Then run the tests (uses phantomjs)</p><pre><code>make test-client</code></pre><p>If you don&#39;t have phantomjs you can install it with:</p><pre><code>brew install phantomjs</code></pre><h2>License</h2><p>(The MIT License)</p><p>Copyright &copy; 2012 <a href="http://twitter.com/viatropos">Lance Pollard</a> &lt;lancejpollard@gmail.com&gt;</p><p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &#39;Software&#39;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p><p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p><p>THE SOFTWARE IS PROVIDED &#39;AS IS&#39;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
</div>
</div>
<div id='footer'>
Generated on
- Wed Mar 21 2012 12:38:28 GMT-0700 (PDT)
+ Sat Sep 22 2012 15:01:38 GMT-0700 (PDT)
by
- <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>codo</a>
- v0.5.0
- (Node.js v0.6.11).
+ <a href='https://github.com/netzpirat/codo' title='CoffeeScript API documentation generator'>Codo</a>
+ v1.4.2
+ (Node.js v0.8.2).
+ &#10034;
+ Press Ctrl-h to see the keyboard shortcuts
&#10034;
<a href='http://twitter.com/#!/netzpirat'>@netzpirat</a>
&#10034;
2  public/api/assets/codo.css
View
@@ -1 +1 @@
-body{padding:0 20px;font-family:"Lucida Sans","Lucida Grande",Verdana,Arial,sans-serif;font-size:13px}h1{font-size:25px;margin:.8em 0 .5em;padding-top:4px;border-top:1px dotted #d5d5d5}h2{padding:0;padding-bottom:3px;border-bottom:1px #aaa solid;font-size:1.4em;margin:1.8em 0 .5em}#content a:link,#content a:visited{text-decoration:none;color:#05a}#content a:hover{background:#ffffa5}#content #filecontents li{line-height:25px}#content table.box{font-size:1em;line-height:2;border-spacing:0;border-collapse:collapse}#content table.box tr{background-color:#fff}#content table.box tr:first-child{background-color:#EEE}#content table.box tr td{border:1px solid #AAA}#content table.box tr td:first-child{width:100px;padding-right:10px;text-align:right;font-weight:bold}#content table.box tr td:last-child{min-width:420px;padding-left:10px;padding-right:10px}#content h1 .note,#content li .note{font-weight:normal;padding:3px 5px;position:relative;top:-3px;text-transform:capitalize;display:inline}#content h1 .note{font-size:.5em}#content li .note{top:0;font-size:.9em}#content ul.summary{list-style:none;font-family:monospace;font-size:1em;line-height:1.5em}#content ul.summary li{margin-bottom:5px}#content ul.summary .signature{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;padding:1px 10px;background:#eaeaff;border:1px solid #dfdfe5}#content ul.summary .signature a:hover{background:transparent}#content ul.summary li[deprecated] .signature{text-decoration:line-through}#content ul.summary .signature+.note.title{margin-left:7px}#content ul.summary .desc{margin-left:32px;display:block;font-family:sans-serif}#content ul.summary .desc p{padding:0;margin:0}#content dl.constants{margin-left:40px}#content dl.constants dt{font-weight:bold;font-size:1.1em;margin-bottom:5px}#content dl.constants dt .docstring{margin-left:32px;font-size:.9em;font-weight:normal}#content dl.constants dd{margin-bottom:18px}#content .method_details{border-top:1px dotted #AAA;margin-top:15px;padding-top:0}#content .method_details:first-child{border:none}#content .method_details p.signature{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;font-size:1.1em;font-weight:normal;font-family:Monaco,Consolas,Courier,monospace;padding:6px 10px;margin-top:18px;background:#e5e8ff;border:1px solid #d8d8e5}#content .tags{font-size:13px}#content .tags h3{font-size:1em;margin-bottom:3}#content .tags ul{margin-top:0;padding-left:30px;list-style:square}#content .tags ul .name{font-family:monospace;font-weight:bold}#content .note{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;margin-top:10px;color:#222;background:#e3e4e3;border:1px solid #d5d5d5;padding:7px 10px;display:block}#content .deprecated{background:#ffe5e5;border-color:#e9dada}#content .bound{background:#d3ff97;border-color:#c3eb8b}#content .todo{background:#ffffc5;border-color:#ececaa}#content .private{background:#d5d5d5;border-color:#c5c5c5}#content .constructor{color:white;background:#6a98d6;border-color:#6689d6}#content h3.inherited{font-style:italic;font-family:"Lucida Sans","Lucida Grande",Verdana,Arial,sans-serif;font-weight:normal;padding:0;margin:0;margin-top:12px;margin-bottom:3px;font-size:13px}#content p.inherited{word-spacing:5px;font-size:1.2em;padding:0;margin:0;margin-left:25px}#content p.inherited a{font-family:monospace;font-size:.9em}#footer{margin-top:15px;border-top:1px solid #ccc;text-align:center;padding:7px 0;font-size:12px;color:#999}#footer a:link,#footer a:visited{color:#999;text-decoration:none;border-bottom:1px dotted #bbd}#footer a:hover{color:#05a}pre code{display:block;padding:.5em;color:#000;background:#f8f8ff}pre .comment,pre .template_comment,pre .diff .header,pre .javadoc{color:#998;font-style:italic}pre .keyword,pre .css .rule .keyword,pre .winutils,pre .javascript .title,pre .lisp .title,pre .subst{color:#000;font-weight:bold}pre .number,pre .hexcolor{color:#40a070}pre .string,pre .tag .value,pre .phpdoc,pre .tex .formula{color:#d14}pre .title,pre .id{color:#900;font-weight:bold}pre .javascript .title,pre .lisp .title,pre .subst{font-weight:normal}pre .class .title,pre .haskell .label,pre .tex .command{color:#458;font-weight:bold}pre .tag,pre .tag .title,pre .rules .property,pre .django .tag .keyword{color:#000080;font-weight:normal}pre .attribute,pre .variable,pre .instancevar,pre .lisp .body{color:#008080}pre .regexp{color:#009926}pre .class{color:#458;font-weight:bold}pre .symbol,pre .ruby .symbol .string,pre .ruby .symbol .keyword,pre .ruby .symbol .keymethods,pre .lisp .keyword,pre .tex .special,pre .input_number{color:#990073}pre .builtin,pre .built_in,pre .lisp .title{color:#0086b3}pre .preprocessor,pre .pi,pre .doctype,pre .shebang,pre .cdata{color:#999;font-weight:bold}pre .deletion{background:#fdd}pre .addition{background:#dfd}pre .diff .change{background:#0086b3}pre .chunk{color:#aaa}pre .tex .formula{opacity:.5}#menu{font-size:1.3em;color:#bbb;top:-5px;position:relative}#menu .title,#menu a{font-size:.7em}#menu .title a{font-size:1em}#menu .title{color:#555}#menu a:link,#menu a:visited{color:#333;text-decoration:none;border-bottom:1px dotted #bbd}#menu a:hover{color:#05a}#header nav{float:right;color:#000;font-size:.7em}#header nav ul{list-style-type:none;margin:4px!important}#header nav ul,#header nav ul li{margin:0;padding:0;display:inline}#header nav a{font-size:1em}#header #search{float:right;margin-top:-3px}#header #search a:link,#header #search a:visited{-moz-box-shadow:#ddd -1px 1px 3px;-webkit-box-shadow:#ddd -1px 1px 3px;-o-box-shadow:#ddd -1px 1px 3px;box-shadow:#ddd -1px 1px 3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;-o-border-bottom-left-radius:3px;-ms-border-bottom-left-radius:3px;-khtml-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;-o-border-bottom-right-radius:3px;-ms-border-bottom-right-radius:3px;-khtml-border-bottom-right-radius:3px;border-bottom-right-radius:3px;display:block;float:left;margin-right:4px;padding:8px 10px;color:#05a;background:#eaf0ff;text-decoration:none;border:1px solid #d8d8e5}#header #search a:hover{background:#f5faff;color:#06b}#header #search a.active{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;-o-border-top-left-radius:5px;-ms-border-top-left-radius:5px;-khtml-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;-o-border-top-right-radius:5px;-ms-border-top-right-radius:5px;-khtml-border-top-right-radius:5px;border-top-right-radius:5px;padding-bottom:20px;color:#fff;background:#568;border:1px solid #457}#header #search a.inactive{color:#999}body.frames #header li.frames{display:none}body.frames #header #search{display:none}body.noframes #header li.noframes{display:none}#search_frame{-moz-box-shadow:#aaa -7px 5px 25px;-webkit-box-shadow:#aaa -7px 5px 25px;-o-box-shadow:#aaa -7px 5px 25px;box-shadow:#aaa -7px 5px 25px;display:none;position:absolute;overflow-y:scroll;z-index:9999;top:36px;right:18px;width:500px;height:80%;background:white;border:1px solid #999;border-collapse:collapse}pre{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;-moz-box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;-webkit-box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;-o-box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;padding:0;margin-top:4px;border:1px solid #EEF;background-color:#f5f5ff;font-family:monospace}pre.code{word-wrap:break-word}pre code{overflow:hidden;word-wrap:break-word}.docstring p>code,.docstring li>code{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;margin:0 2px;padding:0 5px;white-space:nowrap;border:1px solid #eaeaea;background-color:#f8f8f8}.alphaindex{margin-top:0;font-size:22px}.noborder{border-top:0;margin-top:0;padding-top:4px}.title{margin-bottom:10px}#files{padding:0;font-size:1.1em}#files li{list-style:none;display:inline;padding:7px 12px;line-height:35px;background:#f0f0f0;margin-right:5px}#index{-moz-column-count:3;-webkit-column-count:3;-o-column-count:3;column-count:3;-moz-column-width:33%;-webkit-column-width:33%;-o-column-width:33%;column-width:33%}#index>ul{margin:0;padding:0;padding-bottom:10px;font-size:1.1em;list-style:none}#index>ul>li.letter{-webkit-column-break-after:avoid;font-size:1.4em;padding-bottom:10px;text-transform:uppercase}#index>ul>ul{margin:0;padding-left:20px}#index>ul>ul small{color:#666;font-size:.7em}body.list{padding:0;margin:0}body.noframes #content.list nav{display:none}body.noframes #content.list #search{position:absolute;right:5px;top:9px;padding-left:10px}body.frames #content.list #search{position:relative;margin-top:5px;margin-left:10px}#content.list.tree>ul{margin-top:13px!important}#content.list.tree ul{font-size:16px;margin:0;padding:0}#content.list.tree ul li{margin:0;padding:5px;color:#000;font-size:1em;list-style:none;white-space:nowrap;overflow:hidden;cursor:pointer}#content.list.tree ul li.namespace{overflow:visible}#content.list.tree ul li>a.toggle{display:block;float:left;width:10px;height:10px;margin-top:5px;margin-left:5px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:0 -10px}#content.list.tree ul li>a.toggle.collapsed{background-position:0 0}#content.list.tree ul li>span,#content.list.tree ul li a{margin-left:20px;text-decoration:none}#content.list.tree ul li>a.toggle+span,#content.list.tree ul li a.toggle+a{margin-left:5px}#content.list.tree ul li small{color:#888;white-space:nowrap}#content.list{padding:0;margin:0}#content.list h1{padding:12px 10px;padding-bottom:10px;margin:0;font-size:1.4em}#content.list a:hover{background:transparent}#content.list nav{margin-left:10px}#content.list #search{color:#888}#content.list #search input{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;border:1px solid #BBB}#content.list a{color:#05A;cursor:pointer;text-decoration:none}#content.list a:hover{text-decoration:underline}#content.list ul{padding:0;list-style:none;margin-left:0}#content.list ul li[deprecated]{text-decoration:line-through}#content.list ul li{padding:5px;padding-left:12px;margin:0;font-size:1.1em;list-style:none;color:#888;cursor:pointer}#content.list ul li.stripe{background:#f0f0f0}#content.list ul li:hover{background:#ddd}
+body{padding:0 5px;font-family:"Lucida Sans","Lucida Grande",Verdana,Arial,sans-serif;font-size:13px}h1{font-size:25px;margin:.8em 0 .5em;padding-top:4px;border-top:1px dotted #d5d5d5}h2{padding:0;padding-bottom:3px;border-bottom:1px #aaa solid;font-size:1.4em;margin:1.8em 0 .5em}#base{display:none}#fuzzySearch{-webkit-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-moz-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-webkit-border-radius:10px;-moz-border-radius:10px;-ms-border-radius:10px;-o-border-radius:10px;border-radius:10px;position:fixed;z-index:8000;left:0;right:0;top:25px;width:500px;height:45px;margin:0 auto;display:none;padding:25px;background-color:#fff}#fuzzySearch input{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;width:485px;border:2px solid #05a;font-size:20px;padding:5px}#fuzzySearch ol{list-style-type:none;margin:10px 0 0 0;padding:0}#fuzzySearch ol li{padding:3px}#fuzzySearch ol li.stripe{background:#f0f0f0}#fuzzySearch ol li.selected{background:#05a}#fuzzySearch ol li.selected a{color:#fff}#fuzzySearch ol li.selected a:visited{color:#fff}#fuzzySearch ol li.selected a:hover{color:#05a}#fuzzySearch ol li.selected a span{color:#05a}#fuzzySearch ol li a{color:#05a;font-size:18px;text-decoration:none}#fuzzySearch ol li a:visited{color:#05a}#fuzzySearch ol li a:hover{background:#ffffa5}#fuzzySearch ol li a span{background-color:#ff0}#fuzzySearch ol li small{font-size:14px;padding-left:10px;color:#888}#help{-webkit-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-moz-box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;box-shadow:rgba(0,0,0,0.5) 0 10px 30px 10px;-webkit-border-radius:10px;-moz-border-radius:10px;-ms-border-radius:10px;-o-border-radius:10px;border-radius:10px;position:fixed;z-index:8000;left:0;right:0;top:50%;width:500px;height:525px;margin:0 auto;margin-top:-262px;display:none;padding:25px;background-color:#fff}#help ul{list-style-type:none;margin:0;padding:0}#help ul li{height:35px;font-weight:bold}#help ul li span{-webkit-box-shadow:rgba(0,0,0,0.5) 1px 1px 2px;-moz-box-shadow:rgba(0,0,0,0.5) 1px 1px 2px;box-shadow:rgba(0,0,0,0.5) 1px 1px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;display:block;float:left;width:50px;padding:5px;margin-right:20px;background:#eee;text-align:center}#content a:link,#content a:visited{text-decoration:none;color:#05a}#content a:hover{background:#ffffa5}#content #filecontents img{border:0}#content #filecontents li{line-height:25px}#content #filecontents table{padding:0;border-collapse:collapse;border-spacing:0}#content #filecontents table tr{border-top:1px solid #CCC;background-color:white;margin:0;padding:0}#content #filecontents table tr td{border:1px solid #CCC;text-align:left;margin:0;padding:6px 13px}#content table.box{font-size:1em;line-height:2;border-spacing:0;border-collapse:collapse}#content table.box tr{background-color:#fff}#content table.box tr:first-child{background-color:#EEE}#content table.box tr td{border:1px solid #AAA}#content table.box tr td:first-child{width:100px;padding-right:10px;text-align:right;font-weight:bold}#content table.box tr td:last-child{min-width:420px;padding-left:10px;padding-right:10px}#content h1 .note,#content li .note,#content .properties .note{font-weight:normal;padding:3px 5px;position:relative;top:-3px;text-transform:capitalize;display:inline}#content h1 .note{font-size:.5em}#content li .note{top:0;font-size:.9em}#content .properties .note{top:0;font-size:.85em}#content ul.summary,#content .properties{list-style:none;font-family:monospace;font-size:1em;line-height:1.5em}#content ul.summary li,#content .properties li{margin-bottom:5px}#content ul.summary .signature,#content .properties .signature{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:1px 10px;color:#05A;background:#eaeaff;border:1px solid #dfdfe5}#content ul.summary .signature a:hover,#content .properties .signature a:hover{background:transparent}#content ul.summary li[deprecated] .signature,#content .properties li[deprecated] .signature{text-decoration:line-through}#content ul.summary .signature+.note.title,#content .properties .signature+.note.title{margin-left:7px}#content ul.summary .desc,#content .properties .desc{margin-left:32px;display:block;font-family:sans-serif}#content ul.summary .desc p,#content .properties .desc p{padding:0;margin:0}#content dl.constants dt{font-weight:bold}#content dl.constants,#content dl.properties{margin-left:40px}#content dl.constants dt,#content dl.properties dt{font-size:1.1em;margin-bottom:5px}#content dl.constants dt .docstring,#content dl.properties dt .docstring{margin-left:32px;font-size:.9em;font-weight:normal}#content dl.constants dd,#content dl.properties dd{margin-bottom:18px}#content .method_details{border-top:1px dotted #AAA;margin-top:15px;padding-top:0}#content .method_details:first-child{border:none}#content .method_details p.signature{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;font-size:1.1em;font-weight:normal;font-family:Monaco,Consolas,Courier,monospace;padding:6px 10px;margin-top:18px;background:#e5e8ff;border:1px solid #d8d8e5}#content .tags{font-size:13px}#content .tags h3{font-size:1em;margin-bottom:3px}#content .tags ul{margin-top:0;padding-left:30px;list-style:square}#content .tags ul .name{font-family:monospace;font-weight:bold}#content .tags .overloads h3{margin-bottom:0}#content .tags .overloads .overload{margin-left:20px}#content .tags .overloads .overload p.signature{padding-top:2px;padding-bottom:2px}#content .note{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;margin-top:10px;color:#222;background:#e3e4e3;border:1px solid #d5d5d5;padding:7px 10px;display:block}#content .deprecated{background:#ffe5e5;border-color:#e9dada}#content .writeonly{background:#d3ff97;border-color:#c3eb8b}#content .readonly{background:#ffe5e5;border-color:#e9dada}#content .bound{background:#d3ff97;border-color:#c3eb8b}#content .todo{background:#ffffc5;border-color:#ececaa}#content .private{background:#d5d5d5;border-color:#c5c5c5}#content .constructor{color:white;background:#6a98d6;border-color:#6689d6}#content h3.inherited,#content h3.included,#content h3.extended{font-style:italic;font-family:"Lucida Sans","Lucida Grande",Verdana,Arial,sans-serif;font-weight:normal;padding:0;margin:0;margin-top:12px;margin-bottom:3px;font-size:13px}#content p.inherited,#content p.included,#content p.extended{word-spacing:5px;font-size:1.2em;padding:0;margin:0;margin-left:25px}#content p.inherited a,#content p.included a,#content p.extended a{font-family:monospace;font-size:.9em}#footer{margin-top:15px;border-top:1px solid #ccc;text-align:center;padding:7px 0;font-size:12px;color:#999}#footer a:link,#footer a:visited{color:#999;text-decoration:none;border-bottom:1px dotted #bbd}#footer a:hover{color:#05a}pre code{display:block;padding:.5em;color:#000;background:#f8f8ff}pre .comment,pre .template_comment,pre .diff .header,pre .javadoc{color:#998;font-style:italic}pre .keyword,pre .css .rule .keyword,pre .winutils,pre .javascript .title,pre .lisp .title,pre .subst{color:#000;font-weight:bold}pre .number,pre .hexcolor{color:#40a070}pre .string,pre .tag .value,pre .phpdoc,pre .tex .formula{color:#d14}pre .title,pre .id{color:#900;font-weight:bold}pre .javascript .title,pre .lisp .title,pre .subst{font-weight:normal}pre .class .title,pre .haskell .label,pre .tex .command{color:#458;font-weight:bold}pre .tag,pre .tag .title,pre .rules .property,pre .django .tag .keyword{color:#000080;font-weight:normal}pre .attribute,pre .variable,pre .instancevar,pre .lisp .body{color:#008080}pre .regexp{color:#009926}pre .class{color:#458;font-weight:bold}pre .symbol,pre .ruby .symbol .string,pre .ruby .symbol .keyword,pre .ruby .symbol .keymethods,pre .lisp .keyword,pre .tex .special,pre .input_number{color:#990073}pre .builtin,pre .built_in,pre .lisp .title{color:#0086b3}pre .preprocessor,pre .pi,pre .doctype,pre .shebang,pre .cdata{color:#999;font-weight:bold}pre .deletion{background:#fdd}pre .addition{background:#dfd}pre .diff .change{background:#0086b3}pre .chunk{color:#aaa}pre .tex .formula{opacity:.5}#menu{font-size:1.3em;color:#bbb;top:-5px;position:relative}#menu .title,#menu a{font-size:.7em}#menu .title a{font-size:1em}#menu .title{color:#555}#menu a:link,#menu a:visited{color:#333;text-decoration:none;border-bottom:1px dotted #bbd}#menu a:hover{color:#05a}#header nav{float:right;color:#000;font-size:.7em}#header nav ul{list-style-type:none;margin:4px!important}#header nav ul,#header nav ul li{margin:0;padding:0;display:inline}#header nav a{font-size:1em}#header #search{float:right;margin-top:-3px}#header #search a:link,#header #search a:visited{-webkit-box-shadow:#ddd -1px 1px 3px;-moz-box-shadow:#ddd -1px 1px 3px;box-shadow:#ddd -1px 1px 3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;-ms-border-bottom-left-radius:3px;-o-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;-ms-border-bottom-right-radius:3px;-o-border-bottom-right-radius:3px;border-bottom-right-radius:3px;display:block;float:left;margin-right:4px;padding:8px 10px;color:#05a;background:#eaf0ff;text-decoration:none;border:1px solid #d8d8e5}#header #search a:hover{background:#f5faff;color:#06b}#header #search a.active{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;-ms-border-top-left-radius:5px;-o-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;-ms-border-top-right-radius:5px;-o-border-top-right-radius:5px;border-top-right-radius:5px;padding-bottom:20px;color:#fff;background:#568;border:1px solid #457}#header #search a.inactive{color:#999}body.frames #header li.frames{display:none}body.frames #header #search{display:none}body.noframes #header li.noframes{display:none}#search_frame{-webkit-box-shadow:#aaa -7px 5px 25px;-moz-box-shadow:#aaa -7px 5px 25px;box-shadow:#aaa -7px 5px 25px;display:none;position:absolute;overflow-y:scroll;z-index:9999;top:36px;right:18px;width:500px;height:80%;background:white;border:1px solid #999;border-collapse:collapse}pre{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;-webkit-box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;-moz-box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;box-shadow:rgba(0,0,0,0.1) 1px 1px 2px;padding:0;margin-top:4px;border:1px solid #eaeaea;background-color:#f8f8f8;font-family:monospace}pre.code{word-wrap:break-word}pre code{border:0;white-space:pre;overflow:hidden;word-wrap:break-word}code{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;margin:0 2px;padding:0 5px;white-space:nowrap;border:1px solid #eaeaea;background-color:#f8f8f8}pre>code{white-space:wrap}.docstring p>code,.docstring li>code{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;margin:0 2px;padding:0 5px;white-space:nowrap;border:1px solid #eaeaea;background-color:#f8f8f8}.alphaindex{margin-top:0;font-size:22px}.noborder{border-top:0;margin-top:0;padding-top:4px}.title{margin-bottom:10px}#files{padding:0;font-size:1.1em}#files li{list-style:none;display:inline;padding:7px 12px;line-height:35px;background:#f0f0f0;margin-right:5px}.index{-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3;-webkit-column-width:33%;-moz-column-width:33%;-ms-column-width:33%;-o-column-width:33%;column-width:33%}.index>ul{margin:0;padding:0;padding-bottom:10px;font-size:1.1em;list-style:none}.index>ul>li.letter{-webkit-column-break-after:avoid;font-size:1.4em;padding-bottom:10px;text-transform:uppercase}.index>ul>ul{margin:0;padding-left:20px}.index>ul>ul small{color:#666;font-size:.7em}body.list{padding:0;margin:0}body.noframes #content.list nav{display:none}body.noframes #content.list #search{position:absolute;right:5px;top:9px;padding-left:10px}body.frames #content.list #search{position:relative;margin-top:5px;margin-left:10px}#content.list.tree>ul{margin-top:13px!important}#content.list.tree ul{font-size:16px;margin:0;padding:0}#content.list.tree ul li{margin:0;padding:5px;color:#000;font-size:1em;list-style:none;white-space:nowrap;overflow:hidden;cursor:pointer}#content.list.tree ul li.namespace{overflow:visible}#content.list.tree ul li>a.toggle{display:block;float:left;width:10px;height:10px;margin-top:5px;margin-left:5px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:0 -10px}#content.list.tree ul li>a.toggle.collapsed{background-position:0 0}#content.list.tree ul li>span,#content.list.tree ul li a{margin-left:20px;text-decoration:none}#content.list.tree ul li>a.toggle+span,#content.list.tree ul li a.toggle+a{margin-left:5px}#content.list.tree ul li small{color:#888;white-space:nowrap}#content.list.tree ul li small.namespace{display:none}#content.list.tree ul li.result a.toggle{visibility:hidden}#content.list.tree ul li.result small.namespace{display:inline}#content.list.tree ul li.result small.parent{display:none}#content.list{padding:0;margin:0}#content.list h1{padding:12px 10px;padding-bottom:10px;margin:0;font-size:1.4em}#content.list a:hover{background:transparent}#content.list nav{margin-left:10px}#content.list #search{color:#888}#content.list #search input{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;border:1px solid #BBB}#content.list a{color:#05A;cursor:pointer;text-decoration:none}#content.list a:hover{text-decoration:underline}#content.list ul{padding:0;list-style:none;margin-left:0}#content.list ul li[deprecated]{text-decoration:line-through}#content.list ul li{padding:5px;padding-left:12px;margin:0;font-size:1.1em;list-style:none;color:#888;cursor:pointer}#content.list ul li.stripe{background:#f0f0f0}#content.list ul li:hover{background:#ddd}nav.toc{-webkit-box-shadow:#bbb -2px 2px 6px;-moz-box-shadow:#bbb -2px 2px 6px;box-shadow:#bbb -2px 2px 6px;overflow:hidden;position:absolute;z-index:500;right:0;max-width:300px;padding:20px;padding-right:30px;margin-left:20px;margin-bottom:20px;background:white;border:1px solid #DDD}nav.toc p.title{margin-top:5px}nav.toc ol{padding-left:1.8em}nav.toc li{font-size:1.1em;line-height:1.7em}nav.toc>ol>li{font-size:1.1em;font-weight:bold}nav.toc ol>ol{font-size:.9em}nav.toc.inline{-webkit-box-shadow:white 0 0 0;-moz-box-shadow:white 0 0 0;box-shadow:white 0 0 0;position:relative;padding:0;margin:5px 0 0 0;border:0}nav.toc.inline.hidden{background:none;padding:0;text-align:left}nav.toc.hidden{height:26px;width:140px;padding:5px;background:#f6f6f6;text-align:center}nav.toc.hidden p.title small{display:none}
24 public/api/assets/codo.js
View
11 additions, 13 deletions not shown
1  public/api/assets/search_data.js
View
1 addition, 0 deletions not shown
2,261 public/api/class_index.html
View
@@ -1,569 +1,2307 @@
<!DOCTYPE html>
<html>
<head>
- <title>CoffeeScript API Documentation</title>
+ <meta charset='UTF-8'>
+ <title>Tower API Documentation</title>
<link rel='stylesheet' href='assets/codo.css' type='text/css'>
<script src='assets/codo.js'></script>
+ <script src='assets/search_data.js'></script>
</head>
<body>
- <div id='header'>
+ <div id='base' data-path=''></div>
+<div id='header'>
<div id='menu'>
<nav>
<ul>
- <li class='frames'>
- (<a class='frames' href='frames.html'>frames</a>)
- </li>
<li class='noframes'>
(<a class='noframes' href='#'>no frames</a>)
</li>
</ul>
</nav>
<div id='search'>
- <a id='class_list_link' href='class_list.html'>Class List</a>
- <a id='method_list_link' href='method_list.html'>Method List</a>
- <a id='file_list_link' href='file_list.html'>File List</a>
+ <a id='class_list_link' href='class_list.html'>Classes</a>
+ <a id='mixin_list_link' href='mixin_list.html'>Mixins</a>
+ <a id='file_list_link' href='file_list.html'>Files</a>
+ <a id='method_list_link' href='method_list.html'>Methods</a>
+ <a id='extra_list_link' href='extra_list.html'>Extras</a>
</div>
</div>
<iframe id='search_frame'></iframe>
+ <div id='fuzzySearch'>
+ <input type='text'>
+ <ol></ol>
+ </div>
+ <div id='help'>
+ <p>
+ Quickly fuzzy find classes, mixins, methods, file:
+ </p>
+ <ul>
+ <li>
+ <span>Ctrl-T</span>
+ Open fuzzy finder dialog
+ </li>
+ </ul>
+ <p>
+ In frame mode you can toggle the list naviation frame on the left side:
+ </p>
+ <ul>
+ <li>
+ <span>Ctrl-L</span>
+ Toggle list view
+ </li>
+ </ul>
+ <p>
+ You can focus a list in frame mode or toggle a tab in frameless mode:
+ </p>
+ <ul>
+ <li>
+ <span>Ctrl-C</span>
+ Class list
+ </li>
+ <li>
+ <span>Ctrl-I</span>
+ Mixin list
+ </li>
+ <li>
+ <span>Ctrl-F</span>
+ File list
+ </li>
+ <li>
+ <span>Ctrl-M</span>
+ Method list
+ </li>
+ <li>
+ <span>Ctrl-E</span>
+ Extras list
+ </li>
+ </ul>
+ <p>
+ You can focus and blur the search input:
+ </p>
+ <ul>
+ <li>
+ <span>Ctrl-S</span>
+ Focus search input
+ </li>
+ <li>
+ <span>Esc</span>
+ Blur search input
+ </li>
+ </ul>
+ <p>
+ In frameless mode you can close the list tab:
+ </p>
+ <ul>
+ <li>
+ <span>Esc</span>
+ Close list tab
+ </li>
+ </ul>
+ </div>
</div>
<div id='content'>
- <h1 class='noborder title'>CoffeeScript API Documentation</h1>
+ <h1 class='noborder title'>Tower API Documentation</h1>
<div id='listing'>
<h1 class='alphaindex'>Alphabetic Index</h1>
- <h2>File Listing</h2>
+ <h2>Extra File Listing</h2>
<ul id='files'>
<li>
- <a href="README.md.html" title='README.md'>README.md</a>
+ <a href='README.md.html' title='README.md'>README.md</a>
</li>
</ul>
- <h2>Namespace Listing A-Z</h2>
- <div id='index'>
+ <h2>Class Listing A-Z</h2>
+ <div class='index'>
<ul>
<li class='letter'>a</li>
<ul>
<li>
- <a href="classes/Tower/Application.html">Application</a>
+ <a href='classes/Tower/Application.html'>Application</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/Application.html'>Application</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/Ability.html'>Ability</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ </ul>
+ </ul>
+ <ul>
+ <li class='letter'>c</li>
+ <ul>
+ <li>
+ <a href='classes/Tower/CommandConsole.html'>CommandConsole</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/CommandDatabase.html'>CommandDatabase</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/CommandGenerate.html'>CommandGenerate</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/CommandInfo.html'>CommandInfo</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/CommandNew.html'>CommandNew</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/CommandServer.html'>CommandServer</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/Controller.html'>Controller</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ControllerResponder.html'>ControllerResponder</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerInstrumentation.html'>ControllerInstrumentation</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerActions.html'>ControllerActions</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerAuthentication.html'>ControllerAuthentication</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerCallbacks.html'>ControllerCallbacks</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerErrors.html'>ControllerErrors</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerHelpers.html'>ControllerHelpers</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerInstrumentation.html'>ControllerInstrumentation</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerMetadata.html'>ControllerMetadata</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerParams.html'>ControllerParams</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerRedirecting.html'>ControllerRedirecting</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerRendering.html'>ControllerRendering</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerResourceful.html'>ControllerResourceful</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ControllerResponding.html'>ControllerResponding</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ </ul>
+ </ul>
+ <ul>
+ <li class='letter'>e</li>
+ <ul>
+ <li>
+ <a href='classes/Tower/Engine.html'>Engine</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ </ul>
+ </ul>
+ <ul>
+ <li class='letter'>f</li>
+ <ul>
+ <li>
+ <a href='classes/Tower/Factory.html'>Factory</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ </ul>
+ </ul>
+ <ul>
+ <li class='letter'>g</li>
+ <ul>
+ <li>
+ <a href='classes/Tower/Generator.html'>Generator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorLibraryGenerator.html'>GeneratorLibraryGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorMochaControllerGenerator.html'>GeneratorMochaControllerGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorMochaModelGenerator.html'>GeneratorMochaModelGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorMochaViewGenerator.html'>GeneratorMochaViewGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorAppGenerator.html'>GeneratorAppGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorAssetsGenerator.html'>GeneratorAssetsGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorControllerGenerator.html'>GeneratorControllerGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorHelperGenerator.html'>GeneratorHelperGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorMailerGenerator.html'>GeneratorMailerGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorModelGenerator.html'>GeneratorModelGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorScaffoldGenerator.html'>GeneratorScaffoldGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorTemplateGenerator.html'>GeneratorTemplateGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GeneratorViewGenerator.html'>GeneratorViewGenerator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/GithubDownloadStore.html'>GithubDownloadStore</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/GeneratorConfiguration.html'>GeneratorConfiguration</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/GeneratorHelpers.html'>GeneratorHelpers</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/GeneratorResources.html'>GeneratorResources</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/GeneratorShell.html'>GeneratorShell</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ </ul>
+ </ul>
+ <ul>
+ <li class='letter'>h</li>
+ <ul>
+ <li>
+ <a href='classes/Tower/Hook.html'>Hook</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ </ul>
+ </ul>
+ <ul>
+ <li class='letter'>m</li>
+ <ul>
+ <li>
+ <a href='classes/Tower/Mailer.html'>Mailer</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelAttribute.html'>ModelAttribute</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelCursor.html'>ModelCursor</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/Model.html'>Model</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelRelationBelongsTo.html'>ModelRelationBelongsTo</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelRelationBelongsToCursor.html'>ModelRelationBelongsToCursor</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelRelationHasMany.html'>ModelRelationHasMany</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelRelationHasManyCursor.html'>ModelRelationHasManyCursor</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelRelationHasManyThrough.html'>ModelRelationHasManyThrough</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelRelationHasManyThroughCursor.html'>ModelRelationHasManyThroughCursor</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelRelationHasOne.html'>ModelRelationHasOne</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelRelationHasOneCursor.html'>ModelRelationHasOneCursor</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelRelation.html'>ModelRelation</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelRelationCursor.html'>ModelRelationCursor</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelScope.html'>ModelScope</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelValidatorFormat.html'>ModelValidatorFormat</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelValidatorLength.html'>ModelValidatorLength</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelValidatorPresence.html'>ModelValidatorPresence</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelValidatorSet.html'>ModelValidatorSet</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelValidatorUniqueness.html'>ModelValidatorUniqueness</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ModelValidator.html'>ModelValidator</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelQueue.html'>ModelQueue</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelAttachment.html'>ModelAttachment</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelAttributes.html'>ModelAttributes</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelCursorFinders.html'>ModelCursorFinders</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelDirty.html'>ModelDirty</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelHierarchical.html'>ModelHierarchical</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelIndexing.html'>ModelIndexing</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelInheritance.html'>ModelInheritance</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelMassAssignment.html'>ModelMassAssignment</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelMetadata.html'>ModelMetadata</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelNestedAttributes.html'>ModelNestedAttributes</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelPersistence.html'>ModelPersistence</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelRelations.html'>ModelRelations</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelScopes.html'>ModelScopes</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelSerialization.html'>ModelSerialization</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelTimestamp.html'>ModelTimestamp</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelTransactions.html'>ModelTransactions</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ModelValidations.html'>ModelValidations</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ </ul>
+ </ul>
+ <ul>
+ <li class='letter'>n</li>
+ <ul>
+ <li>
+ <a href='classes/Tower/NetConnection.html'>NetConnection</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetConnection.html'>NetConnection</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetAgent.html'>NetAgent</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetConnectionBase.html'>NetConnectionBase</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetCookies.html'>NetCookies</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetParamArray.html'>NetParamArray</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetParamBoolean.html'>NetParamBoolean</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetParamDate.html'>NetParamDate</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetParamGeo.html'>NetParamGeo</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetParamNumber.html'>NetParamNumber</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetParamOrder.html'>NetParamOrder</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetParamString.html'>NetParamString</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetParam.html'>NetParam</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetRequest.html'>NetRequest</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetResponse.html'>NetResponse</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetRouteDSL.html'>NetRouteDSL</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetRoute.html'>NetRoute</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/NetUrl.html'>NetUrl</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ </ul>
+ </ul>
+ <ul>
+ <li class='letter'>s</li>
+ <ul>
+ <li>
+ <a href='classes/Tower/StoreLocalStorage.html'>StoreLocalStorage</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreCassandra.html'>StoreCassandra</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreCouchDB.html'>StoreCouchDB</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreFileSystem.html'>StoreFileSystem</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreMongodb.html'>StoreMongodb</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreMySQL.html'>StoreMySQL</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StorePostgreSQL.html'>StorePostgreSQL</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreRedis.html'>StoreRedis</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreRiak.html'>StoreRiak</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreS3.html'>StoreS3</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreSQLite3.html'>StoreSQLite3</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreBatch.html'>StoreBatch</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreMemory.html'>StoreMemory</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreNeo4j.html'>StoreNeo4j</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/Store.html'>Store</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/StoreTransaction.html'>StoreTransaction</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/SupportCallbacksChain.html'>SupportCallbacksChain</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/SupportCallback.html'>SupportCallback</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreTransportAjax.html'>StoreTransportAjax</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreMongodbConfiguration.html'>StoreMongodbConfiguration</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreMongodbDatabase.html'>StoreMongodbDatabase</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreMongodbFinders.html'>StoreMongodbFinders</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreMongodbPersistence.html'>StoreMongodbPersistence</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreMongodbSerialization.html'>StoreMongodbSerialization</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreCallbacks.html'>StoreCallbacks</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreMemoryFinders.html'>StoreMemoryFinders</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreMemoryPersistence.html'>StoreMemoryPersistence</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreMemorySerialization.html'>StoreMemorySerialization</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreModifiers.html'>StoreModifiers</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreOperators.html'>StoreOperators</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/StoreSerializerString.html'>StoreSerializerString</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/SupportCallbacks.html'>SupportCallbacks</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/SupportI18n.html'>SupportI18n</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ </ul>
+ </ul>
+ <ul>
+ <li class='letter'>v</li>
+ <ul>
+ <li>
+ <a href='classes/Tower/ViewComponent.html'>ViewComponent</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ViewFormBuilder.html'>ViewFormBuilder</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ViewFormField.html'>ViewFormField</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ViewFormFieldset.html'>ViewFormFieldset</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ViewForm.html'>ViewForm</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/ViewTable.html'>ViewTable</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='classes/Tower/View.html'>View</a>
+ <small>
+ (Tower)
+ </small>
+ </li>
+ <li>
+ <a href='mixins/Tower/ViewRendering.html'>ViewRendering</a>
+ <small>