tabulous 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/.gitignore +5 -0
  2. data/CHANGELOG.rdoc +2 -0
  3. data/Gemfile +4 -0
  4. data/MIT-LICENSE +21 -0
  5. data/README.rdoc +85 -0
  6. data/Rakefile +54 -0
  7. data/lib/generators/tabs/USAGE +1 -0
  8. data/lib/generators/tabs/tabs_generator.rb +13 -0
  9. data/lib/generators/tabs/templates/tabulous.rb +170 -0
  10. data/lib/tabulous.rb +11 -0
  11. data/lib/tabulous/css_scaffolding.rb +111 -0
  12. data/lib/tabulous/errors.rb +16 -0
  13. data/lib/tabulous/formatter.rb +278 -0
  14. data/lib/tabulous/helpers.rb +13 -0
  15. data/lib/tabulous/options.rb +37 -0
  16. data/lib/tabulous/railtie.rb +23 -0
  17. data/lib/tabulous/tab.rb +79 -0
  18. data/lib/tabulous/tabulous.rb +162 -0
  19. data/lib/tabulous/version.rb +3 -0
  20. data/lib/tasks/tabulous.rake +11 -0
  21. data/tabulous.gemspec +30 -0
  22. data/test/applications/main/.gitignore +3 -0
  23. data/test/applications/main/Gemfile +7 -0
  24. data/test/applications/main/Rakefile +7 -0
  25. data/test/applications/main/app/controllers/application_controller.rb +3 -0
  26. data/test/applications/main/app/controllers/galaxies_controller.rb +83 -0
  27. data/test/applications/main/app/controllers/home_controller.rb +4 -0
  28. data/test/applications/main/app/controllers/planets_controller.rb +83 -0
  29. data/test/applications/main/app/controllers/stars_controller.rb +83 -0
  30. data/test/applications/main/app/controllers/subtabs_controller.rb +8 -0
  31. data/test/applications/main/app/helpers/application_helper.rb +2 -0
  32. data/test/applications/main/app/helpers/galaxies_helper.rb +2 -0
  33. data/test/applications/main/app/helpers/planets_helper.rb +2 -0
  34. data/test/applications/main/app/helpers/stars_helper.rb +2 -0
  35. data/test/applications/main/app/models/galaxy.rb +2 -0
  36. data/test/applications/main/app/models/planet.rb +2 -0
  37. data/test/applications/main/app/models/star.rb +2 -0
  38. data/test/applications/main/app/views/galaxies/_form.html.erb +21 -0
  39. data/test/applications/main/app/views/galaxies/edit.html.erb +6 -0
  40. data/test/applications/main/app/views/galaxies/index.html.erb +23 -0
  41. data/test/applications/main/app/views/galaxies/new.html.erb +5 -0
  42. data/test/applications/main/app/views/galaxies/show.html.erb +10 -0
  43. data/test/applications/main/app/views/home/index.html.erb +3 -0
  44. data/test/applications/main/app/views/layouts/application.html.erb +16 -0
  45. data/test/applications/main/app/views/planets/_form.html.erb +21 -0
  46. data/test/applications/main/app/views/planets/edit.html.erb +6 -0
  47. data/test/applications/main/app/views/planets/index.html.erb +23 -0
  48. data/test/applications/main/app/views/planets/new.html.erb +5 -0
  49. data/test/applications/main/app/views/planets/show.html.erb +10 -0
  50. data/test/applications/main/app/views/stars/_form.html.erb +21 -0
  51. data/test/applications/main/app/views/stars/edit.html.erb +6 -0
  52. data/test/applications/main/app/views/stars/index.html.erb +23 -0
  53. data/test/applications/main/app/views/stars/new.html.erb +5 -0
  54. data/test/applications/main/app/views/stars/show.html.erb +10 -0
  55. data/test/applications/main/app/views/subtabs/one.html.erb +1 -0
  56. data/test/applications/main/app/views/subtabs/three.html.erb +1 -0
  57. data/test/applications/main/app/views/subtabs/two.html.erb +1 -0
  58. data/test/applications/main/config.ru +4 -0
  59. data/test/applications/main/config/application.rb +42 -0
  60. data/test/applications/main/config/boot.rb +13 -0
  61. data/test/applications/main/config/database.yml +22 -0
  62. data/test/applications/main/config/environment.rb +5 -0
  63. data/test/applications/main/config/environments/development.rb +26 -0
  64. data/test/applications/main/config/environments/production.rb +49 -0
  65. data/test/applications/main/config/environments/test.rb +35 -0
  66. data/test/applications/main/config/initializers/backtrace_silencers.rb +7 -0
  67. data/test/applications/main/config/initializers/inflections.rb +10 -0
  68. data/test/applications/main/config/initializers/mime_types.rb +5 -0
  69. data/test/applications/main/config/initializers/secret_token.rb +7 -0
  70. data/test/applications/main/config/initializers/session_store.rb +8 -0
  71. data/test/applications/main/config/initializers/tabulous.rb +156 -0
  72. data/test/applications/main/config/locales/en.yml +5 -0
  73. data/test/applications/main/config/routes.rb +69 -0
  74. data/test/applications/main/db/development.sqlite3 +0 -0
  75. data/test/applications/main/db/migrate/20110223232547_create_galaxies.rb +13 -0
  76. data/test/applications/main/db/migrate/20110223232552_create_stars.rb +13 -0
  77. data/test/applications/main/db/migrate/20110223232557_create_planets.rb +13 -0
  78. data/test/applications/main/db/production.sqlite3 +0 -0
  79. data/test/applications/main/db/schema.rb +33 -0
  80. data/test/applications/main/db/test.sqlite3 +0 -0
  81. data/test/applications/main/public/404.html +26 -0
  82. data/test/applications/main/public/422.html +26 -0
  83. data/test/applications/main/public/500.html +26 -0
  84. data/test/applications/main/public/favicon.ico +0 -0
  85. data/test/applications/main/public/javascripts/application.js +2 -0
  86. data/test/applications/main/public/javascripts/controls.js +965 -0
  87. data/test/applications/main/public/javascripts/dragdrop.js +974 -0
  88. data/test/applications/main/public/javascripts/effects.js +1123 -0
  89. data/test/applications/main/public/javascripts/prototype.js +6001 -0
  90. data/test/applications/main/public/javascripts/rails.js +175 -0
  91. data/test/applications/main/public/stylesheets/.gitkeep +0 -0
  92. data/test/applications/main/script/rails +6 -0
  93. data/test/applications/main/test/integration/actions_test.rb +79 -0
  94. data/test/applications/main/test/integration/active_tab_clickable_test.rb +86 -0
  95. data/test/applications/main/test/integration/always_render_subtabs_test.rb +84 -0
  96. data/test/applications/main/test/integration/css_no_scaffolding_test.rb +57 -0
  97. data/test/applications/main/test/integration/css_scaffolding_test.rb +67 -0
  98. data/test/applications/main/test/integration/display_text_test.rb +73 -0
  99. data/test/applications/main/test/integration/enabled_test.rb +80 -0
  100. data/test/applications/main/test/integration/html5_test.rb +64 -0
  101. data/test/applications/main/test/integration/main_tabs_test.rb +10 -0
  102. data/test/applications/main/test/integration/path_test.rb +81 -0
  103. data/test/applications/main/test/integration/visible_test.rb +80 -0
  104. data/test/applications/main/test/integration_test_helper.rb +6 -0
  105. data/test/applications/main/test/test_helper.rb +8 -0
  106. data/test/applications/main/test/unit/tabs_generator_test.rb +14 -0
  107. data/test/applications/simple_tabs/.gitignore +3 -0
  108. data/test/applications/simple_tabs/Gemfile +7 -0
  109. data/test/applications/simple_tabs/Rakefile +7 -0
  110. data/test/applications/simple_tabs/app/controllers/application_controller.rb +3 -0
  111. data/test/applications/simple_tabs/app/controllers/galaxies_controller.rb +83 -0
  112. data/test/applications/simple_tabs/app/controllers/home_controller.rb +4 -0
  113. data/test/applications/simple_tabs/app/controllers/planets_controller.rb +83 -0
  114. data/test/applications/simple_tabs/app/controllers/stars_controller.rb +83 -0
  115. data/test/applications/simple_tabs/app/helpers/application_helper.rb +2 -0
  116. data/test/applications/simple_tabs/app/helpers/galaxies_helper.rb +2 -0
  117. data/test/applications/simple_tabs/app/helpers/planets_helper.rb +2 -0
  118. data/test/applications/simple_tabs/app/helpers/stars_helper.rb +2 -0
  119. data/test/applications/simple_tabs/app/models/galaxy.rb +2 -0
  120. data/test/applications/simple_tabs/app/models/planet.rb +2 -0
  121. data/test/applications/simple_tabs/app/models/star.rb +2 -0
  122. data/test/applications/simple_tabs/app/views/galaxies/_form.html.erb +21 -0
  123. data/test/applications/simple_tabs/app/views/galaxies/edit.html.erb +6 -0
  124. data/test/applications/simple_tabs/app/views/galaxies/index.html.erb +23 -0
  125. data/test/applications/simple_tabs/app/views/galaxies/new.html.erb +5 -0
  126. data/test/applications/simple_tabs/app/views/galaxies/show.html.erb +10 -0
  127. data/test/applications/simple_tabs/app/views/home/index.html.erb +4 -0
  128. data/test/applications/simple_tabs/app/views/layouts/application.html.erb +16 -0
  129. data/test/applications/simple_tabs/app/views/planets/_form.html.erb +21 -0
  130. data/test/applications/simple_tabs/app/views/planets/edit.html.erb +6 -0
  131. data/test/applications/simple_tabs/app/views/planets/index.html.erb +23 -0
  132. data/test/applications/simple_tabs/app/views/planets/new.html.erb +5 -0
  133. data/test/applications/simple_tabs/app/views/planets/show.html.erb +10 -0
  134. data/test/applications/simple_tabs/app/views/stars/_form.html.erb +21 -0
  135. data/test/applications/simple_tabs/app/views/stars/edit.html.erb +6 -0
  136. data/test/applications/simple_tabs/app/views/stars/index.html.erb +23 -0
  137. data/test/applications/simple_tabs/app/views/stars/new.html.erb +5 -0
  138. data/test/applications/simple_tabs/app/views/stars/show.html.erb +10 -0
  139. data/test/applications/simple_tabs/config.ru +4 -0
  140. data/test/applications/simple_tabs/config/application.rb +42 -0
  141. data/test/applications/simple_tabs/config/boot.rb +13 -0
  142. data/test/applications/simple_tabs/config/database.yml +22 -0
  143. data/test/applications/simple_tabs/config/environment.rb +5 -0
  144. data/test/applications/simple_tabs/config/environments/development.rb +26 -0
  145. data/test/applications/simple_tabs/config/environments/production.rb +49 -0
  146. data/test/applications/simple_tabs/config/environments/test.rb +35 -0
  147. data/test/applications/simple_tabs/config/initializers/backtrace_silencers.rb +7 -0
  148. data/test/applications/simple_tabs/config/initializers/inflections.rb +10 -0
  149. data/test/applications/simple_tabs/config/initializers/mime_types.rb +5 -0
  150. data/test/applications/simple_tabs/config/initializers/secret_token.rb +7 -0
  151. data/test/applications/simple_tabs/config/initializers/session_store.rb +8 -0
  152. data/test/applications/simple_tabs/config/initializers/tabulous.rb +149 -0
  153. data/test/applications/simple_tabs/config/locales/en.yml +5 -0
  154. data/test/applications/simple_tabs/config/routes.rb +65 -0
  155. data/test/applications/simple_tabs/db/development.sqlite3 +0 -0
  156. data/test/applications/simple_tabs/db/migrate/20110220170240_create_galaxies.rb +13 -0
  157. data/test/applications/simple_tabs/db/migrate/20110220170245_create_stars.rb +13 -0
  158. data/test/applications/simple_tabs/db/migrate/20110220170250_create_planets.rb +13 -0
  159. data/test/applications/simple_tabs/db/production.sqlite3 +0 -0
  160. data/test/applications/simple_tabs/db/schema.rb +33 -0
  161. data/test/applications/simple_tabs/db/test.sqlite3 +0 -0
  162. data/test/applications/simple_tabs/public/404.html +26 -0
  163. data/test/applications/simple_tabs/public/422.html +26 -0
  164. data/test/applications/simple_tabs/public/500.html +26 -0
  165. data/test/applications/simple_tabs/public/favicon.ico +0 -0
  166. data/test/applications/simple_tabs/public/javascripts/application.js +2 -0
  167. data/test/applications/simple_tabs/public/javascripts/controls.js +965 -0
  168. data/test/applications/simple_tabs/public/javascripts/dragdrop.js +974 -0
  169. data/test/applications/simple_tabs/public/javascripts/effects.js +1123 -0
  170. data/test/applications/simple_tabs/public/javascripts/prototype.js +6001 -0
  171. data/test/applications/simple_tabs/public/javascripts/rails.js +175 -0
  172. data/test/applications/simple_tabs/public/stylesheets/.gitkeep +0 -0
  173. data/test/applications/simple_tabs/script/rails +6 -0
  174. data/test/applications/simple_tabs/test/integration/simple_tabs_test.rb +34 -0
  175. data/test/applications/simple_tabs/test/integration_test_helper.rb +6 -0
  176. data/test/applications/simple_tabs/test/test_helper.rb +8 -0
  177. data/test/applications/subtabs/.gitignore +3 -0
  178. data/test/applications/subtabs/Gemfile +7 -0
  179. data/test/applications/subtabs/Rakefile +7 -0
  180. data/test/applications/subtabs/app/controllers/application_controller.rb +3 -0
  181. data/test/applications/subtabs/app/controllers/exoplanets_controller.rb +83 -0
  182. data/test/applications/subtabs/app/controllers/galaxies/elliptical_galaxies_controller.rb +85 -0
  183. data/test/applications/subtabs/app/controllers/galaxies/lenticular_galaxies_controller.rb +85 -0
  184. data/test/applications/subtabs/app/controllers/galaxies/spiral_galaxies_controller.rb +85 -0
  185. data/test/applications/subtabs/app/controllers/home_controller.rb +4 -0
  186. data/test/applications/subtabs/app/controllers/misc_controller.rb +15 -0
  187. data/test/applications/subtabs/app/controllers/rogue_planets_controller.rb +83 -0
  188. data/test/applications/subtabs/app/controllers/stars_controller.rb +83 -0
  189. data/test/applications/subtabs/app/helpers/application_helper.rb +2 -0
  190. data/test/applications/subtabs/app/helpers/elliptical_galaxies_helper.rb +2 -0
  191. data/test/applications/subtabs/app/helpers/exoplanets_helper.rb +2 -0
  192. data/test/applications/subtabs/app/helpers/lenticular_galaxies_helper.rb +2 -0
  193. data/test/applications/subtabs/app/helpers/rogue_planets_helper.rb +2 -0
  194. data/test/applications/subtabs/app/helpers/spiral_galaxies_helper.rb +2 -0
  195. data/test/applications/subtabs/app/helpers/stars_helper.rb +2 -0
  196. data/test/applications/subtabs/app/models/elliptical_galaxy.rb +2 -0
  197. data/test/applications/subtabs/app/models/exoplanet.rb +2 -0
  198. data/test/applications/subtabs/app/models/lenticular_galaxy.rb +2 -0
  199. data/test/applications/subtabs/app/models/rogue_planet.rb +2 -0
  200. data/test/applications/subtabs/app/models/spiral_galaxy.rb +2 -0
  201. data/test/applications/subtabs/app/models/star.rb +2 -0
  202. data/test/applications/subtabs/app/views/exoplanets/_form.html.erb +21 -0
  203. data/test/applications/subtabs/app/views/exoplanets/edit.html.erb +6 -0
  204. data/test/applications/subtabs/app/views/exoplanets/index.html.erb +23 -0
  205. data/test/applications/subtabs/app/views/exoplanets/new.html.erb +5 -0
  206. data/test/applications/subtabs/app/views/exoplanets/show.html.erb +10 -0
  207. data/test/applications/subtabs/app/views/galaxies/elliptical_galaxies/_form.html.erb +21 -0
  208. data/test/applications/subtabs/app/views/galaxies/elliptical_galaxies/edit.html.erb +6 -0
  209. data/test/applications/subtabs/app/views/galaxies/elliptical_galaxies/index.html.erb +23 -0
  210. data/test/applications/subtabs/app/views/galaxies/elliptical_galaxies/new.html.erb +5 -0
  211. data/test/applications/subtabs/app/views/galaxies/elliptical_galaxies/show.html.erb +10 -0
  212. data/test/applications/subtabs/app/views/galaxies/lenticular_galaxies/_form.html.erb +21 -0
  213. data/test/applications/subtabs/app/views/galaxies/lenticular_galaxies/edit.html.erb +6 -0
  214. data/test/applications/subtabs/app/views/galaxies/lenticular_galaxies/index.html.erb +23 -0
  215. data/test/applications/subtabs/app/views/galaxies/lenticular_galaxies/new.html.erb +5 -0
  216. data/test/applications/subtabs/app/views/galaxies/lenticular_galaxies/show.html.erb +10 -0
  217. data/test/applications/subtabs/app/views/galaxies/spiral_galaxies/_form.html.erb +21 -0
  218. data/test/applications/subtabs/app/views/galaxies/spiral_galaxies/edit.html.erb +6 -0
  219. data/test/applications/subtabs/app/views/galaxies/spiral_galaxies/index.html.erb +23 -0
  220. data/test/applications/subtabs/app/views/galaxies/spiral_galaxies/new.html.erb +5 -0
  221. data/test/applications/subtabs/app/views/galaxies/spiral_galaxies/show.html.erb +10 -0
  222. data/test/applications/subtabs/app/views/home/index.html.erb +14 -0
  223. data/test/applications/subtabs/app/views/layouts/application.html.erb +21 -0
  224. data/test/applications/subtabs/app/views/misc/always_enabled.html.erb +4 -0
  225. data/test/applications/subtabs/app/views/misc/always_visible.html.erb +4 -0
  226. data/test/applications/subtabs/app/views/rogue_planets/_form.html.erb +21 -0
  227. data/test/applications/subtabs/app/views/rogue_planets/edit.html.erb +6 -0
  228. data/test/applications/subtabs/app/views/rogue_planets/index.html.erb +23 -0
  229. data/test/applications/subtabs/app/views/rogue_planets/new.html.erb +5 -0
  230. data/test/applications/subtabs/app/views/rogue_planets/show.html.erb +10 -0
  231. data/test/applications/subtabs/app/views/stars/_form.html.erb +21 -0
  232. data/test/applications/subtabs/app/views/stars/edit.html.erb +6 -0
  233. data/test/applications/subtabs/app/views/stars/index.html.erb +23 -0
  234. data/test/applications/subtabs/app/views/stars/new.html.erb +5 -0
  235. data/test/applications/subtabs/app/views/stars/show.html.erb +10 -0
  236. data/test/applications/subtabs/config.ru +4 -0
  237. data/test/applications/subtabs/config/application.rb +42 -0
  238. data/test/applications/subtabs/config/boot.rb +13 -0
  239. data/test/applications/subtabs/config/database.yml +22 -0
  240. data/test/applications/subtabs/config/environment.rb +5 -0
  241. data/test/applications/subtabs/config/environments/development.rb +26 -0
  242. data/test/applications/subtabs/config/environments/production.rb +49 -0
  243. data/test/applications/subtabs/config/environments/test.rb +35 -0
  244. data/test/applications/subtabs/config/initializers/backtrace_silencers.rb +7 -0
  245. data/test/applications/subtabs/config/initializers/inflections.rb +10 -0
  246. data/test/applications/subtabs/config/initializers/mime_types.rb +5 -0
  247. data/test/applications/subtabs/config/initializers/secret_token.rb +7 -0
  248. data/test/applications/subtabs/config/initializers/session_store.rb +8 -0
  249. data/test/applications/subtabs/config/initializers/tabulous.rb +167 -0
  250. data/test/applications/subtabs/config/locales/en.yml +5 -0
  251. data/test/applications/subtabs/config/routes.rb +74 -0
  252. data/test/applications/subtabs/db/development.sqlite3 +0 -0
  253. data/test/applications/subtabs/db/migrate/20110223220628_create_galaxies.rb +13 -0
  254. data/test/applications/subtabs/db/migrate/20110223220634_create_stars.rb +13 -0
  255. data/test/applications/subtabs/db/migrate/20110223220640_create_planets.rb +13 -0
  256. data/test/applications/subtabs/db/migrate/20110226190125_create_rogue_planets.rb +13 -0
  257. data/test/applications/subtabs/db/migrate/20110226190131_create_exoplanets.rb +13 -0
  258. data/test/applications/subtabs/db/migrate/20110226190532_create_spiral_galaxies.rb +13 -0
  259. data/test/applications/subtabs/db/migrate/20110226190537_create_lenticular_galaxies.rb +13 -0
  260. data/test/applications/subtabs/db/migrate/20110226190543_create_elliptical_galaxies.rb +13 -0
  261. data/test/applications/subtabs/db/production.sqlite3 +0 -0
  262. data/test/applications/subtabs/db/schema.rb +63 -0
  263. data/test/applications/subtabs/db/test.sqlite3 +0 -0
  264. data/test/applications/subtabs/public/404.html +26 -0
  265. data/test/applications/subtabs/public/422.html +26 -0
  266. data/test/applications/subtabs/public/500.html +26 -0
  267. data/test/applications/subtabs/public/favicon.ico +0 -0
  268. data/test/applications/subtabs/public/javascripts/application.js +2 -0
  269. data/test/applications/subtabs/public/javascripts/controls.js +965 -0
  270. data/test/applications/subtabs/public/javascripts/dragdrop.js +974 -0
  271. data/test/applications/subtabs/public/javascripts/effects.js +1123 -0
  272. data/test/applications/subtabs/public/javascripts/prototype.js +6001 -0
  273. data/test/applications/subtabs/public/javascripts/rails.js +175 -0
  274. data/test/applications/subtabs/public/stylesheets/.gitkeep +0 -0
  275. data/test/applications/subtabs/public/stylesheets/application.css +49 -0
  276. data/test/applications/subtabs/public/stylesheets/reset.css +48 -0
  277. data/test/applications/subtabs/script/rails +6 -0
  278. data/test/applications/subtabs/test/integration/subtabs_test.rb +67 -0
  279. data/test/applications/subtabs/test/integration_test_helper.rb +6 -0
  280. data/test/applications/subtabs/test/test_helper.rb +8 -0
  281. data/test/test_application_gemfile.rb +14 -0
  282. data/test/test_application_integration_test_helper.rb +89 -0
  283. data/test/test_application_test_helper.rb +11 -0
  284. data/test/test_initializers/empty +0 -0
  285. data/test/test_initializers/expected +55 -0
  286. data/test/test_initializers/random_horizontal_whitespace +55 -0
  287. data/test/test_initializers/random_vertical_whitespace +102 -0
  288. data/test/test_initializers/text +144 -0
  289. data/test/test_initializers/trailing_comments +55 -0
  290. data/test/unit_test_helper.rb +13 -0
  291. data/test/units/tabulous_formatter_test.rb +69 -0
  292. metadata +466 -0
