| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | /** * -------------------------------------------- * AdminLTE ExpandableTable.js * License MIT * -------------------------------------------- */import $ from 'jquery'/**  * Constants  * ====================================================  */const NAME = 'ExpandableTable'const DATA_KEY = 'lte.expandableTable'const EVENT_KEY = `.${DATA_KEY}`const JQUERY_NO_CONFLICT = $.fn[NAME]const EVENT_EXPANDED = `expanded${EVENT_KEY}`const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`const SELECTOR_TABLE = '.expandable-table'const SELECTOR_EXPANDABLE_BODY = '.expandable-body'const SELECTOR_DATA_TOGGLE = '[data-widget="expandable-table"]'const SELECTOR_ARIA_ATTR = 'aria-expanded'/**  * Class Definition  * ====================================================  */class ExpandableTable {  constructor(element, options) {    this._options = options    this._element = element  }  // Public  init() {    $(SELECTOR_DATA_TOGGLE).each((_, $header) => {      const $type = $($header).attr(SELECTOR_ARIA_ATTR)      const $body = $($header).next(SELECTOR_EXPANDABLE_BODY).children().first().children()      if ($type === 'true') {        $body.show()      } else if ($type === 'false') {        $body.hide()        $body.parent().parent().addClass('d-none')      }    })  }  toggleRow() {    const $element = this._element    const time = 500    const $type = $element.attr(SELECTOR_ARIA_ATTR)    const $body = $element.next(SELECTOR_EXPANDABLE_BODY).children().first().children()    $body.stop()    if ($type === 'true') {      $body.slideUp(time, () => {        $element.next(SELECTOR_EXPANDABLE_BODY).addClass('d-none')      })      $element.attr(SELECTOR_ARIA_ATTR, 'false')      $element.trigger($.Event(EVENT_COLLAPSED))    } else if ($type === 'false') {      $element.next(SELECTOR_EXPANDABLE_BODY).removeClass('d-none')      $body.slideDown(time)      $element.attr(SELECTOR_ARIA_ATTR, 'true')      $element.trigger($.Event(EVENT_EXPANDED))    }  }  // Static  static _jQueryInterface(operation) {    return this.each(function () {      let data = $(this).data(DATA_KEY)      if (!data) {        data = new ExpandableTable($(this))        $(this).data(DATA_KEY, data)      }      if (typeof operation === 'string' && /init|toggleRow/.test(operation)) {        data[operation]()      }    })  }}/**  * Data API  * ====================================================  */$(SELECTOR_TABLE).ready(function () {  ExpandableTable._jQueryInterface.call($(this), 'init')})$(document).on('click', SELECTOR_DATA_TOGGLE, function () {  ExpandableTable._jQueryInterface.call($(this), 'toggleRow')})/**  * jQuery API  * ====================================================  */$.fn[NAME] = ExpandableTable._jQueryInterface$.fn[NAME].Constructor = ExpandableTable$.fn[NAME].noConflict = function () {  $.fn[NAME] = JQUERY_NO_CONFLICT  return ExpandableTable._jQueryInterface}export default ExpandableTable
 |