tabulous 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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