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,162 @@
1
+ module Tabulous
2
+
3
+ def self.setup
4
+ yield self
5
+ end
6
+
7
+ def self.tabs=(ary)
8
+ @@tabs = []
9
+ last_tab = nil
10
+ ary.each do |tab_args|
11
+ begin
12
+ tab = Tab.new(*tab_args)
13
+ rescue ArgumentError
14
+ raise ColumnError,
15
+ "Your config.tabs table is improperly formatted. You probably have " +
16
+ "the wrong number of columns. Or, in other words, one of the arrays " +
17
+ "in the config.tabs array has the wrong number of elements."
18
+ end
19
+ if tab.subtab?
20
+ tab.add_parent(last_tab)
21
+ else
22
+ last_tab = tab
23
+ end
24
+ @@tabs << tab
25
+ end
26
+ end
27
+
28
+ def self.actions=(ary)
29
+ @@actions = {}
30
+ ary.each do |a|
31
+ if a.size != 3
32
+ raise ColumnError,
33
+ "Your config.actions table is improperly formatted. You probably have " +
34
+ "the wrong number of columns. Or, in other words, one of the arrays " +
35
+ "in the config.actions array has the wrong number of elements."
36
+ end
37
+ end
38
+ ary.each do |controller, action, tab|
39
+ @@actions[controller] ||= {}
40
+ @@actions[controller][action] ||= []
41
+ @@actions[controller][action] << tab
42
+ end
43
+ end
44
+
45
+ def self.render_tabs(view)
46
+ return unless tab_defined?(view)
47
+ html = ''
48
+ html << embed_styles
49
+ active_tab = active_tab(view)
50
+ active_tab_name = active_tab.name
51
+ html << (@@html5 ? '<nav id="tabs">' : '<div id="tabs">')
52
+ html << '<ul>'
53
+ for tab in main_tabs
54
+ next if !tab.visible?(view)
55
+ html << render_tab(:text => tab.text(view),
56
+ :path => tab.path(view),
57
+ :active => (tab.name == active_tab_name),
58
+ :enabled => tab.enabled?(view))
59
+ end
60
+ html << '</ul>'
61
+ html << (@@html5 ? '</nav>' : '</div>')
62
+ view.raw(html)
63
+ end
64
+
65
+ def self.render_subtabs(view)
66
+ return unless tab_defined?(view)
67
+ controller = view.controller_name.to_sym
68
+ action = view.action_name.to_sym
69
+ tab = active_tab(view)
70
+ html = ''
71
+ html << (@@html5 ? '<nav id="subtabs">' : '<div id="subtabs">')
72
+ html << '<ul>'
73
+ subtabs = tab.subtabs.select{|subtab| subtab.visible?(view)}
74
+ return if subtabs.empty? && !@@always_render_subtabs
75
+ for subtab in subtabs
76
+ html << render_tab(:text => subtab.text(view),
77
+ :path => subtab.path(view),
78
+ :active => active?(controller, action, subtab.name),
79
+ :enabled => subtab.enabled?(view))
80
+ end
81
+ html << '</ul>'
82
+ html << (@@html5 ? '</nav>' : '</div>')
83
+ view.raw(html)
84
+ end
85
+
86
+ def self.render_tab(options)
87
+ html = ''
88
+ klass = (options[:active] ? 'active' : 'inactive')
89
+ klass << (options[:enabled] ? ' enabled' : ' disabled')
90
+ html << %Q{<li class="#{klass}">}
91
+ if (options[:active] && !@@active_tab_clickable) || options[:enabled] == false
92
+ html << %Q{<span class="tab">#{options[:text]}</span>}
93
+ else
94
+ html << %Q{<a href="#{options[:path]}" class="tab">#{options[:text]}</a>}
95
+ end
96
+ html << '</li>'
97
+ html
98
+ end
99
+
100
+ def self.main_tabs
101
+ @@tabs.select { |t| !t.subtab? }
102
+ end
103
+
104
+ def self.active_tab(view)
105
+ controller = view.controller_name.to_sym
106
+ action = view.action_name.to_sym
107
+ for tab in @@tabs
108
+ if active?(controller, action, tab.name)
109
+ if tab.subtab?
110
+ return tab.parent
111
+ else
112
+ return tab
113
+ end
114
+ end
115
+ end
116
+ nil
117
+ end
118
+
119
+ def self.active?(controller, action, tab_name)
120
+ (@@actions[controller][action] && @@actions[controller][action].include?(tab_name)) ||
121
+ (@@actions[controller][:all_actions] && @@actions[controller][:all_actions].include?(tab_name))
122
+ end
123
+
124
+ def self.tab_defined?(view)
125
+ controller = view.controller_name.to_sym
126
+ action = view.action_name.to_sym
127
+ if @@actions[controller].nil?
128
+ if @@raise_error_if_no_tab_found
129
+ raise NoTabFoundError,
130
+ "No tabs are defined for the controller '#{controller}'. " +
131
+ "You can define a tab for this controller in config/initializers/tabulous.rb " +
132
+ "in the 'config.actions =' section. You can also turn off NoTabFoundErrors " +
133
+ "by setting config.raise_error_if_no_tab_found to false."
134
+ else
135
+ return false
136
+ end
137
+ end
138
+ if @@actions[controller][action].nil? && !@@actions[controller][:all_actions]
139
+ if @@raise_error_if_no_tab_found
140
+ raise NoTabFoundError,
141
+ "No tab is defined for the action '#{action}' in the controller '#{controller}'. " +
142
+ "You can define a tab for this action in config/initializers/tabulous.rb " +
143
+ "in the 'config.actions =' section. You can also turn off NoTabFoundErrors " +
144
+ "by setting config.raise_error_if_no_tab_found to false."
145
+ else
146
+ return false
147
+ end
148
+ end
149
+ tab = active_tab(view)
150
+ if tab.nil?
151
+ alleged_tab = @@actions[controller][action]
152
+ if alleged_tab.nil?
153
+ alleged_tab = @@actions[controller][:all_actions]
154
+ end
155
+ raise UnknownTabError,
156
+ "You've hooked the action '#{action}' in controller '#{controller}' to " +
157
+ "the tab '#{alleged_tab}', but this tab is not defined."
158
+ end
159
+ true
160
+ end
161
+
162
+ end
@@ -0,0 +1,3 @@
1
+ module Tabulous
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,11 @@
1
+ namespace :tabs do
2
+ desc "Prettify config/initializers/tabulous.rb"
3
+ task :format do
4
+ require File.expand_path('../tabulous/formatter', File.dirname(__FILE__))
5
+ filename = File.join(Rails.root.to_s, 'config', 'initializers', 'tabulous.rb')
6
+ reformatted = Tabulous::Formatter.format(IO.readlines(filename))
7
+ File.open(filename, 'w') do |f|
8
+ f.puts reformatted
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/tabulous/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "tabulous"
6
+ s.version = Tabulous::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Wyatt Greene"]
9
+ s.email = ["techiferous@gmail.com"]
10
+ s.homepage = "http://rubygems.org/gems/tabulous"
11
+ s.summary = "Easy tabbed navigation for Rails."
12
+ s.description = "Tabulous provides an easy way to add tabs to your Rails application."
13
+
14
+ s.required_rubygems_version = ">= 1.4.0"
15
+ s.rubyforge_project = "tabulous"
16
+
17
+ s.add_dependency "colored", "~> 1.2.0"
18
+ s.add_dependency "rails", "~> 3.0.0"
19
+ s.add_development_dependency "bundler", "~> 1.0.10"
20
+ s.add_development_dependency "capybara", "~> 0.4.1.2"
21
+ if RUBY_VERSION < "1.9"
22
+ s.add_development_dependency "redgreen"
23
+ end
24
+ s.add_development_dependency "launchy"
25
+ s.add_development_dependency "diffy"
26
+
27
+ s.files = `git ls-files`.split("\n")
28
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
29
+ s.require_path = 'lib'
30
+ end
@@ -0,0 +1,3 @@
1
+ Gemfile.lock
2
+ log/*.log
3
+ tmp/
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ # Do not add gems directly to this file. Add them to the test/test_application_gemfile
4
+ # instead and they will be automatically loaded in.
5
+
6
+ require File.expand_path('../../test_application_gemfile', File.dirname(__FILE__))
7
+ shared_test_application_gems(self)
@@ -0,0 +1,7 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+ require 'rake'
6
+
7
+ Main::Application.load_tasks
@@ -0,0 +1,3 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ end
@@ -0,0 +1,83 @@
1
+ class GalaxiesController < ApplicationController
2
+ # GET /galaxies
3
+ # GET /galaxies.xml
4
+ def index
5
+ @galaxies = Galaxy.all
6
+
7
+ respond_to do |format|
8
+ format.html # index.html.erb
9
+ format.xml { render :xml => @galaxies }
10
+ end
11
+ end
12
+
13
+ # GET /galaxies/1
14
+ # GET /galaxies/1.xml
15
+ def show
16
+ @galaxy = Galaxy.find(params[:id])
17
+
18
+ respond_to do |format|
19
+ format.html # show.html.erb
20
+ format.xml { render :xml => @galaxy }
21
+ end
22
+ end
23
+
24
+ # GET /galaxies/new
25
+ # GET /galaxies/new.xml
26
+ def new
27
+ @galaxy = Galaxy.new
28
+
29
+ respond_to do |format|
30
+ format.html # new.html.erb
31
+ format.xml { render :xml => @galaxy }
32
+ end
33
+ end
34
+
35
+ # GET /galaxies/1/edit
36
+ def edit
37
+ @galaxy = Galaxy.find(params[:id])
38
+ end
39
+
40
+ # POST /galaxies
41
+ # POST /galaxies.xml
42
+ def create
43
+ @galaxy = Galaxy.new(params[:galaxy])
44
+
45
+ respond_to do |format|
46
+ if @galaxy.save
47
+ format.html { redirect_to(@galaxy, :notice => 'Galaxy was successfully created.') }
48
+ format.xml { render :xml => @galaxy, :status => :created, :location => @galaxy }
49
+ else
50
+ format.html { render :action => "new" }
51
+ format.xml { render :xml => @galaxy.errors, :status => :unprocessable_entity }
52
+ end
53
+ end
54
+ end
55
+
56
+ # PUT /galaxies/1
57
+ # PUT /galaxies/1.xml
58
+ def update
59
+ @galaxy = Galaxy.find(params[:id])
60
+
61
+ respond_to do |format|
62
+ if @galaxy.update_attributes(params[:galaxy])
63
+ format.html { redirect_to(@galaxy, :notice => 'Galaxy was successfully updated.') }
64
+ format.xml { head :ok }
65
+ else
66
+ format.html { render :action => "edit" }
67
+ format.xml { render :xml => @galaxy.errors, :status => :unprocessable_entity }
68
+ end
69
+ end
70
+ end
71
+
72
+ # DELETE /galaxies/1
73
+ # DELETE /galaxies/1.xml
74
+ def destroy
75
+ @galaxy = Galaxy.find(params[:id])
76
+ @galaxy.destroy
77
+
78
+ respond_to do |format|
79
+ format.html { redirect_to(galaxies_url) }
80
+ format.xml { head :ok }
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,4 @@
1
+ class HomeController < ApplicationController
2
+ def index
3
+ end
4
+ end
@@ -0,0 +1,83 @@
1
+ class PlanetsController < ApplicationController
2
+ # GET /planets
3
+ # GET /planets.xml
4
+ def index
5
+ @planets = Planet.all
6
+
7
+ respond_to do |format|
8
+ format.html # index.html.erb
9
+ format.xml { render :xml => @planets }
10
+ end
11
+ end
12
+
13
+ # GET /planets/1
14
+ # GET /planets/1.xml
15
+ def show
16
+ @planet = Planet.find(params[:id])
17
+
18
+ respond_to do |format|
19
+ format.html # show.html.erb
20
+ format.xml { render :xml => @planet }
21
+ end
22
+ end
23
+
24
+ # GET /planets/new
25
+ # GET /planets/new.xml
26
+ def new
27
+ @planet = Planet.new
28
+
29
+ respond_to do |format|
30
+ format.html # new.html.erb
31
+ format.xml { render :xml => @planet }
32
+ end
33
+ end
34
+
35
+ # GET /planets/1/edit
36
+ def edit
37
+ @planet = Planet.find(params[:id])
38
+ end
39
+
40
+ # POST /planets
41
+ # POST /planets.xml
42
+ def create
43
+ @planet = Planet.new(params[:planet])
44
+
45
+ respond_to do |format|
46
+ if @planet.save
47
+ format.html { redirect_to(@planet, :notice => 'Planet was successfully created.') }
48
+ format.xml { render :xml => @planet, :status => :created, :location => @planet }
49
+ else
50
+ format.html { render :action => "new" }
51
+ format.xml { render :xml => @planet.errors, :status => :unprocessable_entity }
52
+ end
53
+ end
54
+ end
55
+
56
+ # PUT /planets/1
57
+ # PUT /planets/1.xml
58
+ def update
59
+ @planet = Planet.find(params[:id])
60
+
61
+ respond_to do |format|
62
+ if @planet.update_attributes(params[:planet])
63
+ format.html { redirect_to(@planet, :notice => 'Planet was successfully updated.') }
64
+ format.xml { head :ok }
65
+ else
66
+ format.html { render :action => "edit" }
67
+ format.xml { render :xml => @planet.errors, :status => :unprocessable_entity }
68
+ end
69
+ end
70
+ end
71
+
72
+ # DELETE /planets/1
73
+ # DELETE /planets/1.xml
74
+ def destroy
75
+ @planet = Planet.find(params[:id])
76
+ @planet.destroy
77
+
78
+ respond_to do |format|
79
+ format.html { redirect_to(planets_url) }
80
+ format.xml { head :ok }
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,83 @@
1
+ class StarsController < ApplicationController
2
+ # GET /stars
3
+ # GET /stars.xml
4
+ def index
5
+ @stars = Star.all
6
+
7
+ respond_to do |format|
8
+ format.html # index.html.erb
9
+ format.xml { render :xml => @stars }
10
+ end
11
+ end
12
+
13
+ # GET /stars/1
14
+ # GET /stars/1.xml
15
+ def show
16
+ @star = Star.find(params[:id])
17
+
18
+ respond_to do |format|
19
+ format.html # show.html.erb
20
+ format.xml { render :xml => @star }
21
+ end
22
+ end
23
+
24
+ # GET /stars/new
25
+ # GET /stars/new.xml
26
+ def new
27
+ @star = Star.new
28
+
29
+ respond_to do |format|
30
+ format.html # new.html.erb
31
+ format.xml { render :xml => @star }
32
+ end
33
+ end
34
+
35
+ # GET /stars/1/edit
36
+ def edit
37
+ @star = Star.find(params[:id])
38
+ end
39
+
40
+ # POST /stars
41
+ # POST /stars.xml
42
+ def create
43
+ @star = Star.new(params[:star])
44
+
45
+ respond_to do |format|
46
+ if @star.save
47
+ format.html { redirect_to(@star, :notice => 'Star was successfully created.') }
48
+ format.xml { render :xml => @star, :status => :created, :location => @star }
49
+ else
50
+ format.html { render :action => "new" }
51
+ format.xml { render :xml => @star.errors, :status => :unprocessable_entity }
52
+ end
53
+ end
54
+ end
55
+
56
+ # PUT /stars/1
57
+ # PUT /stars/1.xml
58
+ def update
59
+ @star = Star.find(params[:id])
60
+
61
+ respond_to do |format|
62
+ if @star.update_attributes(params[:star])
63
+ format.html { redirect_to(@star, :notice => 'Star was successfully updated.') }
64
+ format.xml { head :ok }
65
+ else
66
+ format.html { render :action => "edit" }
67
+ format.xml { render :xml => @star.errors, :status => :unprocessable_entity }
68
+ end
69
+ end
70
+ end
71
+
72
+ # DELETE /stars/1
73
+ # DELETE /stars/1.xml
74
+ def destroy
75
+ @star = Star.find(params[:id])
76
+ @star.destroy
77
+
78
+ respond_to do |format|
79
+ format.html { redirect_to(stars_url) }
80
+ format.xml { head :ok }
81
+ end
82
+ end
83
+ end