ext_form 0.1.4

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 (333) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +31 -0
  4. data/app/assets/javascripts/ext_form/application.js +78 -0
  5. data/app/assets/javascripts/typeahead.js +1159 -0
  6. data/app/assets/stylesheets/ext_form/application.scss +15 -0
  7. data/app/assets/stylesheets/ext_form/application_bootstrap.css.scss +197 -0
  8. data/app/assets/stylesheets/ext_form/base.css.scss +32 -0
  9. data/config/routes.rb +2 -0
  10. data/lib/ext_form/builders/form_builder_base.rb +224 -0
  11. data/lib/ext_form/builders.rb +10 -0
  12. data/lib/ext_form/components/input_addons.rb +34 -0
  13. data/lib/ext_form/components.rb +7 -0
  14. data/lib/ext_form/engine.rb +14 -0
  15. data/lib/ext_form/helpers/form_helper.rb +222 -0
  16. data/lib/ext_form/helpers/form_tag_helper.rb +60 -0
  17. data/lib/ext_form/helpers/tags/auto_complete.rb +25 -0
  18. data/lib/ext_form/helpers/tags/collection_select.rb +19 -0
  19. data/lib/ext_form/helpers/tags/dt_picker.rb +27 -0
  20. data/lib/ext_form/helpers/tags/grouped_collection_select.rb +19 -0
  21. data/lib/ext_form/helpers/tags.rb +12 -0
  22. data/lib/ext_form/inputs/auto_complete.rb +11 -0
  23. data/lib/ext_form/inputs/base_mixin.rb +11 -0
  24. data/lib/ext_form/inputs/bootstrap_inputs_mixin.rb +13 -0
  25. data/lib/ext_form/inputs/collection_select.rb +15 -0
  26. data/lib/ext_form/inputs/dt_picker.rb +20 -0
  27. data/lib/ext_form/inputs/grouped_collection_select.rb +13 -0
  28. data/lib/ext_form/inputs.rb +15 -0
  29. data/lib/ext_form/layouts/base_layout.rb +82 -0
  30. data/lib/ext_form/layouts/bootstrap_layout.rb +23 -0
  31. data/lib/ext_form/layouts/default_layout.rb +29 -0
  32. data/lib/ext_form/layouts.rb +11 -0
  33. data/lib/ext_form/version.rb +3 -0
  34. data/lib/ext_form/wrappers/many_mixin.rb +18 -0
  35. data/lib/ext_form/wrappers/mixin.rb +49 -0
  36. data/lib/ext_form/wrappers/single_mixin.rb +18 -0
  37. data/lib/ext_form/wrappers.rb +11 -0
  38. data/lib/ext_form.rb +52 -0
  39. data/lib/generators/ext_form/USAGE +3 -0
  40. data/lib/generators/ext_form/install_generator.rb +113 -0
  41. data/lib/generators/ext_form/templates/README +15 -0
  42. data/lib/generators/ext_form/templates/_form.html.erb +12 -0
  43. data/lib/generators/ext_form/templates/_form.html.haml +12 -0
  44. data/lib/generators/ext_form/templates/_form.html.slim +12 -0
  45. data/lib/generators/ext_form/templates/config/initializers/z_ext_form.rb +70 -0
  46. data/lib/generators/ext_form/templates/config/initializers/z_ext_form_bootstrap.rb +59 -0
  47. data/lib/generators/ext_form/templates/config/locales/ext_form.en.yml +2 -0
  48. data/lib/tasks/ext_form_tasks.rake +4 -0
  49. data/spec/builders/ext_form_builder_bs_spec.rb +78 -0
  50. data/spec/builders/ext_form_builder_spec.rb +100 -0
  51. data/spec/dummy/README.rdoc +28 -0
  52. data/spec/dummy/Rakefile +6 -0
  53. data/spec/dummy/app/assets/javascripts/application.js +27 -0
  54. data/spec/dummy/app/assets/javascripts/order_headers.js +2 -0
  55. data/spec/dummy/app/assets/javascripts/order_lines.js +2 -0
  56. data/spec/dummy/app/assets/javascripts/shipments.js +2 -0
  57. data/spec/dummy/app/assets/stylesheets/application.css.scss +17 -0
  58. data/spec/dummy/app/assets/stylesheets/order_headers.css +4 -0
  59. data/spec/dummy/app/assets/stylesheets/order_lines.css +4 -0
  60. data/spec/dummy/app/assets/stylesheets/scaffold.css +56 -0
  61. data/spec/dummy/app/assets/stylesheets/shipments.css +4 -0
  62. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  63. data/spec/dummy/app/controllers/order_headers_controller.rb +62 -0
  64. data/spec/dummy/app/controllers/order_lines_controller.rb +58 -0
  65. data/spec/dummy/app/controllers/shipments_controller.rb +58 -0
  66. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  67. data/spec/dummy/app/helpers/order_headers_helper.rb +2 -0
  68. data/spec/dummy/app/helpers/order_lines_helper.rb +2 -0
  69. data/spec/dummy/app/helpers/shipments_helper.rb +2 -0
  70. data/spec/dummy/app/models/order_header.rb +9 -0
  71. data/spec/dummy/app/models/order_line.rb +6 -0
  72. data/spec/dummy/app/models/order_type.rb +2 -0
  73. data/spec/dummy/app/models/shipment.rb +3 -0
  74. data/spec/dummy/app/views/layouts/application.html.erb +17 -0
  75. data/spec/dummy/app/views/order_headers/_form.html.erb +53 -0
  76. data/spec/dummy/app/views/order_headers/edit.html.erb +3 -0
  77. data/spec/dummy/app/views/order_headers/index.html.erb +29 -0
  78. data/spec/dummy/app/views/order_headers/new.html.erb +5 -0
  79. data/spec/dummy/app/views/order_headers/show.html.erb +14 -0
  80. data/spec/dummy/app/views/order_lines/_form.html.erb +33 -0
  81. data/spec/dummy/app/views/order_lines/edit.html.erb +6 -0
  82. data/spec/dummy/app/views/order_lines/index.html.erb +33 -0
  83. data/spec/dummy/app/views/order_lines/new.html.erb +5 -0
  84. data/spec/dummy/app/views/order_lines/show.html.erb +24 -0
  85. data/spec/dummy/app/views/shipments/_form.html.erb +37 -0
  86. data/spec/dummy/app/views/shipments/edit.html.erb +6 -0
  87. data/spec/dummy/app/views/shipments/index.html.erb +35 -0
  88. data/spec/dummy/app/views/shipments/new.html.erb +5 -0
  89. data/spec/dummy/app/views/shipments/show.html.erb +29 -0
  90. data/spec/dummy/bin/bundle +3 -0
  91. data/spec/dummy/bin/rails +4 -0
  92. data/spec/dummy/bin/rake +4 -0
  93. data/spec/dummy/config/application.rb +28 -0
  94. data/spec/dummy/config/boot.rb +5 -0
  95. data/spec/dummy/config/database.yml +25 -0
  96. data/spec/dummy/config/environment.rb +5 -0
  97. data/spec/dummy/config/environments/development.rb +29 -0
  98. data/spec/dummy/config/environments/production.rb +80 -0
  99. data/spec/dummy/config/environments/test.rb +36 -0
  100. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  101. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  102. data/spec/dummy/config/initializers/inflections.rb +16 -0
  103. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  104. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  105. data/spec/dummy/config/initializers/session_store.rb +3 -0
  106. data/spec/dummy/config/initializers/simple_form.rb +145 -0
  107. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  108. data/spec/dummy/config/initializers/z_ext_form.rb +70 -0
  109. data/spec/dummy/config/initializers/z_ext_form_bootstrap.rb +59 -0
  110. data/spec/dummy/config/locales/en.yml +23 -0
  111. data/spec/dummy/config/locales/ext_form.en.yml +26 -0
  112. data/spec/dummy/config/locales/simple_form.en.yml +26 -0
  113. data/spec/dummy/config/routes.rb +10 -0
  114. data/spec/dummy/config.ru +4 -0
  115. data/spec/dummy/db/development.sqlite3 +0 -0
  116. data/spec/dummy/db/migrate/20130822091938_create_order_headers.rb +10 -0
  117. data/spec/dummy/db/migrate/20130822092035_create_order_lines.rb +12 -0
  118. data/spec/dummy/db/migrate/20130822092136_create_shipments.rb +13 -0
  119. data/spec/dummy/db/migrate/20130913025429_add_order_date_to_order_headers.rb +5 -0
  120. data/spec/dummy/db/migrate/20130913082503_add_bill_to_customer_to_order_headers.rb +7 -0
  121. data/spec/dummy/db/migrate/20130914101200_create_order_types.rb +9 -0
  122. data/spec/dummy/db/migrate/20130914101232_add_order_type_id_to_order_headers.rb +5 -0
  123. data/spec/dummy/db/schema.rb +64 -0
  124. data/spec/dummy/db/seeds.rb +3 -0
  125. data/spec/dummy/db/test.sqlite3 +0 -0
  126. data/spec/dummy/lib/templates/erb/scaffold/_form.html.erb +12 -0
  127. data/spec/dummy/lib/templates/slim/scaffold/_form.html.slim +12 -0
  128. data/spec/dummy/log/development.log +30851 -0
  129. data/spec/dummy/log/test.log +8888 -0
  130. data/spec/dummy/public/404.html +58 -0
  131. data/spec/dummy/public/422.html +58 -0
  132. data/spec/dummy/public/500.html +57 -0
  133. data/spec/dummy/public/favicon.ico +0 -0
  134. data/spec/dummy/public/javascripts/nested_form.js +120 -0
  135. data/spec/dummy/spec/factories/order_types.rb +7 -0
  136. data/spec/dummy/tmp/cache/assets/development/sass/0be6a8d566db001f251fcb3d330b625bdcde50b0/select2.css.scssc +0 -0
  137. data/spec/dummy/tmp/cache/assets/development/sass/0f754ef2ba2bade74c446fd0dc8d2c538b2ee4ba/bootstrap-datetimepicker.cssc +0 -0
  138. data/spec/dummy/tmp/cache/assets/development/sass/43e39f3776203b555edf4427cbeca13a3e80bf4e/application.scssc +0 -0
  139. data/spec/dummy/tmp/cache/assets/development/sass/43e39f3776203b555edf4427cbeca13a3e80bf4e/application_bootstrap.css.scssc +0 -0
  140. data/spec/dummy/tmp/cache/assets/development/sass/43e39f3776203b555edf4427cbeca13a3e80bf4e/base.css.scssc +0 -0
  141. data/spec/dummy/tmp/cache/assets/development/sass/95877ca3fb97306427e6a8c3200a77fa726c2979/bootstrap-responsive.scssc +0 -0
  142. data/spec/dummy/tmp/cache/assets/development/sass/95877ca3fb97306427e6a8c3200a77fa726c2979/bootstrap.scssc +0 -0
  143. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_accordion.scssc +0 -0
  144. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_alerts.scssc +0 -0
  145. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_breadcrumbs.scssc +0 -0
  146. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_button-groups.scssc +0 -0
  147. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_buttons.scssc +0 -0
  148. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_carousel.scssc +0 -0
  149. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_close.scssc +0 -0
  150. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_code.scssc +0 -0
  151. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_component-animations.scssc +0 -0
  152. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_dropdowns.scssc +0 -0
  153. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_forms.scssc +0 -0
  154. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_grid.scssc +0 -0
  155. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_hero-unit.scssc +0 -0
  156. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_labels-badges.scssc +0 -0
  157. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_layouts.scssc +0 -0
  158. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_media.scssc +0 -0
  159. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_mixins.scssc +0 -0
  160. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_modals.scssc +0 -0
  161. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_navbar.scssc +0 -0
  162. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_navs.scssc +0 -0
  163. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_pager.scssc +0 -0
  164. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_pagination.scssc +0 -0
  165. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_popovers.scssc +0 -0
  166. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_progress-bars.scssc +0 -0
  167. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_reset.scssc +0 -0
  168. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_responsive-1200px-min.scssc +0 -0
  169. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_responsive-767px-max.scssc +0 -0
  170. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_responsive-768px-979px.scssc +0 -0
  171. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_responsive-navbar.scssc +0 -0
  172. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_responsive-utilities.scssc +0 -0
  173. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_scaffolding.scssc +0 -0
  174. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_sprites.scssc +0 -0
  175. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_tables.scssc +0 -0
  176. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_thumbnails.scssc +0 -0
  177. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_tooltip.scssc +0 -0
  178. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_type.scssc +0 -0
  179. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_utilities.scssc +0 -0
  180. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_variables.scssc +0 -0
  181. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/_wells.scssc +0 -0
  182. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/bootstrap.scssc +0 -0
  183. data/spec/dummy/tmp/cache/assets/development/sass/c75ed21fe4fe5a931216dc17f876dea4e6c936a7/responsive.scssc +0 -0
  184. data/spec/dummy/tmp/cache/assets/development/sass/d8cdc3e1698ff449e2e9ab35ca24a00a8d724935/application.css.scssc +0 -0
  185. data/spec/dummy/tmp/cache/assets/development/sass/d8cdc3e1698ff449e2e9ab35ca24a00a8d724935/scaffolds.css.scssc +0 -0
  186. data/spec/dummy/tmp/cache/assets/development/sass/d8cdc3e1698ff449e2e9ab35ca24a00a8d724935/test_scaflds.css.scssc +0 -0
  187. data/spec/dummy/tmp/cache/assets/development/sprockets/00171108bd75279e653c1ffb5b4650b8 +0 -0
  188. data/spec/dummy/tmp/cache/assets/development/sprockets/05029f2e1c68338ac88af8005acab3ca +0 -0
  189. data/spec/dummy/tmp/cache/assets/development/sprockets/08318fdb5f5b783c22442a6aeb73730e +0 -0
  190. data/spec/dummy/tmp/cache/assets/development/sprockets/08f00d4a1bac197d382c2269a184f9e4 +0 -0
  191. data/spec/dummy/tmp/cache/assets/development/sprockets/0b6c06f6bcf535567c19f70f7aa5144d +0 -0
  192. data/spec/dummy/tmp/cache/assets/development/sprockets/0b9076b70e22dd7976e589018cdf65ca +0 -0
  193. data/spec/dummy/tmp/cache/assets/development/sprockets/0e8461b429e0249b8dc74d457fcc17d3 +0 -0
  194. data/spec/dummy/tmp/cache/assets/development/sprockets/0f074c0ea10680a3ba979bbd1d2ff756 +0 -0
  195. data/spec/dummy/tmp/cache/assets/development/sprockets/0f5877c1fb159c1a5f1602569a0cdde2 +0 -0
  196. data/spec/dummy/tmp/cache/assets/development/sprockets/0f8cf3c40768cf2ab52c613a7efc30cb +0 -0
  197. data/spec/dummy/tmp/cache/assets/development/sprockets/10fcfbe6ebae11a40c8eac41939a1b9a +0 -0
  198. data/spec/dummy/tmp/cache/assets/development/sprockets/126ebaa8ad57e48772c035caac2ed632 +0 -0
  199. data/spec/dummy/tmp/cache/assets/development/sprockets/13c6f1c4603d5736407a6b5f7889a056 +0 -0
  200. data/spec/dummy/tmp/cache/assets/development/sprockets/13f8355b45d7c46c05177fef3b7f6283 +0 -0
  201. data/spec/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  202. data/spec/dummy/tmp/cache/assets/development/sprockets/157d2eedb817dece09700185cd4101e3 +0 -0
  203. data/spec/dummy/tmp/cache/assets/development/sprockets/16039dc737e753516f4399dcd38d6de7 +0 -0
  204. data/spec/dummy/tmp/cache/assets/development/sprockets/19699f0bd9bbacb926aa665d057d7dcc +0 -0
  205. data/spec/dummy/tmp/cache/assets/development/sprockets/2013f24e3245656ca1e5890649a0b023 +0 -0
  206. data/spec/dummy/tmp/cache/assets/development/sprockets/26bd44751cc9640593dc583d6be8410d +0 -0
  207. data/spec/dummy/tmp/cache/assets/development/sprockets/272f5096d49f011351e9f4780c313741 +0 -0
  208. data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  209. data/spec/dummy/tmp/cache/assets/development/sprockets/32ef1c9e94a83350bad5e887c416c5b6 +0 -0
  210. data/spec/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  211. data/spec/dummy/tmp/cache/assets/development/sprockets/367865b241c60ef0e9a85c9f9910f7d4 +0 -0
  212. data/spec/dummy/tmp/cache/assets/development/sprockets/371bf96e99717688ed7313a0c53f4212 +0 -0
  213. data/spec/dummy/tmp/cache/assets/development/sprockets/37984c7de5e7d22002a378234035e51c +0 -0
  214. data/spec/dummy/tmp/cache/assets/development/sprockets/4201264f7710f91dc1c389a2497eda7d +0 -0
  215. data/spec/dummy/tmp/cache/assets/development/sprockets/4843087e4f4577291013564353d9be98 +0 -0
  216. data/spec/dummy/tmp/cache/assets/development/sprockets/490b125495df24b66caa52d70f8aa64d +0 -0
  217. data/spec/dummy/tmp/cache/assets/development/sprockets/4c9470e682578ab5fc183f98fae5f42d +0 -0
  218. data/spec/dummy/tmp/cache/assets/development/sprockets/4e81b6b6eb1e1462b1eea2caee6bfcc6 +0 -0
  219. data/spec/dummy/tmp/cache/assets/development/sprockets/510da110ae528e2d22533be39ff696c5 +0 -0
  220. data/spec/dummy/tmp/cache/assets/development/sprockets/518c73ecd762cbf6d85a3ae693e08d01 +0 -0
  221. data/spec/dummy/tmp/cache/assets/development/sprockets/56401bbafd08927b55572c8ef7e88883 +0 -0
  222. data/spec/dummy/tmp/cache/assets/development/sprockets/5865993e4fa54b7f6f0186ebaffff12b +0 -0
  223. data/spec/dummy/tmp/cache/assets/development/sprockets/59f25755df49e4db5915553e3d2ef412 +0 -0
  224. data/spec/dummy/tmp/cache/assets/development/sprockets/5a48dae6fe5b78da3082b1347022ee01 +0 -0
  225. data/spec/dummy/tmp/cache/assets/development/sprockets/5f62321f43b55988b6cb95367556d822 +0 -0
  226. data/spec/dummy/tmp/cache/assets/development/sprockets/61fab520b090f94084c9a7ffc402ad3c +0 -0
  227. data/spec/dummy/tmp/cache/assets/development/sprockets/653178c2e0c5d134069e58196f7bf28e +0 -0
  228. data/spec/dummy/tmp/cache/assets/development/sprockets/661c74f15a009d482fdad85f811e6f8e +0 -0
  229. data/spec/dummy/tmp/cache/assets/development/sprockets/6668d3ee30c1513097c95bcc0a27696a +0 -0
  230. data/spec/dummy/tmp/cache/assets/development/sprockets/690b40f9a765547b660ac81cbd5ed378 +0 -0
  231. data/spec/dummy/tmp/cache/assets/development/sprockets/6bdff36d9dbeb7ae3e6802b482a04668 +0 -0
  232. data/spec/dummy/tmp/cache/assets/development/sprockets/6eaa97256ef2d58208ab91c60707acdb +0 -0
  233. data/spec/dummy/tmp/cache/assets/development/sprockets/6fa120c855c745c904828746e82b2b07 +0 -0
  234. data/spec/dummy/tmp/cache/assets/development/sprockets/6fc757c2c8329244ca95d6909865bbc2 +0 -0
  235. data/spec/dummy/tmp/cache/assets/development/sprockets/715840f8887bc1e70ef3cc18b429cbc8 +0 -0
  236. data/spec/dummy/tmp/cache/assets/development/sprockets/754b02ea2ed1c85b7756de6452f4aeb7 +0 -0
  237. data/spec/dummy/tmp/cache/assets/development/sprockets/764fdaef2f219fafc8db0923a56c23a3 +0 -0
  238. data/spec/dummy/tmp/cache/assets/development/sprockets/78fdc1d9add39ed3fdcbf7cae3df4190 +0 -0
  239. data/spec/dummy/tmp/cache/assets/development/sprockets/7a7280187e89f6c4256217ea0fe1e787 +0 -0
  240. data/spec/dummy/tmp/cache/assets/development/sprockets/7b2d3e5e25b0901f78fbf8c9cb9570c4 +0 -0
  241. data/spec/dummy/tmp/cache/assets/development/sprockets/84eb79ed8e43cf9414e6ecfd38c5a19f +0 -0
  242. data/spec/dummy/tmp/cache/assets/development/sprockets/87172f2d7a412d1fe87d7775d589b883 +0 -0
  243. data/spec/dummy/tmp/cache/assets/development/sprockets/871fe15e38e1cf354ac33b4faf796fd3 +0 -0
  244. data/spec/dummy/tmp/cache/assets/development/sprockets/875849c72f053c7a7674e9fd72ee2cd4 +0 -0
  245. data/spec/dummy/tmp/cache/assets/development/sprockets/87a55c890eedab0cc5d1e3f2c2b2da4b +0 -0
  246. data/spec/dummy/tmp/cache/assets/development/sprockets/88741eb863751c5d5adb82282f6df5cd +0 -0
  247. data/spec/dummy/tmp/cache/assets/development/sprockets/8ab512c9b33ac90e699b73469d71f061 +0 -0
  248. data/spec/dummy/tmp/cache/assets/development/sprockets/8cc360b254f1bff91753f954e7591a9b +0 -0
  249. data/spec/dummy/tmp/cache/assets/development/sprockets/8ec990d84f5dedd35001397078415137 +0 -0
  250. data/spec/dummy/tmp/cache/assets/development/sprockets/9181401ef96921b28b49d4ec48261a4d +0 -0
  251. data/spec/dummy/tmp/cache/assets/development/sprockets/9409af55392b7f03edb441d5b53b931c +0 -0
  252. data/spec/dummy/tmp/cache/assets/development/sprockets/94e46c0e76c8f392586af76b0f6c6e93 +0 -0
  253. data/spec/dummy/tmp/cache/assets/development/sprockets/968566581a35be861fa4f8fed757dcae +0 -0
  254. data/spec/dummy/tmp/cache/assets/development/sprockets/96f8ac0ca90b5e46fb770d1695a77b2d +0 -0
  255. data/spec/dummy/tmp/cache/assets/development/sprockets/9b51a99e821d1802733dceac6764d18f +0 -0
  256. data/spec/dummy/tmp/cache/assets/development/sprockets/9d8681a4ce63f327a868f759096673e8 +0 -0
  257. data/spec/dummy/tmp/cache/assets/development/sprockets/a004f4ca229f6e9e761d2c86226e04f4 +0 -0
  258. data/spec/dummy/tmp/cache/assets/development/sprockets/a0a671e624f03533a82b1ec899bf3b21 +0 -0
  259. data/spec/dummy/tmp/cache/assets/development/sprockets/a0f669003bef02490064a16cfdb916fe +0 -0
  260. data/spec/dummy/tmp/cache/assets/development/sprockets/a411f643e05384fdb860f193e1dbe8f8 +0 -0
  261. data/spec/dummy/tmp/cache/assets/development/sprockets/a4abc5f3fc1bfe41be3470836766d110 +0 -0
  262. data/spec/dummy/tmp/cache/assets/development/sprockets/a82a869a86d5cbcbb101123eb6448f0c +0 -0
  263. data/spec/dummy/tmp/cache/assets/development/sprockets/a97cd428904e5968d05f7d3a5fd50f85 +0 -0
  264. data/spec/dummy/tmp/cache/assets/development/sprockets/aa87366fe7cd02f1be035665580cf066 +0 -0
  265. data/spec/dummy/tmp/cache/assets/development/sprockets/ada9a8c9882e963e6b98cdcaf20af34f +0 -0
  266. data/spec/dummy/tmp/cache/assets/development/sprockets/af326fcf9b4f69ff70d3610d0696b585 +0 -0
  267. data/spec/dummy/tmp/cache/assets/development/sprockets/af5ab48d2f371513fb609f8bdec3ac42 +0 -0
  268. data/spec/dummy/tmp/cache/assets/development/sprockets/b245fe00601bf4b4c2bd6ce9286a53dc +0 -0
  269. data/spec/dummy/tmp/cache/assets/development/sprockets/b51a3679ccee92d6e374deac3359cc69 +0 -0
  270. data/spec/dummy/tmp/cache/assets/development/sprockets/baed877d386dc374496dcd62af36bc5b +0 -0
  271. data/spec/dummy/tmp/cache/assets/development/sprockets/bc6f2f1da483ac27102f9412ee294dbf +0 -0
  272. data/spec/dummy/tmp/cache/assets/development/sprockets/bcca522c6302f184f12fe0e8a7d7e71a +0 -0
  273. data/spec/dummy/tmp/cache/assets/development/sprockets/bd3936370d0f952ada5774e2230046ed +0 -0
  274. data/spec/dummy/tmp/cache/assets/development/sprockets/c04a836e22ec09c7eae6eae9349efee3 +0 -0
  275. data/spec/dummy/tmp/cache/assets/development/sprockets/c13fc73ceafa45876a901b3e775b83ae +0 -0
  276. data/spec/dummy/tmp/cache/assets/development/sprockets/c2816385f6bc1d4ef24315437e9353d3 +0 -0
  277. data/spec/dummy/tmp/cache/assets/development/sprockets/c4e265ba144f19c1f646f9d8271c0702 +0 -0
  278. data/spec/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  279. data/spec/dummy/tmp/cache/assets/development/sprockets/d4c36568a5145e04bfbbefd37fecdde7 +0 -0
  280. data/spec/dummy/tmp/cache/assets/development/sprockets/d63d1c956772687b2dd2c9b43533e795 +0 -0
  281. data/spec/dummy/tmp/cache/assets/development/sprockets/d75dd624db3682fd4fed243c5f6f2e69 +0 -0
  282. data/spec/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  283. data/spec/dummy/tmp/cache/assets/development/sprockets/d7d3659361bd25606f9efaba128bf4c1 +0 -0
  284. data/spec/dummy/tmp/cache/assets/development/sprockets/d9fa58e1385bfb03f2ede65c90f36d70 +0 -0
  285. data/spec/dummy/tmp/cache/assets/development/sprockets/da8e37f2c9e3ea8f443def70515d1df0 +0 -0
  286. data/spec/dummy/tmp/cache/assets/development/sprockets/dcff3d1cd16d434b55e09399722e68be +0 -0
  287. data/spec/dummy/tmp/cache/assets/development/sprockets/e18f7bb0b671acf59ad700724547a456 +0 -0
  288. data/spec/dummy/tmp/cache/assets/development/sprockets/e459168835a5f27b832ace20874f7c10 +0 -0
  289. data/spec/dummy/tmp/cache/assets/development/sprockets/e618b87b000e1c8d606542b2a7b4936f +0 -0
  290. data/spec/dummy/tmp/cache/assets/development/sprockets/e6df0f40358bfc2568038d9cf71859a5 +0 -0
  291. data/spec/dummy/tmp/cache/assets/development/sprockets/ebe8c427280f71fed250770f7d5e0af8 +0 -0
  292. data/spec/dummy/tmp/cache/assets/development/sprockets/edefa48dfc6b66b08d68e6438d1344b4 +0 -0
  293. data/spec/dummy/tmp/cache/assets/development/sprockets/ee70ec49c833625099b94820cbfaf238 +0 -0
  294. data/spec/dummy/tmp/cache/assets/development/sprockets/eea8d1c182d93d92a52f24a90d5c92af +0 -0
  295. data/spec/dummy/tmp/cache/assets/development/sprockets/efe3e82d4fe0ca8a3427678a9cd1d070 +0 -0
  296. data/spec/dummy/tmp/cache/assets/development/sprockets/f024e5fd86a61ac8399d564f8202bbc8 +0 -0
  297. data/spec/dummy/tmp/cache/assets/development/sprockets/f12542794a06e22b1dbd97250d49deb1 +0 -0
  298. data/spec/dummy/tmp/cache/assets/development/sprockets/f34759266a45010771006dcbb608d179 +0 -0
  299. data/spec/dummy/tmp/cache/assets/development/sprockets/f466a3fe42e17653acb9980dae9be11a +0 -0
  300. data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  301. data/spec/dummy/tmp/cache/assets/development/sprockets/f86d0394f2c6bebf4ad490ce4a37d754 +0 -0
  302. data/spec/dummy/tmp/cache/assets/development/sprockets/fd5a31651e4fc8cf4a3199e8db16d53e +0 -0
  303. data/spec/dummy/tmp/cache/assets/development/sprockets/fd71e811fb40f0e16e339622af4c771f +0 -0
  304. data/spec/dummy/tmp/cache/assets/development/sprockets/fd843e12fcdd9539f8e3d7384a19bb31 +0 -0
  305. data/spec/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  306. data/spec/dummy/tmp/cache/assets/test/sprockets/19699f0bd9bbacb926aa665d057d7dcc +0 -0
  307. data/spec/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  308. data/spec/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  309. data/spec/dummy/tmp/cache/assets/test/sprockets/371bf96e99717688ed7313a0c53f4212 +0 -0
  310. data/spec/dummy/tmp/cache/assets/test/sprockets/59f25755df49e4db5915553e3d2ef412 +0 -0
  311. data/spec/dummy/tmp/cache/assets/test/sprockets/6fc757c2c8329244ca95d6909865bbc2 +0 -0
  312. data/spec/dummy/tmp/cache/assets/test/sprockets/764fdaef2f219fafc8db0923a56c23a3 +0 -0
  313. data/spec/dummy/tmp/cache/assets/test/sprockets/87172f2d7a412d1fe87d7775d589b883 +0 -0
  314. data/spec/dummy/tmp/cache/assets/test/sprockets/88741eb863751c5d5adb82282f6df5cd +0 -0
  315. data/spec/dummy/tmp/cache/assets/test/sprockets/96f8ac0ca90b5e46fb770d1695a77b2d +0 -0
  316. data/spec/dummy/tmp/cache/assets/test/sprockets/a4abc5f3fc1bfe41be3470836766d110 +0 -0
  317. data/spec/dummy/tmp/cache/assets/test/sprockets/af326fcf9b4f69ff70d3610d0696b585 +0 -0
  318. data/spec/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  319. data/spec/dummy/tmp/cache/assets/test/sprockets/d63d1c956772687b2dd2c9b43533e795 +0 -0
  320. data/spec/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  321. data/spec/dummy/tmp/cache/assets/test/sprockets/d7d3659361bd25606f9efaba128bf4c1 +0 -0
  322. data/spec/dummy/tmp/cache/assets/test/sprockets/f024e5fd86a61ac8399d564f8202bbc8 +0 -0
  323. data/spec/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  324. data/spec/dummy/tmp/cache/assets/test/sprockets/fd5a31651e4fc8cf4a3199e8db16d53e +0 -0
  325. data/spec/ext_form_spec.rb +12 -0
  326. data/spec/factories/order_header_factory.rb +22 -0
  327. data/spec/helpers/dt_picker_spec.rb +66 -0
  328. data/spec/helpers/dt_picker_tag_spec.rb +65 -0
  329. data/spec/helpers/form_helper_bs_spec.rb +102 -0
  330. data/spec/helpers/form_helper_spec.rb +109 -0
  331. data/spec/spec_helper.rb +15 -0
  332. data/spec/support/form_helper.rb +21 -0
  333. metadata +787 -0
