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.
- 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
data/vendor/gems/express_templates/lib/express_templates/components/capabilities/resourceful.rb
CHANGED
|
@@ -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
|
-
|
|
6
|
-
|
|
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
|
-
|
|
11
|
-
|
|
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
|
-
|
|
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
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
45
|
-
hidden_field resource_var, field_name.to_sym,
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
|
19
|
-
config[:
|
|
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.
|
|
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
|
|
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
|
-
|
|
66
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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
|