express_admin 1.3.2 → 1.4.0

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 (182) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/express_admin/components/_definition.sass +1 -1
  3. data/app/assets/stylesheets/express_admin/components/_h_box.sass +1 -1
  4. data/app/assets/stylesheets/express_admin/components/_live_edit.sass +3 -0
  5. data/app/assets/stylesheets/express_admin/components/_v_box.sass +1 -1
  6. data/app/assets/stylesheets/express_admin/screen.sass +1 -0
  7. data/app/components/express_admin/definition_list.rb +29 -12
  8. data/app/components/express_admin/definition_table.rb +11 -43
  9. data/app/components/express_admin/{flash_message_component.rb → flash_messages.rb} +3 -2
  10. data/app/components/express_admin/icon.rb +9 -2
  11. data/app/components/express_admin/icon_link.rb +32 -25
  12. data/app/components/express_admin/layout_component.rb +2 -32
  13. data/app/components/express_admin/layout_components/h_box.rb +3 -6
  14. data/app/components/express_admin/layout_components/pane.rb +8 -16
  15. data/app/components/express_admin/layout_components/sidebar_region.rb +2 -6
  16. data/app/components/express_admin/layout_components/v_box.rb +3 -6
  17. data/app/components/express_admin/main_region.rb +2 -4
  18. data/app/components/express_admin/{mega_menu_component.rb → mega_menu.rb} +6 -19
  19. data/app/components/express_admin/{addon_sidebar_component.rb → module_sidebar.rb} +12 -10
  20. data/app/components/express_admin/page_header.rb +14 -0
  21. data/app/components/express_admin/smart_form.rb +30 -29
  22. data/app/components/express_admin/smart_table.rb +43 -30
  23. data/app/components/express_admin/widget_box.rb +11 -6
  24. data/app/views/layouts/express_admin/admin.html.et +2 -2
  25. data/app/views/shared/express_admin/_navigation_bar.html.et +3 -3
  26. data/lib/express_admin/version.rb +1 -1
  27. data/test/dummy/db/test.sqlite3 +0 -0
  28. data/test/dummy/test/components/smart_form_test.rb +6 -5
  29. data/vendor/gems/express_templates/Gemfile.lock +1 -1
  30. data/vendor/gems/express_templates/express_templates-0.8.0.gem +0 -0
  31. data/vendor/gems/express_templates/express_templates.gemspec +1 -1
  32. data/vendor/gems/express_templates/lib/express_templates/compiler.rb +0 -9
  33. data/vendor/gems/express_templates/lib/express_templates/components.rb +0 -1
  34. data/vendor/gems/express_templates/lib/express_templates/components/base.rb +62 -10
  35. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/resourceful.rb +12 -0
  36. data/vendor/gems/express_templates/lib/express_templates/components/configurable.rb +143 -16
  37. data/vendor/gems/express_templates/lib/express_templates/components/forms/basic_fields.rb +11 -16
  38. data/vendor/gems/express_templates/lib/express_templates/components/forms/checkbox.rb +6 -6
  39. data/vendor/gems/express_templates/lib/express_templates/components/forms/express_form.rb +18 -26
  40. data/vendor/gems/express_templates/lib/express_templates/components/forms/form_component.rb +17 -16
  41. data/vendor/gems/express_templates/lib/express_templates/components/forms/radio.rb +14 -32
  42. data/vendor/gems/express_templates/lib/express_templates/components/forms/select.rb +18 -35
  43. data/vendor/gems/express_templates/lib/express_templates/components/forms/select_collection.rb +11 -17
  44. data/vendor/gems/express_templates/lib/express_templates/components/forms/submit.rb +18 -14
  45. data/vendor/gems/express_templates/lib/express_templates/components/tree_for.rb +11 -4
  46. data/vendor/gems/express_templates/lib/express_templates/renderer.rb +1 -3
  47. data/vendor/gems/express_templates/lib/express_templates/version.rb +1 -1
  48. data/vendor/gems/express_templates/test/components/base_test.rb +45 -24
  49. data/vendor/gems/express_templates/test/components/capabilities/resourceful_test.rb +1 -1
  50. data/vendor/gems/express_templates/test/components/configurable_test.rb +108 -30
  51. data/vendor/gems/express_templates/test/components/forms/basic_fields_test.rb +3 -3
  52. data/vendor/gems/express_templates/test/components/forms/express_form_test.rb +4 -1
  53. data/vendor/gems/express_templates/test/components/forms/radio_test.rb +3 -3
  54. data/vendor/gems/express_templates/test/components/forms/submit_test.rb +3 -3
  55. data/vendor/gems/express_templates/test/components/tree_for_test.rb +1 -1
  56. data/vendor/gems/express_templates/test/core_extensions/proc_test.rb +10 -0
  57. data/vendor/gems/express_templates/test/dummy/log/test.log +1240 -20959
  58. data/vendor/gems/express_templates/test/test_helper.rb +3 -0
  59. metadata +22 -248
  60. data/app/components/express_admin/page_header_component.rb +0 -29
  61. data/app/components/express_admin/setting_form.rb +0 -48
  62. data/test/dummy/log/development.log +0 -35
  63. data/test/dummy/log/test.log +0 -51433
  64. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0fNukwCUjSC_GRsVIMtSMVdZkd5bq5eShMcGCrCVolc.cache +0 -0
  65. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0zehLcbCZ34CdyBVctEOnsyyyFlqjtTI-VkIje9xdCQ.cache +0 -1
  66. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1EoyfDwFVtgMAOjo7HPkor8TQbVaioOFx9hildx_DTQ.cache +0 -0
  67. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1c4REJHKdQH9bwZhZ7Ixshmy_1jAzXc3-9OiDCDyRlk.cache +0 -0
  68. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1rKHSaJsgLcnfIJRWYdYy7IimMCKcdI-I_ABekUargk.cache +0 -0
  69. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2kMk5s4FKAOWE1z_MvFIKHmdvNDzyoknoi39xL7KwJw.cache +0 -0
  70. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2oGeKB_QtwWpX3sJNHocsJiBZT60x_cwV_nSGh_HS-A.cache +0 -0
  71. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2rQDWRzFxOlBnczJ1BLfE2yCPVvrhgLGfAI7VSM54wk.cache +0 -0
  72. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3S9nnUmEIG4-hDY6cVc82GFUUWicNxtpFfWwJAmJSkI.cache +0 -2
  73. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4OPIkynisipUm8vKo57HUhBMWFSHBno_IH6OdpK29IA.cache +0 -1
  74. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4WErFdugnc8uWYwUE9vVfw4xxCgknECdpWhn8teZbLk.cache +0 -1
  75. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4a7epNa5R1jeKCtFsJKTdVqMEQm5p0clABRPIiKegMo.cache +0 -0
  76. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4hK1AdPGHbXGkebvk-nSvhxtCdOSlMYNWvA43CvQKhI.cache +0 -0
  77. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/57pjjkzReNE1L9yodewGebfd0AwnfQb33rtJjSTNpLc.cache +0 -0
  78. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6c0H20s6oHf45XogeDELaojxa0PX1NmirTTWV1ClcRw.cache +0 -0
  79. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/7vpDV8GyXVfyuFIkRrrkOwUXyIaCmf22tBPDpvhCUUc.cache +0 -0
  80. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/89d4LukQv0MLDc35wfIlQZps-IyoMSdlaSZjBF4U5Qs.cache +0 -1
  81. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9QvwPXfTSVmgQX6tdK9GuCn0--MZ8Z8eJJbHpUEq1p8.cache +0 -1
  82. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/BoKdGhgi5NHfGTc42p9nltpEIYj_BBUxVdv7YhpBmmA.cache +0 -0
  83. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Cpj6WyqdggDUkeQl_Ut3P9sUtPHPXXwkmZ92TfIJGJ8.cache +0 -0
  84. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/DwepgSdLiEklsJWIJItEY_ZW-nOjjeHqcdQwBtu0mus.cache +0 -0
  85. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FOJpwMQCx9V9wfhJQKFa2f7BjfP7vyS7M3o6VX0nAI0.cache +0 -1
  86. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GJGMlSyTg1AvPCV_6PaLOTVEKbHeVKY1jhCoaKuRlxM.cache +0 -1
  87. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GStmpiXE4g01i-UTlSKq8B9yS69WpAp0YH7vWyESBwI.cache +0 -0
  88. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H0aD5KRj-4fhORkqWcWZfKPOQfu_ggvt4OmYOl4S5mw.cache +0 -0
  89. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H53ZZ50FwJjYUOMH60F7cpINgkh9tOF4R3L6ANoH6tU.cache +0 -1
  90. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/HY86Fwn8VPlIysY56uV-wu90bISxrXeiCtwDXg94Glg.cache +0 -0
  91. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IBLgVNsKBbJxN8NQnh6zTc3bC_OG-8BhtA3xCNDV6ks.cache +0 -1
  92. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IcNDN_pmsAcLAMv6CST75OwOucmYm3q2099jn4tB0H8.cache +0 -2
  93. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/JpdfSFVzivQn6TFSivlys3nV3VzD8cT0ET8uqbptxV4.cache +0 -1
  94. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KLD96-U_D5wyyJMO4CJwhXydNwVp3GnQ_Pcu9fqMWwk.cache +0 -1
  95. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KRkc9MoVFNfI2aJI6sncnC92a1RmZyYM_CbJoa01saw.cache +0 -0
  96. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KYe0_GIi-cNX0eRteBB0aixVATrVRo7Z3BaWFCgc7yg.cache +0 -1
  97. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/LsiO4sLQfM0GvyEYhaC2E54rCurTkewg7YJX-sWBctI.cache +0 -0
  98. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/MczkmkaXLyXg8mAnmpTt-Rhvlf_OGFUEr-Ut9BuWo6g.cache +0 -0
  99. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/NDViKg4-yspkY1tX9IQWnh1-LkiKqIohBqtRlYZZQcs.cache +0 -2
  100. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/OXsmreTQ3MNzGsrV1eEoW72VZQ52hQ0HiuTr0ImnqHA.cache +0 -0
  101. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Po8q4NrWy9Kymnz_HbOk-WbdGY_KuuXc6urGogTHe7U.cache +0 -0
  102. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/PuMvTyv89E8wfRqbWNMhTH3PAE61uCCHgpEsgdOzMXQ.cache +0 -0
  103. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Pvp8CVIKYjspNrgzEvgleujifrrdfATzWbwALDzQNE4.cache +0 -2
  104. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/PzcOUndLc-O-VBR2SDM2rFkiqh-iqknTEgEAXDLKfdc.cache +0 -0
  105. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/QbX1HRM7KX85_PeVHcd6VJM6sqzUCWXEEYZX7CAG0eA.cache +0 -1
  106. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UDHqQKrYSSvXfCbiJjXzmJh2Q6T5hLO80aaPvs9n-74.cache +0 -0
  107. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UFtISk01WwcjjWcPLyjeHX3bgBqZHGQcb0Z4KFNmduA.cache +0 -0
  108. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UWvG-0WgVYHVxrtLU32uumROQuSjJv_M_svW1B8YxhY.cache +0 -1
  109. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UruI7_ZpuzDnmNir9hzUa_r8oiuuIfVTco19ACdxwRw.cache +0 -2
  110. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/V1aP9G-CVtOLR5PTnHleid8WC9TSfFAT1DzAygp_5CQ.cache +0 -1
  111. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VQ2-2HlkGd1XVIHlwRGcgDsjto3oE-50-4E3HGdt8uU.cache +0 -1
  112. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VezioHwyk87G6TWkkYX88tBHC6QToVGOU5geZ54Ts5A.cache +0 -1
  113. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WG06sI8kg0TrFKDQh2slScD0xqYK5UF0gPF1Ri6APG0.cache +0 -0
  114. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WfQ-xKbnwqaKy-UQa8spczc9qocIL_jZE4cyRZftjfA.cache +0 -2
  115. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WhePtBvZPmF1Jhdcc4glsjhxBJQo9Qw0CDgy_F8lClY.cache +0 -0
  116. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/X2i4W-0ADnY8zQKnn3oh3P61cDw_n1B26D2JPcgWBTY.cache +0 -2
  117. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XPpCqlT8yHTnQNHKRxjnilUBvAs6klpgWXneFU15U78.cache +0 -0
  118. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XXTM8o6vkSxhxxm8P_orbeCZvxb8nMk7cjdwvUNL1io.cache +0 -0
  119. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XyRQXY_oj8GLw9z8lj2dknGu45jbX5lK8ko7TePosPE.cache +0 -2
  120. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Y7zGDJM6L5VhKbRWRU6vonJVe-DGxBuOhE_qGM8zJ0o.cache +0 -1
  121. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/YDMOayx363vI7odbkHMVI-_RxkOoVP2Hb7FX0mFVFE0.cache +0 -1
  122. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Z88gJS67lNABJgUB18JzXrnGkVbYfXQvjqm7mSJIv3o.cache +0 -1
  123. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ZAIAu3UIaGRI3RknA2lbuZ8Y6AZ12VB84mQRg-q0vFs.cache +0 -1
  124. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_2bn753sv7A0CDBODs7rO8SWdQ1OMi2vbzSas5co4TE.cache +0 -0
  125. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_FyeE-ad3bA2IH6ZwZOn6J4qaW857Rjv4FBs_HIPiqM.cache +0 -0
  126. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_k4X14Cc-2Y4gc47s7PaWtAaG_zcq1ICJInTYNp6bI4.cache +0 -2
  127. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_kr_dP4VVnM8s8ZMdiNBSpuPqkQVx46FUdCTDH4XR70.cache +0 -0
  128. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_y-BPEZTh3iXcaPJkcP9-krjw-V8LMhop4VGxUEUDsY.cache +0 -1
  129. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/afi__XQzjsqMT3svcCGlVD_YrHEWQZAEbJt4CgYaCkw.cache +0 -1
  130. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/bdqS7lHa0nBN-mqdSomfMK-S6ct2TAn0z9kVzFBwQPM.cache +0 -0
  131. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/c4lC2GnsHBJ0BpWF3Nlgfk2FLPkhA7GCIiMMjnMTWE8.cache +0 -0
  132. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/csH89NDps1_QU4E0p0HHZti2XLd_etKYDqM9cPsNpps.cache +0 -0
  133. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dVokuKbK8HbOtvPIksKGBAYE8x44l372dQ0gEISqbdo.cache +0 -0
  134. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ePtEu-AuU0iZ2J02ZafF9yOJVd8VVdV2KSheiJYlXzA.cache +0 -1
  135. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/eTRff0YXBw-Tx9VEMxb-Es8NwqjHCXiaosBLxijl3I8.cache +0 -1
  136. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/fRkrxaDYzRDIvxEUGZBFbW5ocAlmDQNg8_LRcOJJOzI.cache +0 -1
  137. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/goVFgqSk0CBOXpbwLNd-enc31BvXm1S8cMSJ3zbxRYI.cache +0 -1
  138. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hPH6lLkPX0EzSG_eBprMMUnmFs9y89AOarfyhGoAFGc.cache +0 -0
  139. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hgfrt0FmGrYD5SJVJhlsUPtL9usJvw3vZrW4dqQq16Y.cache +0 -1
  140. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hiZg7FLw7SFa7S-BQ8CKWdAqFVUZy2HVb2chmQijM-g.cache +0 -0
  141. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/iKb8yzw0EdFpNkayUbc16U7olK7iwE2xIs_6b_xIEtI.cache +0 -1
  142. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/iY03Ztj2YhBWadK8LHOKR3Hj1W7PLss0v85Q6Nj7E3Q.cache +0 -0
  143. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ipLhCJrCCVwH7l_p1quUi2xS6POFlVHfZCqIymk8CoI.cache +0 -0
  144. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ipTot5AshDPhFtCBNfXROxutQlCrYkvsXsy3fcVT0Nw.cache +0 -0
  145. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/j5CxYBAeuD-bGDZUBh-pA0mEPCSVFDZsJm3x7QED4g0.cache +0 -1
  146. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/jr4uhEONyFYm0QhfEOMqv05S-BeUP7gw1gQl3GIFyAI.cache +0 -0
  147. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/kDj0mxTRTc51sKL3YhP09H-N_wvNoeTMq4ZZXxWk00U.cache +0 -0
  148. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/kGO7_IQtBwpe93nSTKj6cCWGm0fZ_NoXltdw8E_74CQ.cache +0 -2
  149. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/le9WohG3eSGbBMySdKkdvkHXW8yipO8w4iQZCCCQb3M.cache +0 -1
  150. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/mtmR_XlvnlYbOPmP1EkOj96q2Z5OQNv4HkeFj9DwEXQ.cache +0 -2
  151. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nU1obIDVHUhN-3yRA6B9U5aO8wsd6zh1tyVtSROJewk.cache +0 -2
  152. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nk1B0AsQ24ck-r1vlAmaG2ZkDkzOfoIi6b5u-5BNFTQ.cache +0 -1
  153. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oN1zSGeSEz4KhkAuUF_yFDsCVPkulfFjomEAjFzGdPc.cache +0 -0
  154. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oZ6SMNNft5SCbvNtWXkGQwKQPVwXoJRMV7VUJfWHc2k.cache +0 -2
  155. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/orzlNSAVLprBGJNkJc1USpGtVMhktfj0hR1igXbs5fA.cache +0 -1
  156. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oygs10cGTBBo7Mj97CjFRTrSrFR7Qi3MnHNR_WQvIps.cache +0 -0
  157. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/p0Gnpai0VYzEsAXH_5t9huZ3dO0v6JKRH0PIH--q-XA.cache +0 -2
  158. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/p0VpILMLAmqpH1IIuA6MfyLrqT7ltiDJqYqZSLr_k3I.cache +0 -0
  159. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pWOcH5cfG1n9XqxJljnSwciDeLoaTkoUxp1zlOo0WTk.cache +0 -1
  160. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pu9xM8T2O07hU3PafxbOLjg2vJxbbHE3qnIK9JHqVhA.cache +0 -1
  161. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qEHftZrJ-Da_nsvX4UOaALyIt0mwnOuE2TdtBPGAWEw.cache +0 -0
  162. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qIeSoker4TjM7JYRQTOjgRd4nN0WeHnNY1GMK7Zpe8M.cache +0 -0
  163. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/rtdpq5fxIYMKM43QyOIluEECg2NP5OA-7Zi8yuowZSI.cache +0 -1
  164. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tTFLM1bjKSeg4nyH7GWbTY6JVvuYhNKFFvsOMS9h8O0.cache +0 -0
  165. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tzX-HHF4F70o-aSB9Z_duoPxFGDv3auYnrpko9SYafU.cache +0 -1
  166. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ujFa5Hu76zd1O6nO2G7WcgnOWZyTOMKLajazyMXAL_I.cache +0 -0
  167. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/uovLHiJZBoVnD7CXYj2WZYmAbBcqGLQOzu4Voz5Fx8c.cache +0 -0
  168. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/uyHm0KHsHpJhn-wv69exuuyU4kyJtW3DDQLP7tCD7e4.cache +0 -0
  169. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/v50nc5cuqpLxjepk7XsBmomcmFARYlHQRtq8yOv8AY0.cache +0 -0
  170. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vAh5eTPxI929yxRCyXgbKTWat5cZiVSOyX0UeTveXGE.cache +0 -1
  171. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vKiuNu1fQitE151bh0Tr2Ufkc80jWzchPjxaHkpjQL8.cache +0 -1
  172. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vMbWbI1SO5bEaiu2pRvV8NDmms_j5flYoRvCSJavhdU.cache +0 -0
  173. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vZBxpTbv5C70_MrcmWyk0z6yDwcZ-yjr7fo16bQaLhY.cache +0 -0
  174. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/x-3lyh5i4qS-Q9E3X2uj2LthTOxsndFTrFXBsPPo6hI.cache +0 -2
  175. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/x3xQgAyjbrGTXy2FX2UzGG77agJgt_xsyNBuofrvY_E.cache +0 -0
  176. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/xQqBwKYWFPxZm5tidxsRKk23Z3q-OLRmKQUlMjRev_c.cache +0 -0
  177. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/yZNo-6dzWGUNCJDnmqm7X5YB5FOxjYp_l8aKS6KaZOg.cache +0 -0
  178. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/yfh4w2OYe-sHC9BwdeUb4FtXVEH59KeRr6P7V_lJ7Uc.cache +0 -1
  179. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ypZCDLo54Pz2ZoUxrxSEUjT5FYMAq8Ozp8OTOYDRdAE.cache +0 -0
  180. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/zV58Nou0R2EJG875wLND6wF9ES4diVi1fP7B_B6eCzw.cache +0 -1
  181. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/zxPFYKpkfNJtui1ekitdNMaGAo39fefm-oJCnILEEQ8.cache +0 -1
  182. data/vendor/gems/express_templates/lib/express_templates/components/form_rails_support.rb +0 -21
