SpeciesFileGroup/taxonworks

View on GitHub
app/views/pinboard_items/update.js.erb

Summary

Maintainability
Test Coverage
var pinboardRemoteUpdate = {};

Object.assign(pinboardRemoteUpdate, {

  alreadyInserted: <%= @pinboard_item.is_inserted -%>,
  pinboardItem: document.querySelector('[data-pinboard-object-id="<%= @pinboard_item.pinned_object.id -%>"]'),
  defaultExist: document.querySelector('[data-pinboard-object-id="<%= @pinboard_item.pinned_object.id -%>"]')
    .parentNode.querySelector('[data-insert="true"]'),

  init: function () {
    if (this.defaultExist != undefined) {
      this.changeLink(this.defaultExist, false);
    }

    this.changeLink(this.pinboardItem, (this.alreadyInserted ? true : false));
    this.eventPinboardInsert();
    TW.workbench.pinboard.setDefaultClass();
    $('body').mx_spinner('hide');
  },

  changeLink: function (pinElement, inserted) {
    pinElement.setAttribute('data-insert', inserted);
    pinElement.querySelector('.itemOptions').replaceChild(this.createUrl(pinElement.dataset.pinboardItemId, (!inserted)),
      pinElement.querySelector('.itemOptions .option-default'));
  },

  createUrl: function (id, inserted) {
    var newEl = document.createElement('a');

    newEl.innerHTML = (inserted ? 'Make default' : 'Disable default');
    newEl.setAttribute('href', '/pinboard_items/' + id + '?pinboard_item%5Bis_inserted%5D=' + inserted);
    newEl.setAttribute('data-remote', 'true');
    newEl.setAttribute('rel', 'nofollow');
    newEl.setAttribute('title', (inserted ? 'Make default' : 'Disable default'));
    newEl.setAttribute('data-method', 'put');
    newEl.classList.add('circle-button', 'button-pinboard-default', (inserted ? 'button-submit' : 'button-delete'), 'option-default');

    return newEl;
  },

  eventPinboardInsert: function () {
    var event = new CustomEvent("pinboard:insert", {
      detail: {
        id: <%= @pinboard_item.pinned_object_id -%>,
        type: "<%= @pinboard_item.pinned_object_type -%>",
        object_id: <%= @pinboard_item.pinned_object.id -%>,
        is_inserted: <%= @pinboard_item.is_inserted -%>
      }
    });
    document.dispatchEvent(event);
  }
});

pinboardRemoteUpdate.init();