express_admin 1.1.0 → 1.2.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 (397) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +3 -1
  3. data/app/assets/images/express_admin/appexpress_logo_dark.png +0 -0
  4. data/app/assets/javascripts/express_admin.js +1 -4
  5. data/app/assets/javascripts/express_admin/admin.js +0 -2
  6. data/app/assets/javascripts/express_admin/scrollTableBody.js +127 -0
  7. data/app/assets/stylesheets/express_admin.css +1 -1
  8. data/app/assets/stylesheets/express_admin/components/_main_menu.sass +5 -0
  9. data/app/assets/stylesheets/express_admin/components/_megadropdown.sass +0 -5
  10. data/app/assets/stylesheets/express_admin/components/_module_sidebar.sass +9 -0
  11. data/app/assets/stylesheets/express_admin/components/_pane.sass +9 -0
  12. data/app/assets/stylesheets/express_admin/components/_widget_box.sass +10 -0
  13. data/app/assets/stylesheets/express_admin/globals/_foundation_overrides.sass +612 -0
  14. data/app/assets/stylesheets/express_admin/globals/_mixins.sass +9 -0
  15. data/app/assets/stylesheets/express_admin/globals/_typography.sass +8 -16
  16. data/app/assets/stylesheets/express_admin/globals/_variables.sass +18 -12
  17. data/app/assets/stylesheets/express_admin/screen.sass +16 -9
  18. data/app/assets/stylesheets/express_admin/sections/_header.sass +8 -94
  19. data/app/assets/stylesheets/express_admin/sections/_main_content.sass +3 -61
  20. data/app/assets/stylesheets/express_admin/sections/_main_region.sass +9 -0
  21. data/app/assets/stylesheets/express_admin/sections/_page_body.sass +6 -0
  22. data/app/assets/stylesheets/express_admin/sections/_page_sidebar.sass +5 -0
  23. data/app/assets/stylesheets/express_admin/sections/_sidebar_region.sass +7 -0
  24. data/app/assets/stylesheets/express_admin/shared/_buttons.sass +2 -31
  25. data/app/assets/stylesheets/express_admin/shared/_forms.sass +3 -97
  26. data/app/assets/stylesheets/express_admin/shared/_layout_components.sass +60 -0
  27. data/app/assets/stylesheets/express_admin/shared/_messages.sass +1 -1
  28. data/app/assets/stylesheets/express_admin/shared/_tables.sass +12 -67
  29. data/app/assets/stylesheets/express_admin/shared/_trees.sass +27 -0
  30. data/app/components/express_admin/addon_sidebar_component.rb +5 -9
  31. data/app/components/express_admin/h_box.rb +16 -0
  32. data/app/components/express_admin/layout_component.rb +14 -0
  33. data/app/components/express_admin/main_region.rb +1 -1
  34. data/app/components/express_admin/pane.rb +37 -0
  35. data/app/components/express_admin/sidebar_region.rb +2 -4
  36. data/app/components/express_admin/smart_form.rb +63 -27
  37. data/app/components/express_admin/smart_table.rb +131 -41
  38. data/app/components/express_admin/v_box.rb +16 -0
  39. data/app/components/express_admin/widget_box.rb +2 -2
  40. data/app/helpers/express_admin/admin_helper.rb +14 -9
  41. data/app/views/layouts/express_admin/admin.html.et +7 -11
  42. data/app/views/shared/express_admin/_navigation_bar.html.et +17 -13
  43. data/app/views/shared/express_admin/_navigation_bar_profile.html.et +0 -2
  44. data/app/views/shared/express_admin/_title.html.et +6 -8
  45. data/lib/express_admin/engine.rb +1 -1
  46. data/lib/express_admin/menu.rb +7 -2
  47. data/lib/express_admin/version.rb +1 -1
  48. data/lib/generators/express_admin/install/install_generator.rb +4 -4
  49. data/lib/generators/express_admin/install/templates/controllers/admin_controller.rb.erb +1 -1
  50. data/lib/generators/express_admin/scaffold/scaffold_generator.rb +10 -2
  51. data/lib/generators/express_admin/scaffold/templates/index.html.et.erb +1 -1
  52. data/test/dummy/app/controllers/admin/categories_controller.rb +12 -0
  53. data/test/dummy/app/controllers/admin/widgets_controller.rb +12 -0
  54. data/test/dummy/app/models/category.rb +3 -0
  55. data/test/dummy/app/models/tag.rb +4 -0
  56. data/test/dummy/app/models/widget.rb +7 -0
  57. data/test/dummy/app/models/widget_tag.rb +4 -0
  58. data/test/dummy/app/views/admin/categories/index.html.et +10 -0
  59. data/test/dummy/app/views/admin/widgets/index.html.et +10 -0
  60. data/test/dummy/config/routes.rb +5 -0
  61. data/test/dummy/db/development.sqlite3 +0 -0
  62. data/test/dummy/db/migrate/20150525221206_create_widgets.rb +15 -0
  63. data/test/dummy/db/migrate/20150525221228_create_categories.rb +9 -0
  64. data/test/dummy/db/migrate/20150610081108_create_tags.rb +7 -0
  65. data/test/dummy/db/migrate/20150610081204_create_widget_tags.rb +8 -0
  66. data/test/dummy/db/schema.rb +26 -5
  67. data/test/dummy/db/test.sqlite3 +0 -0
  68. data/test/dummy/log/development.log +35 -0
  69. data/test/dummy/log/test.log +33428 -0
  70. data/test/dummy/test/components/smart_form_test.rb +93 -0
  71. data/test/dummy/test/components/smart_table_test.rb +137 -0
  72. data/test/dummy/test/fixtures/categories.yml +8 -0
  73. data/test/dummy/test/fixtures/tags.yml +14 -0
  74. data/test/dummy/test/fixtures/widget_tags.yml +10 -0
  75. data/test/dummy/test/fixtures/widgets.yml +20 -0
  76. data/test/dummy/test/models/category_test.rb +13 -0
  77. data/test/dummy/test/models/tag_test.rb +13 -0
  78. data/test/dummy/test/models/widget_tag_test.rb +13 -0
  79. data/test/dummy/test/models/widget_test.rb +13 -0
  80. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0fNukwCUjSC_GRsVIMtSMVdZkd5bq5eShMcGCrCVolc.cache +0 -0
  81. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1c4REJHKdQH9bwZhZ7Ixshmy_1jAzXc3-9OiDCDyRlk.cache +0 -0
  82. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1rKHSaJsgLcnfIJRWYdYy7IimMCKcdI-I_ABekUargk.cache +0 -0
  83. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2kMk5s4FKAOWE1z_MvFIKHmdvNDzyoknoi39xL7KwJw.cache +0 -0
  84. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2oGeKB_QtwWpX3sJNHocsJiBZT60x_cwV_nSGh_HS-A.cache +0 -0
  85. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2rQDWRzFxOlBnczJ1BLfE2yCPVvrhgLGfAI7VSM54wk.cache +0 -0
  86. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3S9nnUmEIG4-hDY6cVc82GFUUWicNxtpFfWwJAmJSkI.cache +2 -0
  87. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4WErFdugnc8uWYwUE9vVfw4xxCgknECdpWhn8teZbLk.cache +1 -0
  88. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4a7epNa5R1jeKCtFsJKTdVqMEQm5p0clABRPIiKegMo.cache +0 -0
  89. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/57pjjkzReNE1L9yodewGebfd0AwnfQb33rtJjSTNpLc.cache +0 -0
  90. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/7vpDV8GyXVfyuFIkRrrkOwUXyIaCmf22tBPDpvhCUUc.cache +0 -0
  91. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Cpj6WyqdggDUkeQl_Ut3P9sUtPHPXXwkmZ92TfIJGJ8.cache +0 -0
  92. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/DwepgSdLiEklsJWIJItEY_ZW-nOjjeHqcdQwBtu0mus.cache +0 -0
  93. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FOJpwMQCx9V9wfhJQKFa2f7BjfP7vyS7M3o6VX0nAI0.cache +1 -0
  94. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GStmpiXE4g01i-UTlSKq8B9yS69WpAp0YH7vWyESBwI.cache +0 -0
  95. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H53ZZ50FwJjYUOMH60F7cpINgkh9tOF4R3L6ANoH6tU.cache +1 -0
  96. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/HY86Fwn8VPlIysY56uV-wu90bISxrXeiCtwDXg94Glg.cache +0 -0
  97. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IcNDN_pmsAcLAMv6CST75OwOucmYm3q2099jn4tB0H8.cache +2 -0
  98. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/JpdfSFVzivQn6TFSivlys3nV3VzD8cT0ET8uqbptxV4.cache +1 -0
  99. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KYe0_GIi-cNX0eRteBB0aixVATrVRo7Z3BaWFCgc7yg.cache +1 -0
  100. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/LsiO4sLQfM0GvyEYhaC2E54rCurTkewg7YJX-sWBctI.cache +0 -0
  101. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/NDViKg4-yspkY1tX9IQWnh1-LkiKqIohBqtRlYZZQcs.cache +2 -0
  102. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/OXsmreTQ3MNzGsrV1eEoW72VZQ52hQ0HiuTr0ImnqHA.cache +0 -0
  103. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/PuMvTyv89E8wfRqbWNMhTH3PAE61uCCHgpEsgdOzMXQ.cache +0 -0
  104. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Pvp8CVIKYjspNrgzEvgleujifrrdfATzWbwALDzQNE4.cache +2 -0
  105. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/PzcOUndLc-O-VBR2SDM2rFkiqh-iqknTEgEAXDLKfdc.cache +0 -0
  106. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/QbX1HRM7KX85_PeVHcd6VJM6sqzUCWXEEYZX7CAG0eA.cache +1 -0
  107. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UDHqQKrYSSvXfCbiJjXzmJh2Q6T5hLO80aaPvs9n-74.cache +0 -0
  108. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UFtISk01WwcjjWcPLyjeHX3bgBqZHGQcb0Z4KFNmduA.cache +0 -0
  109. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UWvG-0WgVYHVxrtLU32uumROQuSjJv_M_svW1B8YxhY.cache +1 -0
  110. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UruI7_ZpuzDnmNir9hzUa_r8oiuuIfVTco19ACdxwRw.cache +2 -0
  111. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VQ2-2HlkGd1XVIHlwRGcgDsjto3oE-50-4E3HGdt8uU.cache +1 -0
  112. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VezioHwyk87G6TWkkYX88tBHC6QToVGOU5geZ54Ts5A.cache +1 -0
  113. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WfQ-xKbnwqaKy-UQa8spczc9qocIL_jZE4cyRZftjfA.cache +2 -0
  114. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XPpCqlT8yHTnQNHKRxjnilUBvAs6klpgWXneFU15U78.cache +0 -0
  115. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XXTM8o6vkSxhxxm8P_orbeCZvxb8nMk7cjdwvUNL1io.cache +0 -0
  116. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XyRQXY_oj8GLw9z8lj2dknGu45jbX5lK8ko7TePosPE.cache +2 -0
  117. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/YDMOayx363vI7odbkHMVI-_RxkOoVP2Hb7FX0mFVFE0.cache +1 -0
  118. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Z88gJS67lNABJgUB18JzXrnGkVbYfXQvjqm7mSJIv3o.cache +1 -0
  119. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_k4X14Cc-2Y4gc47s7PaWtAaG_zcq1ICJInTYNp6bI4.cache +2 -0
  120. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_kr_dP4VVnM8s8ZMdiNBSpuPqkQVx46FUdCTDH4XR70.cache +0 -0
  121. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_y-BPEZTh3iXcaPJkcP9-krjw-V8LMhop4VGxUEUDsY.cache +1 -0
  122. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/afi__XQzjsqMT3svcCGlVD_YrHEWQZAEbJt4CgYaCkw.cache +1 -0
  123. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/bdqS7lHa0nBN-mqdSomfMK-S6ct2TAn0z9kVzFBwQPM.cache +0 -0
  124. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/csH89NDps1_QU4E0p0HHZti2XLd_etKYDqM9cPsNpps.cache +0 -0
  125. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ePtEu-AuU0iZ2J02ZafF9yOJVd8VVdV2KSheiJYlXzA.cache +1 -0
  126. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/eTRff0YXBw-Tx9VEMxb-Es8NwqjHCXiaosBLxijl3I8.cache +1 -0
  127. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/fRkrxaDYzRDIvxEUGZBFbW5ocAlmDQNg8_LRcOJJOzI.cache +1 -0
  128. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/goVFgqSk0CBOXpbwLNd-enc31BvXm1S8cMSJ3zbxRYI.cache +1 -0
  129. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hPH6lLkPX0EzSG_eBprMMUnmFs9y89AOarfyhGoAFGc.cache +0 -0
  130. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hgfrt0FmGrYD5SJVJhlsUPtL9usJvw3vZrW4dqQq16Y.cache +1 -0
  131. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hiZg7FLw7SFa7S-BQ8CKWdAqFVUZy2HVb2chmQijM-g.cache +0 -0
  132. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/iKb8yzw0EdFpNkayUbc16U7olK7iwE2xIs_6b_xIEtI.cache +1 -0
  133. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/iY03Ztj2YhBWadK8LHOKR3Hj1W7PLss0v85Q6Nj7E3Q.cache +0 -0
  134. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ipLhCJrCCVwH7l_p1quUi2xS6POFlVHfZCqIymk8CoI.cache +0 -0
  135. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ipTot5AshDPhFtCBNfXROxutQlCrYkvsXsy3fcVT0Nw.cache +0 -0
  136. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/j5CxYBAeuD-bGDZUBh-pA0mEPCSVFDZsJm3x7QED4g0.cache +1 -0
  137. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/jr4uhEONyFYm0QhfEOMqv05S-BeUP7gw1gQl3GIFyAI.cache +0 -0
  138. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/kGO7_IQtBwpe93nSTKj6cCWGm0fZ_NoXltdw8E_74CQ.cache +2 -0
  139. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/le9WohG3eSGbBMySdKkdvkHXW8yipO8w4iQZCCCQb3M.cache +1 -0
  140. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/mtmR_XlvnlYbOPmP1EkOj96q2Z5OQNv4HkeFj9DwEXQ.cache +2 -0
  141. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nU1obIDVHUhN-3yRA6B9U5aO8wsd6zh1tyVtSROJewk.cache +2 -0
  142. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oZ6SMNNft5SCbvNtWXkGQwKQPVwXoJRMV7VUJfWHc2k.cache +2 -0
  143. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oygs10cGTBBo7Mj97CjFRTrSrFR7Qi3MnHNR_WQvIps.cache +0 -0
  144. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/p0Gnpai0VYzEsAXH_5t9huZ3dO0v6JKRH0PIH--q-XA.cache +2 -0
  145. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pu9xM8T2O07hU3PafxbOLjg2vJxbbHE3qnIK9JHqVhA.cache +1 -0
  146. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qEHftZrJ-Da_nsvX4UOaALyIt0mwnOuE2TdtBPGAWEw.cache +0 -0
  147. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/rtdpq5fxIYMKM43QyOIluEECg2NP5OA-7Zi8yuowZSI.cache +1 -0
  148. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ujFa5Hu76zd1O6nO2G7WcgnOWZyTOMKLajazyMXAL_I.cache +0 -0
  149. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/uovLHiJZBoVnD7CXYj2WZYmAbBcqGLQOzu4Voz5Fx8c.cache +0 -0
  150. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/uyHm0KHsHpJhn-wv69exuuyU4kyJtW3DDQLP7tCD7e4.cache +0 -0
  151. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/v50nc5cuqpLxjepk7XsBmomcmFARYlHQRtq8yOv8AY0.cache +0 -0
  152. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vAh5eTPxI929yxRCyXgbKTWat5cZiVSOyX0UeTveXGE.cache +1 -0
  153. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vKiuNu1fQitE151bh0Tr2Ufkc80jWzchPjxaHkpjQL8.cache +1 -0
  154. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/x-3lyh5i4qS-Q9E3X2uj2LthTOxsndFTrFXBsPPo6hI.cache +2 -0
  155. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/x3xQgAyjbrGTXy2FX2UzGG77agJgt_xsyNBuofrvY_E.cache +0 -0
  156. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/xQqBwKYWFPxZm5tidxsRKk23Z3q-OLRmKQUlMjRev_c.cache +0 -0
  157. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/yZNo-6dzWGUNCJDnmqm7X5YB5FOxjYp_l8aKS6KaZOg.cache +0 -0
  158. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/zV58Nou0R2EJG875wLND6wF9ES4diVi1fP7B_B6eCzw.cache +1 -0
  159. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/zxPFYKpkfNJtui1ekitdNMaGAo39fefm-oJCnILEEQ8.cache +1 -0
  160. data/test/fixtures/widgets.yml +20 -0
  161. data/test/lib/express_admin/menu_test.rb +1 -1
  162. data/test/{fixtures/express_admin → support}/test_menu.yml +0 -0
  163. data/test/test_helper.rb +25 -5
  164. data/vendor/gems/express_templates/Gemfile +16 -0
  165. data/vendor/gems/express_templates/Gemfile.lock +153 -0
  166. data/vendor/gems/express_templates/LICENSE +21 -0
  167. data/vendor/gems/express_templates/README.md +152 -0
  168. data/vendor/gems/express_templates/Rakefile +32 -0
  169. data/vendor/gems/express_templates/diagrams/diagram.graffle +2404 -0
  170. data/vendor/gems/express_templates/diagrams/diagram_express_templates.png +0 -0
  171. data/vendor/gems/express_templates/diagrams/diagram_haml_erb.png +0 -0
  172. data/vendor/gems/express_templates/express_templates-0.5.0.gem +0 -0
  173. data/vendor/gems/express_templates/express_templates.gemspec +29 -0
  174. data/vendor/gems/express_templates/lib/core_extensions/proc.rb +90 -0
  175. data/vendor/gems/express_templates/lib/core_extensions/string.rb +25 -0
  176. data/vendor/gems/express_templates/lib/express_templates.rb +19 -0
  177. data/vendor/gems/express_templates/lib/express_templates/compiler.rb +36 -0
  178. data/vendor/gems/express_templates/lib/express_templates/components.rb +18 -0
  179. data/vendor/gems/express_templates/lib/express_templates/components/base.rb +54 -0
  180. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/adoptable.rb +20 -0
  181. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/building.rb +14 -0
  182. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/conditionality.rb +54 -0
  183. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/configurable.rb +90 -0
  184. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/iterating.rb +75 -0
  185. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/parenting.rb +72 -0
  186. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/rendering.rb +30 -0
  187. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/resourceful.rb +135 -0
  188. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/templating.rb +198 -0
  189. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/wrapping.rb +84 -0
  190. data/vendor/gems/express_templates/lib/express_templates/components/column.rb +13 -0
  191. data/vendor/gems/express_templates/lib/express_templates/components/container.rb +7 -0
  192. data/vendor/gems/express_templates/lib/express_templates/components/content_for.rb +42 -0
  193. data/vendor/gems/express_templates/lib/express_templates/components/for_each.rb +30 -0
  194. data/vendor/gems/express_templates/lib/express_templates/components/form_rails_support.rb +22 -0
  195. data/vendor/gems/express_templates/lib/express_templates/components/forms.rb +17 -0
  196. data/vendor/gems/express_templates/lib/express_templates/components/forms/basic_fields.rb +53 -0
  197. data/vendor/gems/express_templates/lib/express_templates/components/forms/checkbox.rb +37 -0
  198. data/vendor/gems/express_templates/lib/express_templates/components/forms/express_form.rb +57 -0
  199. data/vendor/gems/express_templates/lib/express_templates/components/forms/form_component.rb +64 -0
  200. data/vendor/gems/express_templates/lib/express_templates/components/forms/form_support.rb +13 -0
  201. data/vendor/gems/express_templates/lib/express_templates/components/forms/option_support.rb +65 -0
  202. data/vendor/gems/express_templates/lib/express_templates/components/forms/radio.rb +84 -0
  203. data/vendor/gems/express_templates/lib/express_templates/components/forms/select.rb +105 -0
  204. data/vendor/gems/express_templates/lib/express_templates/components/forms/select_collection.rb +57 -0
  205. data/vendor/gems/express_templates/lib/express_templates/components/forms/submit.rb +26 -0
  206. data/vendor/gems/express_templates/lib/express_templates/components/null_wrap.rb +41 -0
  207. data/vendor/gems/express_templates/lib/express_templates/components/row.rb +28 -0
  208. data/vendor/gems/express_templates/lib/express_templates/components/table_for.rb +163 -0
  209. data/vendor/gems/express_templates/lib/express_templates/components/tree_for.rb +86 -0
  210. data/vendor/gems/express_templates/lib/express_templates/components/unless_block.rb +40 -0
  211. data/vendor/gems/express_templates/lib/express_templates/expander.rb +140 -0
  212. data/vendor/gems/express_templates/lib/express_templates/indenter.rb +47 -0
  213. data/vendor/gems/express_templates/lib/express_templates/interpolator.rb +36 -0
  214. data/vendor/gems/express_templates/lib/express_templates/macro.rb +45 -0
  215. data/vendor/gems/express_templates/lib/express_templates/markup.rb +9 -0
  216. data/vendor/gems/express_templates/lib/express_templates/markup/html_tag.rb +62 -0
  217. data/vendor/gems/express_templates/lib/express_templates/markup/tag.rb +150 -0
  218. data/vendor/gems/express_templates/lib/express_templates/markup/wrapper.rb +94 -0
  219. data/vendor/gems/express_templates/lib/express_templates/markup/yielder.rb +21 -0
  220. data/vendor/gems/express_templates/lib/express_templates/renderer.rb +11 -0
  221. data/vendor/gems/express_templates/lib/express_templates/template/handler.rb +15 -0
  222. data/vendor/gems/express_templates/lib/express_templates/version.rb +3 -0
  223. data/vendor/gems/express_templates/lib/tasks/express_templates.rake +4 -0
  224. data/vendor/gems/express_templates/test/compiler_test.rb +9 -0
  225. data/vendor/gems/express_templates/test/components/base_test.rb +44 -0
  226. data/vendor/gems/express_templates/test/components/capabilities/resourceful_test.rb +63 -0
  227. data/vendor/gems/express_templates/test/components/column_test.rb +11 -0
  228. data/vendor/gems/express_templates/test/components/conditionality_test.rb +37 -0
  229. data/vendor/gems/express_templates/test/components/configurable_test.rb +43 -0
  230. data/vendor/gems/express_templates/test/components/container_test.rb +66 -0
  231. data/vendor/gems/express_templates/test/components/content_for_test.rb +60 -0
  232. data/vendor/gems/express_templates/test/components/forms/basic_fields_test.rb +52 -0
  233. data/vendor/gems/express_templates/test/components/forms/checkbox_test.rb +44 -0
  234. data/vendor/gems/express_templates/test/components/forms/express_form_test.rb +108 -0
  235. data/vendor/gems/express_templates/test/components/forms/radio_test.rb +96 -0
  236. data/vendor/gems/express_templates/test/components/forms/select_test.rb +146 -0
  237. data/vendor/gems/express_templates/test/components/forms/submit_test.rb +12 -0
  238. data/vendor/gems/express_templates/test/components/iterating_test.rb +127 -0
  239. data/vendor/gems/express_templates/test/components/null_wrap_test.rb +28 -0
  240. data/vendor/gems/express_templates/test/components/row_test.rb +16 -0
  241. data/vendor/gems/express_templates/test/components/table_for_test.rb +211 -0
  242. data/vendor/gems/express_templates/test/components/tree_for_test.rb +103 -0
  243. data/vendor/gems/express_templates/test/core_extensions/proc_test.rb +71 -0
  244. data/vendor/gems/express_templates/test/core_extensions/string_test.rb +20 -0
  245. data/vendor/gems/express_templates/test/dummy/Rakefile +6 -0
  246. data/vendor/gems/express_templates/test/dummy/app/assets/javascripts/application.js +13 -0
  247. data/vendor/gems/express_templates/test/dummy/app/assets/stylesheets/application.css +15 -0
  248. data/vendor/gems/express_templates/test/dummy/app/controllers/application_controller.rb +5 -0
  249. data/vendor/gems/express_templates/test/dummy/app/controllers/hello_controller.rb +5 -0
  250. data/vendor/gems/express_templates/test/dummy/app/helpers/application_helper.rb +2 -0
  251. data/vendor/gems/express_templates/test/dummy/app/views/hello/show.html.et +5 -0
  252. data/vendor/gems/express_templates/test/dummy/app/views/layouts/application.html.et +15 -0
  253. data/vendor/gems/express_templates/test/dummy/bin/bundle +3 -0
  254. data/vendor/gems/express_templates/test/dummy/bin/rails +4 -0
  255. data/vendor/gems/express_templates/test/dummy/bin/rake +4 -0
  256. data/vendor/gems/express_templates/test/dummy/config.ru +4 -0
  257. data/vendor/gems/express_templates/test/dummy/config/application.rb +26 -0
  258. data/vendor/gems/express_templates/test/dummy/config/boot.rb +5 -0
  259. data/vendor/gems/express_templates/test/dummy/config/environment.rb +5 -0
  260. data/vendor/gems/express_templates/test/dummy/config/environments/development.rb +37 -0
  261. data/vendor/gems/express_templates/test/dummy/config/environments/production.rb +82 -0
  262. data/vendor/gems/express_templates/test/dummy/config/environments/test.rb +40 -0
  263. data/vendor/gems/express_templates/test/dummy/config/initializers/assets.rb +8 -0
  264. data/vendor/gems/express_templates/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  265. data/vendor/gems/express_templates/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  266. data/vendor/gems/express_templates/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  267. data/vendor/gems/express_templates/test/dummy/config/initializers/inflections.rb +16 -0
  268. data/vendor/gems/express_templates/test/dummy/config/initializers/mime_types.rb +4 -0
  269. data/vendor/gems/express_templates/test/dummy/config/initializers/session_store.rb +3 -0
  270. data/vendor/gems/express_templates/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  271. data/vendor/gems/express_templates/test/dummy/config/locales/en.yml +23 -0
  272. data/vendor/gems/express_templates/test/dummy/config/routes.rb +4 -0
  273. data/vendor/gems/express_templates/test/dummy/config/secrets.yml +22 -0
  274. data/vendor/gems/express_templates/test/dummy/log/test.log +15987 -0
  275. data/vendor/gems/express_templates/test/dummy/public/404.html +67 -0
  276. data/vendor/gems/express_templates/test/dummy/public/422.html +67 -0
  277. data/vendor/gems/express_templates/test/dummy/public/500.html +66 -0
  278. data/vendor/gems/express_templates/test/dummy/public/favicon.ico +0 -0
  279. data/vendor/gems/express_templates/test/dummy/test/controllers/hello_controller_test.rb +14 -0
  280. data/vendor/gems/express_templates/test/dummy/test/helpers/hello_helper_test.rb +4 -0
  281. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/-1ax0k6FO5drSUN6jbogg4G0JliUHLffvQUvzSePKxA.cache +1 -0
  282. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/-cDLO4NJHMndDHchOLz8KLD7QBc68WtaAbYxK2r6GsU.cache +0 -0
  283. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0t68EIwZ96sAqQSxFka9MQyIk4viw8ZIoREMCGiJRx0.cache +0 -0
  284. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/28LzLLDYjhr3jmu0GxjZ-ms5Bol6JilDRXpg8Zgbjqs.cache +1 -0
  285. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2zt1IbQCnmzGyeZS_I4sYQzrgneSCKIJBRxcffVHlWY.cache +1 -0
  286. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/5AeGDyXQbv_BTj3PD4MJpNnGVwUxLsA8H1VcwB69_wE.cache +0 -0
  287. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/B0RgtiEmqwrCQuw4AnDa3fdENtJeBtO_TqtGJuWOeNs.cache +3 -0
  288. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/D-tMNp19G2zWOPPhnQRUm4K8DPa8SpKPfGALkkofTeE.cache +0 -0
  289. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/EDVlXrcn_wEfaZ5nc_4QJBT7lPiIBcX96jBo7PBz-vc.cache +1 -0
  290. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Eso3tkb79hXQ1XdQgjbV03KyQwSeZFAHxVHImsjQ-HQ.cache +2 -0
  291. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/I8LhheC1OlOyvp_qY8kWpqKcZFiqv_BO-l5bExvDEi0.cache +1 -0
  292. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Kf4VrP5sW-qzziYSN-m7p4nETjLiEwwwRfwUOm7rOr0.cache +0 -0
  293. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Pd5YOD1DAL7QtTnwETZYBCabg5DkCFgbjt4iuBOcSoY.cache +1 -0
  294. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/QJ0Z8hROMfWpY6f5Chb7GSuDHE4gpabKVQTr9BCZe9s.cache +1 -0
  295. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/T1pSAx767vY7X1UDN0vdF7YGEkI5wMSVUKopsdvp7kI.cache +1 -0
  296. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VlSPFPDK05c7ImadRiRVKzsaa6e15RwX77QR3NYabME.cache +0 -0
  297. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Y7_BbgB9jgJIWYjDCsASySd26DTfPADAu_3DDnLlFog.cache +0 -0
  298. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/bSfZQxeyghTF4WIVnzGavxlg9afmSNuqcW6bA1Bm1OA.cache +0 -0
  299. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/fvD_ZNFRzd8Sc4PoTjyHPnkg4f7WMietFunnKqNjlvc.cache +2 -0
  300. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/g2xQygPqA5kMmp5L3wVGWaUIhdVsxFmOel9FF6M0Fuw.cache +0 -0
  301. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hKbgrf5CbMO8pe9fCHc-rI5mp1ejAhivBfvfDxBNhQA.cache +0 -0
  302. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/kaif59owjUr3HBharCH5GUxU6KoW_zXD9a9JiTjIYPY.cache +1 -0
  303. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/kpvKX5UlhhoLJv-faeq7Ibv2KQh4ROjTiarh13gHuWI.cache +2 -0
  304. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/lfyrNtbNtwuTXAWlmPCKTS-D3FHoPTY6h53wnUN36-A.cache +0 -0
  305. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/lyDRhWNhfDw_YCCSbxQw_iOIV3eTfeAoX6mTREuVZSA.cache +3 -0
  306. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/p17lC0HAHCtk1ds_NHl9xhEyMtRjfQInw1c6fmFWguc.cache +0 -0
  307. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/p1cwnBd8RQBm9x5HzDmiiU7RhvnxhPX8VTfi0tTElJY.cache +3 -0
  308. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qT6_0ti_v6fAjS3wETXqvTkr6W0LP4PB942uLYQzWK8.cache +3 -0
  309. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qzU7DVwQZ7z6i6pYUpssYsAj0y33GN83B4O1bLvkW_4.cache +1 -0
  310. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/r56eI1z7iFKeySym_9zw5hVOPjb0d6IQPn5pAYTKk04.cache +2 -0
  311. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/rGWvoeLyiyqb813IXgfDpDxks23JQoLLZOa69bzKPE8.cache +1 -0
  312. data/vendor/gems/express_templates/test/dummy/tmp/cache/assets/test/sprockets/v3.0/y8T65xpx0s3RgT_YiqWEEXIaBsgK4woCNSuZ1zjQZBk.cache +2 -0
  313. data/vendor/gems/express_templates/test/expander_stack_test.rb +41 -0
  314. data/vendor/gems/express_templates/test/expander_test.rb +99 -0
  315. data/vendor/gems/express_templates/test/express_templates_test.rb +19 -0
  316. data/vendor/gems/express_templates/test/handler_test.rb +122 -0
  317. data/vendor/gems/express_templates/test/indenter_test.rb +27 -0
  318. data/vendor/gems/express_templates/test/interpolator_test.rb +80 -0
  319. data/vendor/gems/express_templates/test/markup/tag_test.rb +149 -0
  320. data/vendor/gems/express_templates/test/markup/wrapper_test.rb +42 -0
  321. data/vendor/gems/express_templates/test/markup/yielder_test.rb +9 -0
  322. data/vendor/gems/express_templates/test/performance_test.rb +93 -0
  323. data/vendor/gems/express_templates/test/test_helper.rb +28 -0
  324. data/vendor/gems/foundation_apps_styles/Gemfile +4 -0
  325. data/vendor/gems/foundation_apps_styles/LICENSE.txt +21 -0
  326. data/vendor/gems/foundation_apps_styles/README.md +41 -0
  327. data/vendor/gems/foundation_apps_styles/Rakefile +13 -0
  328. data/vendor/gems/foundation_apps_styles/bin/console +14 -0
  329. data/vendor/gems/foundation_apps_styles/bin/setup +7 -0
  330. data/vendor/gems/foundation_apps_styles/foundation_apps_styles.gemspec +24 -0
  331. data/vendor/gems/foundation_apps_styles/lib/foundation_apps_styles.rb +6 -0
  332. data/vendor/gems/foundation_apps_styles/lib/foundation_apps_styles/version.rb +3 -0
  333. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/account.svg +44 -0
  334. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/action.svg +38 -0
  335. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/ban.svg +17 -0
  336. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/bell.svg +22 -0
  337. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/bookmark.svg +14 -0
  338. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/cart.svg +35 -0
  339. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/chevron.svg +28 -0
  340. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/circle-check.svg +25 -0
  341. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/circle-x.svg +25 -0
  342. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/cog.svg +17 -0
  343. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/comment-square.svg +14 -0
  344. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/dashboard.svg +38 -0
  345. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/document.svg +28 -0
  346. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/envelope.svg +44 -0
  347. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/flag.svg +24 -0
  348. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/home.svg +28 -0
  349. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/lock.svg +55 -0
  350. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/magnifying-glass.svg +26 -0
  351. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/person.svg +62 -0
  352. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/reload.svg +19 -0
  353. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/share-boxed.svg +17 -0
  354. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/star.svg +14 -0
  355. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/thumb.svg +38 -0
  356. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/zoom.svg +56 -0
  357. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/_global.scss +131 -0
  358. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/_includes.scss +33 -0
  359. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/_settings.scss +614 -0
  360. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_accordion.scss +72 -0
  361. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_action-sheet.scss +265 -0
  362. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_block-list.scss +360 -0
  363. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_button-group.scss +197 -0
  364. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_button.scss +205 -0
  365. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_card.scss +93 -0
  366. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_extras.scss +54 -0
  367. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_forms.scss +460 -0
  368. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_grid.scss +422 -0
  369. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_iconic.scss +95 -0
  370. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_label.scss +134 -0
  371. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_list.scss +19 -0
  372. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_menu-bar.scss +382 -0
  373. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_modal.scss +129 -0
  374. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_motion.scss +525 -0
  375. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_notification.scss +207 -0
  376. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_off-canvas.scss +169 -0
  377. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_panel.scss +134 -0
  378. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_popup.scss +68 -0
  379. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_switch.scss +134 -0
  380. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_tabs.scss +100 -0
  381. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_title-bar.scss +135 -0
  382. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_typography.scss +345 -0
  383. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_utilities.scss +160 -0
  384. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/foundation-apps.css +6146 -0
  385. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/foundation.scss +50 -0
  386. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_breakpoints.scss +154 -0
  387. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_functions.scss +343 -0
  388. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_images.scss +19 -0
  389. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_mixins.scss +123 -0
  390. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/vendor/_normalize.scss +424 -0
  391. metadata +512 -36
  392. data/app/assets/stylesheets/express_admin/foundation_and_overrides.scss +0 -1443
  393. data/app/assets/stylesheets/express_admin/sections/_devise.sass +0 -42
  394. data/app/assets/stylesheets/express_admin/sections/_sidebar.sass +0 -42
  395. data/app/assets/stylesheets/express_admin/shared/_labels.sass +0 -16
  396. data/app/assets/stylesheets/express_admin/shared/_navigation.sass +0 -20
  397. data/lib/generators/express_admin/scaffold/templates/show.html.et.erb +0 -10
