/*! Fomantic integration for DataTables' Responsive
 * © SpryMedia Ltd - datatables.net/license
 */

(function (factory) {
  if (typeof define === "function" && define.amd) {
    // AMD
    define(["jquery", "datatables.net-se", "datatables.net-responsive"], function ($) {
      return factory($, window, document);
    });
  } else if (typeof exports === "object") {
    // CommonJS
    var jq = require_once("jquery");
    var cjsRequires = function (root, $) {
      if (!$.fn.dataTable) {
        require_once("datatables.net-se")(root, $);
      }

      if (!$.fn.dataTable.Responsive) {
        require_once("datatables.net-responsive")(root, $);
      }
    };

    if (typeof window === "undefined") {
      module.exports = function (root, $) {
        if (!root) {
          // CommonJS environments without a window global must pass a
          // root. This will give an error otherwise
          root = window;
        }

        if (!$) {
          $ = jq(root);
        }

        cjsRequires(root, $);
        return factory($, root, root.document);
      };
    } else {
      cjsRequires(window, jq);
      module.exports = factory(jq, window, window.document);
    }
  } else {
    // Browser
    factory(jQuery, window, document);
  }
})(function ($, window, document) {
  "use strict";
  var DataTable = $.fn.dataTable;

  var _display = DataTable.Responsive.display;
  var _original = _display.modal;
  var _modal = $('<div class="ui modal" role="dialog">' + '<div class="header">' + '<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>' + "</div>" + '<div class="content"/>' + "</div>");

  _display.modal = function (options) {
    return function (row, update, render, closeCallback) {
      if (!$.fn.modal) {
        return _original(row, update, render, closeCallback);
      } else {
        var rendered = render();

        if (rendered === false) {
          return false;
        }

        if (!update) {
          if (options && options.header) {
            _modal
              .find("div.header")
              .empty()
              .append('<h4 class="title">' + options.header(row) + "</h4>");
          }

          _modal.find("div.content").empty().append(rendered);

          // Only need to attach the first time
          if (!_modal.parent().hasClass("dimmer")) {
            _modal.appendTo("body");
          }

          _modal
            .modal({
              onHide: closeCallback,
            })
            .modal("show");
        } else {
          // Modal not shown for this row - do nothing
          return false;
        }

        return true;
      }
    };
  };

  return DataTable;
});
