trellis 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (292) hide show
  1. data/.git/COMMIT_EDITMSG +1 -0
  2. data/.git/HEAD +1 -0
  3. data/.git/config +9 -0
  4. data/.git/description +1 -0
  5. data/.git/hooks/applypatch-msg.sample +15 -0
  6. data/.git/hooks/commit-msg.sample +24 -0
  7. data/.git/hooks/post-commit.sample +8 -0
  8. data/.git/hooks/post-receive.sample +15 -0
  9. data/.git/hooks/post-update.sample +8 -0
  10. data/.git/hooks/pre-applypatch.sample +14 -0
  11. data/.git/hooks/pre-commit.sample +18 -0
  12. data/.git/hooks/pre-rebase.sample +169 -0
  13. data/.git/hooks/prepare-commit-msg.sample +36 -0
  14. data/.git/hooks/update.sample +107 -0
  15. data/.git/index +0 -0
  16. data/.git/info/exclude +6 -0
  17. data/.git/logs/HEAD +1 -0
  18. data/.git/logs/refs/heads/master +1 -0
  19. data/.git/logs/refs/remotes/origin/master +1 -0
  20. data/.git/objects/01/2368d4dd3162ed570e6c1423ecb07a6a35f8c0 +0 -0
  21. data/.git/objects/02/238c88c522b88e71529495460cc5c2c8abe110 +0 -0
  22. data/.git/objects/07/03d3b123189f1da72d3889d9340e681841c96d +0 -0
  23. data/.git/objects/0b/3935fdbf3ce8d37e6cb2a6ec94edaccb1c58dc +0 -0
  24. data/.git/objects/0f/ecd1ad35f280c874ce070b7a97a4c1f86ace54 +0 -0
  25. data/.git/objects/12/61911b063b7e6883c5e9db7ab4396183f6f2b5 +0 -0
  26. data/.git/objects/13/0b7e2d214ec198d07aeed5b462597670ce85ad +0 -0
  27. data/.git/objects/13/214d40f02b63f1233fd7881b1df9bb75d9c0a7 +0 -0
  28. data/.git/objects/14/7522bdc96af0b578935d81c1a7347b40573940 +0 -0
  29. data/.git/objects/16/a7fde706fe92b3548254d29722f5ca311ce63b +2 -0
  30. data/.git/objects/16/fe580663cc29d141bf416dff5bf21bf4ea42a3 +0 -0
  31. data/.git/objects/17/2d55806918bafb4e701515edb27147a4ef6498 +0 -0
  32. data/.git/objects/17/686ef1882ed6c3c07b781fab18739b1c5e48bd +0 -0
  33. data/.git/objects/17/824053c41a2cb523303e20cac42f66f9ca2134 +0 -0
  34. data/.git/objects/18/68448c5f88bc73b2fef6b8f3aa75b663013a3a +1 -0
  35. data/.git/objects/1a/6d9051dc4c7db10bdcf5e17c5cb717b072d30a +0 -0
  36. data/.git/objects/1a/8bdb445fb5668dcd1309cb9de5dedf846c822f +0 -0
  37. data/.git/objects/1b/6fa67b70358fdb82eabcd7ef3bc46d518d0426 +0 -0
  38. data/.git/objects/1c/f6510ed08a274fb3292d40557cebb3e7090767 +0 -0
  39. data/.git/objects/1d/e661ce11d5335e5dd7968ef5698e2eb164eb52 +0 -0
  40. data/.git/objects/1e/301ee672d6040e734af6d0a5491185129d7b67 +0 -0
  41. data/.git/objects/21/2201d46200f13d23d8199bd4a7ecc9165205b3 +0 -0
  42. data/.git/objects/22/f687370babdf38d224d2a9ff039707e8d0aac1 +0 -0
  43. data/.git/objects/24/202d2de95dc31f5f1802e629a16ad45b723267 +0 -0
  44. data/.git/objects/25/4c5b6b8d211d8b9f07310fd342fd7b078a81af +0 -0
  45. data/.git/objects/25/5832653fde9e9748855347fe7bce013aa0a6c7 +0 -0
  46. data/.git/objects/25/806945c89b4b5adb8c8676c308e4653361109c +5 -0
  47. data/.git/objects/26/cb8deaca28bf275769cbb71b88e53a44adb9ca +0 -0
  48. data/.git/objects/2e/1c13fb5f154f89cccd4c645540a2ec8ee0f57a +0 -0
  49. data/.git/objects/2f/437425b2c085bb529379e409d6b4bc7f9f9fba +0 -0
  50. data/.git/objects/2f/7cf4a25937b71f3de52e70c7a47cb2f7da07ea +0 -0
  51. data/.git/objects/31/31bdbbac6e6e7e24fd6ea84332461f67e6e5b6 +0 -0
  52. data/.git/objects/32/02e02de478263912b729283eabc7cdab8a8037 +0 -0
  53. data/.git/objects/32/839ed9baa8c800d9033655d1ee995499825fb5 +0 -0
  54. data/.git/objects/34/2e479c61796125b0e025b483401ec12f3c5824 +2 -0
  55. data/.git/objects/36/7acb017aebab3f627a5208c25885c21fa7fdbb +0 -0
  56. data/.git/objects/38/12910d2e2a8e6eeb79a399d20751675d3fbe77 +0 -0
  57. data/.git/objects/38/3fe1e1a07537db6e0f39c6005b7b4e40fa5ccd +0 -0
  58. data/.git/objects/39/5ef328bc94df9191f4d80a77503a5be9f1f673 +0 -0
  59. data/.git/objects/39/dc76dc096fdf737e9f4f7062b78cbf4ab9628f +0 -0
  60. data/.git/objects/3b/09eb196140b471556ed4c3987c0bc739733617 +0 -0
  61. data/.git/objects/3b/9f97f1bf55834832a92bab1ab900918dc49570 +0 -0
  62. data/.git/objects/40/5ffd3925b39dd905638ec24640dd8efa27cc1b +0 -0
  63. data/.git/objects/42/4a5f37c6fe3a7cac54b0f85688c1cce7da9cdf +0 -0
  64. data/.git/objects/44/9e23363d4e20da6a67be7ab78fc610b4e9852a +0 -0
  65. data/.git/objects/48/90bb5d241cecaa30b28148c920b833056c7508 +0 -0
  66. data/.git/objects/4c/558c43676410a2c0a7d5c7b94fca18923a9af1 +0 -0
  67. data/.git/objects/4f/bf572175dd5245104679ff8f676f6a34466c29 +0 -0
  68. data/.git/objects/53/8583edf00c9f656b32149a0e69e030371737c5 +0 -0
  69. data/.git/objects/5b/8a2c4bf7bb56ae199414096dbda21fd4b8cd63 +0 -0
  70. data/.git/objects/5c/9fe8ff998d56dc076657ef88ee9f784ec160f9 +0 -0
  71. data/.git/objects/5f/8441f9d3507587940f31af04dd9fd5911d2812 +0 -0
  72. data/.git/objects/61/4f2752550e63b793e31dcf98b5ea26c32eb0be +0 -0
  73. data/.git/objects/65/801b0fabdfd673861dbb2ac134d438ab2cc5e4 +3 -0
  74. data/.git/objects/66/2746dffaddbcd311f4ac070b5b9bddcd8894a7 +0 -0
  75. data/.git/objects/69/1ed3b65603a0d0dabfb66720e7163664be78f5 +0 -0
  76. data/.git/objects/69/3dc3b6037df8c1c8dfda916d649e7975481124 +0 -0
  77. data/.git/objects/69/67538427b3a371b33c01c72726ac7e67a04c39 +0 -0
  78. data/.git/objects/69/6cd6c3508e2adcc68829497884ff3d4b774dc2 +0 -0
  79. data/.git/objects/69/6ee93917040308ccd0bfc245d63c1cbeb23dae +0 -0
  80. data/.git/objects/6a/3ac317746a8a2cfc88f3580bbd2b03dc0d50b5 +0 -0
  81. data/.git/objects/6d/6ba435839a65b96cb3f7584a40dd3767a0990f +0 -0
  82. data/.git/objects/6f/32c190a651a82caeefeb55eb797fc5daf05426 +0 -0
  83. data/.git/objects/71/fecbce1bec36eaf4de655763d4bb7ceffc991d +0 -0
  84. data/.git/objects/72/01d78a9e90347fd2f7790f9e8665587791d853 +0 -0
  85. data/.git/objects/73/6c97d6a551363ba4a4956408ba228fcab7f91f +0 -0
  86. data/.git/objects/75/3264271e935e18f4eada49aa1818c6fb9e6abb +0 -0
  87. data/.git/objects/75/cc7d390b4a565495cbdc5a08d4479e7e8dbfeb +0 -0
  88. data/.git/objects/76/7c0c96f68b9ccec34ae538045a63bbe4f97d3e +0 -0
  89. data/.git/objects/7b/47fe9b1ab9f2692b9706054de706430089ecd4 +0 -0
  90. data/.git/objects/7c/73144ef6847d1bc2315aee0925c0e5cf5c09d1 +0 -0
  91. data/.git/objects/7d/9c177c155386606aa1024d5cb020a097eea64a +0 -0
  92. data/.git/objects/7d/e9a3296007c09ba9b7bc1802e1c5d9ad1d5dbb +0 -0
  93. data/.git/objects/7e/b73d408147c8d84881109189a9724292abcb8d +0 -0
  94. data/.git/objects/82/0e3bf5449a8f6b8eb637a653dcb2dc387b393c +0 -0
  95. data/.git/objects/83/a10ce96763cb30d0b81425e9372f89c52f4c9f +0 -0
  96. data/.git/objects/83/bdb801e78444d59225f83cf2f336f114cd23cf +0 -0
  97. data/.git/objects/85/24e583e822abc18b1ffdd0aa356c9c079b5548 +0 -0
  98. data/.git/objects/88/b46cc8de5237897d4ba5023d3efdc83fec4f7c +0 -0
  99. data/.git/objects/89/5eea66474f48a2cbf643ad0ef266fd26f9d2a3 +0 -0
  100. data/.git/objects/8a/539c5fc35d5b770d67241d2ccb6c6855df6a43 +0 -0
  101. data/.git/objects/8a/82cdbfb20cc58fdffe4e13b70b55977deb92c6 +0 -0
  102. data/.git/objects/8b/2b537442e4ac8719ffa71b3ae0c707133df06f +0 -0
  103. data/.git/objects/8c/2a45f0c81284a081f8d7980e9a54210a9dd52c +0 -0
  104. data/.git/objects/8e/10355b4ab312450031966107ef6a65b13833ee +0 -0
  105. data/.git/objects/90/f6c76767ae725f15fa6790dcb6afd1719fa0e2 +0 -0
  106. data/.git/objects/92/92b696aba9840c089241c68d4c6ca14be38a64 +2 -0
  107. data/.git/objects/93/e03faa6906892434fa9f2ad230c4ececc64055 +0 -0
  108. data/.git/objects/93/eca2e28d80fda45d327fdfc6c39ae690af41cd +0 -0
  109. data/.git/objects/95/92fe63bd5403654730cdec76cbf116ef83bbff +0 -0
  110. data/.git/objects/96/bc6dd471c1c188a2eb4308bcc3ca4e6c8faac8 +0 -0
  111. data/.git/objects/96/d855221a9ff4fba57d2b70680b57bd5115cfde +0 -0
  112. data/.git/objects/97/4ec92b2b9eb01a73fb57dc78d463cafdda69a7 +0 -0
  113. data/.git/objects/97/b7ec01ebe089832a0972d20b0a40d54456985c +2 -0
  114. data/.git/objects/97/fa6aaae4cfc7654feb39971e7aee5c41ed1679 +1 -0
  115. data/.git/objects/98/18351c6685a1df5d23686e6346d11d261cc6f0 +0 -0
  116. data/.git/objects/98/3d3b7e55cbbce2f2a52c6e6d830a5dca7b4d42 +0 -0
  117. data/.git/objects/a2/e551049a5388112c21e7f3a4a720bf720601fa +0 -0
  118. data/.git/objects/a3/7066bea4fae90d34761a3ebb3f8a348d94eba1 +0 -0
  119. data/.git/objects/a6/c99619145d1b9b75aa15ca04fbe4db0b2ee79b +0 -0
  120. data/.git/objects/aa/e2234d0a8c1485096c7a7de039eceb4e019e13 +0 -0
  121. data/.git/objects/b0/3b52f4269c9719e02ecd6caabd8aff5adf3aac +0 -0
  122. data/.git/objects/b1/50dbbd89f825302a9e82d8fdd66f238b8e6fc4 +0 -0
  123. data/.git/objects/b4/545fbe393aaa18f1c48de4d9f68f64ebf09ddc +0 -0
  124. data/.git/objects/b6/8691404e088692929d40b988b993f815d76756 +0 -0
  125. data/.git/objects/b7/daa3d844ef5f5cd917084e48edd82e67f8f476 +0 -0
  126. data/.git/objects/bf/4232281dba5a0f17e8b5c16b9cbd0f52274fa8 +0 -0
  127. data/.git/objects/bf/9b84d10f19188beffe5ee99e6f5af035ba77d3 +2 -0
  128. data/.git/objects/c0/06e664b306145de804f74ab27550d62a92f58a +1 -0
  129. data/.git/objects/c2/2806b16775f66453012d085d21fb8698521ea9 +0 -0
  130. data/.git/objects/c2/7f6559350f7adb19d43742b55b2f91d07b6550 +0 -0
  131. data/.git/objects/c3/833df21ed674a77374fd40ed931f900134d38b +0 -0
  132. data/.git/objects/c3/b9da021eb76abad0b17ad6c4be75595e41a7e6 +0 -0
  133. data/.git/objects/c5/ca6b7e3561ea88aba1712aabb984d1167787f1 +0 -0
  134. data/.git/objects/c6/39f65e1f43c75b7f57c5ab28623d295dfb2afd +0 -0
  135. data/.git/objects/c8/6f05fa5539f8e69e94850d1cd917919ff581be +0 -0
  136. data/.git/objects/cb/5e499c8dcc6f2901014a08e74f04b7a4bd6596 +0 -0
  137. data/.git/objects/cc/1289d25eeee6ba31b4e406372cb9abf969fc6f +0 -0
  138. data/.git/objects/cc/784e1b49111c42fa7eae10ad0e788186e672d1 +0 -0
  139. data/.git/objects/cc/bcae254dad515d7ef01a461980544e4483c41e +0 -0
  140. data/.git/objects/ce/bfadad3a7c17148998e04275e6d0d1cf1b2e1e +0 -0
  141. data/.git/objects/ce/f3335522abdc47a2c94be70455dcfaa9a51a27 +0 -0
  142. data/.git/objects/cf/6add7ea568d3d90d6a1f8afb0898b0119b14ff +0 -0
  143. data/.git/objects/d0/719abd196033fec0e4cbe2af68a26ca435389c +0 -0
  144. data/.git/objects/d1/ce63ff0eaec4dba419e5547f99195dfb9b5b20 +0 -0
  145. data/.git/objects/d2/c3feb3c74b892cca0049c0aced6ce786a784c8 +0 -0
  146. data/.git/objects/d7/8a91da13413419da71b539a3c6c7df4d8a2458 +0 -0
  147. data/.git/objects/d8/c7bed2b1357d54b6935536a8a51a3c73d535b4 +0 -0
  148. data/.git/objects/da/c3a1277ccb4806011e33eb32c5609cc45c46f2 +0 -0
  149. data/.git/objects/dc/3f920f4b937d0e2ac512f0bb31d477624c46d5 +0 -0
  150. data/.git/objects/dc/6c389abf5bd0d7b9be2a6bb6af90738a410e59 +0 -0
  151. data/.git/objects/df/07c423309f39c4d5570b0fad65dff23af654ae +0 -0
  152. data/.git/objects/e2/93a5c9e2257b9f3fcb8fa5d5c8147a2f07ba1b +0 -0
  153. data/.git/objects/e4/8464df56bf487e96e21ea99487330266dae3c9 +0 -0
  154. data/.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  155. data/.git/objects/e8/0c13a1d1f62756fb9f1e4fb9f7512e5b8c5816 +0 -0
  156. data/.git/objects/e9/b8ade2125b2615ddc4c8043940c40ed36215c9 +0 -0
  157. data/.git/objects/ed/59a7599a81ef7ea7c230c3332345a3484febf8 +0 -0
  158. data/.git/objects/f0/d2a74226877e9a28af814d0d3727e4a3487439 +0 -0
  159. data/.git/objects/f0/f3ba7264f1d8e60eb93a907092af98fdc248e4 +0 -0
  160. data/.git/objects/f1/cdcc7ff2dc6298318523b2c4e425f515a58bf7 +3 -0
  161. data/.git/objects/f4/45c96f406f4d2f9839b3fe2fe8bc7f943ab469 +0 -0
  162. data/.git/objects/f7/eef7ce0a650d6f0c85dc4982f481da7bd44362 +0 -0
  163. data/.git/objects/f9/0abf96c5059ce1ba115f73bc9cf33e4663b3e1 +0 -0
  164. data/.git/objects/f9/cf7ae572eaebbd63f809f16a5ef14b9c679790 +0 -0
  165. data/.git/objects/fc/300df53fe2c9467210e2fd4c2f34e1c9c7c89a +0 -0
  166. data/.git/objects/fc/45546596ab8debc4c9f49a7abc7fc14a7bcc7f +4 -0
  167. data/.git/objects/fc/68d89167f69614eda17bd56dfccb4355d818e6 +0 -0
  168. data/.git/objects/fc/e4c02bb132e73b3cb957da182db7b75a47c242 +0 -0
  169. data/.git/objects/fe/be283da7f326344013f1fc847c12c8f29ab6ef +0 -0
  170. data/.git/refs/heads/master +1 -0
  171. data/.git/refs/remotes/origin/master +1 -0
  172. data/.gitignore +5 -0
  173. data/History.txt +4 -0
  174. data/License.txt +22 -0
  175. data/Manifest.txt +291 -0
  176. data/README +156 -0
  177. data/README.txt +156 -0
  178. data/Rakefile +4 -0
  179. data/config/hoe.rb +83 -0
  180. data/config/requirements.rb +15 -0
  181. data/examples/crud_components/html/address_view_edit.xhtml +19 -0
  182. data/examples/crud_components/html/addresses.xhtml +20 -0
  183. data/examples/crud_components/html/images/destroy.gif +0 -0
  184. data/examples/crud_components/html/images/edit.gif +0 -0
  185. data/examples/crud_components/html/images/field-error-marker.gif +0 -0
  186. data/examples/crud_components/html/images/sort-asc.png +0 -0
  187. data/examples/crud_components/html/images/sort-desc.png +0 -0
  188. data/examples/crud_components/html/images/sortable.png +0 -0
  189. data/examples/crud_components/html/style/trellis.css +416 -0
  190. data/examples/crud_components/source/crud_components.rb +77 -0
  191. data/examples/crud_components/source/domain.rb +6 -0
  192. data/examples/examples.txt +65 -0
  193. data/examples/flickr/source/flickr.rb +87 -0
  194. data/examples/guest_book/source/guest_book.rb +61 -0
  195. data/examples/hangman/html/game_over.xhtml +23 -0
  196. data/examples/hangman/html/guess.xhtml +47 -0
  197. data/examples/hangman/html/images/a_disabled.png +0 -0
  198. data/examples/hangman/html/images/a_enabled.png +0 -0
  199. data/examples/hangman/html/images/b_disabled.png +0 -0
  200. data/examples/hangman/html/images/b_enabled.png +0 -0
  201. data/examples/hangman/html/images/c_disabled.png +0 -0
  202. data/examples/hangman/html/images/c_enabled.png +0 -0
  203. data/examples/hangman/html/images/d_disabled.png +0 -0
  204. data/examples/hangman/html/images/d_enabled.png +0 -0
  205. data/examples/hangman/html/images/e_disabled.png +0 -0
  206. data/examples/hangman/html/images/e_enabled.png +0 -0
  207. data/examples/hangman/html/images/f_disabled.png +0 -0
  208. data/examples/hangman/html/images/f_enabled.png +0 -0
  209. data/examples/hangman/html/images/g_disabled.png +0 -0
  210. data/examples/hangman/html/images/g_enabled.png +0 -0
  211. data/examples/hangman/html/images/h_disabled.png +0 -0
  212. data/examples/hangman/html/images/h_enabled.png +0 -0
  213. data/examples/hangman/html/images/i_disabled.png +0 -0
  214. data/examples/hangman/html/images/i_enabled.png +0 -0
  215. data/examples/hangman/html/images/j_disabled.png +0 -0
  216. data/examples/hangman/html/images/j_enabled.png +0 -0
  217. data/examples/hangman/html/images/k_disabled.png +0 -0
  218. data/examples/hangman/html/images/k_enabled.png +0 -0
  219. data/examples/hangman/html/images/l_disabled.png +0 -0
  220. data/examples/hangman/html/images/l_enabled.png +0 -0
  221. data/examples/hangman/html/images/m_disabled.png +0 -0
  222. data/examples/hangman/html/images/m_enabled.png +0 -0
  223. data/examples/hangman/html/images/n_disabled.png +0 -0
  224. data/examples/hangman/html/images/n_enabled.png +0 -0
  225. data/examples/hangman/html/images/o_disabled.png +0 -0
  226. data/examples/hangman/html/images/o_enabled.png +0 -0
  227. data/examples/hangman/html/images/p_disabled.png +0 -0
  228. data/examples/hangman/html/images/p_enabled.png +0 -0
  229. data/examples/hangman/html/images/q_disabled.png +0 -0
  230. data/examples/hangman/html/images/q_enabled.png +0 -0
  231. data/examples/hangman/html/images/r_disabled.png +0 -0
  232. data/examples/hangman/html/images/r_enabled.png +0 -0
  233. data/examples/hangman/html/images/s_disabled.png +0 -0
  234. data/examples/hangman/html/images/s_enabled.png +0 -0
  235. data/examples/hangman/html/images/t_disabled.png +0 -0
  236. data/examples/hangman/html/images/t_enabled.png +0 -0
  237. data/examples/hangman/html/images/u_disabled.png +0 -0
  238. data/examples/hangman/html/images/u_enabled.png +0 -0
  239. data/examples/hangman/html/images/v_disabled.png +0 -0
  240. data/examples/hangman/html/images/v_enabled.png +0 -0
  241. data/examples/hangman/html/images/w_disabled.png +0 -0
  242. data/examples/hangman/html/images/w_enabled.png +0 -0
  243. data/examples/hangman/html/images/x_disabled.png +0 -0
  244. data/examples/hangman/html/images/x_enabled.png +0 -0
  245. data/examples/hangman/html/images/y_disabled.png +0 -0
  246. data/examples/hangman/html/images/y_enabled.png +0 -0
  247. data/examples/hangman/html/images/z_disabled.png +0 -0
  248. data/examples/hangman/html/images/z_enabled.png +0 -0
  249. data/examples/hangman/html/resources/word_list.txt +35 -0
  250. data/examples/hangman/html/start.xhtml +18 -0
  251. data/examples/hangman/html/style/hangman.css +27 -0
  252. data/examples/hangman/source/hangman.rb +71 -0
  253. data/examples/hilo/html/game_over.xhtml +15 -0
  254. data/examples/hilo/html/guess.xhtml +18 -0
  255. data/examples/hilo/html/start.xhtml +17 -0
  256. data/examples/hilo/source/hilo.rb +51 -0
  257. data/examples/simplest/html/start.xhtml +0 -0
  258. data/examples/simplest/source/simplest.rb +39 -0
  259. data/examples/stateful_counters/html/counters.xhtml +49 -0
  260. data/examples/stateful_counters/html/style/main.css +441 -0
  261. data/examples/stateful_counters/source/stateful_counters.rb +68 -0
  262. data/lib/trellis/core_components.rb +870 -0
  263. data/lib/trellis/jquery.rb +38 -0
  264. data/lib/trellis/logging.rb +60 -0
  265. data/lib/trellis/trellis.rb +701 -0
  266. data/lib/trellis/utils.rb +209 -0
  267. data/lib/trellis/version.rb +35 -0
  268. data/lib/trellis.rb +27 -0
  269. data/script/console +10 -0
  270. data/script/destroy +14 -0
  271. data/script/generate +14 -0
  272. data/script/txt2html +82 -0
  273. data/setup.rb +1585 -0
  274. data/tasks/deployment.rake +34 -0
  275. data/tasks/environment.rake +7 -0
  276. data/tasks/rspec.rake +21 -0
  277. data/tasks/website.rake +17 -0
  278. data/test/application_spec.rb +79 -0
  279. data/test/component_spec.rb +88 -0
  280. data/test/core_extensions_spec.rb +108 -0
  281. data/test/fixtures/application_spec_applications.rb +51 -0
  282. data/test/page_spec.rb +46 -0
  283. data/test/renderer_spec.rb +12 -0
  284. data/test/router_spec.rb +52 -0
  285. data/test/spec.opts +1 -0
  286. data/test/spec_helper.rb +16 -0
  287. data/website/index.html +124 -0
  288. data/website/index.txt +119 -0
  289. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  290. data/website/stylesheets/screen.css +138 -0
  291. data/website/template.html.erb +48 -0
  292. metadata +512 -0