@@ -3,6 +3,18 @@ module ExpressTemplates
3
3
  module Capabilities
4
4
 
5
5
  module Resourceful
6
+
7
+ def self.included(base)
8
+ base.class_eval do
9
+ has_option :collection, 'Provide an explicit collection as a resource.'
10
+ has_option :collection_path, 'Provide an explicit path for the collection resource.'
11
+ has_option :resource_class, 'Overrides namespaced resource_class for using resources from a different module or namespace.'
12
+ has_option :resource_path, 'Overides the resource path which is otherwise inferred from the class name.'
13
+ has_option :path_prefix, 'Rarely used. Override inferred path_prefix for path helpers.'
14
+ has_option :namespace, 'Rarely used. Overrides inferred namespace for resources.'
15
+ end
16
+ end
17
+
6
18
  def namespace
7
19
  config[:namespace] || infer_namespace
8
20
  end
@@ -1,41 +1,168 @@
1
1
  module ExpressTemplates
2
2
  module Components
3
+ # Configurable components support configuration options supplied to the
4
+ # builder method. Supported options must be declared. All other options
5
+ # are passed along and converted to html attributes.
6
+ #
7
+ # Example:
8
+ #
9
+ # ```ruby
10
+ #
11
+ # class Pane < ExpressTemplates::Components::Configurable
12
+ # has_option :title, "Displayed in the title area", required: true
13
+ # has_option :status, "Displayed in the status area"
14
+ # end
15
+ #
16
+ # # Usage:
17
+ #
18
+ # pane(title: "People", status: "#{people.count} people")
19
+ #
20
+ # ```ruby
21
+ #
22
+ # Options specified as required must be supplied.
23
+ #
24
+ # Default values may be supplied for options with a default: keyword.
25
+ #
26
+ # Options may be passed as html attributes with attribute: true
27
+ #
3
28
  class Configurable < Base