@@ -0,0 +1,49 @@
1
+ module ExtForm
2
+ module Wrappers
3
+ module Mixin
4
+ extend ActiveSupport::Concern
5
+
6
+ def wrap_style_options(input, type, namespace)
7
+ l = input.l
8
+ options = input.options
9
+
10
+ if l.instance_of?(ExtForm::Layouts::DefaultLayout)
11
+ default_style_options(l, type, namespace, options)
12
+ input.input_html_classes.unshift('input-with-layout') if type == 'input'
13
+ else
14
+ bootstrap_style_options(l, type, namespace, options)
15
+ input.input_html_classes.unshift(options[:"#{namespace}_html"][:class]) if type == 'input'
16
+ end
17
+ end
18
+
19
+ private
20
+ def default_style_options(l, type, namespace, options={})
21
+ html_option = options.delete(:"#{namespace}_html") || {}
22
+
23
+ style = []
24
+ style << html_option.delete(:style)
25
+ style << "width: #{l.send("#{type}_width", options[:input_seq]%l.layout.size)}#{l.layout_config[:measure]}; " \
26
+ "float: left;"
27
+
28
+ html_option[:style] = style.compact.join(';')
29
+
30
+ options[:"#{namespace}_html"] = html_option
31
+ options
32
+ end
33
+
34
+ def bootstrap_style_options(l, type, namespace, options={})
35
+ html_option = options.delete(:"#{namespace}_html") || {}
36
+
37
+ clazz = []
38
+ clazz << html_option.delete(:class)
39
+ clazz << "span#{l.send("#{type}_width", options[:input_seq]%l.layout.size)}"
40
+
41
+ html_option[:class] = clazz.compact.join(' ')
42
+
43
+ options[:"#{namespace}_html"] = html_option
44
+ options
45
+ end
46
+
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,18 @@
1
+ module ExtForm
2
+ module Wrappers
3
+ module SingleMixin
4
+ extend ActiveSupport::Concern
5
+ include Mixin
6
+
7
+ included do
8
+ def render_with_layout(input)
9
+ wrap_style_options(input, @defaults[:layout], namespace) if @defaults[:layout]
10
+ render_without_layout(input)
11
+ end
12
+
13
+ alias_method_chain :render, :layout
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ module ExtForm
2
+ module Wrappers
3
+ extend ActiveSupport::Autoload
4
+
5
+ eager_autoload do
6
+ autoload :Mixin
7
+ autoload :ManyMixin
8
+ autoload :SingleMixin
9
+ end
10
+ end
11
+ end
data/lib/ext_form.rb ADDED
@@ -0,0 +1,52 @@
1
+ require 'nested_form'
2
+ require 'simple_form'
3
+ require 'bootstrap-datetimepicker-rails'
4
+ require 'select2-rails'
5
+ require 'ext_form/engine'
6
+ require 'ext_form/version'
7
+ require 'ext_form/helpers/tags'
8
+ require 'ext_form/helpers/form_tag_helper'
9
+ require 'ext_form/helpers/form_helper'
10
+
11
+ module ExtForm
12
+ extend ActiveSupport::Autoload
13
+
14
+ eager_autoload do
15
+ autoload :Wrappers
16
+ autoload :Layouts
17
+ autoload :Inputs
18
+ autoload :Components
19
+ autoload :Builders
20
+ end
21
+
22
+ mattr_accessor :layout
23
+ @@layout = 'DefaultLayout'
24
+
25
+ mattr_accessor :default_wrapper
26
+ @@default_wrapper = :ext
27
+
28
+ mattr_accessor :default_layout
29
+ @@default_layout = {
30
+ layout: '1:1',
31
+ spacing: '10',
32
+ label_width: '15',
33
+ max_width: '100',
34
+ measure: '%'
35
+ }
36
+
37
+ mattr_accessor :form_class
38
+ @@form_class = 'form-horizontal'
39
+
40
+ mattr_accessor :locale
41
+ @@locale = 'pt-BR'
42
+ # Default way to setup SimpleForm. Run rails generate simple_form:install
43
+ # to create a fresh initializer with all configuration values.
44
+ def self.setup
45
+ yield self
46
+ end
47
+ end
48
+
49
+ SimpleForm::Wrappers::Many.send :include, ExtForm::Wrappers::ManyMixin
50
+ SimpleForm::Inputs::Base.send :include, ExtForm::Inputs::BaseMixin
51
+ SimpleForm::Wrappers::Single.send :include, ExtForm::Wrappers::SingleMixin
52
+ SimpleForm::Inputs::Base.send :include, ExtForm::Inputs::BootstrapInputsMixin
@@ -0,0 +1,3 @@
1
+ To copy a SimpleForm initializer to your Rails App, with some configuration values, just do:
2
+
3
+ rails generate simple_form:install
@@ -0,0 +1,113 @@
1
+ module ExtForm
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ desc 'Copy ExtForm default files'
5
+ source_root File.expand_path('../templates', __FILE__)
6
+ class_option :template_engine, desc: 'Template engine to be invoked (erb, haml or slim).'
7
+ class_option :bootstrap, type: :boolean, desc: 'Add the Twitter Bootstrap wrappers to the SimpleForm initializer.'
8
+ class_option :locale, desc: 'The locale file of javascripts. The result will be vary based on select2 and
9
+ bootstrap-datetimepicker.'
10
+
11
+ def info_bootstrap
12
+ return if options.bootstrap?
13
+ puts %q(ExtForm supports Twitter Bootstrap.
14
+ If you want a configuration that is compatible it,
15
+ then please re-run this generator with --bootstrap as an option.)
16
+ end
17
+
18
+ def copy_config
19
+ template 'config/initializers/z_ext_form.rb'
20
+
21
+ if options[:bootstrap]
22
+ template 'config/initializers/z_ext_form_bootstrap.rb'
23
+ end
24
+
25
+ directory 'config/locales'
26
+ end
27
+
28
+ def copy_scaffold_template
29
+ engine = options[:template_engine]
30
+ copy_file "_form.html.#{engine}", "lib/templates/#{engine}/scaffold/_form.html.#{engine}"
31
+ end
32
+
33
+ def copy_assets
34
+
35
+ #bootstrap install
36
+ if options[:bootstrap]
37
+
38
+ # I prefer if (file = 'app/assets/stylesheets/application.css') && File.exists?(file)
39
+ # but it outputs a warning....
40
+ file = 'app/assets/stylesheets/application.css'
41
+ if File.exists?(file)
42
+ inject_into_file file, before: " *= require_tree .\n" do
43
+ " *= require ext_form/application_bootstrap\n"
44
+ end
45
+ end
46
+
47
+ file = 'app/assets/stylesheets/application.css.scss'
48
+ if File.exists?(file)
49
+ inject_into_file file, before: " *= require_tree .\n" do
50
+ " *= require ext_form/application_bootstrap\n"
51
+ end
52
+ end
53
+
54
+ file = 'app/assets/javascripts/application.js'
55
+ if File.exists?(file)
56
+ locale = options[:locale]
57
+
58
+ inject_into_file file, before: "//= require_tree .\n" do
59
+ <<JS
60
+ //= require jquery_nested_form
61
+ //= require bootstrap-datetimepicker
62
+ //= require typeahead
63
+ //= require select2
64
+ //= require ext_form/application
65
+ JS
66
+ end
67
+
68
+ inject_into_file file, after: "//= require select2\n" do
69
+ <<JS
70
+ //= require locales/bootstrap-datetimepicker.#{locale}
71
+ //= require select2_locale_#{locale}
72
+ JS
73
+ end if locale
74
+ end
75
+ # non bootstrap install, no more css and js.
76
+ else
77
+ file = 'app/assets/stylesheets/application.css'
78
+ if File.exists?(file)
79
+ inject_into_file file, before: " *= require_tree .\n" do
80
+ " *= require ext_form/application\n"
81
+ end
82
+
83
+ end
84
+
85
+ file = 'app/assets/stylesheets/application.css.scss'
86
+ if File.exists?(file)
87
+ inject_into_file file, before: " *= require_tree .\n" do
88
+ " *= require ext_form/application\n"
89
+ end
90
+ end
91
+
92
+ file = 'app/assets/javascripts/application.js'
93
+ if File.exists?(file)
94
+ inject_into_file file, before: "//= require_tree .\n" do
95
+ <<JS
96
+ //= require jquery_nested_form
97
+ //= require ext_form/application
98
+ JS
99
+ end
100
+ end
101
+ end
102
+
103
+
104
+ end
105
+
106
+ def show_readme
107
+ if behavior == :invoke && options.bootstrap?
108
+ readme 'README'
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,15 @@
1
+ ===============================================================================
2
+
3
+ Be sure to have a copy of the Bootstrap stylesheet available on your
4
+ application, you can get it on http://twitter.github.com/bootstrap.
5
+
6
+ Inside your views, use the 'ext_form_for' with one of the Bootstrap horizontal form
7
+ classes, as the following:
8
+
9
+ = ext_form_for(@user) do |form|
10
+
11
+
12
+ Other form class, just use the 'simple_form_for':
13
+
14
+ = simple_form_for(@user, html: {class: 'form-inline'}) do |form|
15
+ ===============================================================================
@@ -0,0 +1,12 @@
1
+ <%%= ext_form_for(@<%= singular_table_name %>) do |f| %>
2
+ <%%= f.error_notification %>
3
+ <%- a = [] -%>
4
+ <%- attributes.each do |attribute| -%>
5
+ <%- a << ":#{attribute.name}" -%>
6
+ <% end %>
7
+ <%%= f.inputs <%= a.join(', ') %> %>
8
+
9
+ <div class="pull-right">
10
+ <%%= f.button :submit %>
11
+ </div>
12
+ <%% end %>
@@ -0,0 +1,12 @@
1
+ = ext_form_for(@<%= singular_table_name %>) do |f|
2
+ = f.error_notification
3
+
4
+ <%- a = [] -%>
5
+ <%- attributes.each do |attribute| -%>
6
+ <%- a << ":#{attribute.name}" -%>
7
+ <% end %>
8
+
9
+ = f.inputs <%= a.join(', ') %>
10
+
11
+ .pull-right
12
+ = f.button :submit
@@ -0,0 +1,12 @@
1
+ = ext_form_for(@<%= singular_table_name %>) do |f|
2
+ = f.error_notification
3
+
4
+ <%- a = [] -%>
5
+ <%- attributes.each do |attribute| -%>
6
+ <%- a << ":#{attribute.name}" -%>
7
+ <% end %>
8
+
9
+ = f.inputs <%= a.join(', ') %>
10
+
11
+ .pull-right
12
+ = f.button :submit
@@ -0,0 +1,70 @@
1
+ # Use this setup block to configure all options available in SimpleForm.
2
+ SimpleForm.setup do |config|
3
+ # Wrappers are used by the form builder to generate a
4
+ # complete input. You can remove any component from the
5
+ # wrapper, change the order or even add your own to the
6
+ # stack. The options given below are used to wrap the
7
+ # whole input.
8
+ config.wrappers :ext, class: 'ext-default-form',
9
+ hint_class: :field_with_hint, error_class: :error do |b|
10
+ ## Extensions enabled by default
11
+ # Any of these extensions can be disabled for a
12
+ # given input by passing: `f.input EXTENSION_NAME => false`.
13
+ # You can make any of these extensions optional by
14
+ # renaming `b.use` to `b.optional`.
15
+
16
+ # Determines whether to use HTML5 (:email, :url, ...)
17
+ # and required attributes
18
+ b.use :html5
19
+
20
+ # Calculates placeholders automatically from I18n
21
+ # You can also pass a string as f.input placeholder: "Placeholder"
22
+ b.use :placeholder
23
+
24
+ ## Optional extensions
25
+ # They are disabled unless you pass `f.input EXTENSION_NAME => :lookup`
26
+ # to the input. If so, they will retrieve the values from the model
27
+ # if any exists. If you want to enable the lookup for any of those
28
+ # extensions by default, you can change `b.optional` to `b.use`.
29
+
30
+ # Calculates maxlength from length validations for string inputs
31
+ b.optional :maxlength
32
+
33
+ # Calculates pattern from format validations for string inputs
34
+ b.optional :pattern
35
+
36
+ # Calculates min and max from length validations for numeric inputs
37
+ b.optional :min_max
38
+
39
+ # Calculates readonly automatically from readonly attributes
40
+ b.optional :readonly
41
+
42
+ b.wrapper 'div_label', tag: 'div', layout: 'label' do |ba|
43
+ ba.use :label
44
+ end
45
+ ## Inputs
46
+ b.wrapper 'input', tag: 'div', layout: 'input' do |ba|
47
+ ba.use :input
48
+ ba.use :error, wrap_with: {tag: 'p', class: 'help-block'}
49
+ ba.use :hint, wrap_with: {tag: 'p', class: 'help-block'}
50
+ end
51
+ end
52
+
53
+ config.label_class = 'ext-form-label'
54
+ config.collection_value_methods = [:id, :to_value, :to_s]
55
+ # config.default_wrapper = :ext
56
+ end
57
+
58
+ ExtForm.setup do |e|
59
+ # Layout manager, default value: 'DefaultLayout'
60
+ # e.layout = 'BootstrapLayout'
61
+ e.layout = 'DefaultLayout'
62
+ e.default_wrapper = :ext
63
+ e.default_layout = {
64
+ layout: '1:1',
65
+ spacing: '10',
66
+ label_width: '15',
67
+ max_width: '100',
68
+ measure: '%'
69
+ }
70
+ end
@@ -0,0 +1,59 @@
1
+ # Use this setup block to configure all options available in SimpleForm.
2
+ SimpleForm.setup do |config|
3
+ config.wrappers :ext_bootstrap, tag: 'div', class: 'control-group ext-form-group', error_class: 'error' do |b|
4
+ b.use :html5
5
+ b.use :placeholder
6
+
7
+ b.wrapper 'div_label', tag: 'div', layout: 'label' do |bb|
8
+ bb.use :label, class: 'ext-form-label'
9
+ end
10
+ b.wrapper 'input', tag: 'div', layout: 'input' do |bb|
11
+ bb.use :input
12
+ bb.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
13
+ bb.use :hint, wrap_with: {tag: 'p', class: 'help-block text-info'}
14
+ end
15
+
16
+ end
17
+
18
+ config.wrappers :ext_datetimepicker, tag: 'div', class: 'control-group ext-form-group', error_class: 'error' do |b|
19
+ b.use :html5
20
+ b.use :placeholder
21
+
22
+ b.wrapper 'div_label', tag: 'div', layout: 'label' do |bb|
23
+ bb.use :label, class: 'ext-form-label'
24
+ end
25
+ b.wrapper 'input', tag: 'div', layout: 'input' do |bb|
26
+ bb.wrapper tag: 'div', class: 'input-append' do |append|
27
+ append.use :input
28
+ append.use :input_addon
29
+ end
30
+ bb.use :error, wrap_with: {tag: 'span', class: 'help-inline'}
31
+ bb.use :hint, wrap_with: {tag: 'p', class: 'help-block text-info'}
32
+ end
33
+ end
34
+ # Wrappers for forms and inputs using the Twitter Bootstrap toolkit.
35
+ # Check the Bootstrap docs (http://twitter.github.com/bootstrap)
36
+ # to learn about the different styles for forms and inputs,
37
+ # buttons and other elements.
38
+ # config.default_wrapper = :ext_bootstrap
39
+
40
+ config.input_mappings = {/_date$/ => :date_picker,
41
+ /_time$/ => :dt_picker,
42
+ /_at$/ => :dt_picker}
43
+
44
+ config.wrapper_mappings = { dt_picker: :ext_datetimepicker,
45
+ date_picker: :ext_datetimepicker,
46
+ time_picker: :ext_datetimepicker }
47
+ end
48
+
49
+ ExtForm.setup do |e|
50
+ e.layout = 'BootstrapLayout'
51
+ e.default_wrapper = :ext_bootstrap
52
+ e.default_layout = {
53
+ layout: '1:1',
54
+ spacing: '1',
55
+ label_width: '2',
56
+ max_width: '12'
57
+ }
58
+ e.locale = 'zh-CN'
59
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :ext_form do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'ext_form_builder spec(bootstrap layout):' do
4
+ before do
5
+ ExtForm.setup do |e|
6
+ e.layout = 'BootstrapLayout'
7
+ e.default_wrapper = :ext_bootstrap
8
+ e.default_layout = {
9
+ layout: '1:1',
10
+ spacing: '1',
11
+ label_width: '2',
12
+ max_width: '12'
13
+ }
14
+ end
15
+ end
16
+
17
+ let(:order_header) { FactoryGirl.create(:order_header) }
18
+
19
+ let(:template) do
20
+ template = ActionView::Base.new
21
+ template.output_buffer = ""
22
+ template
23
+ end
24
+
25
+ context 'no options' do
26
+ subject do
27
+ ExtForm::Builders::FormBuilderBase.new('OrderHeader', order_header, template, {}) do |f|
28
+ f.input :order_number
29
+ end
30
+ end
31
+
32
+ it 'initialize successfully' do
33
+ subject.l.layout_config[:spacing].should eq('1')
34
+ subject.l.layout_config[:label_width].should eq('2')
35
+ subject.l.layout_config[:layout].should eq('1:1')
36
+ subject.l.layout_config[:max_width].should eq('12')
37
+
38
+ subject.l.layout.should eq([['2', '3'], ['2', '3']])
39
+ end
40
+ end
41
+
42
+ context 'correct options' do
43
+ subject do
44
+ ExtForm::Builders::FormBuilderBase.new('OrderHeader', order_header, template,
45
+ l: bs_correct_options) do |f|
46
+ f.input :order_number
47
+ end
48
+ end
49
+
50
+ it 'initialize successfully' do
51
+ subject.l.layout_config[:spacing].should eq('0')
52
+ subject.l.layout_config[:label_width].should eq('1')
53
+ subject.l.layout_config[:layout].should eq('1:1:1')
54
+ subject.l.layout_config[:max_width].should eq('12')
55
+
56
+ subject.l.layout.should eq([['1', '3'], ['1', '3'], ['1', '3']])
57
+ end
58
+ end
59
+
60
+ context 'error options' do
61
+ subject do
62
+ ExtForm::Builders::FormBuilderBase.new('OrderHeader', order_header, template,
63
+ l: bs_error_options) do |f|
64
+ f.input :order_number
65
+ end
66
+ end
67
+
68
+ it 'initialize successfully' do
69
+ subject.l.layout_config[:spacing].should eq('1')
70
+ subject.l.layout_config[:label_width].should eq('2')
71
+ subject.l.layout_config[:layout].should eq('1:1')
72
+ subject.l.layout_config[:max_width].should eq('12')
73
+
74
+ subject.l.layout.should eq([['2', '3'], ['2', '3']])
75
+
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,100 @@
1
+ require 'spec_helper'
2
+ require 'action_view'
3
+
4
+ describe 'ext_form_builder spec(default layout):' do
5
+ before do
6
+ ExtForm.setup do |e|
7
+ e.layout = 'DefaultLayout'
8
+ e.default_wrapper = :ext
9
+ e.default_layout = {
10
+ layout: '1:1',
11
+ spacing: '10',
12
+ label_width: '15',
13
+ max_width: '100',
14
+ measure: '%'
15
+ }
16
+ end
17
+ end
18
+
19
+ let(:order_header) { FactoryGirl.create(:order_header) }
20
+
21
+ let(:template) do
22
+ template = ActionView::Base.new
23
+ template.output_buffer = ""
24
+ template
25
+ end
26
+
27
+ context 'no options' do
28
+ subject do
29
+ ExtForm::Builders::FormBuilderBase.new('OrderHeader', order_header, template, {}) do |f|
30
+ f.input :order_number
31
+ end
32
+ end
33
+
34
+ it 'initialize successfully' do
35
+ subject.l.layout_config[:spacing].should eq('10')
36
+ subject.l.layout_config[:label_width].should eq('15')
37
+ subject.l.layout_config[:layout].should eq('1:1')
38
+ subject.l.layout_config[:max_width].should eq('100')
39
+
40
+ subject.l.layout.should eq([['15', '25.0'], ['15', '25.0']])
41
+ end
42
+ end
43
+
44
+ context 'percentage layout options' do
45
+ subject do
46
+ ExtForm::Builders::FormBuilderBase.new('OrderHeader', order_header, template,
47
+ l: percentage_options) do |f|
48
+ f.input :order_number
49
+ end
50
+ end
51
+
52
+ it 'initialize successfully' do
53
+ subject.l.layout_config[:spacing].should eq('5')
54
+ subject.l.layout_config[:label_width].should eq('5')
55
+ subject.l.layout_config[:layout].should eq('1:1:1')
56
+ subject.l.layout_config[:max_width].should eq('100')
57
+
58
+ subject.l.layout.should eq([['5', '25.0'], ['5', '25.0'], ['5', '25.0']])
59
+ end
60
+ end
61
+
62
+ context 'px layout options' do
63
+ subject do
64
+ ExtForm::Builders::FormBuilderBase.new('OrderHeader', order_header, template,
65
+ l: px_options) do |f|
66
+ f.input :order_number
67
+ end
68
+ end
69
+
70
+ it 'initialize successfully' do
71
+ subject.l.layout_config[:spacing].should eq('30')
72
+ subject.l.layout_config[:label_width].should eq('160')
73
+ subject.l.layout_config[:layout].should eq('1:1:1')
74
+ subject.l.layout_config[:max_width].should eq('900')
75
+
76
+ subject.l.layout.should eq([['160', '120.0'], ['160', '120.0'], ['160', '120.0']])
77
+
78
+ end
79
+ end
80
+
81
+ context 'error options' do
82
+ subject do
83
+ ExtForm::Builders::FormBuilderBase.new('OrderHeader', order_header, template,
84
+ l: error_options) do |f|
85
+ f.input :order_number
86
+ end
87
+ end
88
+
89
+ it 'initialize successfully' do
90
+ subject.l.layout_config[:spacing].should eq('10')
91
+ subject.l.layout_config[:label_width].should eq('15')
92
+ subject.l.layout_config[:layout].should eq('1:1')
93
+ subject.l.layout_config[:max_width].should eq('100')
94
+
95
+ subject.l.layout.should eq([['15', '25.0'], ['15', '25.0']])
96
+
97
+ end
98
+ end
99
+ end
100
+
@@ -0,0 +1,28 @@
1
+ == README
2
+
3
+ This README would normally document whatever steps are necessary to get the
4
+ application up and running.
5
+
6
+ Things you may want to cover:
7
+
8
+ * Ruby version
9
+
10
+ * System dependencies
11
+
12
+ * Configuration
13
+
14
+ * Database creation
15
+
16
+ * Database initialization
17
+
18
+ * How to run the test suite
19
+
20
+ * Services (job queues, cache servers, search engines, etc.)
21
+
22
+ * Deployment instructions
23
+
24
+ * ...
25
+
26
+
27
+ Please feel free to use a different markup language if you do not plan to run
28
+ <tt>rake doc:app</tt>.
@@ -0,0 +1,6 @@
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
+
6
+ Dummy::Application.load_tasks