| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113 |
- /*!
- * jquery-confirm v3.3.2 (http://craftpip.github.io/jquery-confirm/)
- * Author: Boniface Pereira
- * Website: www.craftpip.com
- * Contact: hey@craftpip.com
- *
- * Copyright 2013-2017 jquery-confirm
- * Licensed under MIT (https://github.com/craftpip/jquery-confirm/blob/master/LICENSE)
- */
- if ( typeof jQuery === 'undefined' ) {
- throw new Error( 'jquery-confirm requires jQuery' );
- }
- var jconfirm, Jconfirm;
- ( function( $, window ) {
- $.fn.confirm = function( options, option2 ) {
- if ( typeof options === 'undefined' ) {
- options = {};
- }
- if ( typeof options === 'string' ) {
- options = { content: options, title: ( option2 ) ? option2 : false };
- }
- $( this ).each( function() {
- var $this = $( this );
- if ( $this.attr( 'jc-attached' ) ) {
- console.warn( 'jConfirm has already been attached to this element ', $this[ 0 ] );
- return;
- }
- $this.on( 'click', function( e ) {
- e.preventDefault();
- var jcOption = $.extend( {}, options );
- if ( $this.attr( 'data-title' ) ) {
- jcOption.title = $this.attr( 'data-title' );
- }
- if ( $this.attr( 'data-content' ) ) {
- jcOption.content = $this.attr( 'data-content' );
- }
- if ( typeof jcOption.buttons == 'undefined' ) {
- jcOption.buttons = {};
- }
- jcOption[ '$target' ] = $this;
- if ( $this.attr( 'href' ) && Object.keys( jcOption.buttons ).length == 0 ) {
- var buttons = $.extend( true, {}, jconfirm.pluginDefaults.defaultButtons, ( jconfirm.defaults || {} ).defaultButtons || {} );
- var firstBtn = Object.keys( buttons )[ 0 ];
- jcOption.buttons = buttons;
- jcOption.buttons[ firstBtn ].action = function() {
- location.href = $this.attr( 'href' );
- };
- }
- jcOption.closeIcon = false;
- var instance = $.confirm( jcOption );
- } );
- $this.attr( 'jc-attached', true );
- } );
- return $( this );
- };
- $.confirm = function( options, option2 ) {
- if ( typeof options === 'undefined' ) {
- options = {};
- }
- if ( typeof options === 'string' ) {
- options = { content: options, title: ( option2 ) ? option2 : false };
- }
- var putDefaultButtons = !( options.buttons == false );
- if ( typeof options.buttons != 'object' ) {
- options.buttons = {};
- }
- if ( Object.keys( options.buttons ).length == 0 && putDefaultButtons ) {
- var buttons = $.extend( true, {}, jconfirm.pluginDefaults.defaultButtons, ( jconfirm.defaults || {} ).defaultButtons || {} );
- options.buttons = buttons;
- }
- return jconfirm( options );
- };
- $.alert = function( options, option2 ) {
- if ( typeof options === 'undefined' ) {
- options = {};
- }
- if ( typeof options === 'string' ) {
- options = { content: options, title: ( option2 ) ? option2 : false };
- }
- var putDefaultButtons = !( options.buttons == false );
- if ( typeof options.buttons != 'object' ) {
- options.buttons = {};
- }
- if ( Object.keys( options.buttons ).length == 0 && putDefaultButtons ) {
- var buttons = $.extend( true, {}, jconfirm.pluginDefaults.defaultButtons, ( jconfirm.defaults || {} ).defaultButtons || {} );
- var firstBtn = Object.keys( buttons )[ 0 ];
- options.buttons[ firstBtn ] = buttons[ firstBtn ];
- }
- return jconfirm( options );
- };
- $.dialog = function( options, option2 ) {
- if ( typeof options === 'undefined' ) {
- options = {};
- }
- if ( typeof options === 'string' ) {
- options = {
- content: options, title: ( option2 ) ? option2 : false, closeIcon: function() {
- },
- };
- }
- options.buttons = {};
- if ( typeof options.closeIcon == 'undefined' ) {
- options.closeIcon = function() {
- };
- }
- options.confirmKeys = [ 13 ];
- return jconfirm( options );
- };
- jconfirm = function( options ) {
- if ( typeof options === 'undefined' ) {
- options = {};
- }
- var pluginOptions = $.extend( true, {}, jconfirm.pluginDefaults );
- if ( jconfirm.defaults ) {
- pluginOptions = $.extend( true, pluginOptions, jconfirm.defaults );
- }
- pluginOptions = $.extend( true, {}, pluginOptions, options );
- var instance = new Jconfirm( pluginOptions );
- jconfirm.instances.push( instance );
- return instance;
- };
- Jconfirm = function( options ) {
- $.extend( this, options );
- this._init();
- };
- Jconfirm.prototype = {
- _init: function() {
- var that = this;
- if ( !jconfirm.instances.length ) {
- jconfirm.lastFocused = $( 'body' ).find( ':focus' );
- }
- this._id = Math.round( Math.random() * 99999 );
- this.contentParsed = $( document.createElement( 'div' ) );
- if ( !this.lazyOpen ) {
- setTimeout( function() {
- that.open();
- }, 0 );
- }
- }, _buildHTML: function() {
- var that = this;
- this._parseAnimation( this.animation, 'o' );
- this._parseAnimation( this.closeAnimation, 'c' );
- this._parseBgDismissAnimation( this.backgroundDismissAnimation );
- this._parseColumnClass( this.columnClass );
- this._parseTheme( this.theme );
- this._parseType( this.type );
- var template = $( this.template );
- template.find( '.jconfirm-box' ).addClass( this.animationParsed ).addClass( this.backgroundDismissAnimationParsed ).addClass( this.typeParsed );
- if ( this.typeAnimated ) {
- template.find( '.jconfirm-box' ).addClass( 'jconfirm-type-animated' );
- }
- if ( this.useBootstrap ) {
- template.find( '.jc-bs3-row' ).addClass( this.bootstrapClasses.row );
- template.find( '.jc-bs3-row' )
- .addClass( 'justify-content-md-center justify-content-sm-center justify-content-xs-center justify-content-lg-center' );
- template.find( '.jconfirm-box-container' ).addClass( this.columnClassParsed );
- if ( this.containerFluid ) {
- template.find( '.jc-bs3-container' ).addClass( this.bootstrapClasses.containerFluid );
- }
- else {
- template.find( '.jc-bs3-container' ).addClass( this.bootstrapClasses.container );
- }
- }
- else {
- template.find( '.jconfirm-box' ).css( 'width', this.boxWidth );
- }
- if ( this.titleClass ) {
- template.find( '.jconfirm-title-c' ).addClass( this.titleClass );
- }
- template.addClass( this.themeParsed );
- var ariaLabel = 'jconfirm-box' + this._id;
- template.find( '.jconfirm-box' ).attr( 'aria-labelledby', ariaLabel ).attr( 'tabindex', - 1 );
- template.find( '.jconfirm-content' ).attr( 'id', ariaLabel );
- if ( this.bgOpacity !== null ) {
- template.find( '.jconfirm-bg' ).css( 'opacity', this.bgOpacity );
- }
- if ( this.rtl ) {
- template.addClass( 'jconfirm-rtl' );
- }
- this.$el = template.appendTo( this.container );
- this.$jconfirmBoxContainer = this.$el.find( '.jconfirm-box-container' );
- this.$jconfirmBox = this.$body = this.$el.find( '.jconfirm-box' );
- this.$jconfirmBg = this.$el.find( '.jconfirm-bg' );
- this.$title = this.$el.find( '.jconfirm-title' );
- this.$titleContainer = this.$el.find( '.jconfirm-title-c' );
- this.$content = this.$el.find( 'div.jconfirm-content' );
- this.$contentPane = this.$el.find( '.jconfirm-content-pane' );
- this.$icon = this.$el.find( '.jconfirm-icon-c' );
- this.$closeIcon = this.$el.find( '.jconfirm-closeIcon' );
- this.$holder = this.$el.find( '.jconfirm-holder' );
- this.$btnc = this.$el.find( '.jconfirm-buttons' );
- this.$scrollPane = this.$el.find( '.jconfirm-scrollpane' );
- that.setStartingPoint();
- this._contentReady = $.Deferred();
- this._modalReady = $.Deferred();
- this.$holder.css( { 'padding-top': this.offsetTop, 'padding-bottom': this.offsetBottom } );
- this.setTitle();
- this.setIcon();
- this._setButtons();
- this._parseContent();
- this.initDraggable();
- if ( this.isAjax ) {
- this.showLoading( false );
- }
- $.when( this._contentReady, this._modalReady ).then( function() {
- if ( that.isAjaxLoading ) {
- setTimeout( function() {
- that.isAjaxLoading = false;
- that.setContent();
- that.setTitle();
- that.setIcon();
- setTimeout( function() {
- that.hideLoading( false );
- that._updateContentMaxHeight();
- }, 100 );
- if ( typeof that.onContentReady === 'function' ) {
- that.onContentReady();
- }
- }, 50 );
- }
- else {
- that._updateContentMaxHeight();
- that.setTitle();
- that.setIcon();
- if ( typeof that.onContentReady === 'function' ) {
- that.onContentReady();
- }
- }
- if ( that.autoClose ) {
- that._startCountDown();
- }
- } );
- this._watchContent();
- if ( this.animation === 'none' ) {
- this.animationSpeed = 1;
- this.animationBounce = 1;
- }
- this.$body.css( this._getCSS( this.animationSpeed, this.animationBounce ) );
- this.$contentPane.css( this._getCSS( this.animationSpeed, 1 ) );
- this.$jconfirmBg.css( this._getCSS( this.animationSpeed, 1 ) );
- this.$jconfirmBoxContainer.css( this._getCSS( this.animationSpeed, 1 ) );
- }, _typePrefix: 'jconfirm-type-', typeParsed: '', _parseType: function( type ) {
- this.typeParsed = this._typePrefix + type;
- }, setType: function( type ) {
- var oldClass = this.typeParsed;
- this._parseType( type );
- this.$jconfirmBox.removeClass( oldClass ).addClass( this.typeParsed );
- }, themeParsed: '', _themePrefix: 'jconfirm-', setTheme: function( theme ) {
- var previous = this.theme;
- this.theme = theme || this.theme;
- this._parseTheme( this.theme );
- if ( previous ) {
- this.$el.removeClass( previous );
- }
- this.$el.addClass( this.themeParsed );
- this.theme = theme;
- }, _parseTheme: function( theme ) {
- var that = this;
- theme = theme.split( ',' );
- $.each( theme, function( k, a ) {
- if ( a.indexOf( that._themePrefix ) === - 1 ) {
- theme[ k ] = that._themePrefix + $.trim( a );
- }
- } );
- this.themeParsed = theme.join( ' ' ).toLowerCase();
- }, backgroundDismissAnimationParsed: '', _bgDismissPrefix: 'jconfirm-hilight-', _parseBgDismissAnimation: function( bgDismissAnimation ) {
- var animation = bgDismissAnimation.split( ',' );
- var that = this;
- $.each( animation, function( k, a ) {
- if ( a.indexOf( that._bgDismissPrefix ) === - 1 ) {
- animation[ k ] = that._bgDismissPrefix + $.trim( a );
- }
- } );
- this.backgroundDismissAnimationParsed = animation.join( ' ' ).toLowerCase();
- }, animationParsed: '', closeAnimationParsed: '', _animationPrefix: 'jconfirm-animation-', setAnimation: function( animation ) {
- this.animation = animation || this.animation;
- this._parseAnimation( this.animation, 'o' );
- }, _parseAnimation: function( animation, which ) {
- which = which || 'o';
- var animations = animation.split( ',' );
- var that = this;
- $.each( animations, function( k, a ) {
- if ( a.indexOf( that._animationPrefix ) === - 1 ) {
- animations[ k ] = that._animationPrefix + $.trim( a );
- }
- } );
- var a_string = animations.join( ' ' ).toLowerCase();
- if ( which === 'o' ) {
- this.animationParsed = a_string;
- }
- else {
- this.closeAnimationParsed = a_string;
- }
- return a_string;
- }, setCloseAnimation: function( closeAnimation ) {
- this.closeAnimation = closeAnimation || this.closeAnimation;
- this._parseAnimation( this.closeAnimation, 'c' );
- }, setAnimationSpeed: function( speed ) {
- this.animationSpeed = speed || this.animationSpeed;
- }, columnClassParsed: '', setColumnClass: function( colClass ) {
- if ( !this.useBootstrap ) {
- console.warn( 'cannot set columnClass, useBootstrap is set to false' );
- return;
- }
- this.columnClass = colClass || this.columnClass;
- this._parseColumnClass( this.columnClass );
- this.$jconfirmBoxContainer.addClass( this.columnClassParsed );
- }, _updateContentMaxHeight: function() {
- var height = $( window ).height() - ( this.$jconfirmBox.outerHeight() - this.$contentPane.outerHeight() ) - ( this.offsetTop + this.offsetBottom );
- this.$contentPane.css( { 'max-height': height + 'px' } );
- }, setBoxWidth: function( width ) {
- if ( this.useBootstrap ) {
- console.warn( 'cannot set boxWidth, useBootstrap is set to true' );
- return;
- }
- this.boxWidth = width;
- this.$jconfirmBox.css( 'width', width );
- }, _parseColumnClass: function( colClass ) {
- colClass = colClass.toLowerCase();
- var p;
- switch ( colClass ) {
- case'xl':
- case'xlarge':
- p = 'col-md-12';
- break;
- case'l':
- case'large':
- p = 'col-md-8 col-md-offset-2';
- break;
- case'm':
- case'medium':
- p = 'col-md-6 col-md-offset-3';
- break;
- case's':
- case'small':
- p = 'col-md-4 col-md-offset-4';
- break;
- case'xs':
- case'xsmall':
- p = 'col-md-2 col-md-offset-5';
- break;
- default:
- p = colClass;
- }
- this.columnClassParsed = p;
- }, initDraggable: function() {
- var that = this;
- var $t = this.$titleContainer;
- this.resetDrag();
- if ( this.draggable ) {
- $t.on( 'mousedown', function( e ) {
- $t.addClass( 'jconfirm-hand' );
- that.mouseX = e.clientX;
- that.mouseY = e.clientY;
- that.isDrag = true;
- } );
- $( window ).on( 'mousemove.' + this._id, function( e ) {
- if ( that.isDrag ) {
- that.movingX = e.clientX - that.mouseX + that.initialX;
- that.movingY = e.clientY - that.mouseY + that.initialY;
- that.setDrag();
- }
- } );
- $( window ).on( 'mouseup.' + this._id, function() {
- $t.removeClass( 'jconfirm-hand' );
- if ( that.isDrag ) {
- that.isDrag = false;
- that.initialX = that.movingX;
- that.initialY = that.movingY;
- }
- } );
- }
- }, resetDrag: function() {
- this.isDrag = false;
- this.initialX = 0;
- this.initialY = 0;
- this.movingX = 0;
- this.movingY = 0;
- this.mouseX = 0;
- this.mouseY = 0;
- this.$jconfirmBoxContainer.css( 'transform', 'translate(' + 0 + 'px, ' + 0 + 'px)' );
- }, setDrag: function() {
- if ( !this.draggable ) {
- return;
- }
- this.alignMiddle = false;
- var boxWidth = this.$jconfirmBox.outerWidth();
- var boxHeight = this.$jconfirmBox.outerHeight();
- var windowWidth = $( window ).width();
- var windowHeight = $( window ).height();
- var that = this;
- var dragUpdate = 1;
- if ( that.movingX % dragUpdate === 0 || that.movingY % dragUpdate === 0 ) {
- if ( that.dragWindowBorder ) {
- var leftDistance = ( windowWidth / 2 ) - boxWidth / 2;
- var topDistance = ( windowHeight / 2 ) - boxHeight / 2;
- topDistance -= that.dragWindowGap;
- leftDistance -= that.dragWindowGap;
- if ( leftDistance + that.movingX < 0 ) {
- that.movingX = - leftDistance;
- }
- else {
- if ( leftDistance - that.movingX < 0 ) {
- that.movingX = leftDistance;
- }
- }
- if ( topDistance + that.movingY < 0 ) {
- that.movingY = - topDistance;
- }
- else {
- if ( topDistance - that.movingY < 0 ) {
- that.movingY = topDistance;
- }
- }
- }
- that.$jconfirmBoxContainer.css( 'transform', 'translate(' + that.movingX + 'px, ' + that.movingY + 'px)' );
- }
- }, _scrollTop: function() {
- if ( typeof pageYOffset !== 'undefined' ) {
- return pageYOffset;
- }
- else {
- var B = document.body;
- var D = document.documentElement;
- D = ( D.clientHeight ) ? D : B;
- return D.scrollTop;
- }
- }, _watchContent: function() {
- var that = this;
- if ( this._timer ) {
- clearInterval( this._timer );
- }
- var prevContentHeight = 0;
- this._timer = setInterval( function() {
- if ( that.smoothContent ) {
- var contentHeight = that.$content.outerHeight() || 0;
- if ( contentHeight !== prevContentHeight ) {
- that.$contentPane.css( { height: contentHeight } ).scrollTop( 0 );
- prevContentHeight = contentHeight;
- }
- var wh = $( window ).height();
- var total = that.offsetTop + that.offsetBottom + that.$jconfirmBox.height() - that.$contentPane.height() + that.$content.height();
- if ( total < wh ) {
- that.$contentPane.addClass( 'no-scroll' );
- }
- else {
- that.$contentPane.removeClass( 'no-scroll' );
- }
- }
- }, this.watchInterval );
- }, _overflowClass: 'jconfirm-overflow', _hilightAnimating: false, highlight: function() {
- this.hiLightModal();
- }, hiLightModal: function() {
- var that = this;
- if ( this._hilightAnimating ) {
- return;
- }
- that.$body.addClass( 'hilight' );
- var duration = parseFloat( that.$body.css( 'animation-duration' ) ) || 2;
- this._hilightAnimating = true;
- setTimeout( function() {
- that._hilightAnimating = false;
- that.$body.removeClass( 'hilight' );
- }, duration * 1000 );
- }, _bindEvents: function() {
- var that = this;
- this.boxClicked = false;
- this.$scrollPane.click( function( e ) {
- if ( !that.boxClicked ) {
- var buttonName = false;
- var shouldClose = false;
- var str;
- if ( typeof that.backgroundDismiss == 'function' ) {
- str = that.backgroundDismiss();
- }
- else {
- str = that.backgroundDismiss;
- }
- if ( typeof str == 'string' && typeof that.buttons[ str ] != 'undefined' ) {
- buttonName = str;
- shouldClose = false;
- }
- else {
- if ( typeof str == 'undefined' || !!( str ) == true ) {
- shouldClose = true;
- }
- else {
- shouldClose = false;
- }
- }
- if ( buttonName ) {
- var btnResponse = that.buttons[ buttonName ].action.apply( that );
- shouldClose = ( typeof btnResponse == 'undefined' ) || !!( btnResponse );
- }
- if ( shouldClose ) {
- that.close();
- }
- else {
- that.hiLightModal();
- }
- }
- that.boxClicked = false;
- } );
- this.$jconfirmBox.click( function( e ) {
- that.boxClicked = true;
- } );
- var isKeyDown = false;
- $( window ).on( 'jcKeyDown.' + that._id, function( e ) {
- if ( !isKeyDown ) {
- isKeyDown = true;
- }
- } );
- $( window ).on( 'keyup.' + that._id, function( e ) {
- if ( isKeyDown ) {
- that.reactOnKey( e );
- isKeyDown = false;
- }
- } );
- $( window ).on( 'resize.' + this._id, function() {
- that._updateContentMaxHeight();
- setTimeout( function() {
- that.resetDrag();
- }, 100 );
- } );
- }, _cubic_bezier: '0.36, 0.55, 0.19', _getCSS: function( speed, bounce ) {
- return {
- '-webkit-transition-duration': speed / 1000 + 's',
- 'transition-duration': speed / 1000 + 's',
- '-webkit-transition-timing-function': 'cubic-bezier(' + this._cubic_bezier + ', ' + bounce + ')',
- 'transition-timing-function': 'cubic-bezier(' + this._cubic_bezier + ', ' + bounce + ')',
- };
- }, _setButtons: function() {
- var that = this;
- var total_buttons = 0;
- if ( typeof this.buttons !== 'object' ) {
- this.buttons = {};
- }
- $.each( this.buttons, function( key, button ) {
- total_buttons += 1;
- if ( typeof button === 'function' ) {
- that.buttons[ key ] = button = { action: button };
- }
- that.buttons[ key ].text = button.text || key;
- that.buttons[ key ].btnClass = button.btnClass || 'btn-default';
- that.buttons[ key ].action = button.action || function() {
- };
- that.buttons[ key ].keys = button.keys || [];
- that.buttons[ key ].isHidden = button.isHidden || false;
- that.buttons[ key ].isDisabled = button.isDisabled || false;
- $.each( that.buttons[ key ].keys, function( i, a ) {
- that.buttons[ key ].keys[ i ] = a.toLowerCase();
- } );
- var button_element = $( '<button type="button" class="btn"></button>' ).html( that.buttons[ key ].text )
- .addClass( that.buttons[ key ].btnClass )
- .prop( 'disabled', that.buttons[ key ].isDisabled )
- .css( 'display', that.buttons[ key ].isHidden ? 'none' : '' )
- .click( function( e ) {
- e.preventDefault();
- var res = that.buttons[ key ].action.apply( that, [ that.buttons[ key ] ] );
- that.onAction.apply( that, [ key,
- that.buttons[ key ] ] );
- that._stopCountDown();
- if ( typeof res === 'undefined' || res ) {
- that.close();
- }
- } );
- that.buttons[ key ].el = button_element;
- that.buttons[ key ].setText = function( text ) {
- button_element.html( text );
- };
- that.buttons[ key ].addClass = function( className ) {
- button_element.addClass( className );
- };
- that.buttons[ key ].removeClass = function( className ) {
- button_element.removeClass( className );
- };
- that.buttons[ key ].disable = function() {
- that.buttons[ key ].isDisabled = true;
- button_element.prop( 'disabled', true );
- };
- that.buttons[ key ].enable = function() {
- that.buttons[ key ].isDisabled = false;
- button_element.prop( 'disabled', false );
- };
- that.buttons[ key ].show = function() {
- that.buttons[ key ].isHidden = false;
- button_element.css( 'display', '' );
- };
- that.buttons[ key ].hide = function() {
- that.buttons[ key ].isHidden = true;
- button_element.css( 'display', 'none' );
- };
- that[ '$_' + key ] = that[ '$$' + key ] = button_element;
- that.$btnc.append( button_element );
- } );
- if ( total_buttons === 0 ) {
- this.$btnc.hide();
- }
- if ( this.closeIcon === null && total_buttons === 0 ) {
- this.closeIcon = true;
- }
- if ( this.closeIcon ) {
- if ( this.closeIconClass ) {
- var closeHtml = '<i class="' + this.closeIconClass + '"></i>';
- this.$closeIcon.html( closeHtml );
- }
- this.$closeIcon.click( function( e ) {
- e.preventDefault();
- var buttonName = false;
- var shouldClose = false;
- var str;
- if ( typeof that.closeIcon == 'function' ) {
- str = that.closeIcon();
- }
- else {
- str = that.closeIcon;
- }
- if ( typeof str == 'string' && typeof that.buttons[ str ] != 'undefined' ) {
- buttonName = str;
- shouldClose = false;
- }
- else {
- if ( typeof str == 'undefined' || !!( str ) == true ) {
- shouldClose = true;
- }
- else {
- shouldClose = false;
- }
- }
- if ( buttonName ) {
- var btnResponse = that.buttons[ buttonName ].action.apply( that );
- shouldClose = ( typeof btnResponse == 'undefined' ) || !!( btnResponse );
- }
- if ( shouldClose ) {
- that.close();
- }
- } );
- this.$closeIcon.show();
- }
- else {
- this.$closeIcon.hide();
- }
- }, setTitle: function( string, force ) {
- force = force || false;
- if ( typeof string !== 'undefined' ) {
- if ( typeof string == 'string' ) {
- this.title = string;
- }
- else {
- if ( typeof string == 'function' ) {
- if ( typeof string.promise == 'function' ) {
- console.error( 'Promise was returned from title function, this is not supported.' );
- }
- var response = string();
- if ( typeof response == 'string' ) {
- this.title = response;
- }
- else {
- this.title = false;
- }
- }
- else {
- this.title = false;
- }
- }
- }
- if ( this.isAjaxLoading && !force ) {
- return;
- }
- this.$title.html( this.title || '' );
- this.updateTitleContainer();
- }, setIcon: function( iconClass, force ) {
- force = force || false;
- if ( typeof iconClass !== 'undefined' ) {
- if ( typeof iconClass == 'string' ) {
- this.icon = iconClass;
- }
- else {
- if ( typeof iconClass === 'function' ) {
- var response = iconClass();
- if ( typeof response == 'string' ) {
- this.icon = response;
- }
- else {
- this.icon = false;
- }
- }
- else {
- this.icon = false;
- }
- }
- }
- if ( this.isAjaxLoading && !force ) {
- return;
- }
- this.$icon.html( this.icon ? '<i class="' + this.icon + '"></i>' : '' );
- this.updateTitleContainer();
- }, updateTitleContainer: function() {
- if ( !this.title && !this.icon ) {
- this.$titleContainer.hide();
- }
- else {
- this.$titleContainer.show();
- }
- }, setContentPrepend: function( content, force ) {
- if ( !content ) {
- return;
- }
- this.contentParsed.prepend( content );
- }, setContentAppend: function( content ) {
- if ( !content ) {
- return;
- }
- this.contentParsed.append( content );
- }, setContent: function( content, force ) {
- force = !!force;
- var that = this;
- if ( content ) {
- this.contentParsed.html( '' ).append( content );
- }
- if ( this.isAjaxLoading && !force ) {
- return;
- }
- this.$content.html( '' );
- this.$content.append( this.contentParsed );
- setTimeout( function() {
- that.$body.find( 'input[autofocus]:visible:first' ).focus();
- }, 100 );
- }, loadingSpinner: false, showLoading: function( disableButtons ) {
- this.loadingSpinner = true;
- this.$jconfirmBox.addClass( 'loading' );
- if ( disableButtons ) {
- this.$btnc.find( 'button' ).prop( 'disabled', true );
- }
- }, hideLoading: function( enableButtons ) {
- this.loadingSpinner = false;
- this.$jconfirmBox.removeClass( 'loading' );
- if ( enableButtons ) {
- this.$btnc.find( 'button' ).prop( 'disabled', false );
- }
- }, ajaxResponse: false, contentParsed: '', isAjax: false, isAjaxLoading: false, _parseContent: function() {
- var that = this;
- var e = ' ';
- if ( typeof this.content == 'function' ) {
- var res = this.content.apply( this );
- if ( typeof res == 'string' ) {
- this.content = res;
- }
- else {
- if ( typeof res == 'object' && typeof res.always == 'function' ) {
- this.isAjax = true;
- this.isAjaxLoading = true;
- res.always( function( data, status, xhr ) {
- that.ajaxResponse = { data: data, status: status, xhr: xhr };
- that._contentReady.resolve( data, status, xhr );
- if ( typeof that.contentLoaded == 'function' ) {
- that.contentLoaded( data, status, xhr );
- }
- } );
- this.content = e;
- }
- else {
- this.content = e;
- }
- }
- }
- if ( typeof this.content == 'string' && this.content.substr( 0, 4 ).toLowerCase() === 'url:' ) {
- this.isAjax = true;
- this.isAjaxLoading = true;
- var u = this.content.substring( 4, this.content.length );
- $.get( u ).done( function( html ) {
- that.contentParsed.html( html );
- } ).always( function( data, status, xhr ) {
- that.ajaxResponse = { data: data, status: status, xhr: xhr };
- that._contentReady.resolve( data, status, xhr );
- if ( typeof that.contentLoaded == 'function' ) {
- that.contentLoaded( data, status, xhr );
- }
- } );
- }
- if ( !this.content ) {
- this.content = e;
- }
- if ( !this.isAjax ) {
- this.contentParsed.html( this.content );
- this.setContent();
- that._contentReady.resolve();
- }
- }, _stopCountDown: function() {
- clearInterval( this.autoCloseInterval );
- if ( this.$cd ) {
- this.$cd.remove();
- }
- }, _startCountDown: function() {
- var that = this;
- var opt = this.autoClose.split( '|' );
- if ( opt.length !== 2 ) {
- console.error( 'Invalid option for autoClose. example \'close|10000\'' );
- return false;
- }
- var button_key = opt[ 0 ];
- var time = parseInt( opt[ 1 ] );
- if ( typeof this.buttons[ button_key ] === 'undefined' ) {
- console.error( 'Invalid button key \'' + button_key + '\' for autoClose' );
- return false;
- }
- var seconds = Math.ceil( time / 1000 );
- this.$cd = $( '<span class="countdown"> (' + seconds + ')</span>' ).appendTo( this[ '$_' + button_key ] );
- this.autoCloseInterval = setInterval( function() {
- that.$cd.html( ' (' + ( seconds -= 1 ) + ') ' );
- if ( seconds <= 0 ) {
- that[ '$$' + button_key ].trigger( 'click' );
- that._stopCountDown();
- }
- }, 1000 );
- }, _getKey: function( key ) {
- switch ( key ) {
- case 192:
- return 'tilde';
- case 13:
- return 'enter';
- case 16:
- return 'shift';
- case 9:
- return 'tab';
- case 20:
- return 'capslock';
- case 17:
- return 'ctrl';
- case 91:
- return 'win';
- case 18:
- return 'alt';
- case 27:
- return 'esc';
- case 32:
- return 'space';
- }
- var initial = String.fromCharCode( key );
- if ( /^[A-z0-9]+$/.test( initial ) ) {
- return initial.toLowerCase();
- }
- else {
- return false;
- }
- }, reactOnKey: function( e ) {
- var that = this;
- var a = $( '.jconfirm' );
- if ( a.eq( a.length - 1 )[ 0 ] !== this.$el[ 0 ] ) {
- return false;
- }
- var key = e.which;
- if ( this.$content.find( ':input' ).is( ':focus' ) && /13|32/.test( key ) ) {
- return false;
- }
- var keyChar = this._getKey( key );
- if ( keyChar === 'esc' && this.escapeKey ) {
- if ( this.escapeKey === true ) {
- this.$scrollPane.trigger( 'click' );
- }
- else {
- if ( typeof this.escapeKey === 'string' || typeof this.escapeKey === 'function' ) {
- var buttonKey;
- if ( typeof this.escapeKey === 'function' ) {
- buttonKey = this.escapeKey();
- }
- else {
- buttonKey = this.escapeKey;
- }
- if ( buttonKey ) {
- if ( typeof this.buttons[ buttonKey ] === 'undefined' ) {
- console.warn( 'Invalid escapeKey, no buttons found with key ' + buttonKey );
- }
- else {
- this[ '$_' + buttonKey ].trigger( 'click' );
- }
- }
- }
- }
- }
- $.each( this.buttons, function( key, button ) {
- if ( button.keys.indexOf( keyChar ) != - 1 ) {
- that[ '$_' + key ].trigger( 'click' );
- }
- } );
- }, setDialogCenter: function() {
- console.info( 'setDialogCenter is deprecated, dialogs are centered with CSS3 tables' );
- }, _unwatchContent: function() {
- clearInterval( this._timer );
- }, close: function( onClosePayload ) {
- var that = this;
- if ( typeof this.onClose === 'function' ) {
- this.onClose( onClosePayload );
- }
- this._unwatchContent();
- $( window ).unbind( 'resize.' + this._id );
- $( window ).unbind( 'keyup.' + this._id );
- $( window ).unbind( 'jcKeyDown.' + this._id );
- if ( this.draggable ) {
- $( window ).unbind( 'mousemove.' + this._id );
- $( window ).unbind( 'mouseup.' + this._id );
- this.$titleContainer.unbind( 'mousedown' );
- }
- that.$el.removeClass( that.loadedClass );
- $( 'body' ).removeClass( 'jconfirm-no-scroll-' + that._id );
- that.$jconfirmBoxContainer.removeClass( 'jconfirm-no-transition' );
- setTimeout( function() {
- that.$body.addClass( that.closeAnimationParsed );
- that.$jconfirmBg.addClass( 'jconfirm-bg-h' );
- var closeTimer = ( that.closeAnimation === 'none' ) ? 1 : that.animationSpeed;
- setTimeout( function() {
- that.$el.remove();
- var l = jconfirm.instances;
- var i = jconfirm.instances.length - 1;
- for ( i; i >= 0; i -- ) {
- if ( jconfirm.instances[ i ]._id === that._id ) {
- jconfirm.instances.splice( i, 1 );
- }
- }
- if ( !jconfirm.instances.length ) {
- if ( that.scrollToPreviousElement && jconfirm.lastFocused && jconfirm.lastFocused.length && $.contains( document, jconfirm.lastFocused[ 0 ] ) ) {
- var $lf = jconfirm.lastFocused;
- if ( that.scrollToPreviousElementAnimate ) {
- var st = $( window ).scrollTop();
- var ot = jconfirm.lastFocused.offset().top;
- var wh = $( window ).height();
- if ( !( ot > st && ot < ( st + wh ) ) ) {
- var scrollTo = ( ot - Math.round( ( wh / 3 ) ) );
- $( 'html, body' ).animate( { scrollTop: scrollTo }, that.animationSpeed, 'swing', function() {
- $lf.focus();
- } );
- }
- else {
- $lf.focus();
- }
- }
- else {
- $lf.focus();
- }
- jconfirm.lastFocused = false;
- }
- }
- if ( typeof that.onDestroy === 'function' ) {
- that.onDestroy();
- }
- }, closeTimer * 0.4 );
- }, 50 );
- return true;
- }, open: function() {
- if ( this.isOpen() ) {
- return false;
- }
- this._buildHTML();
- this._bindEvents();
- this._open();
- return true;
- }, setStartingPoint: function() {
- var el = false;
- if ( this.animateFromElement !== true && this.animateFromElement ) {
- el = this.animateFromElement;
- jconfirm.lastClicked = false;
- }
- else {
- if ( jconfirm.lastClicked && this.animateFromElement === true ) {
- el = jconfirm.lastClicked;
- jconfirm.lastClicked = false;
- }
- else {
- return false;
- }
- }
- if ( !el ) {
- return false;
- }
- var offset = el.offset();
- var iTop = el.outerHeight() / 2;
- var iLeft = el.outerWidth() / 2;
- iTop -= this.$jconfirmBox.outerHeight() / 2;
- iLeft -= this.$jconfirmBox.outerWidth() / 2;
- var sourceTop = offset.top + iTop;
- sourceTop = sourceTop - this._scrollTop();
- var sourceLeft = offset.left + iLeft;
- var wh = $( window ).height() / 2;
- var ww = $( window ).width() / 2;
- var targetH = wh - this.$jconfirmBox.outerHeight() / 2;
- var targetW = ww - this.$jconfirmBox.outerWidth() / 2;
- sourceTop -= targetH;
- sourceLeft -= targetW;
- if ( Math.abs( sourceTop ) > wh || Math.abs( sourceLeft ) > ww ) {
- return false;
- }
- this.$jconfirmBoxContainer.css( 'transform', 'translate(' + sourceLeft + 'px, ' + sourceTop + 'px)' );
- }, _open: function() {
- var that = this;
- if ( typeof that.onOpenBefore === 'function' ) {
- that.onOpenBefore();
- }
- this.$body.removeClass( this.animationParsed );
- this.$jconfirmBg.removeClass( 'jconfirm-bg-h' );
- this.$body.focus();
- that.$jconfirmBoxContainer.css( 'transform', 'translate(' + 0 + 'px, ' + 0 + 'px)' );
- setTimeout( function() {
- that.$body.css( that._getCSS( that.animationSpeed, 1 ) );
- that.$body.css( { 'transition-property': that.$body.css( 'transition-property' ) + ', margin' } );
- that.$jconfirmBoxContainer.addClass( 'jconfirm-no-transition' );
- that._modalReady.resolve();
- if ( typeof that.onOpen === 'function' ) {
- that.onOpen();
- }
- that.$el.addClass( that.loadedClass );
- }, this.animationSpeed );
- }, loadedClass: 'jconfirm-open', isClosed: function() {
- return !this.$el || this.$el.css( 'display' ) === '';
- }, isOpen: function() {
- return !this.isClosed();
- }, toggle: function() {
- if ( !this.isOpen() ) {
- this.open();
- }
- else {
- this.close();
- }
- },
- };
- jconfirm.instances = [];
- jconfirm.lastFocused = false;
- jconfirm.pluginDefaults = {
- template: '<div class="jconfirm"><div class="jconfirm-bg jconfirm-bg-h"></div><div class="jconfirm-scrollpane"><div class="jconfirm-row"><div class="jconfirm-cell"><div class="jconfirm-holder"><div class="jc-bs3-container"><div class="jc-bs3-row"><div class="jconfirm-box-container jconfirm-animated"><div class="jconfirm-box" role="dialog" aria-labelledby="labelled" tabindex="-1"><div class="jconfirm-closeIcon">×</div><div class="jconfirm-title-c"><span class="jconfirm-icon-c"></span><span class="jconfirm-title"></span></div><div class="jconfirm-content-pane"><div class="jconfirm-content"></div></div><div class="jconfirm-buttons"></div><div class="jconfirm-clear"></div></div></div></div></div></div></div></div></div></div>',
- title: 'Hello',
- titleClass: '',
- type: 'default',
- typeAnimated: true,
- draggable: true,
- dragWindowGap: 15,
- dragWindowBorder: true,
- animateFromElement: true,
- alignMiddle: true,
- smoothContent: true,
- content: 'Are you sure to continue?',
- buttons: {},
- defaultButtons: {
- ok: {
- action: function() {
- },
- }, close: {
- action: function() {
- },
- },
- },
- contentLoaded: function() {
- },
- icon: '',
- lazyOpen: false,
- bgOpacity: null,
- theme: 'light',
- animation: 'scale',
- closeAnimation: 'scale',
- animationSpeed: 400,
- animationBounce: 1,
- escapeKey: true,
- rtl: false,
- container: 'body',
- containerFluid: false,
- backgroundDismiss: false,
- backgroundDismissAnimation: 'shake',
- autoClose: false,
- closeIcon: null,
- closeIconClass: false,
- watchInterval: 100,
- columnClass: 'col-md-4 col-md-offset-4 col-sm-6 col-sm-offset-3 col-xs-10 col-xs-offset-1',
- boxWidth: '50%',
- scrollToPreviousElement: true,
- scrollToPreviousElementAnimate: true,
- useBootstrap: true,
- offsetTop: 40,
- offsetBottom: 40,
- bootstrapClasses: { container: 'container', containerFluid: 'container-fluid', row: 'row' },
- onContentReady: function() {
- },
- onOpenBefore: function() {
- },
- onOpen: function() {
- },
- onClose: function() {
- },
- onDestroy: function() {
- },
- onAction: function() {
- },
- };
- var keyDown = false;
- $( window ).on( 'keydown', function( e ) {
- if ( !keyDown ) {
- var $target = $( e.target );
- var pass = false;
- if ( $target.closest( '.jconfirm-box' ).length ) {
- pass = true;
- }
- if ( pass ) {
- $( window ).trigger( 'jcKeyDown' );
- }
- keyDown = true;
- }
- } );
- $( window ).on( 'keyup', function() {
- keyDown = false;
- } );
- jconfirm.lastClicked = false;
- $( document ).on( 'mousedown', 'button, a', function() {
- jconfirm.lastClicked = $( this );
- } );
- } )( jQuery, window );
|