Commit cee41ab2bf5af990029d746a2aafa5b6ffca2b17
Committed by
Fabio Teixeira
1 parent
9e654d48
Exists in
master
and in
5 other branches
Add javascript validation to edit user profile, change README
- Add note to add states and cities information Signed-off-by: Parley Martins <parley@outlook.com> Signed-off-by: Gustavo Jaruga <darksshades@gmail.com>
Showing
3 changed files
with
92 additions
and
52 deletions
Show diff stats
README.md
@@ -21,6 +21,8 @@ Activate Plugin | @@ -21,6 +21,8 @@ Activate Plugin | ||
21 | 21 | ||
22 | As a Noosfero administrator user, go to administrator panel: | 22 | As a Noosfero administrator user, go to administrator panel: |
23 | 23 | ||
24 | +- Execute the command to allow city and states to show up: | ||
25 | + psql -U USERNAME -d NOOSFERO_DATABASE -a -f db/brazil_national_regions.sql | ||
24 | - Click on "Enable/disable plugins" option | 26 | - Click on "Enable/disable plugins" option |
25 | - Click on "MPOG Software Plugin" check-box | 27 | - Click on "MPOG Software Plugin" check-box |
26 | 28 |
public/mpog-user-validations.js
@@ -126,10 +126,12 @@ | @@ -126,10 +126,12 @@ | ||
126 | if( (typeof jQuery("#profile_data_cell_phone").data("rawMaskFn") === 'undefined') ) { | 126 | if( (typeof jQuery("#profile_data_cell_phone").data("rawMaskFn") === 'undefined') ) { |
127 | jQuery("#profile_data_cell_phone").mask("(99) 9999?9-9999"); | 127 | jQuery("#profile_data_cell_phone").mask("(99) 9999?9-9999"); |
128 | jQuery("#profile_data_comercial_phone").mask("(99) 9999?9-9999"); | 128 | jQuery("#profile_data_comercial_phone").mask("(99) 9999?9-9999"); |
129 | + jQuery("#profile_data_contact_phone").mask("(99) 9999?9-9999"); | ||
129 | } | 130 | } |
130 | } else { | 131 | } else { |
131 | jQuery("#profile_data_cell_phone").unmask(); | 132 | jQuery("#profile_data_cell_phone").unmask(); |
132 | jQuery("#profile_data_comercial_phone").unmask(); | 133 | jQuery("#profile_data_comercial_phone").unmask(); |
134 | + jQuery("#profile_data_contact_phone").unmask(); | ||
133 | } | 135 | } |
134 | } | 136 | } |
135 | 137 | ||
@@ -147,75 +149,103 @@ | @@ -147,75 +149,103 @@ | ||
147 | }); | 149 | }); |
148 | } | 150 | } |
149 | 151 | ||
150 | - function set_full_name_validation() { | ||
151 | - // Sorry, I know its ugly. But I cant get ([^\w\*\s*])|(^|\s)([a-z]|[0-9]) | ||
152 | - // to ignore Brazilian not so much special chars in names | ||
153 | - function replace_some_special_chars(text) { | ||
154 | - return text.replace(/([áàâãéèêíïóôõöú])/g, function(value){ | ||
155 | - if( ["á","à","â","ã"].indexOf(value) != -1 ) | ||
156 | - return "a"; | ||
157 | - else if( ["é","è","ê"].indexOf(value) != -1 ) | ||
158 | - return "e"; | ||
159 | - else if( ["í","ï"].indexOf(value) != -1 ) | ||
160 | - return "i"; | ||
161 | - else if ( ["ó","ô","õ","ö"].indexOf(value) != -1 ) | ||
162 | - return "o"; | ||
163 | - else if( ["ú"].indexOf(value) != -1 ) | ||
164 | - return "u"; | ||
165 | - else | ||
166 | - return value; | ||
167 | - }); | ||
168 | - } | 152 | + // Sorry, I know its ugly. But I cant get ([^\w\*\s*])|(^|\s)([a-z]|[0-9]) |
153 | + // to ignore Brazilian not so much special chars in names | ||
154 | + function replace_some_special_chars(text) { | ||
155 | + return text.replace(/([áàâãéèêíïóôõöú])/g, function(value){ | ||
156 | + if( ["á","à","â","ã"].indexOf(value) != -1 ) | ||
157 | + return "a"; | ||
158 | + else if( ["é","è","ê"].indexOf(value) != -1 ) | ||
159 | + return "e"; | ||
160 | + else if( ["í","ï"].indexOf(value) != -1 ) | ||
161 | + return "i"; | ||
162 | + else if ( ["ó","ô","õ","ö"].indexOf(value) != -1 ) | ||
163 | + return "o"; | ||
164 | + else if( ["ú"].indexOf(value) != -1 ) | ||
165 | + return "u"; | ||
166 | + else | ||
167 | + return value; | ||
168 | + }); | ||
169 | + } | ||
169 | 170 | ||
170 | - function is_invalid_formated(text) { | ||
171 | - var full_validation = /([^\w\*\s*])|(^|\s)([a-z]|[0-9])/; // no special chars and do not initialize with no capital latter | ||
172 | - var partial_validation = /[^\w\*\s*]/; // no special chars | ||
173 | - text = replace_some_special_chars(text); | ||
174 | - var slices = text.split(" "); | ||
175 | - var invalid = false; | ||
176 | - | ||
177 | - for(var i = 0; i < slices.length; i++) { | ||
178 | - if( slices[i].length > 3 ) { | ||
179 | - invalid = full_validation.test(slices[i]); | ||
180 | - } else { | ||
181 | - invalid = partial_validation.test(slices[i]); | ||
182 | - } | 171 | + function is_invalid_formated(text) { |
172 | + var full_validation = /([^\w\*\s*])|(^|\s)([a-z]|[0-9])/; // no special chars and do not initialize with no capital latter | ||
173 | + var partial_validation = /[^\w\*\s*]/; // no special chars | ||
174 | + text = replace_some_special_chars(text); | ||
175 | + var slices = text.split(" "); | ||
176 | + var invalid = false; | ||
183 | 177 | ||
184 | - if(invalid) break; | 178 | + for(var i = 0; i < slices.length; i++) { |
179 | + if( slices[i].length > 3 ) { | ||
180 | + invalid = full_validation.test(slices[i]); | ||
181 | + } else { | ||
182 | + invalid = partial_validation.test(slices[i]); | ||
185 | } | 183 | } |
186 | 184 | ||
187 | - return invalid; | 185 | + if(invalid) break; |
188 | } | 186 | } |
189 | 187 | ||
190 | - function show_full_name_error_message() { | ||
191 | - var field = jQuery("#profile_data_name"); | 188 | + return invalid; |
189 | + } | ||
192 | 190 | ||
193 | - field.removeClass("validated").addClass("invalid"); | 191 | + jQuery("#profile_data_name").blur(function(){ |
192 | + jQuery(this).attr("class", ""); | ||
194 | 193 | ||
195 | - if(!jQuery(".full_name_error")[0]) { | ||
196 | - var message = jQuery("#full_name_error").val(); | ||
197 | - field.parent().append("<span class='full_name_error'>"+message+"</span>"); | ||
198 | - } else { | ||
199 | - jQuery(".full_name_error").show(); | ||
200 | - } | 194 | + if( this.value.length > 0 && is_invalid_formated(this.value) ) { |
195 | + show_full_name_error_message(); | ||
196 | + } else { | ||
197 | + hide_full_name_error_message(); | ||
201 | } | 198 | } |
199 | + }); | ||
200 | + | ||
202 | 201 | ||
203 | - function hide_full_name_error_message() { | ||
204 | - jQuery("#profile_data_name").removeClass("invalid").addClass("validated"); | ||
205 | - jQuery(".full_name_error").hide(); | 202 | + // Generic |
203 | + function show_plugin_error_message(field_id, hidden_message_id ) { | ||
204 | + var field = jQuery("#"+field_id); | ||
205 | + | ||
206 | + field.removeClass("validated").addClass("invalid"); | ||
207 | + | ||
208 | + if(!jQuery("." + hidden_message_id)[0]) { | ||
209 | + var message = jQuery("#" + hidden_message_id).val(); | ||
210 | + field.parent().append("<div class='" + hidden_message_id + " errorExplanation'>"+message+"</span>"); | ||
211 | + } else { | ||
212 | + jQuery("." + hidden_message_id).show(); | ||
206 | } | 213 | } |
214 | + } | ||
207 | 215 | ||
208 | - jQuery("#profile_data_name").blur(function(){ | 216 | + function hide_plugin_error_message(field_id, hidden_message_id) { |
217 | + jQuery("#" + field_id).removeClass("invalid").addClass("validated"); | ||
218 | + jQuery("." + hidden_message_id).hide(); | ||
219 | + } | ||
220 | + function addBlurFields(field_id, hidden_message_id, validation_function) { | ||
221 | + jQuery("#" + field_id).blur(function(){ | ||
209 | jQuery(this).attr("class", ""); | 222 | jQuery(this).attr("class", ""); |
210 | 223 | ||
211 | - if( this.value.length > 0 && is_invalid_formated(this.value) ) { | ||
212 | - show_full_name_error_message(); | 224 | + if( this.value.length > 0 && validation_function(this.value) ) { |
225 | + show_plugin_error_message(field_id, hidden_message_id); | ||
213 | } else { | 226 | } else { |
214 | - hide_full_name_error_message(); | 227 | + hide_plugin_error_message(field_id, hidden_message_id); |
215 | } | 228 | } |
216 | }); | 229 | }); |
217 | } | 230 | } |
218 | 231 | ||
232 | + function invalid_email_validation(value) | ||
233 | + { | ||
234 | + var correct_format_regex = new RegExp(/^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/); | ||
235 | + | ||
236 | + return !correct_format_regex.test(value) | ||
237 | + } | ||
238 | + | ||
239 | + function invalid_site_validation(value) | ||
240 | + { | ||
241 | + var correct_format_regex = new RegExp(/^http[s]{0,1}:\/\/[\w*\.]*/); | ||
242 | + | ||
243 | + return !correct_format_regex.test(value) | ||
244 | + } | ||
245 | + | ||
246 | + //End generic | ||
247 | + | ||
248 | + | ||
219 | jQuery(document).ready(function(){ | 249 | jQuery(document).ready(function(){ |
220 | var selectFieldChoices = new SelectFieldChoices(); | 250 | var selectFieldChoices = new SelectFieldChoices(); |
221 | set_initial_form_custom_data(selectFieldChoices); | 251 | set_initial_form_custom_data(selectFieldChoices); |
@@ -246,6 +276,13 @@ | @@ -246,6 +276,13 @@ | ||
246 | 276 | ||
247 | fix_phone_mask_format("#profile_data_cell_phone"); | 277 | fix_phone_mask_format("#profile_data_cell_phone"); |
248 | fix_phone_mask_format("#profile_data_comercial_phone"); | 278 | fix_phone_mask_format("#profile_data_comercial_phone"); |
279 | + fix_phone_mask_format("#profile_data_contact_phone"); | ||
280 | + | ||
281 | + addBlurFields("profile_data_name", "full_name_error", is_invalid_formated) | ||
282 | + addBlurFields("profile_data_email", "email_error", invalid_email_validation) | ||
283 | + addBlurFields("user_secondary_email", "email_error", invalid_email_validation) | ||
284 | + addBlurFields("profile_data_personal_website", "site_error", invalid_site_validation) | ||
285 | + addBlurFields("profile_data_organization_website", "site_error", invalid_site_validation) | ||
249 | 286 | ||
250 | window.setTimeout(function(){ | 287 | window.setTimeout(function(){ |
251 | /* | 288 | /* |
@@ -253,7 +290,6 @@ | @@ -253,7 +290,6 @@ | ||
253 | Then, to override an application.js validation, this code waits for 2 seconds. | 290 | Then, to override an application.js validation, this code waits for 2 seconds. |
254 | Or else, application.js validation override this validation | 291 | Or else, application.js validation override this validation |
255 | */ | 292 | */ |
256 | - set_full_name_validation(); | ||
257 | }, 2000); | 293 | }, 2000); |
258 | }); | 294 | }); |
259 | })(); | 295 | })(); |
views/person_editor_extras.html.erb
@@ -33,4 +33,6 @@ | @@ -33,4 +33,6 @@ | ||
33 | </ul> | 33 | </ul> |
34 | </div> | 34 | </div> |
35 | 35 | ||
36 | -<%= hidden_field_tag("full_name_error", _("Should begin with a capital letter and no special characters")) %> | ||
37 | \ No newline at end of file | 36 | \ No newline at end of file |
37 | +<%= hidden_field_tag("full_name_error", _("Should begin with a capital letter and no special characters")) %> | ||
38 | +<%= hidden_field_tag("email_error", _("Email should have the following format: name@host.br")) %> | ||
39 | +<%= hidden_field_tag("site_error", _("Site should have a valid format: http://name.hosts")) %> | ||
38 | \ No newline at end of file | 40 | \ No newline at end of file |