@@ -0,0 +1,416 @@
1
+ /* Tapestry styles all start with "t-" */
2
+ DIV.t-error {
3
+ border: 1px solid red;
4
+ padding: 0px;
5
+ margin: 4px 0px;
6
+ }
7
+
8
+ DIV.t-error DIV {
9
+ padding: 2px;
10
+ display: block;
11
+ margin: 0px;
12
+ background-color: red;
13
+ color: white;
14
+ font-weight: bold;
15
+ }
16
+
17
+ DIV.t-error UL {
18
+ margin: 2px 0px;
19
+ background-color: white;
20
+ color: red;
21
+ }
22
+
23
+ DIV.t-error LI {
24
+ margin-left: 20px;
25
+ }
26
+
27
+ HTML>BODY DIV.t-error LI {
28
+ margin-left: -20px;
29
+ }
30
+
31
+ .t-invisible {
32
+ display: none;
33
+ }
34
+
35
+ LABEL.t-error {
36
+ color: red;
37
+ }
38
+
39
+ INPUT.t-error, TEXTAREA.t-error {
40
+ border-color: red;
41
+ font-style: italic;
42
+ color: red;
43
+ }
44
+
45
+ IMG.t-error-icon {
46
+ margin-left: 4px;
47
+ }
48
+
49
+ IMG.t-sort-icon {
50
+ margin-left: 4px;
51
+ }
52
+
53
+ DIV.t-exception-message {
54
+ font-style: italic;
55
+ font-size: 12pt;
56
+ border: thin dotted silver;
57
+ margin: 5px 0px;
58
+ padding: 3px;
59
+ }
60
+
61
+ DIV.t-exception-report, DIV.t-env-data {
62
+ font-family: "Trebuchet MS", Arial, sans-serif;
63
+ }
64
+
65
+ DIV.t-exception-report LI {
66
+ margin-left: -40px;
67
+ }
68
+
69
+ DIV.t-exception-report DT, DIV.t-env-data DT {
70
+ color: green;
71
+ padding-left: 2px;
72
+ background-color: #FFFFCF;
73
+ }
74
+
75
+ DIV.t-exception-report LI {
76
+ list-style: none;
77
+ }
78
+
79
+ SPAN.t-exception-class-name {
80
+ display: block;
81
+ margin-top: 15px;
82
+ font-size: 12pt;
83
+ background-color: #E1E1E1;
84
+ color: blue;
85
+ padding: 2px 3px;
86
+ font-weight: bold;
87
+ }
88
+
89
+ UL.t-stack-trace LI {
90
+ font-family: Monaco, Times, monospace;
91
+ font-size: 10pt;
92
+ margin-left: -25px;
93
+ list-style: square;
94
+ }
95
+
96
+ LI.t-usercode-frame {
97
+ font-weight: bold;
98
+ color: blue;
99
+ }
100
+
101
+ H1.t-exception-report {
102
+ font-family: "Trebuchet MS", Arial, sans-serif;
103
+ color: red;
104
+ }
105
+
106
+ DIV.t-exception-report DT:after {
107
+ content: ":";
108
+ }
109
+
110
+ DIV.t-exception-report DD, DIV.t-env-data DD {
111
+ margin-left: 10px;
112
+ }
113
+
114
+ TABLE.t-data-table {
115
+ border-collapse: collapse;
116
+ margin: 0px;
117
+ padding: 2px;
118
+ }
119
+
120
+ TABLE.t-data-table TH {
121
+ background-color: black;
122
+ color: white;
123
+ }
124
+
125
+ TABLE.t-data-table TD {
126
+ border: 1px solid silver;
127
+ margin: 0px;
128
+ }
129
+
130
+ DIV.t-beaneditor, DIV.t-beandisplay {
131
+ display: block;
132
+ background: #ffc;
133
+ border: 2px outset brown;
134
+ padding: 2px;
135
+ font-family: "Trebuchet MS", Arial, sans-serif;
136
+ }
137
+
138
+ DIV.t-beandisplay {
139
+ background: #CCBE99;
140
+ border: 2px outset black;
141
+ width: auto;
142
+ }
143
+
144
+ DIV.t-beaneditor-row {
145
+ padding: 4px 0px 2px 0px;
146
+ }
147
+
148
+ DIV.t-beaneditor-row LABEL:after {
149
+ content: ":";
150
+ }
151
+
152
+ DIV.t-beandisplay-row {
153
+ clear: both;
154
+ }
155
+
156
+ DIV.t-beaneditor-row LABEL, DIV.t-beandisplay DIV.t-beandisplay-label {
157
+ width: 250px;
158
+ display: block;
159
+ float: left;
160
+ text-align: right;
161
+ clear: left;
162
+ padding-right: 3px;
163
+ vertical-align: middle;
164
+ }
165
+
166
+ INPUT.t-number {
167
+ text-align: right;
168
+ }
169
+
170
+ DIV.t-beandisplay DIV.t-beandisplay-label {
171
+ padding-right: 5px;
172
+ }
173
+
174
+ TABLE.t-data-grid THEAD TR {
175
+ color: white;
176
+ background-color: #809FFF;
177
+ }
178
+
179
+ TABLE.t-data-grid THEAD TR TH {
180
+ text-align: left;
181
+ padding: 3px;
182
+ white-space: nowrap;
183
+ border-right: 1px solid silver;
184
+ border-bottom: 1px solid silver;
185
+ }
186
+
187
+ TABLE.t-data-grid {
188
+ border-collapse: collapse;
189
+ border-left: 1px solid silver;
190
+ }
191
+
192
+ TABLE.t-data-grid TBODY TR TD {
193
+ border-right: 1px solid silver;
194
+ border-bottom: 1px solid silver;
195
+ padding: 2px;
196
+ }
197
+
198
+ DIV.t-data-grid {
199
+ font-family: "Trebuchet MS", Arial, sans-serif;
200
+ }
201
+
202
+ DIV.t-data-grid-pager {
203
+ margin: 8px 0px;
204
+ }
205
+
206
+ DIV.t-data-grid-pager A, DIV.t-data-grid-pager SPAN.current {
207
+ text-decoration: none;
208
+ color: black;
209
+ padding: 2px 5px;
210
+ font-size: medium;
211
+ border: 1px solid silver;
212
+ margin-right: 5px;
213
+ }
214
+
215
+ DIV.t-data-grid-pager A:hover {
216
+ border: 1px solid black;
217
+ }
218
+
219
+ DIV.t-data-grid-pager SPAN.current {
220
+ color: white;
221
+ background-color: #809FFF;
222
+ }
223
+
224
+ TABLE.t-data-grid TR TH A {
225
+ color: white;
226
+ }
227
+
228
+ IMG {
229
+ border: none;
230
+ }
231
+
232
+ DIV.t-env-data-section {
233
+ padding-left: 5px;
234
+ }
235
+
236
+ DIV.t-env-data DD, DIV.t-exception-report DD {
237
+ margin-left: 25px;
238
+ margin-bottom: 10px;
239
+ }
240
+
241
+ DIV.t-env-data LI {
242
+ margin-left: -25px;
243
+ }
244
+
245
+ DIV.t-env-data-section {
246
+ font-size: 12pt;
247
+ background-color: #E1E1E1;
248
+ color: blue;
249
+ padding: 2px 3px;
250
+ font-weight: bold;
251
+ }
252
+
253
+ TABLE.t-location-outer {
254
+ padding: 5px;
255
+ border-collapse: collapse;
256
+ border: 1px solid black;
257
+ width: 100%;
258
+ }
259
+
260
+ TD.t-location-line {
261
+ width: 40px;
262
+ text-align: right;
263
+ padding: 0px;
264
+ background-color: #E1E1E1;
265
+ padding-right: 3px;
266
+ border-right: 1px solid black;
267
+ }
268
+
269
+ TD.t-location-content {
270
+ border-top: 1px solid silver;
271
+ border-right: 1px solid black;
272
+ white-space: pre;
273
+ }
274
+
275
+ TD.t-location-current {
276
+ background-color: #FFFFCF;
277
+ }
278
+
279
+ TD.t-location-content-first {
280
+ border-top: 1px solid black;
281
+ }
282
+
283
+ DIV.t-palette {
284
+ display: inline;
285
+ }
286
+
287
+ DIV.t-palette SELECT {
288
+ margin-bottom: 2px;
289
+ width: 200px;
290
+ }
291
+
292
+ DIV.t-palette-title {
293
+ color: white;
294
+ background-color: #809FFF;
295
+ text-align: center;
296
+ font-weight: bold;
297
+ margin-bottom: 3px;
298
+ display: block;
299
+ }
300
+
301
+ DIV.t-palette-available {
302
+ float: left;
303
+ }
304
+
305
+ DIV.t-palette-controls {
306
+ margin: 5px 5px;
307
+ float: left;
308
+ text-align: center;
309
+ }
310
+
311
+ DIV.t-palette-controls BUTTON {
312
+ display: block;
313
+ margin-bottom: 3px;
314
+ }
315
+
316
+ DIV.t-palette-controls BUTTON[disabled] IMG {
317
+ filter: alpha( opacity = 25 );
318
+ -moz-opacity: .25;
319
+ }
320
+
321
+ DIV.t-palette-selected {
322
+ float: left;
323
+ clear: right;
324
+ }
325
+
326
+ DIV.t-palette-spacer {
327
+ clear: left;
328
+ }
329
+
330
+ IMG.t-calendar-trigger {
331
+ padding-left: 3px;
332
+ cursor: pointer;
333
+ }
334
+
335
+ DIV.t-autocomplete-menu UL {
336
+ border: 2px outset #cc9933;
337
+ background-color: #cc9933;
338
+ padding: 4px 6px;
339
+ overflow: auto;
340
+ }
341
+
342
+ DIV.t-autocomplete-menu LI {
343
+ color: white;
344
+ list-style-type: none;
345
+ padding: 0px;
346
+ margin: 0px;
347
+ border-bottom: 1px solid black;
348
+ cursor: pointer;
349
+ }
350
+
351
+ DIV.t-autocomplete-menu LI.selected {
352
+ color: black;
353
+ font-weight: bold;
354
+ }
355
+
356
+ DIV.t-error-popup SPAN {
357
+ background: transparent url( 'error-bevel-left.gif' ) no-repeat;
358
+ display: block;
359
+ line-height: 28px;
360
+ margin-left: 0px;
361
+ padding: 0px 5px 10px 22px;
362
+ }
363
+
364
+ HTML>BODY DIV.t-error-popup SPAN {
365
+ background: transparent url( 'error-bevel-left.png' ) no-repeat;
366
+ }
367
+
368
+ DIV.t-error-popup {
369
+ background: transparent url( 'error-bevel-right.gif' ) no-repeat scroll top right;
370
+ cursor: pointer;
371
+ color: #FFF;
372
+ display: block;
373
+ float: left;
374
+ font: normal 12px arial, sans-serif;
375
+ height: 39px;
376
+ margin-right: 6px;
377
+ padding-right: 29px;
378
+ text-decoration: none;
379
+ }
380
+
381
+ HTML>BODY DIV.t-error-popup {
382
+ background: transparent url( 'error-bevel-right.png' ) no-repeat scroll top right;
383
+ }
384
+
385
+ UL.t-data-list LI {
386
+ list-style-type: square;
387
+ }
388
+
389
+ /* The console is used to show debugging messages. */
390
+ DIV.t-console {
391
+ position: absolute;
392
+ z-index: 1;
393
+ top: 2px;
394
+ left: 2px;
395
+ }
396
+
397
+ DIV.t-console DIV {
398
+ font-weight: bold;
399
+ cursor: pointer;
400
+ padding: 0px 2px;
401
+ }
402
+
403
+ DIV.t-console DIV.t-err {
404
+ background-color: red;
405
+ color: white;
406
+ }
407
+
408
+ DIV.t-console DIV.t-warn {
409
+ background-color: yellow;
410
+ color: black;
411
+ }
412
+
413
+ DIV.t-console DIV.t-debug {
414
+ background-color: silver;
415
+ color: black;
416
+ }
@@ -0,0 +1,77 @@
1
+ require 'rubygems'
2
+ require 'trellis'
3
+
4
+ include Trellis
5
+
6
+ module ObjectEditor
7
+
8
+ class Address
9
+ attr_accessor :aid, :first_name, :last_name, :street_1, :street_2, :city, :state, :zip, :email, :phone
10
+
11
+ def initialize(aid, first_name, last_name, street_1, street_2, city, state, zip, email, phone)
12
+ @aid, @first_name, @last_name, @street_1, @street_2, @city, @state, @zip, @email, @phone = aid, first_name, last_name, street_1, street_2, city, state, zip, email, phone
13
+ @@_addresses ||= {}
14
+ @@_addresses[self.aid] = self
15
+ end
16
+
17
+ def self.addresses
18
+ @@_addresses
19
+ end
20
+
21
+ def to_s
22
+ "#{@aid}: #{@first_name} #{@last_name}"
23
+ end
24
+
25
+ Address.new(1, "Richard", "Jeni", "10544 E Meadowhill Dr.", "", "Scottsdale", "AZ", "85255", "rjenni@platypus.com", "555-2715777")
26
+ Address.new(2, "Mitch", "Hedberg", "123 Broadway", "", "New York", "NY", "20231", "mitch@hedberg.com", "555-5551234")
27
+ Address.new(3, "Sam", "Kenison", "125 Fifth Ave.", "", "New York", "NY", "20123", "sam@kenison.com", "555-5558675")
28
+ Address.new(4, "Richard", "Prior", "321 Unfunny Street", "", "New York", "NY", "20202", "richard@prior.com", "555-2675877")
29
+ Address.new(5, "George", "Carlin", "999 Union Street", "", "New York", "NY", "20231", "george@carlin.com", "555-5592734")
30
+ Address.new(6, "Bill", "Hicks", "125 Fifth Ave.", "", "New York", "NY", "20786", "bill@hicks.com", "555-5556775")
31
+ Address.new(7, "Rodney", "Dangerfield", "13884 E. Kalil Dr.", "", "Scottsdale", "AZ", "85259", "rodney@dangerfield.com", "555-2715777")
32
+ Address.new(8, "Andy", "Kauffman", "789 Main Street", "", "New York", "NY", "20231", "andy@kauffman.com", "555-5534634")
33
+ Address.new(9, "Lenny", "Bruce", "456 Sixth Ave.", "", "New York", "NY", "45637", "lenny@bruce.com", "555-5837475")
34
+ Address.new(10, "Redd", "Foxx", "314 Rebel Force Dr.", "", "New Albany", "NY", "20212", "redd@foxx.com", "555-5557475")
35
+ end
36
+
37
+ class CrudComponentsExample < Application
38
+ home :addresses
39
+ pages :address_edit_view
40
+
41
+ map_static ['/images', '/style', '/favicon.ico']
42
+ end
43
+
44
+ class Addresses < Page
45
+ pages :address_view_edit
46
+
47
+ def before_load
48
+ @grid_addresses.columns(:first_name, :last_name, :street_1, :city, :state, :zip, :email, :phone)
49
+ @grid_addresses.sort_by :all
50
+ @grid_addresses.add_command(:name => "edit", :context => "aid", :image => "/images/edit.gif")
51
+ @all_addresses = Address.addresses.values
52
+ end
53
+
54
+ def on_edit_from_addresses id
55
+ @address_view_edit.object_editor_address.model = Address.addresses[id.to_i]
56
+ @address_view_edit
57
+ end
58
+
59
+ end
60
+
61
+ class AddressViewEdit < Page
62
+
63
+ pages :addresses
64
+
65
+ def before_load
66
+ @object_editor_address.fields(:first_name, :last_name, :street_1, :city, :state, :zip, :email, :phone)
67
+ @object_editor_address.submit_text = (@model && @model.aid ? "Save" : "Create")
68
+ @object_editor_address.on_submit { |model|
69
+ logger.info "saving the object #{model.to_s}, responding to an event in #{self}"
70
+ @addresses #navigate back to the addresses page
71
+ }
72
+ end
73
+ end
74
+
75
+ web_app = CrudComponentsExample.new
76
+ web_app.start 3019 if __FILE__ == $PROGRAM_NAME
77
+ end
@@ -0,0 +1,6 @@
1
+ #
2
+ # To change this template, choose Tools | Templates
3
+ # and open the template in the editor.
4
+
5
+
6
+ puts "Hello World"
@@ -0,0 +1,65 @@
1
+ == Trellis examples:
2
+
3
+ simplest
4
+ ========
5
+ see http://tapestry.apache.org/tapestry5/tutorial1/first.html
6
+
7
+ The simplest possible application to prove that Trellis is generating dynamic
8
+ HTML. The date and time in the middle of the page changes with every page
9
+ refresh proving that this is a live application.
10
+
11
+ guest_book
12
+ ==========
13
+ see http://wicket.apache.org/exampleguestbook.html
14
+
15
+ This application show the basic form handling and page persistent fields.
16
+ The GuestBook application allows users to enter a comments. On submission the
17
+ page gets re-rendered showing the list of comments entered so far. The list of
18
+ comments is kept in the session.
19
+
20
+ hangman
21
+ =======
22
+ see http://rifers.org/examples#D.10
23
+
24
+ Hangman is a simple word game in which the system selects a secret target word;
25
+ the player attempts to guess the word and is only allow 5 incorrect guesses. The
26
+ game is over when the word is guessed or the user has exhausted the maximum
27
+ number of incorrect guesses.
28
+
29
+ hilo
30
+ ====
31
+ see http://tapestry.apache.org/tapestry5/tutorial1/hilo.html
32
+
33
+ In the game, the computer selects a number between 1 and 10. You try and guess
34
+ the number, clicking links. At the end, the computer tells you how many guesses
35
+ you required.
36
+
37
+ simple_blog (work in progress)
38
+ ===========
39
+ see http://code.whytheluckystiff.net/camping/browser/trunk/examples/blog.rb
40
+
41
+ A database-backed simple blog. It provides Articles and Comments. Articles
42
+ belong to User and a Category. The edit actions/page behavior are protected.
43
+ Uses datamapped in standalone mode (no integration with the framework has been
44
+ created)
45
+
46
+ stateful_counters
47
+ =================
48
+ see http://www.seaside.st/about/examples/multicounter
49
+ see http://rifers.org/examples#D.9
50
+
51
+ Example of a component (a simple counter) and how you can build and embed
52
+ multiple components in a page
53
+
54
+ triki (work in progress)
55
+ =====
56
+ see http://mongrel.rubyforge.org/browser/trunk/examples/camping/tepee.rb
57
+
58
+ A Trellis little Wiki, supporting versioning and Textile/Markdown
59
+
60
+
61
+
62
+
63
+
64
+
65
+
@@ -0,0 +1,87 @@
1
+ require 'rubygems'
2
+ require 'trellis'
3
+ require 'xmlrpc/client'
4
+ require 'rexml/document'
5
+ require 'builder'
6
+
7
+ include Trellis
8
+
9
+ module Flickr
10
+
11
+ # This component grabs a set of random images from Flickr using the
12
+ # interestingness web services (using XML-RCP)
13
+ #
14
+ # s small square 75x75
15
+ # t thumbnail, 100 on longest side
16
+ # m small, 240 on longest side
17
+ # - medium, 500 on longest side
18
+ # b large, 1024 on longest side (only exists for very large original images)
19
+ # o original image, either a jpg, gif or png, depending on source format
20
+ class FlickrInterestingness < Component
21
+ tag_name "flickr_interestingness"
22
+
23
+ render do |tag|
24
+ format = tag.attr['format'] || 's'
25
+ displayed = tag.attr['per_page'] || '3'
26
+ displayed = displayed.to_i
27
+ per_page = displayed * 10 # grab 10x more images
28
+
29
+ flickruri = 'http://api.flickr.com/services/xmlrpc/'
30
+ server = XMLRPC::Client.new2(flickruri)
31
+ flickrkey = '15b43fbd25e10d51e8533d32bf7e1d1a'
32
+ details = {:api_key => flickrkey, :per_page => per_page}
33
+ xml = server.call("flickr.interestingness.getList", details)
34
+ doc = REXML::Document.new xml
35
+ builder = Builder::XmlMarkup.new
36
+
37
+ chosen = (0..per_page-1).to_a.sort_by{rand}[0..displayed-1]
38
+
39
+ index = 0
40
+ doc.root.each_element do |element|
41
+ if chosen.include?(index)
42
+ server = element.attributes["server"]
43
+ id = element.attributes["id"]
44
+ secret = element.attributes["secret"]
45
+ title = element.attributes["title"]
46
+ farm = element.attributes["farm"]
47
+ image_url = "http://farm#{farm}.static.flickr.com/#{server}/#{id}_#{secret}_#{format}.jpg"
48
+
49
+ builder.div(:id => "flickr_viewer") {
50
+ builder.div(:id => "flickr_image") {
51
+ builder.img(:src => image_url, :alt => title)
52
+ }
53
+ }
54
+ end
55
+ index = index + 1
56
+ end
57
+ builder.target!
58
+ end
59
+ end
60
+
61
+ class FlickrApp < Application
62
+ home :home
63
+ end
64
+
65
+ class Home < Page
66
+ template do
67
+ xhtml_strict {
68
+ head {
69
+ title "Trellis Flickr Component Test"
70
+ }
71
+ body {
72
+ h1 "Some interesting pictures..."
73
+ p {
74
+ text "<trellis:flickr_interestingness/>"
75
+ }
76
+ # h2 "and some more.."
77
+ # p {
78
+ # text "<trellis:flickr_interestingness per_page='2'/>"
79
+ # }
80
+ }
81
+ }
82
+ end
83
+ end
84
+
85
+ web_app = FlickrApp.new
86
+ web_app.start 3006 if __FILE__ == $PROGRAM_NAME
87
+ end
@@ -0,0 +1,61 @@
1
+ require 'rubygems'
2
+ require 'trellis'
3
+
4
+ include Trellis
5
+
6
+ module GuestBookApp
7
+
8
+ class Comment
9
+ attr_accessor :text
10
+ attr_accessor :time_stamp
11
+
12
+ def initialize(text, time_stamp=Time.now)
13
+ @text, @time_stamp = text, time_stamp
14
+ end
15
+ end
16
+
17
+ class GuestBookApp < Application
18
+ home :guest_book
19
+ end
20
+
21
+ class GuestBook < Page
22
+ persistent :comments
23
+
24
+ def initialize
25
+ @comments = Array.new
26
+ super
27
+ end
28
+
29
+ def on_submit_from_comment
30
+ text = params[:comment_text]
31
+ @comments << Comment.new(text)
32
+ logger.info "there are #{@comments.size.to_s} comments"
33
+ self
34
+ end
35
+
36
+ template(%[
37
+ !!! XML
38
+ !!! Strict
39
+ %html{ :xmlns => "http://www.w3.org/1999/xhtml" }
40
+ %head
41
+ %title
42
+ Trellis Guest Book
43
+ %body
44
+ %trellis:form{ :tid => "comment", :method => "post" }
45
+ Add your comment here:
46
+ %p
47
+ %trellis:text_area{ :keep_contents => "no", :tid => "text", :rows => "15", :cols => "60" }
48
+ %p
49
+ %trellis:submit{ :tid => "add", :value => "Submit" }
50
+ %p
51
+ %trellis:each{ :value => "comment", :source => "comments" }
52
+ %p
53
+ %trellis:value{ :name => "comment.time_stamp" }
54
+ %br
55
+ %trellis:value{ :name => "comment.text" }
56
+ %br
57
+ ], :format => :haml)
58
+ end
59
+
60
+ GuestBookApp.new.start 3001 if __FILE__ == $PROGRAM_NAME
61
+ end