aboutsummaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2018-11-16 09:17:54 +0000
committerStruan Donald <struan@exo.org.uk>2018-11-26 09:43:11 +0000
commitb1ae952277d689134797abf1482572dd818a67ca (patch)
treec6d6c381b73d58a80ad5be1d6613255b33eda3a1 /web
parent231407e1106e68abf481bb65aa82cb60564fc9d6 (diff)
[UK] council specific javascript validation
use the bodies array of reporting_data to check if there is council specific javascript validation and, if so, load that into the JS validation rules. This does mean we reset the validation rules each time you select a category.
Diffstat (limited to 'web')
-rw-r--r--web/cobrands/fixmystreet-uk-councils/council_validation_rules.js38
-rw-r--r--web/cobrands/fixmystreet/fixmystreet.js31
-rw-r--r--web/js/validation_rules.js6
3 files changed, 73 insertions, 2 deletions
diff --git a/web/cobrands/fixmystreet-uk-councils/council_validation_rules.js b/web/cobrands/fixmystreet-uk-councils/council_validation_rules.js
new file mode 100644
index 000000000..1421687f8
--- /dev/null
+++ b/web/cobrands/fixmystreet-uk-councils/council_validation_rules.js
@@ -0,0 +1,38 @@
+confirm_validation_rules = {
+ name: {
+ required: true,
+ maxlength: 50
+ },
+ phone: {
+ maxlength: 20
+ },
+ detail: {
+ required: true,
+ maxlength: 2000
+ }
+};
+
+body_validation_rules['Buckinghamshire County Council'] = confirm_validation_rules;
+body_validation_rules['Lincolnshire County Council'] = confirm_validation_rules;
+body_validation_rules['Bath and North East Somerset Council'] = confirm_validation_rules;
+
+body_validation_rules['Rutland County Council'] = {
+ name: {
+ required: true,
+ maxlength: 40
+ }
+};
+
+body_validation_rules['Bromley Council'] = {
+ detail: {
+ required: true,
+ maxlength: 1750
+ }
+};
+
+body_validation_rules['Oxfordshire County Council'] = {
+ detail: {
+ required: true,
+ maxlength: 1700
+ }
+};
diff --git a/web/cobrands/fixmystreet/fixmystreet.js b/web/cobrands/fixmystreet/fixmystreet.js
index 5a326e6f9..9d3b9388f 100644
--- a/web/cobrands/fixmystreet/fixmystreet.js
+++ b/web/cobrands/fixmystreet/fixmystreet.js
@@ -282,7 +282,7 @@ $.extend(fixmystreet.set_up, {
var submitted = false;
$("form.validate").each(function(){
- $(this).validate({
+ fixmystreet.validator = $(this).validate({
rules: validation_rules,
messages: translation_strings,
onkeyup: false,
@@ -431,10 +431,39 @@ $.extend(fixmystreet.set_up, {
$category_meta.empty();
}
+ // remove existing validation rules
+ validation_rules = fixmystreet.validator.settings.rules;
+ $.each(validation_rules, function(rule) {
+ var $el = $('#form_' + rule);
+ if ($el.length) {
+ $el.rules('remove');
+ }
+ });
+ // apply new validation rules
+ fixmystreet.set_up.reapply_validation(core_validation_rules);
+ $.each(data.bodies, function(index, body) {
+ if ( body_validation_rules[body] ) {
+ var rules = body_validation_rules[body];
+ fixmystreet.set_up.reapply_validation(rules);
+ }
+ });
+
$(fixmystreet).trigger('report_new:category_change', [ $(this) ]);
});
},
+ reapply_validation: function(rules) {
+ if (rules === undefined) {
+ return;
+ }
+ $.each(rules, function(name, rule) {
+ var $el = $('#form_' + name);
+ if ($el.length) {
+ $el.rules('add', rule);
+ }
+ });
+ },
+
category_groups: function() {
var $category_select = $("select#form_category.js-grouped-select");
if ($category_select.length === 0) {
diff --git a/web/js/validation_rules.js b/web/js/validation_rules.js
index e6d745336..b8f09ef1e 100644
--- a/web/js/validation_rules.js
+++ b/web/js/validation_rules.js
@@ -1,4 +1,4 @@
- validation_rules = {
+ core_validation_rules = {
title: { required: true },
detail: { required: true },
update: { required: true },
@@ -9,3 +9,7 @@
}
}
};
+
+ body_validation_rules = {};
+
+ validation_rules = core_validation_rules;