123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- /**
- * --------------------------------------------
- * AdminLTE CardWidget.js
- * License MIT
- * --------------------------------------------
- */
- const CardWidget = (($) => {
- /**
- * 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}`,
- COLLAPSED: `collapsed${EVENT_KEY}`,
- MAXIMIZED: `maximized${EVENT_KEY}`,
- MINIMIZED: `minimized${EVENT_KEY}`,
- REMOVED: `removed${EVENT_KEY}`
- }
- const ClassName = {
- CARD: 'card',
- COLLAPSED: 'collapsed-card',
- COLLAPSING: 'collapsing-card',
- EXPANDING: 'expanding-card',
- WAS_COLLAPSED: 'was-collapsed',
- MAXIMIZED: 'maximized-card',
- }
- const Selector = {
- DATA_REMOVE: '[data-card-widget="remove"]',
- DATA_COLLAPSE: '[data-card-widget="collapse"]',
- DATA_MAXIMIZE: '[data-card-widget="maximize"]',
- CARD: `.${ClassName.CARD}`,
- CARD_HEADER: '.card-header',
- CARD_BODY: '.card-body',
- CARD_FOOTER: '.card-footer',
- COLLAPSED: `.${ClassName.COLLAPSED}`,
- }
- 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(ClassName.CARD)) {
- this._parent = element
- }
- this._settings = $.extend({}, Default, settings)
- }
- collapse() {
- this._parent.addClass(ClassName.COLLAPSING).children(`${Selector.CARD_BODY}, ${Selector.CARD_FOOTER}`)
- .slideUp(this._settings.animationSpeed, () => {
- this._parent.addClass(ClassName.COLLAPSED).removeClass(ClassName.COLLAPSING)
- })
- this._parent.find('> ' + Selector.CARD_HEADER + ' ' + this._settings.collapseTrigger + ' .' + this._settings.collapseIcon)
- .addClass(this._settings.expandIcon)
- .removeClass(this._settings.collapseIcon)
- const collapsed = $.Event(Event.COLLAPSED)
- this._element.trigger(collapsed, this._parent)
- }
- expand() {
- this._parent.addClass(ClassName.EXPANDING).children(`${Selector.CARD_BODY}, ${Selector.CARD_FOOTER}`)
- .slideDown(this._settings.animationSpeed, () => {
- this._parent.removeClass(ClassName.COLLAPSED).removeClass(ClassName.EXPANDING)
- })
- this._parent.find('> ' + Selector.CARD_HEADER + ' ' + this._settings.collapseTrigger + ' .' + this._settings.expandIcon)
- .addClass(this._settings.collapseIcon)
- .removeClass(this._settings.expandIcon)
- const expanded = $.Event(Event.EXPANDED)
- this._element.trigger(expanded, this._parent)
- }
- remove() {
- this._parent.slideUp()
- const removed = $.Event(Event.REMOVED)
- this._element.trigger(removed, this._parent)
- }
- toggle() {
- if (this._parent.hasClass(ClassName.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(){
- $(this).addClass(ClassName.MAXIMIZED)
- $('html').addClass(ClassName.MAXIMIZED)
- if ($(this).hasClass(ClassName.COLLAPSED)) {
- $(this).addClass(ClassName.WAS_COLLAPSED)
- }
- $(this).dequeue()
- })
- const maximized = $.Event(Event.MAXIMIZED)
- this._element.trigger(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(){
- $(this).removeClass(ClassName.MAXIMIZED)
- $('html').removeClass(ClassName.MAXIMIZED)
- $(this).css({
- 'height': 'inherit',
- 'width': 'inherit'
- })
- if ($(this).hasClass(ClassName.WAS_COLLAPSED)) {
- $(this).removeClass(ClassName.WAS_COLLAPSED)
- }
- $(this).dequeue()
- })
- const MINIMIZED = $.Event(Event.MINIMIZED)
- this._element.trigger(MINIMIZED, this._parent)
- }
- toggleMaximize() {
- if (this._parent.hasClass(ClassName.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
- }
- return CardWidget
- })(jQuery)
- export default CardWidget
|