| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 | /** * -------------------------------------------- * AdminLTE CardWidget.js * License MIT * -------------------------------------------- */import $ from 'jquery'/** * Constants * ==================================================== */const NAME = 'CardWidget'const DATA_KEY = 'lte.cardwidget'const EVENT_KEY = `.${DATA_KEY}`const JQUERY_NO_CONFLICT = $.fn[NAME]const EVENT_EXPANDED = `expanded${EVENT_KEY}`const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`const EVENT_MAXIMIZED = `maximized${EVENT_KEY}`const EVENT_MINIMIZED = `minimized${EVENT_KEY}`const EVENT_REMOVED = `removed${EVENT_KEY}`const CLASS_NAME_CARD = 'card'const CLASS_NAME_COLLAPSED = 'collapsed-card'const CLASS_NAME_COLLAPSING = 'collapsing-card'const CLASS_NAME_EXPANDING = 'expanding-card'const CLASS_NAME_WAS_COLLAPSED = 'was-collapsed'const CLASS_NAME_MAXIMIZED = 'maximized-card'const SELECTOR_DATA_REMOVE = '[data-card-widget="remove"]'const SELECTOR_DATA_COLLAPSE = '[data-card-widget="collapse"]'const SELECTOR_DATA_MAXIMIZE = '[data-card-widget="maximize"]'const SELECTOR_CARD = `.${CLASS_NAME_CARD}`const SELECTOR_CARD_HEADER = '.card-header'const SELECTOR_CARD_BODY = '.card-body'const SELECTOR_CARD_FOOTER = '.card-footer'const Default = {  animationSpeed: 'normal',  collapseTrigger: SELECTOR_DATA_COLLAPSE,  removeTrigger: SELECTOR_DATA_REMOVE,  maximizeTrigger: SELECTOR_DATA_MAXIMIZE,  collapseIcon: 'fa-minus',  expandIcon: 'fa-plus',  maximizeIcon: 'fa-expand',  minimizeIcon: 'fa-compress'}class CardWidget {  constructor(element, settings) {    this._element = element    this._parent = element.parents(SELECTOR_CARD).first()    if (element.hasClass(CLASS_NAME_CARD)) {      this._parent = element    }    this._settings = $.extend({}, Default, settings)  }  collapse() {    this._parent.addClass(CLASS_NAME_COLLAPSING).children(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)      .slideUp(this._settings.animationSpeed, () => {        this._parent.addClass(CLASS_NAME_COLLAPSED).removeClass(CLASS_NAME_COLLAPSING)      })    this._parent.find(`> ${SELECTOR_CARD_HEADER} ${this._settings.collapseTrigger} .${this._settings.collapseIcon}`)      .addClass(this._settings.expandIcon)      .removeClass(this._settings.collapseIcon)    this._element.trigger($.Event(EVENT_COLLAPSED), this._parent)  }  expand() {    this._parent.addClass(CLASS_NAME_EXPANDING).children(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)      .slideDown(this._settings.animationSpeed, () => {        this._parent.removeClass(CLASS_NAME_COLLAPSED).removeClass(CLASS_NAME_EXPANDING)      })    this._parent.find(`> ${SELECTOR_CARD_HEADER} ${this._settings.collapseTrigger} .${this._settings.expandIcon}`)      .addClass(this._settings.collapseIcon)      .removeClass(this._settings.expandIcon)    this._element.trigger($.Event(EVENT_EXPANDED), this._parent)  }  remove() {    this._parent.slideUp()    this._element.trigger($.Event(EVENT_REMOVED), this._parent)  }  toggle() {    if (this._parent.hasClass(CLASS_NAME_COLLAPSED)) {      this.expand()      return    }    this.collapse()  }  maximize() {    this._parent.find(`${this._settings.maximizeTrigger} .${this._settings.maximizeIcon}`)      .addClass(this._settings.minimizeIcon)      .removeClass(this._settings.maximizeIcon)    this._parent.css({      height: this._parent.height(),      width: this._parent.width(),      transition: 'all .15s'    }).delay(150).queue(function () {      const $element = $(this)      $element.addClass(CLASS_NAME_MAXIMIZED)      $('html').addClass(CLASS_NAME_MAXIMIZED)      if ($element.hasClass(CLASS_NAME_COLLAPSED)) {        $element.addClass(CLASS_NAME_WAS_COLLAPSED)      }      $element.dequeue()    })    this._element.trigger($.Event(EVENT_MAXIMIZED), this._parent)  }  minimize() {    this._parent.find(`${this._settings.maximizeTrigger} .${this._settings.minimizeIcon}`)      .addClass(this._settings.maximizeIcon)      .removeClass(this._settings.minimizeIcon)    this._parent.css('cssText', `height: ${this._parent[0].style.height} !important; width: ${this._parent[0].style.width} !important; transition: all .15s;`    ).delay(10).queue(function () {      const $element = $(this)      $element.removeClass(CLASS_NAME_MAXIMIZED)      $('html').removeClass(CLASS_NAME_MAXIMIZED)      $element.css({        height: 'inherit',        width: 'inherit'      })      if ($element.hasClass(CLASS_NAME_WAS_COLLAPSED)) {        $element.removeClass(CLASS_NAME_WAS_COLLAPSED)      }      $element.dequeue()    })    this._element.trigger($.Event(EVENT_MINIMIZED), this._parent)  }  toggleMaximize() {    if (this._parent.hasClass(CLASS_NAME_MAXIMIZED)) {      this.minimize()      return    }    this.maximize()  }  // Private  _init(card) {    this._parent = card    $(this).find(this._settings.collapseTrigger).click(() => {      this.toggle()    })    $(this).find(this._settings.maximizeTrigger).click(() => {      this.toggleMaximize()    })    $(this).find(this._settings.removeTrigger).click(() => {      this.remove()    })  }  // Static  static _jQueryInterface(config) {    let data = $(this).data(DATA_KEY)    const _options = $.extend({}, Default, $(this).data())    if (!data) {      data = new CardWidget($(this), _options)      $(this).data(DATA_KEY, typeof config === 'string' ? data : config)    }    if (typeof config === 'string' && config.match(/collapse|expand|remove|toggle|maximize|minimize|toggleMaximize/)) {      data[config]()    } else if (typeof config === 'object') {      data._init($(this))    }  }}/** * Data API * ==================================================== */$(document).on('click', SELECTOR_DATA_COLLAPSE, function (event) {  if (event) {    event.preventDefault()  }  CardWidget._jQueryInterface.call($(this), 'toggle')})$(document).on('click', SELECTOR_DATA_REMOVE, function (event) {  if (event) {    event.preventDefault()  }  CardWidget._jQueryInterface.call($(this), 'remove')})$(document).on('click', SELECTOR_DATA_MAXIMIZE, function (event) {  if (event) {    event.preventDefault()  }  CardWidget._jQueryInterface.call($(this), 'toggleMaximize')})/** * jQuery API * ==================================================== */$.fn[NAME] = CardWidget._jQueryInterface$.fn[NAME].Constructor = CardWidget$.fn[NAME].noConflict = function () {  $.fn[NAME] = JQUERY_NO_CONFLICT  return CardWidget._jQueryInterface}export default CardWidget
 |