@@ -0,0 +1,5 @@
1
+ Gemfile.lock
2
+ pkg/*
3
+ *.gem
4
+ .bundle
5
+ .DS_Store
@@ -0,0 +1,2 @@
1
+ == 0.0.1 (March 2, 2011)
2
+ * Initial release.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :gemcutter
2
+
3
+ # Specify your gem's dependencies in tabulous.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ Copyright 2011 Wyatt Greene
2
+ http://techiferous.com
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,85 @@
1
+ = Tabulous
2
+
3
+ == Description
4
+
5
+ Tabulous provides an easy way to add tabs to your Rails application.
6
+
7
+ == Requirements
8
+
9
+ Tabulous only works with Rails 3. It has been tested on Ruby 1.8.7 and 1.9.2.
10
+
11
+ == Usage
12
+
13
+ Traditionally, implementing tabs in Rails involves adding logic to your views and sprinkling
14
+ tab-related code all over your controllers. Tabulous takes a different approach and
15
+ consolidates all of the tab-related code into one configuration file. Apart from this
16
+ configuration file, you just have to call <%= tabs %> and <%= subtabs %> in your view layout(s)
17
+ and then create your own CSS styles for the tabs.
18
+
19
+ To get started, add the gem to your Rails application's Gemfile and install it using:
20
+
21
+ bundle install
22
+
23
+ Then generate the tab initializer:
24
+
25
+ rails generate tabs
26
+
27
+ This will generate config/initializers/tabulous.rb. Open the file and configure it to your liking.
28
+ You'll notice the code is formatted into a grid. After you edit the file, run the following rake
29
+ task to prettify the code back into a nice grid:
30
+
31
+ rake tabs:format
32
+
33
+ Make sure you call the following view helpers in your layout(s):
34
+
35
+ <%= tabs %>
36
+ <%= subtabs %>
37
+
38
+ The tabs helper will generate markup that looks like this:
39
+
40
+ <div id="tabs">
41
+ <ul>
42
+ <li class="active enabled"><span class="tab">Explanation</span></li>
43
+ <li class="inactive enabled"><a href="/galaxies/elliptical_galaxies" class="tab">Galaxies</a></li>
44
+ <li class="inactive enabled"><a href="/exoplanets" class="tab">Planets</a></li>
45
+ <li class="inactive enabled"><a href="/stars" class="tab">Stars</a></li>
46
+ <li class="inactive disabled"><span class="tab">Asteroids</span></li>
47
+ </ul>
48
+ </div>
49
+
50
+ And the subtabs helper will generate markup that looks like this:
51
+
52
+ <div id="subtabs">
53
+ <ul>
54
+ <li class="active enabled"><span class="tab">Exoplanets</span></li>
55
+ <li class="inactive enabled"><a href="/rogue_planets" class="tab">Rogue Planets</a></li>
56
+ </ul>
57
+ </div>
58
+
59
+ Tabulous will start you off with some CSS scaffolding but you'll eventually want to create your own
60
+ CSS.
61
+
62
+ == Examples
63
+
64
+ Look in this gem's test/applications directory to find working example applications. Look at their
65
+ config/initializers/tabulous.rb and app/layouts/application.html.erb files.
66
+
67
+ == Contributing
68
+
69
+ Developers are encouraged to contribute ideas or code.
70
+
71
+ To make code changes:
72
+
73
+ * First, check out this gem's code from github.
74
+ * Next, type bundle install in tabulous's directory. This will install any gems you need
75
+ for developing tabulous.
76
+ * Then go to each directory in test/applications and type bundle install. This makes sure
77
+ the test applications have the gems that they need to run.
78
+ * To save you the effort of having to create and migrate databases for each test application,
79
+ I've committed the sqlite databases of each test application to the repository.
80
+ * Now go to tabulous's directory and type rake test. If everything has been installed
81
+ properly, all of the tests will pass.
82
+ * Now you should be all set to code.
83
+
84
+ Please send me a message if you find any confusing or incorrect documentation in tabulous or if
85
+ you encounter any bugs. Thank you and enjoy!
@@ -0,0 +1,54 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ Bundler::GemHelper.install_tasks
6
+ require 'colored'
7
+ require 'rake'
8
+ require 'rake/rdoctask'
9
+ require 'rake/testtask'
10
+
11
+ namespace :test do
12
+ Dir['test/applications/*'].each do |filename|
13
+ if File.directory?(filename)
14
+ name = filename.split('/').last
15
+ desc "run tests for the test application #{name}"
16
+ Rake::TestTask.new(name) do |t|
17
+ t.libs << 'lib'
18
+ t.libs << 'test'
19
+ t.pattern = "test/applications/#{name}/**/*_test.rb"
20
+ t.verbose = false
21
+ end
22
+ end
23
+ end
24
+ desc "run unit tests for tabulous"
25
+ Rake::TestTask.new(:units) do |t|
26
+ t.libs << 'lib'
27
+ t.pattern = 'test/units/**/*_test.rb'
28
+ t.verbose = true
29
+ end
30
+ end
31
+
32
+ task :test do
33
+ # we cannot load more than one Rails app at a time so we run the rake tasks
34
+ # from the shell so that each has its own process
35
+ Dir['test/applications/*'].each do |filename|
36
+ if File.directory?(filename)
37
+ name = filename.split('/').last
38
+ puts "Running tests for test application \"#{name}\"".magenta
39
+ puts %x{rake test:#{name}}
40
+ end
41
+ end
42
+ puts "Running unit tests".magenta
43
+ Rake::Task['test:units'].invoke
44
+ end
45
+
46
+ task :default => :test
47
+
48
+ Rake::RDocTask.new(:rdoc) do |rdoc|
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = 'Test'
51
+ rdoc.options << '--line-numbers' << '--inline-source'
52
+ rdoc.rdoc_files.include('README.rdoc')
53
+ rdoc.rdoc_files.include('lib/**/*.rb')
54
+ end
@@ -0,0 +1 @@
1
+ This will generate tabs for your Rails app.
@@ -0,0 +1,13 @@
1
+ require 'colored'
2
+ class TabsGenerator < Rails::Generators::Base
3
+ source_root File.expand_path("../templates", __FILE__)
4
+ def create_tabs_initializer_file
5
+ template "tabulous.rb", "config/initializers/tabulous.rb"
6
+ puts
7
+ puts ("Tabulous made some guesses about how you want your tabs configured but " +
8
+ "probably got some things wrong. So you need to edit " +
9
+ "config/initializers/tabulous.rb to your liking.").magenta
10
+ puts
11
+ puts "Don't forget to put <%= tabs %> and <%= subtabs %> in your layout(s).".magenta
12
+ end
13
+ end
@@ -0,0 +1,170 @@
1
+ # Tabulous gives you an easy way to set up tabs for your Rails application.
2
+ #
3
+ # 1. Configure this initializer.
4
+ # 2. Add <%%= tabs %> and <%%= subtabs %> in your layout(s) wherever you want
5
+ # your tabs to appear.
6
+ # 3. Add styles for these tabs in your stylesheets.
7
+ # 4. Profit!
8
+
9
+ <% controllers = []
10
+ Dir[File.join(Rails.root.to_s, 'app/controllers/*.rb')].each do |filename|
11
+ filename = filename.split('/').last
12
+ if filename =~ /(\w+)_controller.rb/
13
+ controller_name = $1.downcase
14
+ if controller_name != 'application'
15
+ controllers << controller_name
16
+ end
17
+ end
18
+ end
19
+ -%>
20
+ Tabulous.setup do |config|
21
+
22
+ #---------------------------
23
+ # HOW TO USE THE TABLES
24
+ #---------------------------
25
+ #
26
+ # The following tables are just an array of arrays. As such, you can put
27
+ # any Ruby code into a cell. For example, you could put "/foo/bar" in
28
+ # a path cell or you could put "/foo" + "/bar". You can even wrap up code
29
+ # in a lambda to be executed later. These will be executed in the context
30
+ # of a Rails view meaning they will have access to view helpers.
31
+ #
32
+ # However, there is something special about the format of these tables.
33
+ # Because it would be a pain for you to manually prettify the tables each
34
+ # time you edit them, there is a special rake task that does this for
35
+ # you: rake tabs:format. However, for this prettifier to work properly
36
+ # you have to follow some special rules:
37
+ #
38
+ # * No comments are allowed between rows.
39
+ # * Comments are allowed to the right of rows, except for header rows.
40
+ # * And most importantly: commas that separate cells should be surrounded
41
+ # by spaces and commas that are within cells should not. This gives the
42
+ # formatter an easy way to distinguish between cells without having
43
+ # to actually parse the Ruby.
44
+
45
+ #----------
46
+ # TABS
47
+ #----------
48
+ #
49
+ # This is where you define your tabs and subtabs. The order that the tabs
50
+ # appear in this list is the order they will appear in your views. Any
51
+ # subtabs defined will have the previous tab as their parent.
52
+ #
53
+ # TAB NAME
54
+ # must end in _tab or _subtab
55
+ # DISPLAY TEXT
56
+ # the text the user sees on the tab
57
+ # PATH
58
+ # the URL that gets sent to the server when the tab is clicked
59
+ # VISIBLE
60
+ # whether to display the tab
61
+ # ENABLED
62
+ # whether the tab is disabled (unclickable)
63
+
64
+ <% index_routes = Rails.application.routes.routes.select{|r| r.requirements[:action] == 'index'}
65
+ tab_data = index_routes.map do |route|
66
+ name = route.requirements[:controller].gsub('/', '_')
67
+ { :text => name.titleize,
68
+ :name => name,
69
+ :path_helper => route.name + '_path' }
70
+ end
71
+ -%>
72
+ <%= s = []
73
+ s << ' config.tabs = ['
74
+ s << ' #-------------------------------------------------------------------------------------------------#'
75
+ s << ' # TAB NAME | DISPLAY TEXT | PATH | VISIBLE? | ENABLED? #'
76
+ s << ' #-------------------------------------------------------------------------------------------------#'
77
+ for tab in tab_data
78
+ s << "[ :#{tab[:name]}_tab , '#{tab[:text]}' , lambda { #{tab[:path_helper]} } , true , true ],"
79
+ end
80
+ s << ' #-------------------------------------------------------------------------------------------------#'
81
+ s << ' # TAB NAME | DISPLAY TEXT | PATH | VISIBLE? | ENABLED? #'
82
+ s << ' #-------------------------------------------------------------------------------------------------#'
83
+ s << ' ]'
84
+ Tabulous::Formatter.format(s).join("\n") %>
85
+
86
+ #-------------
87
+ # ACTIONS
88
+ #-------------
89
+ #
90
+ # This is where you hook up actions with tabs. That way tabulous knows
91
+ # which tab and subtab to mark active when an action is rendered.
92
+ #
93
+ # CONTROLLER
94
+ # the name of the controller
95
+ # ACTION
96
+ # the name of the action, or :all_actions
97
+ # TAB
98
+ # the name of the tab or subtab that is active when this action is rendered
99
+
100
+ <%= s = []
101
+ s << ' config.actions = ['
102
+ s << ' #-------------------------------------------------------------#'
103
+ s << ' # CONTROLLER | ACTION | TAB #'
104
+ s << ' #-------------------------------------------------------------#'
105
+ for tab in tab_data
106
+ s << "[ :#{tab[:name]} , :all_actions , :#{tab[:name]}_tab ],"
107
+ end
108
+ s << ' #-------------------------------------------------------------#'
109
+ s << ' # CONTROLLER | ACTION | TAB #'
110
+ s << ' #-------------------------------------------------------------#'
111
+ s << ' ]'
112
+ Tabulous::Formatter.format(s).join("\n") %>
113
+
114
+ #-------------
115
+ # OPTIONS
116
+ #-------------
117
+
118
+ # By default, you cannot click on the active tab.
119
+ config.active_tab_clickable = false
120
+
121
+ # By default, the subtabs HTML element is not rendered if it is empty.
122
+ config.always_render_subtabs = false
123
+
124
+ # By default, when an action renders and no tab is defined for that action,
125
+ # an error is thrown. If you turn this off, no error is thrown and the
126
+ # tabs are simply not rendered.
127
+ config.raise_error_if_no_tab_found = true
128
+
129
+ # By default, div elements are used in the tab markup. When html5 is
130
+ # true, nav elements are used instead.
131
+ config.html5 = false
132
+
133
+ #------------
134
+ # STYLES
135
+ #------------
136
+ #
137
+ # The markup that is generated has the following properties:
138
+ #
139
+ # Tabs and subtabs that are selected have the class "active".
140
+ # Tabs and subtabs that are not selected have the class "inactive".
141
+ # Tabs that are disabled have the class "disabled"; otherwise, "enabled".
142
+ # Tabs that are not visible do not appear in the markup at all.
143
+ #
144
+ # These classes are provided to make it easier for you to create your
145
+ # own CSS (and JavaScript) for the tabs.
146
+
147
+ # Some styles will be generated for you to get you off to a good start.
148
+ # Scaffolded styles are not meant to be used in production as they
149
+ # generate invalid HTML markup. They are merely meant to give you a
150
+ # head start or an easy way to prototype quickly.
151
+ #
152
+ config.css.scaffolding = true
153
+
154
+ # You can tweak the colors of the generated CSS.
155
+ #
156
+ # config.css.background_color = '#ccc'
157
+ # config.css.text_color = '#444'
158
+ # config.css.active_tab_color = 'white'
159
+ # config.css.hover_tab_color = '#ddd'
160
+ # config.css.inactive_tab_color = '#aaa'
161
+ # config.css.inactive_text_color = '#888'
162
+
163
+ #-----------
164
+ # NOTES
165
+ #-----------
166
+ #
167
+ # In development mode this initializer is reloaded for each request so that
168
+ # you don't have to restart the server each time you edit this file.
169
+
170
+ end
@@ -0,0 +1,11 @@
1
+ module Tabulous
2
+ require 'tabulous/railtie' if defined?(Rails)
3
+ end
4
+
5
+ require 'tabulous/errors'
6
+ require 'tabulous/options'
7
+ require 'tabulous/css_scaffolding'
8
+ require 'tabulous/helpers'
9
+ require 'tabulous/formatter'
10
+ require 'tabulous/tab'
11
+ require 'tabulous/tabulous'
@@ -0,0 +1,111 @@
1
+ module Tabulous
2
+ def self.embed_styles
3
+ return '' unless @@css.scaffolding
4
+ %Q{
5
+ <style type="text/css">
6
+
7
+ body {
8
+ margin: 0;
9
+ padding: 0;
10
+ }
11
+
12
+ #tabs, #tabs ul, #tabs ul li, #tabs ul li span, #tabs ul li a,
13
+ #subtabs, #subtabs ul, #subtabs ul li, #subtabs ul li span, #subtabs ul li a {
14
+ margin: 0;
15
+ padding: 0;
16
+ line-height: 1;
17
+ }
18
+
19
+ #tabs, #tabs a, #tabs a:visited, #tabs a:hover {
20
+ color: #{@@css.text_color};
21
+ }
22
+
23
+ #tabs li.disabled, #tabs li.disabled a, #tabs li.disabled a:visited, #tabs li.disabled a:hover,
24
+ #subtabs li.disabled, #subtabs li.disabled a, #subtabs li.disabled a:visited, #subtabs li.disabled a:hover {
25
+ color: #{@@css.inactive_text_color};
26
+ }
27
+
28
+ #tabs a {
29
+ text-decoration: none;
30
+ }
31
+
32
+ #tabs ul {
33
+ font-size: 24px;
34
+ height: 57px;
35
+ list-style-type: none;
36
+ background-color: #{@@css.background_color};
37
+ padding: 0 0 0 50px;
38
+ }
39
+
40
+ #tabs ul li {
41
+ padding-top: 25px;
42
+ padding-right: 5px;
43
+ float: left;
44
+ }
45
+
46
+ #tabs ul li .tab {
47
+ background-color: #{@@css.inactive_tab_color};
48
+ padding: 5px 15px 3px 15px;
49
+ float: left;
50
+ -webkit-border-top-left-radius: 8px;
51
+ -khtml-border-radius-topleft: 8px;
52
+ -moz-border-radius-topleft: 8px;
53
+ border-top-left-radius: 8px;
54
+ -webkit-border-top-right-radius: 8px;
55
+ -khtml-border-radius-topright: 8px;
56
+ -moz-border-radius-topright: 8px;
57
+ border-top-right-radius: 8px;
58
+ }
59
+
60
+ #tabs ul li.active .tab {
61
+ background-color: #{@@css.active_tab_color};
62
+ padding-bottom: 14px;
63
+ }
64
+
65
+ #tabs ul li a:hover {
66
+ background-color: #{@@css.hover_tab_color};
67
+ }
68
+
69
+ #tabs ul {
70
+ /* float clearing */
71
+ overflow: hidden;
72
+ display: inline-block; /* Necessary to trigger "hasLayout" in IE */
73
+ display: block; /* Sets element back to block */
74
+ }
75
+
76
+ #subtabs ul {
77
+ margin-top: 5px;
78
+ }
79
+
80
+ #subtabs, #subtabs a, #subtabs a:visited {
81
+ color: #{@@css.text_color};
82
+ }
83
+
84
+ #subtabs li.active {
85
+ font-weight: bold;
86
+ }
87
+
88
+ #subtabs a {
89
+ text-decoration: none;
90
+ }
91
+
92
+ #subtabs ul {
93
+ font-size: 16px;
94
+ height: 30px;
95
+ list-style-type: none;
96
+ padding: 0 0 0 50px;
97
+ }
98
+
99
+ #subtabs ul li {
100
+ padding: 10px;
101
+ float: left;
102
+ }
103
+
104
+ #subtabs ul li a:hover {
105
+ text-decoration: underline;
106
+ }
107
+
108
+ </style>
109
+ }
110
+ end
111
+ end