diff --git a/app/assets/javascripts/validator.js b/app/assets/javascripts/validator.js new file mode 100644 index 0000000..049a580 --- /dev/null +++ b/app/assets/javascripts/validator.js @@ -0,0 +1,81 @@ +var _number_of_validators_ = 0; +var FormValidator = function(form){ + var fv = this, + elements_data = {}; + this.form = form; + this.elements = null; + this.validate_functions = { + required : function(value,element){ + switch(element.attr("type")){ + case "text": + return (value == "" ? false : true); + break; + case "checkbox": + return element.is(":checked"); + break; + } + }, + nospace : function(value){ + return (/\s/.test(value) ? false : true); + }, + email : function(){ + + } + } + + this.initialize = function(){ + fv.elements = form.find("*[data-fv-validation]"); + _number_of_validators_++; + _putFieldsValidatorAndMessage(); + _attachSubmitHandler(); + } + + var _attachSubmitHandler = function(){ + fv.form.on("submit",function(){ + $.each(elements_data,function(key,element){ + var validators = element.validators, + messages = element.messages, + el = fv.form.find("#" + key); + for(i = 0; i < validators.length; i++){ + var error_span = (fv.form.find("div[for=" + key + "]").length ? $("div[for=" + key + "]") : $("
")); + if(typeof fv.validate_functions[validators[i]] == "function"){ + if(!fv.validate_functions[validators[i]](el.val(),el)){ + error_span.text(messages[i]); + el.after(error_span); + break; + }else{ + error_span.remove(); + } + }else{ + console.info("Not validating for " + validators[i] + ". Skipping."); + } + } + }) + if(fv.form.find("div.validator_error_class").length){ + return false; + }else{ + return true; + } + }) + } + + var _putFieldsValidatorAndMessage = function(){ + $.each(fv.elements,function(i,element){ + var element = $(element), + validators = element.data("fv-validation").split(";").slice(0,-1), + messages = element.data("fv-messages").split(";").slice(0,-1), + id = (typeof element.attr("id") == "undefined" ? _generateElementId(element) : element.attr("id")); + elements_data[id] = {}; + elements_data[id].validators = validators; + elements_data[id].messages = messages; + }) + } + + var _generateElementId = function(element){ + var name = element.attr("name").replace(/\[+(.*?)\]+/g,"$1") + "_" + _number_of_validators_; + element.attr("id",name); + return name; + } + + this.initialize(); +} diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index acdf7c0..7569bb9 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -278,14 +278,14 @@ class PagesController < ApplicationController if original_view != "home" viewarea = doc.css("*[data-content='true']")[0] - viewarea.inner_html = render_to_string(original_view) + viewarea.inner_html = render_to_string(original_view) rescue "" end link = doc.css("link")[0] link.attributes["href"].value = current_site.favicon.url.nil? ? "/assets/favicon.ico" : current_site.favicon.url final_html_for_render = doc.to_html else - final_html_for_render = render_to_string(original_view) + final_html_for_render = render_to_string(original_view) rescue "" end final_html_for_render = change_to_language(final_html_for_render) final_html_for_render diff --git a/app/views/admin/items/index.html.erb b/app/views/admin/items/index.html.erb index bed5fe6..099bf10 100644 --- a/app/views/admin/items/index.html.erb +++ b/app/views/admin/items/index.html.erb @@ -1,3 +1,4 @@ +<%= javascript_include_tag 'validator' %> <% node = Page.root %> <% unless node.nil? %>