@@ -0,0 +1,29 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ # Maintain your gem's version:
4
+ require "express_templates/version"
5
+
6
+ # Describe your gem and declare its dependencies:
7
+ Gem::Specification.new do |s|
8
+ s.name = "express_templates"
9
+ s.version = ExpressTemplates::VERSION
10
+ s.authors = ["Steven Talcott Smith", "Eumir Gaspar"]
11
+ s.email = ["steve@aelogica.com", "eumir@aelogica.com"]
12
+ s.homepage = "https://github.com/aelogica/express_templates"
13
+ s.summary = "Write HTML templates in declarative Ruby. Create reusable view components."
14
+ s.description = "Replace Erb/HAML/Slim with ExpressTemplates and write templates in a declartive style of Ruby. With ExpressTemplates you may easily create a library of components for use across projects."
15
+ s.license = "MIT"
16
+
17
+ s.files = Dir["{app,config,db,lib}/**/*", "LICENSE", "Rakefile", "README.md"]
18
+ s.test_files = Dir["test/**/*"]
19
+
20
+ s.add_dependency "activesupport", "~> 4.2" # strictly speaking we only depend on active support
21
+ s.add_dependency "parslet", "~> 1.6"
22
+ s.add_development_dependency "rails", "~> 4.2"
23
+ s.add_development_dependency "pry", "~> 0"
24
+ s.add_development_dependency "erubis", "~> 2.7"
25
+ s.add_development_dependency "haml", "~> 4.0"
26
+ s.add_development_dependency "better_errors", "~> 2.0"
27
+ s.add_development_dependency "binding_of_caller", "~> 0.7"
28
+ s.add_development_dependency "pry-stack_explorer", "~> 0.4"
29
+ end
@@ -0,0 +1,90 @@
1
+ require 'ripper'
2
+ require 'pp'
3
+ class Proc
4
+
5
+ TLAMBEG = [:on_tlambeg, "{"]
6
+ TLAMBDA = [:on_tlambda, "->"]
7
+ LBRACE = [:on_lbrace, '{']
8
+
9
+ TOKEN_PAIRS = {LBRACE => [:on_rbrace, '}'],
10
+ [:on_kw, 'do'] => [:on_kw, 'end'],
11
+ TLAMBDA => [:on_rbrace, '}']}
12
+
13
+ # Make a best effort to provide the original source for a block
14
+ # based on extracting a string from the file identified in
15
+ # Proc#source_location using Ruby's tokenizer.
16
+ #
17
+ # This works for first block declared on a line in a source
18
+ # file. If additional blocks are specified inside the first block
19
+ # on the same line as the start of the block, only the outer-most
20
+ # block declaration will be identified as a the block we want.
21
+ #
22
+ # If you require only the source of blocks-within-other-blocks, start them
23
+ # on a new line as would be best practice for clarity and readability.
24
+ def source
25
+ @source ||= begin
26
+ file, line_no = source_location
27
+ raise "no line number provided for source_location: #{self}" if line_no.nil?
28
+ tokens = Ripper.lex File.read(file)
29
+ tokens_on_line = tokens.select {|pos, lbl, str| pos[0].eql?(line_no) }
30
+ starting_token = tokens_on_line.detect do |pos, lbl, str|
31
+ TOKEN_PAIRS.keys.include? [lbl, str]
32
+ end
33
+ starting_token_type = [starting_token[1], starting_token[2]]
34
+ ending_token_type = TOKEN_PAIRS[starting_token_type]
35
+ source_str = ""
36
+ remaining_tokens = tokens[tokens.index(starting_token)..-1]
37
+ nesting = -1
38
+ starting_nesting_token_types = if [TLAMBDA, LBRACE].include?(starting_token_type)
39
+ [TLAMBDA, LBRACE]
40
+ else
41
+ [starting_token_type]
42
+ end
43
+
44
+ while token = remaining_tokens.shift
45
+ token = [token[1], token[2]] # strip position
46
+ source_str << token[1]
47
+ nesting += 1 if starting_nesting_token_types.include? token
48
+ is_ending_token = token.eql?(ending_token_type)
49
+ break if is_ending_token && nesting.eql?(0)
50
+ nesting -= 1 if is_ending_token
51
+ end
52
+ source_str
53
+ end
54
+ end
55
+
56
+ # Examines the source of a proc to extract the body by
57
+ # removing the outermost block delimiters and any surrounding.
58
+ # whitespace.
59
+ #
60
+ # Raises exception if the block takes arguments.
61
+ #
62
+ def source_body
63
+ raise "Cannot extract proc body on non-zero arity" unless arity.eql?(0)
64
+ tokens = Ripper.lex source
65
+ body_start_idx = 2
66
+ body_end_idx = -1
67
+ if tokens[0][1].eql?(:on_tlambda)
68
+ body_start_idx = tokens.index(tokens.detect { |t| t[1].eql?(:on_tlambeg) }) + 1
69
+ end
70
+ body_tokens = tokens[body_start_idx..-1]
71
+
72
+ body_tokens.pop # ending token of proc
73
+ # remove trailing whitespace
74
+ whitespace = [:on_sp, :on_nl, :on_ignored_nl]
75
+ body_tokens.pop while whitespace.include?(body_tokens[-1][1])
76
+ # remove leading whitespace
77
+ body_tokens.shift while whitespace.include?(body_tokens[0][1])
78
+
79
+ # put them back together
80
+ body_tokens.map {|token| token[2] }.join
81
+ end
82
+
83
+ def self.from_source(prc_src)
84
+ raise ArgumentError unless prc_src.kind_of?(String)
85
+ prc = eval(prc_src)
86
+ prc.instance_variable_set(:@source, prc_src)
87
+ prc
88
+ end
89
+
90
+ end
@@ -0,0 +1,25 @@
1
+ # We use Hash#inspect in ExpressTemplates::Markup::Wrapper to reproduce arguments
2
+ # to helpers in the Rails view.
3
+ #
4
+ # Hash#inspect calls #inspect on values and keys. This allows us to
5
+ # place the resulting string into the view code with a simple substitution
6
+ # or concatenation.
7
+ #
8
+ # In special cases, however, we might want the argument or one of its keys
9
+ # or values to be the result of evaluating of a ruby expression in the view
10
+ # that does not itself return a String. The result of #inspect
11
+ # is normally a quoted and escaped string which would evaluate to a string
12
+ # in the view. What we want is a simple string of code. Here we provide
13
+ # a method that overrides #inspect in the strings eigenclass to strip off
14
+ # enclosing quotes or unwanted escapes. It shouldn't bother anybody and
15
+ # it keeps us from doing messy things elsewhere for now.
16
+ class String
17
+ def to_view_code
18
+ class << self
19
+ def inspect
20
+ super.gsub(/^"(.*)"$/,'\1')
21
+ end
22
+ end
23
+ return self
24
+ end
25
+ end
@@ -0,0 +1,19 @@
1
+ module ExpressTemplates
2
+ require 'core_extensions/proc'
3
+ require 'core_extensions/string'
4
+ require 'express_templates/indenter'
5
+ require 'express_templates/macro'
6
+ require 'express_templates/markup'
7
+ require 'express_templates/components'
8
+ require 'express_templates/template/handler'
9
+ require 'express_templates/renderer'
10
+ require 'express_templates/expander'
11
+ require 'express_templates/compiler'
12
+ require 'express_templates/interpolator'
13
+ extend Renderer
14
+ extend Compiler
15
+ if defined?(Rails)
16
+ ::ActionView::Template.register_template_handler :et, ExpressTemplates::Template::Handler
17
+ end
18
+
19
+ end
@@ -0,0 +1,36 @@
1
+ module ExpressTemplates
2
+ module Compiler
3
+ def compile(template_or_src=nil, &block)
4
+
5
+ if block
6
+ begin
7
+ block.source
8
+ rescue
9
+ raise "block must have source - did you do compile(&:label) ?"
10
+ end
11
+ end
12
+
13
+ template, src = _normalize(template_or_src)
14
+
15
+ expander = Expander.new(template)
16
+
17
+ compiled = expander.expand(src, &block).map(&:compile)
18
+
19
+ return Interpolator.transform(compiled.join("+").gsub('"+"', '')).tap do |s|
20
+ puts("\n"+template.inspect+"\nSource:\n#{template.try(:source)}\nInterpolated:\n#{s}\n") if ENV['DEBUG'].eql?('true')
21
+ end
22
+ end
23
+
24
+ private
25
+ def _normalize(template_or_src)
26
+ template, src = nil, nil
27
+ if template_or_src.respond_to?(:source)
28
+ template = template_or_src
29
+ src = template_or_src.source
30
+ else
31
+ src = template_or_src
32
+ end
33
+ return template, src
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,18 @@
1
+ module ExpressTemplates
2
+ module Components
3
+ end
4
+ end
5
+
6
+ require 'express_templates/expander'
7
+ require 'express_templates/components/base'
8
+ require 'express_templates/components/container'
9
+ require 'express_templates/components/null_wrap'
10
+ require 'express_templates/components/for_each'
11
+ require 'express_templates/components/unless_block'
12
+ require 'express_templates/components/row'
13
+ require 'express_templates/components/column'
14
+ require 'express_templates/components/form_rails_support'
15
+ require 'express_templates/components/content_for'
16
+ require 'express_templates/components/table_for'
17
+ require 'express_templates/components/tree_for'
18
+ require 'express_templates/components/forms'
@@ -0,0 +1,54 @@
1
+ capabilities = Dir.glob(File.join(File.dirname(__FILE__), 'capabilities', '*.rb'))
2
+ capabilities.each {|capability| require capability}
3
+
4
+ module ExpressTemplates
5
+ # Components provide self-contained reusable view code meant to be shared
6
+ # within a project or across many projects through a library of components
7
+ #
8
+ # Components gain their functionality through inclusion of Capabilities.
9
+ #
10
+ # Most Components are descendents of Components::Base.
11
+ #
12
+ module Components
13
+
14
+ # Components::Base is the base class for ExpressTemplates view components.
15
+ #
16
+ # View components are available as macros in ExpressTemplates and may be
17
+ # used to encapsulate common view patterns, behavior and functionality in
18
+ # reusable classes that can be shared within and across projects.
19
+ #
20
+ # Components intended to provide a base framework for a library of reusable
21
+ # components to cut development time across a multitude of projects.
22
+ #
23
+ # Components gain their functionality through including Capabilities.
24
+ #
25
+ # Example capabilities include:
26
+ #
27
+ # * Managing related ExpressTemplate fragments
28
+ # * Compiling template fragments for evaluation in a View Context
29
+ # * Specifying rendering logic to be executed in the View Context
30
+ # * Potentially referencing external assets that may be required
31
+ # for the component to work.
32
+ #
33
+ # Components::Base includes the following capabilities:
34
+ #
35
+ # * Capabilities::Templating
36
+ # * Capabilities::Rendering
37
+ # * Capabilities::Wrapping
38
+ # * Capabilities::Iterating
39
+ #
40
+ class Base < Expander
41
+ include ExpressTemplates::Macro
42
+ include Capabilities::Templating
43
+ include Capabilities::Rendering
44
+ include Capabilities::Wrapping
45
+ include Capabilities::Iterating
46
+
47
+ def self.inherited(klass)
48
+ ExpressTemplates::Expander.register_macros_for klass
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,20 @@
1
+ module ExpressTemplates
2
+ module Components
3
+ module Capabilities
4
+ module Adoptable
5
+ # Adoptable adds the capability for a child to refer
6
+ # to its parent. This is used by more complex
7
+ # components which are intended to work together
8
+ # such as form components where form elements may need
9
+ # to use information known only to the parent.
10
+
11
+ def self.included(base)
12
+ base.class_eval do
13
+ attr_accessor :parent
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,14 @@
1
+ module ExpressTemplates
2
+ module Components
3
+ module Capabilities
4
+ module Building
5
+ # commented this out because it's intercepting calls to rails helpers
6
+ # TODO: fix this... I think the whole buiding approach is broken.
7
+ # this class is empty and should probably go away.
8
+ # def method_missing(name, *args)
9
+ # raise "#{self.class.to_s} has no method '#{name}'"
10
+ # end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,54 @@
1
+ module ExpressTemplates
2
+ module Components
3
+ module Capabilities
4
+ # Adds the capability for a component to only render
5
+ # its markup when a condition to be evaluated in the
6
+ # view is true.
7
+ #
8
+ # Example:
9
+ #
10
+ # class PageHeader < ExpressTemplates::Components::Base
11
+ # include ExpressTemplates::Components::Capabilities::Conditionality
12
+ #
13
+ # emits {
14
+ # h1 { content_for(:page_header) }
15
+ # }
16
+ #
17
+ # only_if -> { content_for?(:page_header) }
18
+ #
19
+ # end
20
+ # end
21
+ #
22
+ # The condition supplied to only if in the form of a proc
23
+ # is evaluated in the view context.
24
+ #
25
+ # The component will render an empty string if the proc returns false.
26
+ module Conditionality
27
+ def self.included(base)
28
+ base.class_eval do
29
+ extend ClassMethods
30
+ end
31
+ end
32
+
33
+ module ClassMethods
34
+
35
+ def condition_proc
36
+ @condition_proc
37
+ end
38
+
39
+ def only_if condition_proc
40
+ @condition_proc = Proc.from_source "-> {!(#{condition_proc.source_body})}"
41
+ inner_src = self[:markup]
42
+ fragment_src = %Q(-> {
43
+ unless_block(Proc.from_source(#{@condition_proc.source.inspect})) {
44
+ #{inner_src.source_body}
45
+ }
46
+ })
47
+ _store :markup, Proc.from_source(fragment_src)
48
+ end
49
+
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,90 @@
1
+ module ExpressTemplates
2
+ module Components
3
+ module Capabilities
4
+
5
+ # Configurable components accept options which they can use to alter
6
+ # their markup each time they are invoked within a template.
7
+ #
8
+ # They do not compile their markup fragments at load time as simpler
9
+ # components do for efficiency. Rather they compile their fragments
10
+ # when they are themselves undergoing compilation. This facilitates
11
+ # access to arguments which were passed to the component at initialization.
12
+ #
13
+ # For example, if we have a Row component that is Configurable:
14
+ #
15
+ # row(:main)
16
+ #
17
+ # might process to:
18
+ #
19
+ # <div id="main" class="row" />
20
+ #
21
+
22
+ module Configurable
23
+ def self.included(base)
24
+ base.class_eval do
25
+ extend ClassMethods
26
+ include InstanceMethods
27
+
28
+ # Stores arguments for later processing, eg., compile time
29
+ def initialize(*args)
30
+ @args = args.dup
31
+ _process_args!(args)
32
+ super(*args)
33
+ end
34
+ end
35
+ end
36
+
37
+ module ClassMethods
38
+
39
+ protected
40
+
41
+ # Override Templating._compile_fragment to delay compilation
42
+ def _compile_fragment(block, options = {})
43
+ if options.delete(:force_compile)
44
+ super(block, options)
45
+ else
46
+ block
47
+ end
48
+ end
49
+
50
+ def _lookup(name, options = {})
51
+ super(name, options.merge(force_compile: true))
52
+ end
53
+
54
+ end
55
+
56
+ module InstanceMethods
57
+
58
+ def config
59
+ @config ||= {}
60
+ end
61
+
62
+ alias :my :config
63
+
64
+ def expand_locals
65
+ {my: config}
66
+ end
67
+
68
+ # Override Templating#lookup to pass locals
69
+ def lookup(fragment_name, options = {})
70
+ super(fragment_name, options.merge(expand_locals))
71
+ end
72
+
73
+
74
+ private
75
+
76
+ def _process_args!(args)
77
+ if args.first.kind_of?(Symbol)
78
+ config.merge!(id: args.shift)
79
+ end
80
+ while arg = args.shift
81
+ if arg.kind_of?(Hash)
82
+ config.merge!(arg)
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end