subdivision_select 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/subdivision_select.js +12 -3
- data/lib/subdivision_select/engine.rb +0 -2
- data/lib/subdivision_select/subdivision_select_helper.rb +32 -25
- data/lib/subdivision_select/tag_helper.rb +23 -0
- data/lib/subdivision_select/version.rb +1 -1
- data/lib/subdivision_select.rb +2 -0
- data/spec/test_app/app/controllers/addresses_demo_controller.rb +4 -0
- data/spec/test_app/app/views/addresses_demo/_form.html.erb +0 -26
- data/spec/test_app/app/views/addresses_demo/index.html.erb +26 -8
- data/spec/test_app/app/views/addresses_demo/tags.html.erb +39 -0
- data/spec/test_app/config/routes.rb +1 -0
- data/spec/test_app/db/development.sqlite3 +0 -0
- data/spec/test_app/db/seeds.rb +2 -0
- data/spec/test_app/db/test.sqlite3 +0 -0
- data/spec/test_app/log/development.log +4268 -0
- data/spec/test_app/log/test.log +2616 -0
- data/spec/test_app/spec/controllers/addresses_demo_controller_spec.rb +7 -0
- data/spec/test_app/spec/features/select_boxes_spec.rb +50 -31
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/-4zQSSB0Ny3HvS_Sm1acc6RK-bAhsy-y_XAlWd5rp8o.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/-BKkD9409F3UqWy57ZIIxCp2t8MzFrEmHvNsw2mSzBM.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/-kKTKdAgrbpLVPW3mfCzVmt01zuhnV82Cy5P0MlHzcc.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/3YVZoA0mNXoMh163YtKnQ8BPuKQ1Kw3B0lUgV8SO1Ds.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/3ljnwFGcPYqS83-ZjQVe5ucy1JsZdKmm6HmpMhsPfV0.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/40-WaaVgQEENDz26f0WHk2cenMBTKUx9LsW1tDQ2aLI.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/4N_ZrtrJgYdTsFy1d-xqcBx638yLylSi9cuH7Xv_Z7c.cache +2 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/4bfQFR20YosW6FFh0KAT37vt7e0MgzW4mRjI26YU3KA.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/5lUjTP0B5Ydv-vw1ZJ0Fh7HrS-4Dp7qUxguBPzRnNss.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/6FYxC7OH_cTPWdCMJbkxZgxg5djoqHEV6NvX5nBGlhk.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/8QcpXf_Le3ll5DF3as85ZbWTBMXgQI4PzS0-SSlzOaU.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/Bhd9Qow23weU26GAhklgu1r2lpBSxHR2ZhK9cah29F4.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/CG8jFrgm3D5-eutmgRa-9U52AKM1zWeOZ2VxsM63tck.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/DfvKKTeQUhursJrH6_23Bduu_bXkQDRQyieLeABGcS4.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/EUWqEO2PluIawTrHnhQh1FzNlFjmMcBny6zvNlWTacw.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/FAEkD7rBDtHSZU5JIRO2MdjtTlgJ-q8BtE5ccYNeP6U.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/GI1cUmASeEaBKCXxF7sBWaTfbE4p-HxdtReeptlR4d8.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/GIhiZ25FffJWMvAdS5LHxZQHT5oDjgfLldfFQNImhoA.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/GheTBgTE58caQzWODIoitYKH0SCt1tPq56IOz8Sd_IU.cache +2 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/JYPcdHZUiaiK8vjbNgex_toxbntRptRCvLPId4na9jE.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/K0ULBXnORqC1Ql2Q0uRNmvaNvWI9zauZQuPLPNQuz5k.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/KtZn1cDjh4IO5yrMfFZwsiwxg__k_aiyb5NwJiksd_E.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/LIMHIhpeoHv9L5A_hDtCEjSpYlC8LR4qSJHFcKGQjig.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/LxM9E0kcFqi30CNAr18f8n7Osq4y6NYWOyHO9WWcOng.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/MN0c3swTQcbxAJs3sC87cSevhMpbnhrVVWNJu6cSD74.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/OCZ6dDerc0qnrWOuPmZZeJ9lHNOn6k_XHOwk_xtpulo.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/OfZXr_MXFW1mCvRhVKjX2OmiU8MmEOh0NnYlAgZjXig.cache +2 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/PfST9jqI7T2aLhQh0mFbBUQTsm4sKJIgunR6K8-l0a4.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/SYRC7lM6r6D5loGsreHtKfZXFe7E-NhFLnrL16_FWJ8.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/Swqxo5qhDoOZppFccCj26jBotbbBdwg1x6UWwYhZKFc.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/Ux21XkMDBGGv7wbglh1X2c0C3l6pLW7zuOZKd-LXOZY.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/V1ebupQvzYW8LC0cpwlUJ21dWdB_w4wbqlIBIkRgZZ4.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/VB2MBD7krr1cw8qkSK5SKdZslC_GAktAJxD-3lKpZEU.cache +2 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/VM2DGadeXK7Yj4d5uTkzfZjNnbz1S2gX6rz1suU9cIA.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/W4ATLVPpx1a6xU3LTQ4currTJdbkxhyabJzy4AuVjhA.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/WIFehNlVdxMfRf6M7sFsHwoUHMrheNo23Pp7ye1hXk4.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/XctymDWMVL6Ce2pWds3T8PCnlUxt5QFuWMabXOYu1ZE.cache +2 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/Z97C3OysztP04x2vQys7BXlI01VXl62GKZUNl13u6LA.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/ZXBaU4YtMG8BvFrAv6l5YSfhnV120mIo7ExqQqn5tJI.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/_1suQ69a-DbRyq-u4LF4JjPIKK75ugZX7vSryu5bccI.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/b37_BT6rfKbQMvZcE1eHX6iHP3vqtFsbK5zNnZB-FJo.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/euuy2x670prhsjCLtf1_9aXLLETHb5vbY8GUr0KNzF8.cache +2 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/ezoLwymIJfGVk-rsw0bhEPl7AYfGJC4qAvbAJypBdY8.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/fNRLdVTBtYnLesllH931oXcb13LIVnn-hyR4pbLw6zw.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/gcremBjPCXaN0DCCxB84bK1D_H2JZSUGxm7WjvhYGek.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/hkLrrOdpF4CtA8qwHN17i0zf2Ab2WnQd7jkE1DC2Pfw.cache +2 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/i0IhgGtfgE_k20i6AdJ86JzCTk65ZUe4p-Yw_Cor3Ts.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/jzfGi06HcVEQdOpmQDjwjAyqImONZMznf9ARRtA-jyk.cache +2 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/kEGxAuC0KyvZlti585RG1Umq_pVUnPO_PFxIkUyWtZg.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/lgGT6oubXIO8wO5LG0CdJPYuB-M2F5o0Z-dHm-CgN5g.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/nlZi5iLTrqPpnWpiuP3dToACoymc07MClayczvZ76uE.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/qeFI7N38utdcGJLP3d3S5Jgib06uYYef9Eg6sGj-sZ4.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/s_X24peJAlZxJs0fPg7QFXIRF5dLGZMNYYT3tyc9MdI.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/spxpKr8oa8HYsZ7a_mlo6wT8nGTdgclmYVRW6LXYRV8.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/w9DS6QOJyxEpJTgoz6Tsjb_DBmagHbZ8Ed6Ao16AVOs.cache +1 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/wQ6NxafgRwRavMvfZ8_5rKzvxlAx9Pvt_T0HJKggbpI.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/wbYqUy6Ij8xISvrxW5He7EnGKjqxnyBy-3vcoaO3Ryo.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/xCWT8Gex6nM1s0-zkZHxvZMcWrLvk4_WOnJEa_KQ_xU.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/y7wX9WUyIrS-MGquaaWcloebTE-TNXvC1HI3H9w9plA.cache +0 -0
- data/spec/test_app/tmp/cache/assets/development/sprockets/v3.0/ykgk1zZxnkkLe6NqTwcXotw8DkjNiBOC5camNmp6OeQ.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/-P2z1xUuYLkRlNIvmfIR06mZgnoxy2bFBL6WYlhKcH8.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/0FshXIP8U4qbEc6VS04_d4Mtxd-nrHHbWHp_vSRXSws.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/1VI50V2gaNK5aNC6ok1GX15pPXzdWMQ_97rtH_xN_h4.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/3n-qFWhk2_8gD6fUhuVJnJs8p1EmGv3v-JAqAl_I4Yo.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/HCcjDjD5vZXQX40_rKRGQ4j7ZRy-ltW_DBvWlSsOZuU.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/JYPcdHZUiaiK8vjbNgex_toxbntRptRCvLPId4na9jE.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/LxM9E0kcFqi30CNAr18f8n7Osq4y6NYWOyHO9WWcOng.cache +5 -2
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/OIf6xewk9x6m-Adiq7bwGjZA1LEhbLWGrEQqqcJaWMw.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/Oqn0B8Qi68hw2INAuhJs05oSmGGZdSsjmqJl8tZL06I.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/QhM5PN8k4kNdffXzma4em5v9YfZzntr9r4h6UytU3Jc.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/Ru3MpObxeTCSyhBHQ1214zaMFlYCXXMn23za7QeIZzQ.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/Swqxo5qhDoOZppFccCj26jBotbbBdwg1x6UWwYhZKFc.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/UQq3POExo0KCqqasG_N4wmrNd8HTzXPNX6iv0x5a7bg.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/VAnBhuhgN2Y24HnNQYz8PHRsaOb4k8hiVWdzO_RTjLI.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/ViWCeCX4myoX3dltcTkvyE6chbke1V5i4NKnnJPTDvo.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/VvTpyA8qRAAGU9CrMl3cSPHbLoAnbiWpKfAwPrerOgs.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/WDMURAYzmLlRKBoNG4qhgz7dwlPmJDzKarJrkaraf10.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/WIGTIqJsNaF-rmpRX6vJECKKkuJfrBRebTeWdWVi6cg.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/WQD0d399RfQnL5DhWAR1lir2rR708B_tgbeOeDu9C58.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/WqlTIrcLtYBwrVT2VMlkCIE7ag2Hepvrm-CdMyoVrls.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/eEUdWbeOT5epnsTdH50RZ99jMUDcyl-6JS30tGkKetg.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/fLTD6SFsaDpFYdTFHXm1bbS3zjnxtTcxtTrRwVtgJMM.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/g4vdxQG6z_TTKRU0WCCYOTPHAsF9_7R7Nt-ol7Aw7GU.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/jzfGi06HcVEQdOpmQDjwjAyqImONZMznf9ARRtA-jyk.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/mkGQS6iO46jjgCnS8J2j7mfdkAbjBW2eBEZbdL48RrA.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/oScT5aRAvIS8plMsPW1BItJKtXjJqyvDWLoJYux23ys.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/qVpVKlMy1h9mjiDLx1oKRq4K71fQ0ze0eN3ZF_49mOk.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/sZKsH0syurJVEkjmHPv8OvTYLjUwfIe75uveSgiU1TY.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/s_X24peJAlZxJs0fPg7QFXIRF5dLGZMNYYT3tyc9MdI.cache +0 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/tvcMrLyd7iuUPStYdrlwHUxH3MQJseDR0OM4f09RU4U.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/uOl4dGgiXuGI3jQWJItfMGAe6jPuT_9Gvd-WxA8I_t8.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/vKEp6_mvOHp0Y_N4Wfy8bXVPGj0PgzNicu6xWXj3GCQ.cache +2 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/vVA9q8Dy1oqaLu08qN0wWuecAd6Hxo4gbQcLvS-Pkg4.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/w9DS6QOJyxEpJTgoz6Tsjb_DBmagHbZ8Ed6Ao16AVOs.cache +1 -0
- data/spec/test_app/tmp/cache/assets/test/sprockets/v3.0/xymYiOVD5pZB9Z60G34LCMLjk7o1Yplg3RJmRf4SpJ4.cache +0 -0
- data/spec/test_app/tmp/pids/server.pid +1 -1
- metadata +187 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ac62ce983136d23a1b1cb0e9b085a00fa0bc0b7
|
4
|
+
data.tar.gz: bf796d11169d49b3dfa1e7a7920e5ab7da44dfad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98158bfb52593a7abc052a47d70b681cde23951a29e4a2a6b29198d8c701309f51870aa1eda824de372863746cf4bc702093f19d90a0122de1bc6ac76a401173
|
7
|
+
data.tar.gz: 89bf0c9f5767d8b26e18479b60645c76b22f0c30a4a6a0c8c47271766766beb6e33dc0f364721f34195cb0e27840da8abc85110102dddd1aee80f795d67ec9ef
|
@@ -1,4 +1,7 @@
|
|
1
1
|
var SubdivisionSelect = (function() {
|
2
|
+
SubdivisionSelect.subdivisionSelector = "select[data-subdivision-selector]";
|
3
|
+
SubdivisionSelect.countrySelector = "select[id$=country]";
|
4
|
+
|
2
5
|
function SubdivisionSelect(element) {
|
3
6
|
this._countrySelect = element;
|
4
7
|
this._subdivisionSelect = $(element).
|
@@ -6,9 +9,6 @@ var SubdivisionSelect = (function() {
|
|
6
9
|
find(SubdivisionSelect.subdivisionSelector);
|
7
10
|
};
|
8
11
|
|
9
|
-
SubdivisionSelect.subdivisionSelector = "select.subdivision-selector";
|
10
|
-
SubdivisionSelect.countrySelector = "select[id$=country]";
|
11
|
-
|
12
12
|
SubdivisionSelect.init = function () {
|
13
13
|
var klass = this;
|
14
14
|
|
@@ -19,6 +19,7 @@ var SubdivisionSelect = (function() {
|
|
19
19
|
|
20
20
|
SubdivisionSelect.prototype.init = function() {
|
21
21
|
var self = this;
|
22
|
+
self._enabledInputsBeforeSubmit();
|
22
23
|
|
23
24
|
$(this._countrySelect).change(function() {
|
24
25
|
$.ajax( {
|
@@ -48,6 +49,14 @@ var SubdivisionSelect = (function() {
|
|
48
49
|
}
|
49
50
|
};
|
50
51
|
|
52
|
+
// Disabling selects means they won't POST with the form.
|
53
|
+
// Solution: right before submiting a form, enabled them.
|
54
|
+
SubdivisionSelect.prototype._enabledInputsBeforeSubmit = function() {
|
55
|
+
$('form').bind('submit', function() {
|
56
|
+
$(this).find('select').removeAttr('disabled');
|
57
|
+
});
|
58
|
+
};
|
59
|
+
|
51
60
|
// Not only empty the select, but:
|
52
61
|
// if the first element is blank, add a blank element before all others
|
53
62
|
SubdivisionSelect.prototype._clearSubdivisionSelect = function() {
|
@@ -7,42 +7,49 @@ module ActionView
|
|
7
7
|
html_options = options
|
8
8
|
options = country_or_options
|
9
9
|
else
|
10
|
-
country = country_or_options
|
10
|
+
options[:country] = country_or_options
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
# I think this is taken care of in the merge below?
|
14
|
+
#options.merge!({ object: @object })
|
14
15
|
|
15
|
-
|
16
|
-
if html_options["class"].present?
|
17
|
-
html_options["class"] += " subdivision-selector"
|
18
|
-
else
|
19
|
-
html_options["class"] = "subdivision-selector"
|
20
|
-
end
|
21
|
-
|
22
|
-
subdivision_select_hidden_field(method).render + Tags::Select.new(
|
16
|
+
@template.subdivision_select_tag(
|
23
17
|
@object_name,
|
24
18
|
method,
|
25
|
-
|
26
|
-
|
19
|
+
objectify_options(options),
|
20
|
+
@default_options.merge(html_options)
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module FormOptionsHelper
|
26
|
+
def subdivision_select_tag(object, method, options = {}, html_options = {})
|
27
|
+
Tags::SubdivisionSelect.new(
|
28
|
+
object,
|
29
|
+
method,
|
30
|
+
self,
|
27
31
|
options,
|
28
32
|
html_options
|
29
33
|
).render
|
30
34
|
end
|
35
|
+
end
|
31
36
|
|
32
|
-
|
37
|
+
module Tags
|
38
|
+
# TODO: can we inherit from Select?
|
39
|
+
class SubdivisionSelect < Base
|
40
|
+
include ::SubdivisionSelect::TagHelper
|
33
41
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
@
|
44
|
-
|
45
|
-
)
|
42
|
+
def initialize(object_name, method_name, template_object, options, html_options)
|
43
|
+
@html_options = html_options
|
44
|
+
# Add data attribue, for selecting via JS
|
45
|
+
@html_options["data-subdivision-selector"] = "1"
|
46
|
+
|
47
|
+
super(object_name, method_name, template_object, options)
|
48
|
+
end
|
49
|
+
|
50
|
+
def render
|
51
|
+
select_content_tag(subdivision_option_tags, @options, @html_options)
|
52
|
+
end
|
46
53
|
end
|
47
54
|
end
|
48
55
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SubdivisionSelect
|
2
|
+
#class CountryNotFoundError < StandardError;end
|
3
|
+
module TagHelper
|
4
|
+
def subdivision_option_tags
|
5
|
+
option_tags_options = {
|
6
|
+
selected: @options.fetch(:selected) { value(@object) },
|
7
|
+
disabled: @options[:disabled]
|
8
|
+
}
|
9
|
+
|
10
|
+
# Actual loading of subdivisions is in a View helper, since the controller
|
11
|
+
# needs to use it, to render the subdivisions of a country in JSON
|
12
|
+
subdivisions = SubdivisionsHelper::get_subdivisions_for_select(country)
|
13
|
+
options_for_select(subdivisions, option_tags_options)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def country
|
19
|
+
@options[:country]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
data/lib/subdivision_select.rb
CHANGED
@@ -1,26 +0,0 @@
|
|
1
|
-
<%=
|
2
|
-
form_for(
|
3
|
-
address,
|
4
|
-
url: update_address_path(address.id),
|
5
|
-
html: {class: address.title.parameterize}
|
6
|
-
) do |f| %>
|
7
|
-
|
8
|
-
<div class="field">
|
9
|
-
<%= f.label(:title) %><br />
|
10
|
-
<%= f.text_field(:title) %>
|
11
|
-
</div>
|
12
|
-
|
13
|
-
<div class="field">
|
14
|
-
<%= f.label(:country) %><br />
|
15
|
-
<%= f.country_select(:country, include_blank: true) %>
|
16
|
-
</div>
|
17
|
-
|
18
|
-
<div class="field">
|
19
|
-
<%= f.label(:subdivision, "State / Province") %><br />
|
20
|
-
<%= f.subdivision_select(:subdivision, address.country, include_blank: true ) %>
|
21
|
-
</div>
|
22
|
-
|
23
|
-
<div class="field">
|
24
|
-
<%= f.submit %>
|
25
|
-
</div>
|
26
|
-
<% end %>
|
@@ -1,12 +1,30 @@
|
|
1
|
-
<h1>
|
1
|
+
<h1>Demo</h1>
|
2
2
|
|
3
3
|
<% @addresses.each do |address| %>
|
4
4
|
<%=
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
form_for(
|
6
|
+
address,
|
7
|
+
url: update_address_path(address.id),
|
8
|
+
html: {class: address.title.parameterize}
|
9
|
+
) do |f| %>
|
10
|
+
|
11
|
+
<div class="field">
|
12
|
+
<%= f.label(:title) %><br />
|
13
|
+
<%= f.text_field(:title) %>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<div class="field">
|
17
|
+
<%= f.label(:country) %><br />
|
18
|
+
<%= f.country_select(:country, include_blank: true) %>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="field">
|
22
|
+
<%= f.label(:subdivision, "State / Province") %><br />
|
23
|
+
<%= f.subdivision_select(:subdivision, address.country, include_blank: true ) %>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<div class="field">
|
27
|
+
<%= f.submit %>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
12
30
|
<% end %>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<h1>Demo, using tag helpers</h1>
|
2
|
+
|
3
|
+
<% @addresses.each do |address| %>
|
4
|
+
<%= form_tag(update_address_path(address), method: :patch) do %>
|
5
|
+
<div class="field">
|
6
|
+
<%= label_tag(:title) %><br />
|
7
|
+
<%= text_field_tag("address[title]", address.title) %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class="field">
|
11
|
+
<%= label_tag("address[country]", "Country") %><br />
|
12
|
+
<%=
|
13
|
+
country_select(
|
14
|
+
:address,
|
15
|
+
:country,
|
16
|
+
selected: address.country,
|
17
|
+
include_blank: true
|
18
|
+
)
|
19
|
+
%>
|
20
|
+
</div>
|
21
|
+
|
22
|
+
<div class="field">
|
23
|
+
<%= label_tag("address[subdivision]", "State / Province") %><br />
|
24
|
+
<%=
|
25
|
+
subdivision_select_tag(
|
26
|
+
:address,
|
27
|
+
:subdivision,
|
28
|
+
country: address.country,
|
29
|
+
selected: address.subdivision,
|
30
|
+
include_blank: true
|
31
|
+
)
|
32
|
+
%>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div class="field">
|
36
|
+
<%= submit_tag("Update Address") %>
|
37
|
+
</div>
|
38
|
+
<% end %>
|
39
|
+
<% end %>
|
Binary file
|
data/spec/test_app/db/seeds.rb
CHANGED
Binary file
|