4
29
 
5
- def self.emits(proc = nil, &block)
6
- define_method(:markup, &(proc || block))
30
+ class_attribute :supported_options
31
+ self.supported_options = {}
32
+
33
+ class_attribute :supported_arguments
34
+ self.supported_arguments = {}
35
+
36
+ def self.emits(*args, &block)
37
+ warn ".emits is deprecrated"
38
+ self.contains(*args, &block)
7
39
  end
8
40
 
9
41
  def build(*args, &block)
10
- _process_args!(args)
11
- if method(:markup).arity > 0
12
- markup(block)
13
- else
14
- markup(&block)
15
- end
42
+ _process_builder_args!(args)
43
+ super(*args, &block)
16
44
  end
17
45
 
18
46
  def config
19
47
  @config ||= {}
20
48
  end
21
49
 
22
- alias :my :config
50
+ def self.has_option(name, description, type: :text, required: nil, default: nil, attribute: nil)
51
+ raise "name must be a symbol" unless name.kind_of?(Symbol)
52
+ option_definition = {description: description}
53
+ option_definition.merge!(type: type, required: required, default: default, attribute: attribute)
54
+ self.supported_options =
55
+ self.supported_options.merge(name => option_definition)
56
+ end
23
57
 
58
+ def required_options
59
+ supported_options.select {|k,v| v[:required] unless v[:default] }
60
+ end
61
+
62
+ def self.has_argument(name, description, as: nil, type: :string, default: nil, optional: false)
63
+ raise "name must be a symbol" unless name.kind_of?(Symbol)
64
+ argument_definition = {description: description, as: as, type: type, default: default, optional: optional}
65
+ self.supported_arguments =
66
+ self.supported_arguments.merge(name => argument_definition)
67
+ end
68
+
69
+ has_argument :id, "The id of the component.", type: :symbol, optional: true
24
70
 
