express_admin 1.3.2 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/express_admin/components/_definition.sass +1 -1
- data/app/assets/stylesheets/express_admin/components/_h_box.sass +1 -1
- data/app/assets/stylesheets/express_admin/components/_live_edit.sass +3 -0
- data/app/assets/stylesheets/express_admin/components/_v_box.sass +1 -1
- data/app/assets/stylesheets/express_admin/screen.sass +1 -0
- data/app/components/express_admin/definition_list.rb +29 -12
- data/app/components/express_admin/definition_table.rb +11 -43
- data/app/components/express_admin/{flash_message_component.rb → flash_messages.rb} +3 -2
- data/app/components/express_admin/icon.rb +9 -2
- data/app/components/express_admin/icon_link.rb +32 -25
- data/app/components/express_admin/layout_component.rb +2 -32
- data/app/components/express_admin/layout_components/h_box.rb +3 -6
- data/app/components/express_admin/layout_components/pane.rb +8 -16
- data/app/components/express_admin/layout_components/sidebar_region.rb +2 -6
- data/app/components/express_admin/layout_components/v_box.rb +3 -6
- data/app/components/express_admin/main_region.rb +2 -4
- data/app/components/express_admin/{mega_menu_component.rb → mega_menu.rb} +6 -19
- data/app/components/express_admin/{addon_sidebar_component.rb → module_sidebar.rb} +12 -10
- data/app/components/express_admin/page_header.rb +14 -0
- data/app/components/express_admin/smart_form.rb +30 -29
- data/app/components/express_admin/smart_table.rb +43 -30
- data/app/components/express_admin/widget_box.rb +11 -6
- data/app/views/layouts/express_admin/admin.html.et +2 -2
- data/app/views/shared/express_admin/_navigation_bar.html.et +3 -3
- data/lib/express_admin/version.rb +1 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/test/components/smart_form_test.rb +6 -5
- data/vendor/gems/express_templates/Gemfile.lock +1 -1
- data/vendor/gems/express_templates/express_templates-0.8.0.gem +0 -0
- data/vendor/gems/express_templates/express_templates.gemspec +1 -1
- data/vendor/gems/express_templates/lib/express_templates/compiler.rb +0 -9
- data/vendor/gems/express_templates/lib/express_templates/components.rb +0 -1
- data/vendor/gems/express_templates/lib/express_templates/components/base.rb +62 -10
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/resourceful.rb +12 -0
- data/vendor/gems/express_templates/lib/express_templates/components/configurable.rb +143 -16
- data/vendor/gems/express_templates/lib/express_templates/components/forms/basic_fields.rb +11 -16
- data/vendor/gems/express_templates/lib/express_templates/components/forms/checkbox.rb +6 -6
- data/vendor/gems/express_templates/lib/express_templates/components/forms/express_form.rb +18 -26
- data/vendor/gems/express_templates/lib/express_templates/components/forms/form_component.rb +17 -16
- data/vendor/gems/express_templates/lib/express_templates/components/forms/radio.rb +14 -32
- data/vendor/gems/express_templates/lib/express_templates/components/forms/select.rb +18 -35
- data/vendor/gems/express_templates/lib/express_templates/components/forms/select_collection.rb +11 -17
- data/vendor/gems/express_templates/lib/express_templates/components/forms/submit.rb +18 -14
- data/vendor/gems/express_templates/lib/express_templates/components/tree_for.rb +11 -4
- data/vendor/gems/express_templates/lib/express_templates/renderer.rb +1 -3
- data/vendor/gems/express_templates/lib/express_templates/version.rb +1 -1
- data/vendor/gems/express_templates/test/components/base_test.rb +45 -24
- data/vendor/gems/express_templates/test/components/capabilities/resourceful_test.rb +1 -1
- data/vendor/gems/express_templates/test/components/configurable_test.rb +108 -30
- data/vendor/gems/express_templates/test/components/forms/basic_fields_test.rb +3 -3
- data/vendor/gems/express_templates/test/components/forms/express_form_test.rb +4 -1
- data/vendor/gems/express_templates/test/components/forms/radio_test.rb +3 -3
- data/vendor/gems/express_templates/test/components/forms/submit_test.rb +3 -3
- data/vendor/gems/express_templates/test/components/tree_for_test.rb +1 -1
- data/vendor/gems/express_templates/test/core_extensions/proc_test.rb +10 -0
- data/vendor/gems/express_templates/test/dummy/log/test.log +1240 -20959
- data/vendor/gems/express_templates/test/test_helper.rb +3 -0
- metadata +22 -248
- data/app/components/express_admin/page_header_component.rb +0 -29
- data/app/components/express_admin/setting_form.rb +0 -48
- data/test/dummy/log/development.log +0 -35
- data/test/dummy/log/test.log +0 -51433
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0fNukwCUjSC_GRsVIMtSMVdZkd5bq5eShMcGCrCVolc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0zehLcbCZ34CdyBVctEOnsyyyFlqjtTI-VkIje9xdCQ.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1EoyfDwFVtgMAOjo7HPkor8TQbVaioOFx9hildx_DTQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1c4REJHKdQH9bwZhZ7Ixshmy_1jAzXc3-9OiDCDyRlk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1rKHSaJsgLcnfIJRWYdYy7IimMCKcdI-I_ABekUargk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2kMk5s4FKAOWE1z_MvFIKHmdvNDzyoknoi39xL7KwJw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2oGeKB_QtwWpX3sJNHocsJiBZT60x_cwV_nSGh_HS-A.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/2rQDWRzFxOlBnczJ1BLfE2yCPVvrhgLGfAI7VSM54wk.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3S9nnUmEIG4-hDY6cVc82GFUUWicNxtpFfWwJAmJSkI.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4OPIkynisipUm8vKo57HUhBMWFSHBno_IH6OdpK29IA.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4WErFdugnc8uWYwUE9vVfw4xxCgknECdpWhn8teZbLk.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4a7epNa5R1jeKCtFsJKTdVqMEQm5p0clABRPIiKegMo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4hK1AdPGHbXGkebvk-nSvhxtCdOSlMYNWvA43CvQKhI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/57pjjkzReNE1L9yodewGebfd0AwnfQb33rtJjSTNpLc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6c0H20s6oHf45XogeDELaojxa0PX1NmirTTWV1ClcRw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/7vpDV8GyXVfyuFIkRrrkOwUXyIaCmf22tBPDpvhCUUc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/89d4LukQv0MLDc35wfIlQZps-IyoMSdlaSZjBF4U5Qs.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9QvwPXfTSVmgQX6tdK9GuCn0--MZ8Z8eJJbHpUEq1p8.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/BoKdGhgi5NHfGTc42p9nltpEIYj_BBUxVdv7YhpBmmA.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Cpj6WyqdggDUkeQl_Ut3P9sUtPHPXXwkmZ92TfIJGJ8.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/DwepgSdLiEklsJWIJItEY_ZW-nOjjeHqcdQwBtu0mus.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/FOJpwMQCx9V9wfhJQKFa2f7BjfP7vyS7M3o6VX0nAI0.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GJGMlSyTg1AvPCV_6PaLOTVEKbHeVKY1jhCoaKuRlxM.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GStmpiXE4g01i-UTlSKq8B9yS69WpAp0YH7vWyESBwI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H0aD5KRj-4fhORkqWcWZfKPOQfu_ggvt4OmYOl4S5mw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H53ZZ50FwJjYUOMH60F7cpINgkh9tOF4R3L6ANoH6tU.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/HY86Fwn8VPlIysY56uV-wu90bISxrXeiCtwDXg94Glg.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IBLgVNsKBbJxN8NQnh6zTc3bC_OG-8BhtA3xCNDV6ks.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IcNDN_pmsAcLAMv6CST75OwOucmYm3q2099jn4tB0H8.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/JpdfSFVzivQn6TFSivlys3nV3VzD8cT0ET8uqbptxV4.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KLD96-U_D5wyyJMO4CJwhXydNwVp3GnQ_Pcu9fqMWwk.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KRkc9MoVFNfI2aJI6sncnC92a1RmZyYM_CbJoa01saw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/KYe0_GIi-cNX0eRteBB0aixVATrVRo7Z3BaWFCgc7yg.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/LsiO4sLQfM0GvyEYhaC2E54rCurTkewg7YJX-sWBctI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/MczkmkaXLyXg8mAnmpTt-Rhvlf_OGFUEr-Ut9BuWo6g.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/NDViKg4-yspkY1tX9IQWnh1-LkiKqIohBqtRlYZZQcs.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/OXsmreTQ3MNzGsrV1eEoW72VZQ52hQ0HiuTr0ImnqHA.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Po8q4NrWy9Kymnz_HbOk-WbdGY_KuuXc6urGogTHe7U.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/PuMvTyv89E8wfRqbWNMhTH3PAE61uCCHgpEsgdOzMXQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Pvp8CVIKYjspNrgzEvgleujifrrdfATzWbwALDzQNE4.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/PzcOUndLc-O-VBR2SDM2rFkiqh-iqknTEgEAXDLKfdc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/QbX1HRM7KX85_PeVHcd6VJM6sqzUCWXEEYZX7CAG0eA.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UDHqQKrYSSvXfCbiJjXzmJh2Q6T5hLO80aaPvs9n-74.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UFtISk01WwcjjWcPLyjeHX3bgBqZHGQcb0Z4KFNmduA.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UWvG-0WgVYHVxrtLU32uumROQuSjJv_M_svW1B8YxhY.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/UruI7_ZpuzDnmNir9hzUa_r8oiuuIfVTco19ACdxwRw.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/V1aP9G-CVtOLR5PTnHleid8WC9TSfFAT1DzAygp_5CQ.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VQ2-2HlkGd1XVIHlwRGcgDsjto3oE-50-4E3HGdt8uU.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/VezioHwyk87G6TWkkYX88tBHC6QToVGOU5geZ54Ts5A.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WG06sI8kg0TrFKDQh2slScD0xqYK5UF0gPF1Ri6APG0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WfQ-xKbnwqaKy-UQa8spczc9qocIL_jZE4cyRZftjfA.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WhePtBvZPmF1Jhdcc4glsjhxBJQo9Qw0CDgy_F8lClY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/X2i4W-0ADnY8zQKnn3oh3P61cDw_n1B26D2JPcgWBTY.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XPpCqlT8yHTnQNHKRxjnilUBvAs6klpgWXneFU15U78.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XXTM8o6vkSxhxxm8P_orbeCZvxb8nMk7cjdwvUNL1io.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/XyRQXY_oj8GLw9z8lj2dknGu45jbX5lK8ko7TePosPE.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Y7zGDJM6L5VhKbRWRU6vonJVe-DGxBuOhE_qGM8zJ0o.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/YDMOayx363vI7odbkHMVI-_RxkOoVP2Hb7FX0mFVFE0.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Z88gJS67lNABJgUB18JzXrnGkVbYfXQvjqm7mSJIv3o.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ZAIAu3UIaGRI3RknA2lbuZ8Y6AZ12VB84mQRg-q0vFs.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_2bn753sv7A0CDBODs7rO8SWdQ1OMi2vbzSas5co4TE.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_FyeE-ad3bA2IH6ZwZOn6J4qaW857Rjv4FBs_HIPiqM.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_k4X14Cc-2Y4gc47s7PaWtAaG_zcq1ICJInTYNp6bI4.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_kr_dP4VVnM8s8ZMdiNBSpuPqkQVx46FUdCTDH4XR70.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_y-BPEZTh3iXcaPJkcP9-krjw-V8LMhop4VGxUEUDsY.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/afi__XQzjsqMT3svcCGlVD_YrHEWQZAEbJt4CgYaCkw.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/bdqS7lHa0nBN-mqdSomfMK-S6ct2TAn0z9kVzFBwQPM.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/c4lC2GnsHBJ0BpWF3Nlgfk2FLPkhA7GCIiMMjnMTWE8.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/csH89NDps1_QU4E0p0HHZti2XLd_etKYDqM9cPsNpps.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dVokuKbK8HbOtvPIksKGBAYE8x44l372dQ0gEISqbdo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ePtEu-AuU0iZ2J02ZafF9yOJVd8VVdV2KSheiJYlXzA.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/eTRff0YXBw-Tx9VEMxb-Es8NwqjHCXiaosBLxijl3I8.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/fRkrxaDYzRDIvxEUGZBFbW5ocAlmDQNg8_LRcOJJOzI.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/goVFgqSk0CBOXpbwLNd-enc31BvXm1S8cMSJ3zbxRYI.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hPH6lLkPX0EzSG_eBprMMUnmFs9y89AOarfyhGoAFGc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hgfrt0FmGrYD5SJVJhlsUPtL9usJvw3vZrW4dqQq16Y.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/hiZg7FLw7SFa7S-BQ8CKWdAqFVUZy2HVb2chmQijM-g.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/iKb8yzw0EdFpNkayUbc16U7olK7iwE2xIs_6b_xIEtI.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/iY03Ztj2YhBWadK8LHOKR3Hj1W7PLss0v85Q6Nj7E3Q.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ipLhCJrCCVwH7l_p1quUi2xS6POFlVHfZCqIymk8CoI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ipTot5AshDPhFtCBNfXROxutQlCrYkvsXsy3fcVT0Nw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/j5CxYBAeuD-bGDZUBh-pA0mEPCSVFDZsJm3x7QED4g0.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/jr4uhEONyFYm0QhfEOMqv05S-BeUP7gw1gQl3GIFyAI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/kDj0mxTRTc51sKL3YhP09H-N_wvNoeTMq4ZZXxWk00U.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/kGO7_IQtBwpe93nSTKj6cCWGm0fZ_NoXltdw8E_74CQ.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/le9WohG3eSGbBMySdKkdvkHXW8yipO8w4iQZCCCQb3M.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/mtmR_XlvnlYbOPmP1EkOj96q2Z5OQNv4HkeFj9DwEXQ.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nU1obIDVHUhN-3yRA6B9U5aO8wsd6zh1tyVtSROJewk.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/nk1B0AsQ24ck-r1vlAmaG2ZkDkzOfoIi6b5u-5BNFTQ.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oN1zSGeSEz4KhkAuUF_yFDsCVPkulfFjomEAjFzGdPc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oZ6SMNNft5SCbvNtWXkGQwKQPVwXoJRMV7VUJfWHc2k.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/orzlNSAVLprBGJNkJc1USpGtVMhktfj0hR1igXbs5fA.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oygs10cGTBBo7Mj97CjFRTrSrFR7Qi3MnHNR_WQvIps.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/p0Gnpai0VYzEsAXH_5t9huZ3dO0v6JKRH0PIH--q-XA.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/p0VpILMLAmqpH1IIuA6MfyLrqT7ltiDJqYqZSLr_k3I.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pWOcH5cfG1n9XqxJljnSwciDeLoaTkoUxp1zlOo0WTk.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/pu9xM8T2O07hU3PafxbOLjg2vJxbbHE3qnIK9JHqVhA.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qEHftZrJ-Da_nsvX4UOaALyIt0mwnOuE2TdtBPGAWEw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qIeSoker4TjM7JYRQTOjgRd4nN0WeHnNY1GMK7Zpe8M.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/rtdpq5fxIYMKM43QyOIluEECg2NP5OA-7Zi8yuowZSI.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tTFLM1bjKSeg4nyH7GWbTY6JVvuYhNKFFvsOMS9h8O0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tzX-HHF4F70o-aSB9Z_duoPxFGDv3auYnrpko9SYafU.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ujFa5Hu76zd1O6nO2G7WcgnOWZyTOMKLajazyMXAL_I.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/uovLHiJZBoVnD7CXYj2WZYmAbBcqGLQOzu4Voz5Fx8c.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/uyHm0KHsHpJhn-wv69exuuyU4kyJtW3DDQLP7tCD7e4.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/v50nc5cuqpLxjepk7XsBmomcmFARYlHQRtq8yOv8AY0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vAh5eTPxI929yxRCyXgbKTWat5cZiVSOyX0UeTveXGE.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vKiuNu1fQitE151bh0Tr2Ufkc80jWzchPjxaHkpjQL8.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vMbWbI1SO5bEaiu2pRvV8NDmms_j5flYoRvCSJavhdU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vZBxpTbv5C70_MrcmWyk0z6yDwcZ-yjr7fo16bQaLhY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/x-3lyh5i4qS-Q9E3X2uj2LthTOxsndFTrFXBsPPo6hI.cache +0 -2
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/x3xQgAyjbrGTXy2FX2UzGG77agJgt_xsyNBuofrvY_E.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/xQqBwKYWFPxZm5tidxsRKk23Z3q-OLRmKQUlMjRev_c.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/yZNo-6dzWGUNCJDnmqm7X5YB5FOxjYp_l8aKS6KaZOg.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/yfh4w2OYe-sHC9BwdeUb4FtXVEH59KeRr6P7V_lJ7Uc.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ypZCDLo54Pz2ZoUxrxSEUjT5FYMAq8Ozp8OTOYDRdAE.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/zV58Nou0R2EJG875wLND6wF9ES4diVi1fP7B_B6eCzw.cache +0 -1
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/zxPFYKpkfNJtui1ekitdNMaGAo39fefm-oJCnILEEQ8.cache +0 -1
- data/vendor/gems/express_templates/lib/express_templates/components/form_rails_support.rb +0 -21
@@ -1,20 +1,23 @@
|
|
1
1
|
module ExpressAdmin
|
2
2
|
# renders a sidebar partial if one is available
|
3
3
|
# otherwise uses menu.yml
|
4
|
-
class
|
4
|
+
class ModuleSidebar < ExpressTemplates::Components::Base
|
5
|
+
tag :section
|
5
6
|
|
6
|
-
|
7
|
+
contains -> {
|
8
|
+
ul(class: 'menu-items') {
|
9
|
+
li(class: 'title') { current_menu_name }
|
10
|
+
menu_list(helpers.current_menu.items)
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
def build(*args, &block)
|
7
15
|
begin
|
8
16
|
render("shared/#{helpers.current_module_path_name}/sidebar")
|
9
17
|
rescue Exception => e
|
10
|
-
|
11
|
-
ul(class: 'menu-items') {
|
12
|
-
li(class: 'title') { current_menu_name }
|
13
|
-
menu_list(helpers.current_menu.items)
|
14
|
-
}
|
15
|
-
}
|
18
|
+
super(*args, &block)
|
16
19
|
end
|
17
|
-
|
20
|
+
end
|
18
21
|
|
19
22
|
def menu_list(list)
|
20
23
|
list.each do |item|
|
@@ -27,6 +30,5 @@ module ExpressAdmin
|
|
27
30
|
link_to item.title.html_safe, helpers.instance_eval(item.path)
|
28
31
|
}
|
29
32
|
end
|
30
|
-
|
31
33
|
end
|
32
34
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ExpressAdmin
|
2
|
+
class PageHeader < ExpressTemplates::Components::Base
|
3
|
+
ETC = ExpressTemplates::Components
|
4
|
+
|
5
|
+
contains -> {
|
6
|
+
h1 {
|
7
|
+
content_for(:page_header) if content_for?(:page_header)
|
8
|
+
}
|
9
|
+
para(class: 'lead') {
|
10
|
+
content_for(:page_header_lead) if content_for?(:page_header_lead)
|
11
|
+
}
|
12
|
+
}
|
13
|
+
end
|
14
|
+
end
|
@@ -1,18 +1,29 @@
|
|
1
1
|
require 'rails/generators/generated_attribute'
|
2
2
|
|
3
3
|
module ExpressAdmin
|
4
|
-
class SmartForm < ExpressTemplates::Components::
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
4
|
+
class SmartForm < ExpressTemplates::Components::Forms::ExpressForm
|
5
|
+
TIMESTAMPS = %w(updated_at created_at)
|
6
|
+
|
7
|
+
has_option :virtual_attributes, 'Override the list of virtual attributes of the resource to be displayed'
|
8
|
+
has_option :exclude, 'Attributes not to be included in the form'
|
9
|
+
has_option :only, 'Respects the order the attributes are listed in'
|
10
|
+
has_option :show_timestamps, 'Set to true to show timestamps as labels'
|
11
|
+
|
12
|
+
contains {
|
13
|
+
# TODO: taken from express_form. should be inherited?
|
14
|
+
div(style: 'display:none') {
|
15
|
+
add_child helpers.utf8_enforcer_tag
|
16
|
+
add_child helpers.send(:method_tag, resource.persisted? ? :put : :post)
|
17
|
+
helpers.send(:token_tag)
|
18
|
+
}
|
19
|
+
|
20
|
+
filter_by_name(editable_attributes).each do |attrib|
|
21
|
+
form_field_for(attrib)
|
22
|
+
end
|
23
|
+
filter_by_name(has_many_through_associations).each do |assoc|
|
24
|
+
select_collection(assoc.name, nil, nil, class: 'select2')
|
25
|
+
end
|
26
|
+
if show_timestamps?
|
16
27
|
filter_by_name(timestamp_attributes).each do |timestamp|
|
17
28
|
div {
|
18
29
|
label {
|
@@ -20,11 +31,10 @@ module ExpressAdmin
|
|
20
31
|
}
|
21
32
|
}
|
22
33
|
end
|
23
|
-
|
24
|
-
|
34
|
+
end
|
35
|
+
submit(class: 'button')
|
25
36
|
}
|
26
37
|
|
27
|
-
TIMESTAMPS = ['updated_at', 'created_at']
|
28
38
|
|
29
39
|
def form_field_for(attrib)
|
30
40
|
field_type_substitutions = {'text_area' => 'textarea',
|
@@ -33,7 +43,7 @@ module ExpressAdmin
|
|
33
43
|
field_type = attrib.field_type.to_s.sub(/_field$/,'')
|
34
44
|
if relation = attrib.name.match(/(\w+)_id$/).try(:[], 1)
|
35
45
|
# TODO: should allow select2 override
|
36
|
-
select(attrib.name, options: config["#{relation}_collection".to_sym], select2: true)
|
46
|
+
select(attrib.name.to_sym, options: config["#{relation}_collection".to_sym], select2: true)
|
37
47
|
else
|
38
48
|
if field_type == 'text_area'
|
39
49
|
textarea attrib.name.to_sym, rows: 10
|
@@ -45,19 +55,6 @@ module ExpressAdmin
|
|
45
55
|
|
46
56
|
protected
|
47
57
|
|
48
|
-
def form_args
|
49
|
-
{ id: resource_name,
|
50
|
-
action: form_action,
|
51
|
-
resource_name: resource_name,
|
52
|
-
resource_class: config[:resource_class],
|
53
|
-
namespace: namespace}
|
54
|
-
end
|
55
|
-
|
56
|
-
# from express_form - perhaps move back to shared module
|
57
|
-
def form_action
|
58
|
-
config[:action] || (helpers.resource.try(:persisted?) ? resource_path(ivar: true) : collection_path)
|
59
|
-
end
|
60
|
-
|
61
58
|
def resource_attributes
|
62
59
|
super.map do |attrib|
|
63
60
|
field_definition = [attrib.name, attrib.type] # index not important here for now
|
@@ -85,6 +82,10 @@ module ExpressAdmin
|
|
85
82
|
resource_attributes.select {|attrib| TIMESTAMPS.include?(attrib.name) }
|
86
83
|
end
|
87
84
|
|
85
|
+
def show_timestamps?
|
86
|
+
!!config[:show_timestamps]
|
87
|
+
end
|
88
|
+
|
88
89
|
def non_timestamp_attributes
|
89
90
|
resource_attributes.reject {|attrib| TIMESTAMPS.include?(attrib.name) }
|
90
91
|
end
|
@@ -2,44 +2,61 @@ module ExpressAdmin
|
|
2
2
|
class SmartTable < ExpressTemplates::Components::Configurable
|
3
3
|
include ExpressTemplates::Components::Capabilities::Resourceful
|
4
4
|
|
5
|
+
tag :table
|
6
|
+
|
5
7
|
MAX_COLS_TO_SHOW_IDX = 5
|
6
8
|
|
7
9
|
attr :columns
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
11
|
+
has_option :scrollable, 'Set to true if the table should be scrollable'
|
12
|
+
has_option :show_actions, 'Set to true if table has actions for each row'
|
13
|
+
has_option :row_class, 'Add a class to each table row'
|
14
|
+
|
15
|
+
|
16
|
+
column_defs = {}
|
17
|
+
column_defs[:array] = {description: "List of fields to include in the table as columns",
|
18
|
+
options: -> {resource.columns.map(&:name)} }
|
19
|
+
column_defs[:hash] = {description: "Hash of column names (titles) and how to calculate the cell values."}
|
20
|
+
|
21
|
+
has_option :columns, 'Specify the columns. May provide as a hash with values used to provide cell values as a proc.',
|
22
|
+
type: [:array, :hash]
|
23
|
+
|
24
|
+
contains -> {
|
25
|
+
thead {
|
26
|
+
tr {
|
27
|
+
display_columns.each do |column|
|
28
|
+
th(class: column.name) {
|
29
|
+
column.title
|
30
|
+
}
|
31
|
+
end
|
32
|
+
actions_header if should_show_actions?
|
33
|
+
hidden_columns_header_indicator if columns_hidden?
|
34
|
+
}
|
35
|
+
}
|
36
|
+
tbody {
|
37
|
+
collection.each do |item|
|
38
|
+
tr(id: row_id(item), class: row_class(item)) {
|
13
39
|
display_columns.each do |column|
|
14
|
-
|
15
|
-
column.
|
40
|
+
td(class: column.name) {
|
41
|
+
cell_value(item, column.accessor)
|
16
42
|
}
|
17
43
|
end
|
18
|
-
|
19
|
-
|
44
|
+
actions_column(item) if should_show_actions?
|
45
|
+
hidden_column_cell if columns_hidden?
|
20
46
|
}
|
21
|
-
|
22
|
-
tbody {
|
23
|
-
collection.each do |item|
|
24
|
-
tr(id: row_id(item), class: row_class(item)) {
|
25
|
-
display_columns.each do |column|
|
26
|
-
td(class: column.name) {
|
27
|
-
cell_value(item, column.accessor)
|
28
|
-
}
|
29
|
-
end
|
30
|
-
actions_column(item) if should_show_actions?
|
31
|
-
hidden_column_cell if columns_hidden?
|
32
|
-
}
|
33
|
-
end ; nil
|
34
|
-
}
|
47
|
+
end ; nil
|
35
48
|
}
|
36
49
|
|
37
|
-
scroll_table if !!config[:
|
50
|
+
scroll_table if !!config[:scrollable]
|
51
|
+
}
|
52
|
+
|
53
|
+
before_build -> {
|
54
|
+
add_class 'table striped'
|
38
55
|
}
|
39
56
|
|
40
57
|
def scroll_table
|
41
58
|
script {
|
42
|
-
%Q($('\##{
|
59
|
+
%Q($('\##{config[:id]}').scrollTableBody())
|
43
60
|
}
|
44
61
|
end
|
45
62
|
|
@@ -48,7 +65,7 @@ module ExpressAdmin
|
|
48
65
|
end
|
49
66
|
|
50
67
|
def should_show_actions?
|
51
|
-
|
68
|
+
!!config[:show_actions]
|
52
69
|
end
|
53
70
|
|
54
71
|
def resource_path(item)
|
@@ -81,10 +98,6 @@ module ExpressAdmin
|
|
81
98
|
end
|
82
99
|
end
|
83
100
|
|
84
|
-
def is_permanent?
|
85
|
-
config[:permanent].nil? || (config[:permanent].present? && config[:permanent])
|
86
|
-
end
|
87
|
-
|
88
101
|
def row_id(item)
|
89
102
|
"#{collection_member_name}:#{item.to_param}"
|
90
103
|
end
|
@@ -92,7 +105,7 @@ module ExpressAdmin
|
|
92
105
|
def cell_value(item, accessor)
|
93
106
|
if accessor.respond_to?(:call)
|
94
107
|
value = begin
|
95
|
-
|
108
|
+
accessor.call(item).html_safe
|
96
109
|
rescue
|
97
110
|
'Error: '+$!.to_s
|
98
111
|
end
|
@@ -1,14 +1,19 @@
|
|
1
1
|
module ExpressAdmin
|
2
2
|
class WidgetBox < ExpressTemplates::Components::Configurable
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
|
4
|
+
has_option :title, 'The title to be displayed.'
|
5
|
+
|
6
|
+
contains -> (&block) {
|
7
|
+
header(class: 'title') { box_title }
|
8
|
+
div(class: 'widget-body') {
|
9
|
+
block.call(self) if block
|
9
10
|
}
|
10
11
|
}
|
11
12
|
|
13
|
+
before_build -> {
|
14
|
+
set_attribute(:id, "#{config[:id].to_s.dasherize}-box")
|
15
|
+
}
|
16
|
+
|
12
17
|
protected
|
13
18
|
|
14
19
|
def resource_name
|
@@ -13,10 +13,10 @@ html {
|
|
13
13
|
render('shared/express_admin/navigation_bar')
|
14
14
|
div(class: 'main-page') {
|
15
15
|
div(class: 'page-sidebar') {
|
16
|
-
|
16
|
+
module_sidebar
|
17
17
|
}
|
18
18
|
div(class: 'page-body') {
|
19
|
-
|
19
|
+
page_header
|
20
20
|
current_arbre_element.add_child yield
|
21
21
|
}
|
22
22
|
}
|
@@ -6,12 +6,12 @@ nav(class: 'top-bar') {
|
|
6
6
|
image_tag 'express_admin/appexpress_logo_dark.png', class: 'nav-logo'
|
7
7
|
}
|
8
8
|
}
|
9
|
-
|
9
|
+
mega_menu
|
10
10
|
li {
|
11
|
-
icon_link(
|
11
|
+
icon_link("android-open", text: 'View Site', href: '/', target: '_blank')
|
12
12
|
}
|
13
13
|
render(partial: 'shared/nav_bar_actions')
|
14
|
-
li {
|
14
|
+
li { flash_messages } unless helpers.flash.empty?
|
15
15
|
}
|
16
16
|
}
|
17
17
|
div(class: 'secondary-menu') {
|
data/test/dummy/db/test.sqlite3
CHANGED
Binary file
|
@@ -7,6 +7,7 @@ module ExpressAdmin
|
|
7
7
|
def resource_assigns
|
8
8
|
{resource: Widget.new, collection: Widget.all}
|
9
9
|
end
|
10
|
+
|
10
11
|
def helpers
|
11
12
|
view = mock_action_view(resource_assigns)
|
12
13
|
class << view
|
@@ -25,15 +26,14 @@ module ExpressAdmin
|
|
25
26
|
view
|
26
27
|
end
|
27
28
|
|
28
|
-
|
29
29
|
def widget_form(*args)
|
30
30
|
arbre {
|
31
|
-
smart_form(:
|
31
|
+
smart_form(:widget, *args)
|
32
32
|
}
|
33
33
|
end
|
34
34
|
|
35
35
|
test "renders a form correct id" do
|
36
|
-
assert_match
|
36
|
+
assert_match /form.*id="widget"/, widget_form
|
37
37
|
end
|
38
38
|
|
39
39
|
test "uses inherited_resources path helpers to set correct action" do
|
@@ -71,8 +71,9 @@ module ExpressAdmin
|
|
71
71
|
end
|
72
72
|
|
73
73
|
test "timestamps are not editable" do
|
74
|
-
|
75
|
-
assert_match /
|
74
|
+
form_with_timestamps = widget_form(show_timestamps: true)
|
75
|
+
assert_match /Created At:.*\n/, form_with_timestamps
|
76
|
+
assert_match /Updated At:.*\n/, form_with_timestamps
|
76
77
|
end
|
77
78
|
|
78
79
|
test "fields have labels" do
|
Binary file
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.license = "MIT"
|
16
16
|
|
17
17
|
s.files = Dir["{app,config,db,lib}/**/*", "LICENSE", "Rakefile", "README.md"]
|
18
|
-
s.test_files = Dir["test/**/*"]
|
18
|
+
s.test_files = Dir["test/**/*"] - Dir["test/log/*", "test/tmp/*", "test/dummy/tmp/**/*", "test/dummy/log/*"]
|
19
19
|
|
20
20
|
s.add_dependency "activesupport", "~> 4.2" # strictly speaking we only depend on active support
|
21
21
|
s.add_dependency "parslet", "~> 1.6"
|
@@ -1,16 +1,7 @@
|
|
1
|
-
require 'ostruct'
|
2
1
|
module ExpressTemplates
|
3
2
|
module Compiler
|
4
3
|
def compile(template_or_src=nil, &block)
|
5
4
|
|
6
|
-
if block
|
7
|
-
begin
|
8
|
-
block.source
|
9
|
-
rescue
|
10
|
-
raise "block must have source - did you do compile(&:label) ?"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
5
|
template, src = _normalize(template_or_src)
|
15
6
|
|
16
7
|
%Q[Arbre::Context.new(assigns.merge(template_virtual_path: @virtual_path), self) { #{src || block.source_body} }.to_s]
|
@@ -21,12 +21,46 @@ module ExpressTemplates
|
|
21
21
|
# puts "added #{method_name} -> #{klass.name}"
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
25
|
-
|
24
|
+
def initialize(*)
|
25
|
+
super
|
26
|
+
_default_attributes.each do |name, value|
|
27
|
+
set_attribute(name, value)
|
28
|
+
end
|
29
|
+
add_class _default_classes
|
26
30
|
end
|
27
31
|
|
28
|
-
def
|
29
|
-
|
32
|
+
def self.contains(proc = nil, &block)
|
33
|
+
define_method(:_build_body, &(proc || block))
|
34
|
+
end
|
35
|
+
|
36
|
+
# Override the tag_name method for other than <div>
|
37
|
+
def self.tag(tag)
|
38
|
+
define_method(:tag_name) { tag }
|
39
|
+
end
|
40
|
+
|
41
|
+
# Provide default attributes for the enclosing tag
|
42
|
+
# of the component
|
43
|
+
def self.has_attributes(attribs)
|
44
|
+
self._default_classes = attribs.delete(:class)
|
45
|
+
_default_attributes.merge!(attribs)
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.before_build(proc_or_symbol = nil, &block)
|
49
|
+
if proc_or_symbol.kind_of?(Symbol)
|
50
|
+
define_method(:_before_build) do
|
51
|
+
self.send(proc_or_symbol)
|
52
|
+
end
|
53
|
+
else
|
54
|
+
define_method(:_before_build, &(proc_or_symbol || block))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def build(*args, &block)
|
59
|
+
_extract_class!(args)
|
60
|
+
_before_build if respond_to?(:_before_build)
|
61
|
+
super(*args) {
|
62
|
+
_build_body(&block) if respond_to?(:_build_body)
|
63
|
+
}
|
30
64
|
end
|
31
65
|
|
32
66
|
def resource
|
@@ -37,13 +71,31 @@ module ExpressTemplates
|
|
37
71
|
builder_method_and_class subclass.to_s.demodulize.underscore, subclass
|
38
72
|
end
|
39
73
|
|
40
|
-
|
41
|
-
|
42
|
-
|
74
|
+
protected
|
75
|
+
def default_class_name
|
76
|
+
self.class.name.demodulize.underscore.dasherize
|
77
|
+
end
|
43
78
|
|
44
|
-
|
45
|
-
|
46
|
-
|
79
|
+
|
80
|
+
private
|
81
|
+
def _extract_class!(args)
|
82
|
+
add_class args.last.delete(:class) if args.last.try(:kind_of?, Hash)
|
83
|
+
end
|
84
|
+
def _default_attributes
|
85
|
+
self.class._default_attributes
|
86
|
+
end
|
87
|
+
def self._default_attributes
|
88
|
+
@default_attributes ||= {}
|
89
|
+
end
|
90
|
+
def _default_classes
|
91
|
+
self.class._default_classes
|
92
|
+
end
|
93
|
+
def self._default_classes
|
94
|
+
@default_classes ||= ''
|
95
|
+
end
|
96
|
+
def self._default_classes=(classes)
|
97
|
+
@default_classes = classes
|
98
|
+
end
|
47
99
|
|
48
100
|
end
|
49
101
|
end
|