YouTransfer/YouTransfer

View on GitHub
src/js/components/form/form.js

Summary

Maintainability
A
1 hr
Test Coverage
/*jslint browser: true*/
'use strict';

// ------------------------------------------------------------------------------------------ Component Dependencies

var $ = require('jquery');
require('jquery-form')(window, $);

// ------------------------------------------------------------------------------------------ Component Variables

var COMPONENT_ATTR = 'data-xhrform';
var COMPONENT_SELECTOR = '[' + COMPONENT_ATTR + ']';
var FORM_TARGET_ATTRIBUTE = 'data-xhrform-target';
var FORM_REPLACETARGET_ATTRIBUTE = 'data-xhrform-replace';

// ------------------------------------------------------------------------------------------ Component Definition

function Form(element) {
    var component = this;
    component.$element = $(element);

    component.$element.ajaxForm({
        success: function(response, status, xhr, $form) {
            var content = $(response.output);

            var target = $('#' + element.getAttribute(FORM_TARGET_ATTRIBUTE)) || component.$element; 
            target.replaceWith(content);

            $(document).trigger('xhr.loaded', [ element, content ]);
            $(document).trigger('component.form.success');
        }
    });
}

// ------------------------------------------------------------------------------------------ Component Initialization

$(COMPONENT_SELECTOR).each(function(index, element) {
    return new Form(element);
});

$(document).on('xhr.loaded', function(event, element, target) {
    $(target).find(COMPONENT_SELECTOR).each(function(index, item) {
        return new Form(item);
    });
});

// ------------------------------------------------------------------------------------------ Component Exposure

module.exports = Form;