From 713dc9dc294b257799655d9a48f2b7dc257f076f Mon Sep 17 00:00:00 2001 From: "Sergei O. Udalov" Date: Thu, 10 Nov 2016 19:05:01 +0300 Subject: [PATCH 1/4] jquery plugin API --- lib/assets/javascripts/err_supply-bootstrap.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/assets/javascripts/err_supply-bootstrap.js b/lib/assets/javascripts/err_supply-bootstrap.js index 9d00604..d874371 100644 --- a/lib/assets/javascripts/err_supply-bootstrap.js +++ b/lib/assets/javascripts/err_supply-bootstrap.js @@ -3,8 +3,8 @@ ErrSupply Twitter Bootstrap3 Adapter Copyright (c) 2014 Coroutine LLC Licensed under the MIT license */ -jQuery(function($) { - $("form").on("err_supply:loaded", function(event, errors) { +(function() { + var errSupplyPlugin = function(event, errors) { // define how errors are applied to dom elements var applyFn = function(error_hash) { @@ -85,5 +85,13 @@ jQuery(function($) { // cancel event return false; - }); -}); \ No newline at end of file + }; + + $.fn.err_supply = function() { + $(this).on("err_supply:loaded", errSupplyPlugin.bind(this)); + } +})() + +jQuery(function($) { + $("form").err_supply(); +}); From b7ac24ed9768a7ec975f07984848e0b9641469c5 Mon Sep 17 00:00:00 2001 From: "Sergei O. Udalov" Date: Thu, 10 Nov 2016 19:16:46 +0300 Subject: [PATCH 2/4] custom css form selector --- lib/err_supply/view_helpers.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/err_supply/view_helpers.rb b/lib/err_supply/view_helpers.rb index 75e1daa..96275c2 100644 --- a/lib/err_supply/view_helpers.rb +++ b/lib/err_supply/view_helpers.rb @@ -5,11 +5,17 @@ module ViewHelpers # triggers a custom event on the associated form element. # def err_supply(obj, options={}) - id = obj.new_record? ? dom_id(obj) : dom_id(obj, :edit) + form_css_selector = options[:form_css_selector] + + if form_css_selector.blank? + id = obj.new_record? ? dom_id(obj) : dom_id(obj, :edit) + form_css_selector = "##{id}" + end + prefix = obj.class.name.underscore.split('/').last payload = err_supply_hash(obj, options.merge({ :prefix => prefix })) - "$('##{ id }').trigger('err_supply:loaded', #{ payload.to_json });".html_safe + "$('#{ form_css_selector }').trigger('err_supply:loaded', #{ payload.to_json });".html_safe end end From e7b00394cfedb8728769bc9d4601ddfdc648e756 Mon Sep 17 00:00:00 2001 From: "Sergei O. Udalov" Date: Fri, 11 Nov 2016 11:16:19 +0300 Subject: [PATCH 3/4] do not return false --- lib/assets/javascripts/err_supply-bootstrap.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/assets/javascripts/err_supply-bootstrap.js b/lib/assets/javascripts/err_supply-bootstrap.js index d874371..f37b281 100644 --- a/lib/assets/javascripts/err_supply-bootstrap.js +++ b/lib/assets/javascripts/err_supply-bootstrap.js @@ -82,9 +82,6 @@ Licensed under the MIT license $form.find('.error').filter(':first') : $form.find(':not(.filter) :input:visible:enabled:first'); $focus_field.focus() - - // cancel event - return false; }; $.fn.err_supply = function() { From 5bedb73d0d468ab0d749aa087c89f161ed6031b2 Mon Sep 17 00:00:00 2001 From: "Sergei O. Udalov" Date: Fri, 11 Nov 2016 14:14:37 +0300 Subject: [PATCH 4/4] bootstrap 3 .has-error class --- lib/assets/javascripts/err_supply-bootstrap.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/assets/javascripts/err_supply-bootstrap.js b/lib/assets/javascripts/err_supply-bootstrap.js index f37b281..93f3430 100644 --- a/lib/assets/javascripts/err_supply-bootstrap.js +++ b/lib/assets/javascripts/err_supply-bootstrap.js @@ -38,7 +38,7 @@ Licensed under the MIT license }; // add class - $field.addClass('error'); + $field.addClass('error').closest('.input-group').addClass('has-error'); // add popover $field.popover({ @@ -63,7 +63,7 @@ Licensed under the MIT license // find all contained elements with a style of error and remove the class. // this is typically more important for ajax submissions. html submissions // tend not to have this problem. - $form.find('.error').removeClass('error'); + $form.find('.error').removeClass('error').closest('.input-group').removeClass('has-error'); // hide all fields that have been explicitly destroyed. when an html submission // has errors, the _destroy value renders as true rather than 1, which may or may not