25
71
  protected
26
72
 
27
- def _process_args!(args)
28
- if args.first.kind_of?(Symbol)
29
- config.merge!(id: args.shift)
30
- attributes[:id] = config[:id]
73
+ def _default_options
74
+ supported_options.select {|k,v| v[:default] }
75
+ end
76
+
77
+ def _check_required_options(supplied)
78
+ missing = required_options.keys - supplied.keys
79
+ if missing.any?
80
+ raise "#{self.class} missing required option(s): #{missing}"
31
81
  end
32
- args.each do |arg|
33
- if arg.kind_of?(Hash)
34
- config.merge!(arg)
82
+ end
83
+
84
+ def _set_defaults
85
+ _default_options.each do |key, value|
86
+ if !!value[:attribute]
87
+ set_attribute key, value[:default]
88
+ else
89
+ config[key] ||= value[:default]
35
90
  end
36
91
  end
37
92
  end
38
93
 
94
+ def _valid_types(definition)
95
+ valid_type_names = if definition[:type].kind_of?(Symbol)
96
+ [definition[:type]]
97
+ elsif definition[:type].respond_to?(:keys)
98
+ definition[:type].keys
99
+ else
100
+ definition[:type] || []
101
+ end
102
+ valid_type_names.map(&:to_s).map(&:classify).map(&:constantize)
103
+ end
104
+
105
+ def _is_valid?(value, definition)
106
+ valid_types = _valid_types(definition)
107
+ if valid_types.empty? && value.kind_of?(String)
108
+ true
109
+ elsif valid_types.include?(value.class)
110
+ true
111
+ else
112
+ false
113
+ end
114
+ end
115
+
116
+ def _optional_argument?(definition)
117
+ definition[:default] || definition[:optional]
118
+ end
119
+
120
+ def _required_argument?(definition)
121
+ !_optional_argument?(definition)
122
+ end
123
+
124
+ def _extract_supported_arguments!(args)
125
+ supported_arguments.each do |key, definition|
126
+ value = args.shift
127
+ if value.nil? && _required_argument?(definition)
128
+ raise "argument for #{key} not supplied"
129
+ end
130
+ unless _is_valid?(value, definition)
131
+ if _required_argument?(definition)
132
+ raise "argument for #{key} invalid (#{value.class}) '#{value.to_s}'; Allowable: #{_valid_types(definition).inspect}"
133
+ else
134
+ args.unshift value
135
+ next
136
+ end
137
+ end
138
+ config_key = definition[:as] || key
139
+ config[config_key] = value || definition[:default]
140
+ end
141
+ end
142
+
143
+ def _set_id_attribute
144
+ attributes[:id] = config[:id]
145
+ end
146
+
147
+ def _extract_supported_options!(builder_options)
148
+ builder_options.each do |key, value|
149
+ if supported_options.keys.include?(key)
150
+ unless supported_options[key][:attribute]
151
+ config[key] = builder_options.delete(key)
152
+ end
153
+ end
154
+ end
155
+ end
156
+
157
+ def _process_builder_args!(args)
158
+ _extract_supported_arguments!(args)
159
+ builder_options = args.last.try(:kind_of?, Hash) ? args.last : {}
160
+ _check_required_options(builder_options)
161
+ _extract_supported_options!(builder_options)
162
+ _set_defaults
163
+ _set_id_attribute
164
+ end
165
+
39
166
  end
