diff --git a/app/views/invitations/edit.html.haml b/app/views/invitations/edit.html.haml index a894947be..29ccd4328 100644 --- a/app/views/invitations/edit.html.haml +++ b/app/views/invitations/edit.html.haml @@ -1,18 +1,5 @@ - :javascript - $(function() { - var Validation = { - username: { - characters: /^(|[A-Za-z0-9_]{0,32})$/, - length: [6, 32] - } - }; - - $("#user_username").keypress(function(evt) { - if(!Validation.username.characters.test(this.value + String.fromCharCode(evt.charCode)) { - evt.preventDefault(); - } - }); - }); +%script{:type => "text/javascript", + :src => "/javascripts/validation.js"} = form_for(resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :put }) do |f| %p diff --git a/app/views/registrations/new.html.haml b/app/views/registrations/new.html.haml index 918acd57b..05c7ffe64 100644 --- a/app/views/registrations/new.html.haml +++ b/app/views/registrations/new.html.haml @@ -1,19 +1,5 @@ - :javascript - $(function() { - var Validation = { - username: { - characters: /^(|[A-Za-z0-9_]{0,32})$/, - length: [6, 32] - } - }; - - $("#user_username").keypress(function(evt) { - if(!Validation.username.characters.test(this.value + String.fromCharCode(evt.charCode)) { - evt.preventDefault(); - } - }); - }); - +%script {:type => "text/javascript" + :src "/javascripts/validation.js"} .span-12.prepend-6.last .floating %h3 diff --git a/public/javascripts/validation.js b/public/javascripts/validation.js new file mode 100644 index 000000000..937e03544 --- /dev/null +++ b/public/javascripts/validation.js @@ -0,0 +1,19 @@ +var Validation = { + rules: { + username: { + characters: /^(|[A-Za-z0-9_]{0,32})$/, + length: [6, 32] + } + }, + events: { + usernameKeypress: function(evt) { + if(!Validation.rules.username.characters.test(this.value + String.fromCharCode(evt.charCode))) { + evt.preventDefault(); + } + } + } +}; + +$(function() { + $("#user_username").keypress(Validation.events.usernameKeypress); +}); diff --git a/spec/javascripts/support/jasmine.yml b/spec/javascripts/support/jasmine.yml index 61c9341fe..1b5cb5a34 100644 --- a/spec/javascripts/support/jasmine.yml +++ b/spec/javascripts/support/jasmine.yml @@ -14,6 +14,7 @@ src_files: - public/javascripts/vendor/jquery144.js - public/javascripts/vendor/jquery-ui-1.8.6.custom.min.js - public/javascripts/vendor/jquery.tipsy.js + - public/javascripts/validation.js - public/javascripts/diaspora.js - public/javascripts/mobile.js - public/javascripts/aspect-edit.js diff --git a/spec/javascripts/validation-spec.js b/spec/javascripts/validation-spec.js new file mode 100644 index 000000000..efca241de --- /dev/null +++ b/spec/javascripts/validation-spec.js @@ -0,0 +1,33 @@ +describe("Validation", function() { + describe("rules", function() { + it("contains all the rules for validation"); + + describe("username", function() { + describe("characters", function() { + it("is the regex for checking if we allow what the user typed"); + }); + }); + }); + describe("events", function() { + it("contains all the events that use validation methods"); + describe("usernameKeypress", function() { + beforeEach(function() { + $("#jasmine_content").html( + ' ' + ); + }); + + it("doesn't allow the user to type anything but letters, numbers and underscores", function() { + expect(Validation.rules.username.characters.test("*")).toBeFalsy(); + expect(Validation.rules.username.characters.test("Aa_")).toBeTruthy(); + expect(Validation.rules.username.characters.test("ffffffffffffffffffffffffffffffffff")).toBeFalsy(); + }); + + it("is called when the user presses a key on #user_username") { + spyOn(Validation.events, "usernameKeypress"); + $("#user_username").keypress(); + expect(Validation.events.usernameKeypress).toHaveBeenCalled(); + }); + }); + }); +});