Strimoid/Strimoid

View on GitHub
resources/assets/js/modules/entries.js

Summary

Maintainability
D
1 day
Test Coverage
function EntriesModule () {

  if (window.username) {
    // $('span.save_entry').click(this.saveEntry);
    $('body').delegate('.save_entry', 'click', this.saveEntry)

    $('body').on('submit', 'form.entry_add', this.addEntry)
    $('body').on('submit', 'form.entry_add_reply', this.addReply)
    $('body').on('click', '.entry_edit_link', this.editEntry)
  }

}

EntriesModule.prototype.saveEntry = function (e) {
  var button = $(this)
  var entry = $(this).parents('[data-id]').attr('data-id')

  if (button.hasClass('fa-star')) {
    $.post('/ajax/entry/remove_save', { entry: entry }, function (data) {
      if (data.status === 'ok') {
        $(button).removeClass('fa-star').addClass('fa-star-o')
      }
    })
  } else {
    $.post('/ajax/entry/add_save', { entry: entry }, function (data) {
      if (data.status === 'ok') {
        $(button).removeClass('fa-star-o').addClass('fa-star')
      }
    })
  }
}

EntriesModule.prototype.addEntry = function (e) {
  var form = this

  $(form).find('.form-group').removeClass('has-error')
  $(form).find('.help-block').remove()

  $.post('/ajax/entry/add', $(form).serialize(), function (data) {
    if (data.status === 'ok') {

      $('.entries').prepend(data.entry)
      $(form).trigger('reset')
    } else {
      $(form).find('.form-group').last().addClass('has-error')
        .append('<p class="help-block">' + data.error + '</p>')
    }
  })

  e.preventDefault()
}

EntriesModule.prototype.addReply = function (e) {
  var form = this
  var parent = $(form).parent('.entry').prevAll('.entry:not(.entry_reply)').first()

  $(form).find('.form-group').removeClass('has-error')
  $(form).find('.help-block').remove()

  $.post($(form).attr('action'), $(form).serialize(), function (data) {
    if (data.status === 'ok') {
      $(form).parent().remove()

      $(parent).nextUntil('.entry:not(.entry_reply)').remove()
      $(parent).after(data.replies)

      $('.md a[href*="youtube.com"]').each(function () {
        var url = $(this).attr('href')
        var regex = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:[^#]+)?(?:#)?(?:t=(\d+))?(?:\S+)?$/i

        var found = url.match(regex)

        if (found)
          $(this).addClass('yt-video').data('yt-id', found[1]).data('yt-time', found[2])
      })
    } else {
      $(form).find('.form-group').last().addClass('has-error')
      $(form).find('.form-group').last().append('<p class="help-block">' + data.error + '</p>')
    }
  })

  e.preventDefault()
}

EntriesModule.prototype.editEntry = function (e) {
  var entry = $(this).parent().parent()
  var entry_id = $(entry).attr('data-id')
  var entry_old_text = $(entry).find('.entry_text').html()
  var type = (entry.hasClass('entry_reply') === true ? 'entry_reply' : 'entry')

  $.post('/ajax/entry/source', { id: entry_id, type: type }, function (data) {
    if (data.status === 'ok') {
      $(entry).find('.entry_text').html('<form role="form" accept-charset="UTF-8" class="enter_send entry_edit"><input type="hidden" name="id" value="' + entry_id + '"><input type="hidden" name="type" value="' + type + '"><div class="form-group"><textarea name="text" class="form-control" rows="3"></textarea></div><div class="btn-group pull-right"><button type="submit" class="btn btn-sm btn-primary">Zapisz</button><button type="button" class="btn btn-sm btn-secondary entry_edit_close">Anuluj</button></div><div class="clearfix"></div></form>')
      $(entry).find('textarea[name="text"]').val(data.source)
      $(entry).find('.entry_actions').hide()

      $(entry).find('form').submit(function (event) {
        $(entry).find('.form-group').removeClass('has-error')
        $(entry).find('.help-block').remove()

        $.post('/ajax/entry/edit', $(entry).find('form').serialize(), function (data) {
          if (data.status === 'ok') {
            $(entry).find('.entry_text').html(data.parsed)
            $(entry).find('.entry_actions').show()
          } else {
            $(entry).find('.form-group').addClass('has-error')
            $(entry).find('.form-group').append('<p class="help-block">' + data.error + '</p>')
          }
        })

        event.preventDefault()
      })

      $('.entry_edit_close').click(function () {
        $(entry).find('.entry_text').html(entry_old_text)
        $(entry).find('.entry_actions').show()
      })
    }
  })
}

export default EntriesModule