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? %>
    diff --git a/app/views/pages/_form.html.erb b/app/views/pages/_form.html.erb index 286b7a8..00a0c44 100644 --- a/app/views/pages/_form.html.erb +++ b/app/views/pages/_form.html.erb @@ -1,23 +1,25 @@ <% if params[:action] == "edit" %>

    <%= @page.name %>

    <% end %> +
    + <% if params[:action] == "new" %> + +
    + <%= f.text_field :page_id, data: {"fv-validation" => "required;nospace;pageid_validation;", "fv-messages" => "Cannot be empty.;Cannot have blank spaces.;Page id already taken.;"} %> +
    + <% end %> +
    <% I18n.available_locales.each do |locale| %>
    <%= f.fields_for :name_translations do |n| %> - <%= n.text_field locale, :value=>@page.name_translations[locale] rescue nil %> + <%= n.text_field locale, data: {"fv-validation" => "required;", "fv-messages" => "Cannot be empty.;"}, :value=>@page.name_translations[locale] rescue nil %> <% end %>
    <% end %>
    - <% if params[:action] == "new" %> - -
    - <%= f.text_field :page_id %> -
    - <% end %>
    <%= f.select(:module, @modules.map{|m| [t(OrbitApp::Module::Registration.find_by_key(m.key).module_label),m.key]},{:include_blank => true},:class=>"module_select") %> diff --git a/app/views/pages/_form_link.html.erb b/app/views/pages/_form_link.html.erb index fba91ca..5f37e88 100644 --- a/app/views/pages/_form_link.html.erb +++ b/app/views/pages/_form_link.html.erb @@ -1,12 +1,26 @@ <% if params[:action] == "edit" %>

    <%= @page.name %>

    <% end %> + +
    + <% if params[:action] == "new" %> + +
    + <%= f.text_field :page_id, data: {"fv-validation" => "required;nospace;pageid_validation;", "fv-messages" => "Cannot be empty.;Cannot have blank spaces;Page id already taken.;"} %> +
    + <% end %> +
    + <%= f.hidden_field :parent_page, value: (params[:parent_page] || @page.parent_page_id) %> + <%= f.hidden_field :page_type, value: "link" %> +
    +
    +
    <% I18n.available_locales.each do |locale| %>
    <%= f.fields_for :name_translations do |n| %> - <%= n.text_field locale, :value=>@page.name_translations[locale] rescue nil %> + <%= n.text_field locale, data: {"fv-validation" => "required;", "fv-messages" => "Cannot be empty.;"}, :value=>@page.name_translations[locale] rescue nil %> <% end %>
    <% end %> @@ -33,18 +47,6 @@
    <% end %>
    -
    - <% if params[:action] == "new" %> - -
    - <%= f.text_field :page_id %> -
    - <% end %> -
    - <%= f.hidden_field :parent_page, value: (params[:parent_page] || @page.parent_page_id) %> - <%= f.hidden_field :page_type, value: "link" %> -
    -
    diff --git a/app/views/pages/edit.html.erb b/app/views/pages/edit.html.erb index 68b0d8b..2a9125b 100644 --- a/app/views/pages/edit.html.erb +++ b/app/views/pages/edit.html.erb @@ -13,4 +13,9 @@ <% end %>
    -<% end %> \ No newline at end of file +<% end %> + \ No newline at end of file diff --git a/app/views/pages/new.html.erb b/app/views/pages/new.html.erb index b4ba121..8f84458 100644 --- a/app/views/pages/new.html.erb +++ b/app/views/pages/new.html.erb @@ -1,4 +1,4 @@ -<%= form_for @page, url: {action: "create"},:class =>"form-horizontal", remote: true do |f| %> +<%= form_for @page, url: {action: "create"},:class =>"form-horizontal", :remote => true do |f| %> <% if params[:type] == "page" %> <%= render "form", {:f=> f} %> <% elsif params[:type] == "link" %> @@ -13,4 +13,13 @@ <% end %>
    -<% end %> \ No newline at end of file +<% end %> + \ No newline at end of file