text: /*! DataTables Bootstrap 4 integration
   * ©2011-2017 SpryMedia Ltd - datatables.net/license
   */
  
  /**
   * DataTables integration for Bootstrap 4. This requires Bootstrap 4 and
   * DataTables 1.10 or newer.
   *
   * This file sets the defaults and adds options to DataTables to style its
   * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
   * for further information.
   */
  (function (factory) {
    if (typeof define === 'function' && define.amd) {
      // AMD
      define(['jquery', 'datatables.net'], function ($) {
        return factory($, window, document)
      })
    } else if (typeof exports === 'object') {
      // CommonJS
      module.exports = function (root, $) {
        if (!root) {
          root = window
        }
  
        if (!$ || !$.fn.dataTable) {
          // Require DataTables, which attaches to jQuery, including
          // jQuery if needed and have a $ property so we can access the
          // jQuery object that is used
          $ = require('datatables.net')(root, $).$
        }
  
        return factory($, root, root.document)
      }
    } else {
      // Browser
      factory(jQuery, window, document)
    }
  }(function ($, window, document, undefined) {
    'use strict'
    var DataTable = $.fn.dataTable
  
  
    /* Set the defaults for DataTables initialisation */
    $.extend(true, DataTable.defaults, {
      dom:
        '<\'row\'<\'col-sm-12 col-md-6\'l><\'col-sm-12 col-md-6\'f>>' +
        '<\'row\'<\'col-sm-12\'tr>>' +
        '<\'row\'<\'col-sm-12 col-md-5\'i><\'col-sm-12 col-md-7\'p>>',
      renderer: 'bootstrap'
    })
  
  
    /* Default class modification */
    $.extend(DataTable.ext.classes, {
      sWrapper: 'dataTables_wrapper dt-bootstrap4',
      sFilterInput: 'form-control form-control-sm',
      sLengthSelect: 'custom-select custom-select-sm form-control form-control-sm',
      sProcessing: 'dataTables_processing card',
      sPageButton: 'paginate_button page-item'
    })
  
  
    /* Bootstrap paging button renderer */
    DataTable.ext.renderer.pageButton.bootstrap = function (settings, host, idx, buttons, page, pages) {
      var api = new DataTable.Api(settings)
      var classes = settings.oClasses
      var lang = settings.oLanguage.oPaginate
      var aria = settings.oLanguage.oAria.paginate || {}
      var btnDisplay,
        btnClass,
        counter = 0
  
      var attach = function (container, buttons) {
        var i,
          ien,
          node,
          button
        var clickHandler = function (e) {
          e.preventDefault()
          if (!$(e.currentTarget)
            .hasClass('disabled') && api.page() != e.data.action) {
            api.page(e.data.action)
              .draw('page')
          }
        }
  
        for (i = 0, ien = buttons.length; i < ien; i++) {
          button = buttons[i]
  
          if ($.isArray(button)) {
            attach(container, button)
          } else {
            btnDisplay = ''
            btnClass = ''
  
            switch (button) {
              case 'ellipsis':
                btnDisplay = '&#x2026;'
                btnClass = 'disabled'
                break
  
              case 'first':
                btnDisplay = lang.sFirst
                btnClass = button + (page > 0 ?
                  '' : ' disabled')
                break
  
              case 'previous':
                btnDisplay = lang.sPrevious
                btnClass = button + (page > 0 ?
                  '' : ' disabled')
                break
  
              case 'next':
                btnDisplay = lang.sNext
                btnClass = button + (page < pages - 1 ?
                  '' : ' disabled')
                break
  
              case 'last':
                btnDisplay = lang.sLast
                btnClass = button + (page < pages - 1 ?
                  '' : ' disabled')
                break
  
              default:
                btnDisplay = button + 1
                btnClass = page === button ?
                  'active' : ''
                break
            }
  
            if (btnDisplay) {
              node = $('<li>', {
                'class': classes.sPageButton + ' ' + btnClass,
                'id': idx === 0 && typeof button === 'string' ?
                  settings.sTableId + '_' + button :
                  null
              })
                .append($('<a>', {
                    'href': '#',
                    'aria-controls': settings.sTableId,
                    'aria-label': aria[button],
                    'data-dt-idx': counter,
                    'tabindex': settings.iTabIndex,
                    'class': 'page-link'
                  })
                    .html(btnDisplay)
                )
                .appendTo(container)
  
              settings.oApi._fnBindAction(
                node, { action: button }, clickHandler
              )
  
              counter++
            }
          }
        }
      }
  
      // IE9 throws an 'unknown error' if document.activeElement is used
      // inside an iframe or frame.
      var activeEl
  
      try {
        // Because this approach is destroying and recreating the paging
        // elements, focus is lost on the select button which is bad for
        // accessibility. So we want to restore focus once the draw has
        // completed
        activeEl = $(host)
          .find(document.activeElement)
          .data('dt-idx')
      } catch (e) {
      }
  
      attach(
        $(host)
          .empty()
          .html('<ul class="pagination"/>')
          .children('ul'),
        buttons
      )
  
      if (activeEl !== undefined) {
        $(host)
          .find('[data-dt-idx=' + activeEl + ']')
          .focus()
      }
    }
  
  
    return DataTable
  }))
  