40
167
  end
41
168
  end
@@ -9,11 +9,9 @@ module ExpressTemplates
9
9
  ALL.each do |type|
10
10
  class_definition = <<-RUBY
11
11
  class #{type.classify} < FormComponent
12
- emits -> {
13
- div(class: field_wrapper_class) {
14
- label_tag(label_name, label_text)
15
- #{type}_field resource_var, field_name.to_sym, html_options
16
- }
12
+ contains {
13
+ label_tag(label_name, label_text)
14
+ #{type}_field resource_var, field_name.to_sym, input_attributes
17
15
  }
18
16
  end
19
17
  RUBY
@@ -24,25 +22,22 @@ RUBY
24
22
  end
25
23
 
26
24
  # class Email < FormComponent
27
- # emits -> {
28
- # div(class: field_wrapper_class) {
29
- # email_field resource_var, field_name.to_sym
30
- # }
25
+ # contains {
26
+ # label_tag label_name, label_text
27
+ # email_field resource_var, field_name.to_sym, input_attributes
31
28
  # }
32
29
  # end
33
30
 
34
31
  class Textarea < FormComponent
35
- emits -> {
36
- div(class: field_wrapper_class) {
37
- label_tag(label_name, label_text)
38
- text_area resource_var, field_name.to_sym, html_options
39
- }
32
+ contains {
33
+ label_tag(label_name, label_text)
34
+ text_area resource_var, field_name.to_sym, input_attributes
40
35
  }
41
36
  end
42
37
 
43
38
  class Hidden < FormComponent
44
- emits -> {
45
- hidden_field resource_var, field_name.to_sym, html_options
39
+ contains {
40
+ hidden_field resource_var, field_name.to_sym, input_attributes
46
41
  }
47
42
  end
48
43
  end
@@ -3,12 +3,12 @@ module ExpressTemplates
3
3
  module Forms
4
4
  class Checkbox < FormComponent
5
5
 
6
- emits -> {
7
- div(class: field_wrapper_class) {
8
- label_tag(label_name, label_text) if label_before?
9
- check_box(resource_var, field_name.to_sym, field_options, checked_value, unchecked_value)
10
- label_tag(label_name, label_text) if label_after?
11
- }
6
+ has_option :label_after, 'Positions the option label after the checkbox.', default: false
7
+
8
+ contains {
9
+ label_tag(label_name, label_text) if label_before?
10
+ check_box(resource_var, field_name.to_sym, field_options, checked_value, unchecked_value)
11
+ label_tag(label_name, label_text) if label_after?
12
12
  }
13
13
 
14
14
  def label_before?
@@ -4,42 +4,34 @@ module ExpressTemplates
4
4
  class ExpressForm < Configurable
5
5
  include ExpressTemplates::Components::Capabilities::Resourceful
6
6
 
7
- emits -> (block) {
8
- form(form_tag_options ) {
9
- form_rails_support form_method
10
- block.call(self) if block
7
+ tag :form
8
+
9
+ has_option :method, 'The form method', default: 'POST', attribute: true #, options: ['PUT', 'POST', 'GET', 'DELETE']
10
+ has_option :action, 'The form action containing the resource path or url.'
11
+
12
+ contains -> (&block) {
13
+ div(style: 'display:none') {
14
+ add_child helpers.utf8_enforcer_tag
15
+ add_child helpers.send(:method_tag, resource.persisted? ? :put : :post)
16
+ helpers.send(:token_tag)
11
17
  }
18
+ block.call(self) if block
12
19
  }
13
20
 
14
- def form_id
15
- "#{resource_name}_#{resource.id}"
16
- end
21
+ before_build -> {
22
+ set_attribute(:id, form_id)
23
+ set_attribute(:action, form_action)
24
+ add_class(config[:id])
25
+ }
17
26
 
18
- def form_method
19
- config[:method].to_s.upcase || 'POST'
27
+ def form_id
28
+ [config[:id], resource.try(:id)].compact.join('_')
20
29
  end
21
30
 
22
31
  def form_action
23
32
  config[:action] || (resource.try(:persisted?) ? resource_path(ivar: true) : collection_path)
24
33
  end
25
34
 
26
- def form_tag_options
27
- args = {id: form_id, action: form_action}.merge!(config).merge!(method: 'POST')
28
-
29
- if html_options = args.delete(:html_options)
30
- args.merge!(html_options)
31
- end
32
- args
33
- end
34
-
35
- def resource_name_for_path
36
- config[:id].to_s
37
- end
38
-
39
- def resource_name
40
- (config[:resource_name] || config[:id]).to_s
41
- end
42
-
43
35
  end
44
36
  end
45
37
  end
@@ -3,10 +3,20 @@ module ExpressTemplates
3
3
  module Forms
4
4
  class FormComponent < Configurable
5
5
 
6
+ attr :input_attributes
7
+
8
+ before_build -> {
9
+ set_attribute(:id, "#{resource_name}_#{field_name}_wrapper")
10
+ add_class(config[:class])
11
+ }
12
+
13
+ has_option :class, 'Override the class of the wrapping div of a form component', default: 'field-wrapper', attribute: true
14
+ has_option :label, 'Override the inferred label of a form component'
15
+
6
16
  # Lookup the resource_name from the parent ExpressForm.
7
17
  def resource_name
8
18
  raise "FormComponent must have a parent form" unless parent_form
9
- parent_form.resource_name
19
+ parent_form.config[:id].to_s
10
20
  end
11
21
 
12
22
  def resource_var
@@ -17,7 +27,7 @@ module ExpressTemplates
17
27
  parent_form.resource_class
18
28
  end
19
29
 
20
- # Return the name attribute for the lable
30
+ # Return the name attribute for the label
21
31
  def label_name
22
32
  "#{resource_name.singularize}_#{field_name}"
23
33
  end
@@ -39,10 +49,6 @@ module ExpressTemplates
39
49
  "#{resource_name.singularize}[#{field_name}]"
40
50
  end
41
51
 
42
- def field_wrapper_class
43
- config[:wrapper_class] || 'field-wrapper'
44
- end
45
-
46
52
  # Search the parent graph until we find an ExpressForm. Returns nil if none found.
47
53
  def parent_form
48
54
  @my_form ||= parent
@@ -52,19 +58,14 @@ module ExpressTemplates
52
58
  return @my_form
53
59
  end
54
60
 
55
- def default_html_options
56
- (config || {}).reject {|k,v| k.eql?(:id)}
57
- end
58
-
59
- def html_options
60
- default_html_options.merge(config[:html_options] || {})
61
- end
62
-
63
61
  protected
64
62
 
65
- def _process_args!(args)
66
- @args = args
63
+ # saving attributes for passing to the input field
64
+ def _process_builder_args!(args)
67
65
  super(args)
66
+ @input_attributes = args.last if args.last.kind_of?(Hash)
67
+ @input_attributes ||= {}
68
+ args.clear
68
69
  end
69
70
 
70
71
  end
@@ -4,21 +4,22 @@ module ExpressTemplates
4
4
  class Radio < FormComponent
5
5
  include OptionSupport
6
6
 
7
- emits -> {
8
- div(class: field_wrapper_class) {
9
- label_tag(label_name, label_text)
10
- if option_values_specified?
11
- generate_options_from_specified_values
12
- else
13
- use_options_from_collection_radio_buttons_helper
14
- end
15
- }
7
+ has_option :options, 'Supplies a list of options for the radio tag'
8
+ has_option :label_wrapper_class, 'Specify a class for labels which wrap each radio option.'
9
+
10
+ contains -> {
11
+ label_tag(label_name, label_text)
12
+ if option_values_specified?
13
+ generate_options_from_specified_values
14
+ else
15
+ use_options_from_collection_radio_buttons_helper
16
+ end
16
17
  }
17
18
 
18
19
  def use_options_from_collection_radio_buttons_helper
19
20
  collection_radio_buttons(resource_var, field_name.to_sym, collection_from_association,
20
21
  option_value_method, option_name_method,
21
- field_options, html_options) do |b|
22
+ input_attributes) do |b|
22
23
  b.label(class: "radio") {
23
24
  b.radio_button + b.text
24
25
  }
@@ -30,25 +31,21 @@ module ExpressTemplates
30
31
  end
31
32
 
32
33
  def option_collection
33
- @args.first
34
- end
35
-
36
- def wrapper_class
37
- config[:wrapper_class] || 'wrapper-class'
34
+ config[:options]
38
35
  end
39
36
 
40
37
  def generate_options_from_specified_values
41
38
  case
42
39
  when option_collection.kind_of?(Array)
43
40
  option_collection.each_with_index do |option, index|
44
- label(class: wrapper_class) {
41
+ label(class: config[:label_wrapper_class]) {
45
42
  radio_button(resource_var, field_name.to_sym, option, class: 'radio')
46
43
  current_arbre_element.add_child option
47
44
  }
48
45
  end
49
46
  when option_collection.kind_of?(Hash)
50
47
  option_collection.each_pair do |key, value|
51
- label(class: wrapper_class) {
48
+ label(class: config[:label_wrapper_class]) {
52
49
  radio_button(resource_var, field_name.to_sym, key, class: 'radio')
53
50
  current_arbre_element.add_child value
54
51
  }
@@ -62,21 +59,6 @@ module ExpressTemplates
62
59
  related_collection or raise "No association collection for: #{resource_name}.#{field_name}"
63
60
  end
64
61
 
65
- def field_options
66
- # If field_otions is omitted the Expander will be
67
- # in last or 3rd position and we don't want that
68
- if @args[1] && @args[1].is_a?(Hash)
69
- @args[1]
70
- else
71
- {}
72
- end
73
- end
74
-
75
- # TODO: implement
76
- def html_options
77
- {}
78
- end
79
-
80
62
  end
81
63
  end
82
64
  end