colonizers/colonizers

View on GitHub
packages/colonizers/server/assets/js/site.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

require('./jquery-plugins');

var $ = require('jquery');
var moment = require('moment');
var swal = require('sweetalert');
var io = require('socket.io-client');
var ko = require('knockout');

// Date formatting

function formatDates() {
  $('span.date').each(function() {
    var $elem = $(this);
    var iso8601 = $elem.attr('title');
    var text = moment(iso8601).fromNow();

    if (text && $elem.text() !== text) {
      $elem.text(text);
    }
  });
}

// Form handling
function displayErrors($form, data) {
  $form.find('.form-group').removeClass('has-error');

  if (data && data.validation && data.validation.source === 'payload') {
    data.validation.keys.forEach(function(key) {
      var $field = $form.find('[name="' + key + '"]');
      $field.closest('.form-group').addClass('has-error');
    });
  }
}

$.fn.form = function(done, fail) {
  var $form = this;

  $form.on('submit', function(event) {
    event.preventDefault();

    var xhr = $.ajax({
      url: $form.attr('action'),
      type: $form.attr('method') || 'post',
      data: $form.serialize()
    });

    xhr.done(done);

    xhr.fail(function($xhr) {
      var data = $xhr.responseJSON;
      displayErrors($form, data);
    });

    if (fail) {
      xhr.fail(fail);
    }
  });
};

$(function() {
  formatDates();
  setInterval(formatDates, 5000);

  if (window.run) {
    window.run({
      $,
      io,
      ko,
      swal
    });
  }
});