Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /** GLOBALS ********************************************************/
- var handlerGlobals = {
- /* jquery selectors */
- selectors: {
- messageConsole: "#response-message",
- registerForm : "#register-form",
- usernameField : "#username-field",
- emailField: "#email-field",
- passwordField: "#pass-field",
- pass2Field: "#pass2-field",
- requiredField: ".required-input"
- },
- /* classes */
- classes : {
- success: "success",
- error: "error"
- },
- /* base url / directory for rest calls */
- ajaxUri : "/Calendar/rest",
- ajaxUrls : {
- register : "user/register"
- },
- /* getters for globals */
- getSelector : function(key){
- return this.selectors[key];
- },
- getClass : function(key){
- return this.classes[key];
- },
- getAjaxUrl : function(key){
- return this.ajaxUrls[key];
- //return "";
- },
- print_r : function(obj){
- for(key in obj)
- alert(key + " = " + obj[key]);
- }
- /* **************************/
- };
- /** END GLOBALS **********************************************************************/
- /** FormHandler Class ****************************************************************/
- function FormHandler(){
- var handler = this;
- messages = new Array();
- success = false;
- ajaxItems = {};
- /* initialize ready events */
- initEvents = function(){
- handler = this;
- registerSelector = handlerGlobals.getSelector("registerForm");
- $(registerSelector).bind("submit", function(){
- form = $(this);
- return handler.handleRegisterForm(form);
- });
- };
- /* getter / setter for ajax items */
- getAjax = function(key){
- return this.ajaxItems[key];
- };
- addAjax = function(key, ajaxItem){
- this.ajaxItems[key] = ajaxItem;
- };
- /**
- * ajaxError
- * standard Ajax error handler function.
- */
- ajaxError = function(xhr, status, error ){
- message = "An error occurred querying the server. Please try again later.";
- addErrorMessage(message);
- displayMessages();
- return false;
- };
- /**
- * FormHandler.registerCallback()
- * function: callback for registering a new user with an Ajax call.
- * The JSON object returned is a UserResponse
- * (@see calendar.rest.data.UserResponse.java), with the following keys:
- * Root element: Response,
- * boolean succeeded: -- was the user operation (registration) a success
- * List<User> users: -- list of users associated with the operation
- * (the newly registered user).
- * List<String> messages: status messages.
- */
- registerCallback = function(data){
- message = "";
- if(data.succeeded){
- user = data.users;
- message = "The user " + user.username + " has registered successfully";
- addSuccessMessage(message);
- }else{
- addErrorMessage(data.messages);
- }
- displayMessages();
- };
- /* ** FormHandler.messages -- Success / Error messages to display to the user **/
- /**
- * Add a message or array of messages to be displayed to the user.
- * @param msg - the message to be added.
- * @param retainMessages - if true, old messages that are stored will be kept,
- * otherwise, old messages will be deleted.
- */
- addMessage = function(msg, retainMessages){
- if(!retainMessages)
- this.clearMessages();
- if(isArray(msg)){
- for(i in msg)
- this.messages.push(msg[i]);
- }else{
- this.messages.push(msg);
- }
- };
- /* delete all stored status messages */
- clearMessages = function(){
- this.messages = new Array();
- };
- /**
- * addSuccessMessage()
- * add a success message for the user.
- * @param msg - the message.
- * @param retainMessages - whether to retain the existing messages.
- */
- addSuccessMessage = function(msg, retainMessages){
- this.setSuccess(true);
- this.addMessage(msg, retainMessages);
- };
- /* add a message, and record an error */
- addErrorMessage = function(msg, retainMessages){
- this.setSuccess(false);
- this.addMessage(msg, retainMessages);
- };
- /* display all status messages */
- displayMessages = function(retainMessages){
- selector = handlerGlobals.getSelector("messageConsole");
- msgContainer = $(selector);
- msgContainer.html("");
- containerClass = this.succeeded() ? handlerGlobals.getClass("success") :
- handlerGlobals.getClass("error");
- msgContainer.addClass(containerClass);
- for( i in this.messages)
- msgContainer.append(this.getMessageHtml(this.messages[i]));
- if(!retainMessages)
- this.clearMessages();
- };
- /* helper to render messages in html form */
- getMessageHtml = function(msg){
- return "<p>" + msg + "</p>";
- };
- /* ** FormHandler.success -- Was the submission of the form a success? ***/
- setSuccess = function(succeeded){
- this.success = succeeded;
- };
- succeeded = function(){
- return this.success;
- };
- handleRegisterForm = function(form){
- if(this.requiredFieldsEmpty(form)){
- displayMessages();
- return false;
- }
- data = {};
- data.username = form.find(handlerGlobals.getSelector("usernameField")).val();
- data.email = form.find(handlerGlobals.getSelector("emailField")).val();
- data.password = form.find(handlerGlobals.getSelector("passwordField")).val();
- pass2 = form.find(handlerGlobals.getSelector("pass2Field")).val();
- if(data.password != pass2){
- this.addErrorMessage("Your passwords did not match.");
- this.displayMessages();
- return false;
- }
- //alert("u: " + data.username + ", e: " + data.email + ", p: " + data.password + ", p2: " + pass2);
- register = this.getAjax("register");
- register.execute(data);
- return false;
- };
- getInputLabel = function(field){
- container = field.parent();
- return container.find("label");
- };
- requiredFieldsEmpty = function(form){
- handler = this;
- fieldsEmpty = false;
- requiredSelector = handlerGlobals.getSelector("requiredField");
- form.find(requiredSelector).each(function(){
- var input = $(this);
- value = input.val();
- if(value.trim() == ""){
- fieldsEmpty = true;
- var labelHtml = getInputLabel(input).html();
- addErrorMessage("You must enter a value for the field " + labelHtml + ".",
- true);
- }
- });
- return fieldsEmpty;
- };
- addAjax("register", new AjaxItem(handlerGlobals.getAjaxUrl('register'),
- "POST", registerCallback, ajaxError, false)
- );
- initEvents();
- };
- /** END FormHandler Class */
- /************************************************************************************/
- /** AjaxItem -- Object to represent Ajax configurations ******************************/
- function AjaxItem( actionUrl, actionMethod, success, failure, async){
- uri = handlerGlobals.ajaxUri;
- this.url = uri + "/" + actionUrl;
- this.method = actionMethod;
- this.success = success;
- this.error = failure;
- this.async = async;
- this.execute = function(ajaxData){
- handler = this.formHandler;
- isGet = this.method == "GET";
- if(isGet)
- this.url += ajaxData;
- $.ajax({
- url: this.url,
- type: this.method,
- async: this.async,
- data: isGet ? null : ajaxData,
- success: this.success,
- error: this.error
- });
- };
- };
- /** END: AjaxItem **************************************************************/
Add Comment
Please, Sign In to add comment