Untuk support seputar bug dan masalah eror harap dilaporkan kepada developer agar segera diperbaiki. Kerusakan tema dikarenakan custom yang dilakukan pengguna tidak dilayani perbaikannya

Berikut adalah alternatif kontak yang dapat digunakan untuk menghubungi developer yayun 0838-1525-1385 yayun@ciuss.com facebook.com/ciussgw ciuss.com /*! * jquery-confirm v3.3.4 (http://craftpip.github.io/jquery-confirm/) * Author: Boniface Pereira * Website: www.craftpip.com * Contact: hey@craftpip.com * * Copyright 2013-2019 jquery-confirm * Licensed under MIT (https://github.com/craftpip/jquery-confirm/blob/master/LICENSE) */ /** * UMD (Universal Module Definition) to support CommonJS, AMD and browser * Thanks to https://github.com/umdjs/umd */ (function(factory){ if(typeof define === 'function' && define.amd){ // AMD. Register as an anonymous module. define(['jquery'], factory); }else if(typeof module === 'object' && module.exports){ // Node/CommonJS module.exports = function(root, jQuery){ if(jQuery === undefined){ // require('jQuery') returns a factory that requires window to // build a jQuery instance, we normalize how we use modules // that require this pattern but the window provided is a noop // if it's defined (how jquery works) if(typeof window !== 'undefined'){ jQuery = require('jquery'); } else{ jQuery = require('jquery')(root); } } factory(jQuery); return jQuery; }; }else{ // Browser globals factory(jQuery); } }(function($){ "use strict"; // locally assign window var w = window; // w.jconfirm // w.Jconfirm; $.fn.confirm = function(options, option2){ if(typeof options === 'undefined') options = {}; if(typeof options === 'string'){ options = { content: options, title: (option2) ? option2 : false }; } /* * Alias of $.confirm to emulate native confirm() */ $(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, {}, w.jconfirm.pluginDefaults.defaultButtons, (w.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, {}, w.jconfirm.pluginDefaults.defaultButtons, (w.jconfirm.defaults || {}).defaultButtons || {}); options['buttons'] = buttons; } /* * Alias of jconfirm */ return w.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, {}, w.jconfirm.pluginDefaults.defaultButtons, (w.jconfirm.defaults || {}).defaultButtons || {}); var firstBtn = Object.keys(buttons)[0]; options['buttons'][firstBtn] = buttons[firstBtn]; } /* * Alias of jconfirm */ return w.jconfirm(options); }; $.dialog = function(options, option2){ if(typeof options === 'undefined') options = {}; if(typeof options === 'string'){ options = { content: options, title: (option2) ? option2 : false, closeIcon: function(){ // Just close the modal } }; } options['buttons'] = {}; // purge buttons if(typeof options['closeIcon'] === 'undefined'){ // Dialog must have a closeIcon. options['closeIcon'] = function(){ } } /* * Alias of jconfirm */ options.confirmKeys = [13]; return w.jconfirm(options); }; w.jconfirm = function(options){ if(typeof options === 'undefined') options = {}; /* * initial function for calling. */ var pluginOptions = $.extend(true, {}, w.jconfirm.pluginDefaults); if(w.jconfirm.defaults){ pluginOptions = $.extend(true, pluginOptions, w.jconfirm.defaults); } /* * merge options with plugin defaults. */ pluginOptions = $.extend(true, {}, pluginOptions, options); var instance = new w.Jconfirm(pluginOptions); w.jconfirm.instances.push(instance); return instance; }; w.Jconfirm = function(options){ /* * constructor function Jconfirm, * options = user options. */ $.extend(this, options); this._init(); }; w.Jconfirm.prototype = { _init: function(){ var that = this; if(!w.jconfirm.instances.length) w.jconfirm.lastFocused = $('body').find(':focus'); this._id = Math.round(Math.random() * 99999); /** * contentParsed maintains the contents for $content, before it is put in DOM */ this.contentParsed = $(document.createElement('div')); if(!this.lazyOpen){ setTimeout(function(){ that.open(); }, 0); } }, _buildHTML: function(){ var that = this; // prefix the animation string and store in animationParsed 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); /* * Append html. */ 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.$content.css(this._getCSS(this.animationSpeed, this.animationBounce)); this.$btnc = this.$el.find('.jconfirm-buttons'); this.$scrollPane = this.$el.find('.jconfirm-scrollpane'); that.setStartingPoint(); // for loading content via URL 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.setContent(); that._updateContentMaxHeight(); that.setTitle(); that.setIcon(); if(typeof that.onContentReady === 'function') that.onContentReady(); } // start countdown after content has loaded. if(that.autoClose) that._startCountDown(); }).then(function(){ that._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'; // parse what animation and store where. open or close? 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; // this.$body.css(this._getCSS(this.animationSpeed, this.animationBounce)); }, 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'){ //most browsers except IE before #9 return pageYOffset; } else{ var B = document.body; //IE 'quirks' var D = document.documentElement; //IE with doctype 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){ // Commented out to prevent scroll to top when updating the content // (for example when using ajax in forms in content) // 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){ // Ignore propagated clicks if(!that.boxClicked){ // Background clicked /* If backgroundDismiss is a function and its return value is truthy proceed to close the modal. */ 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; /* * Settings up buttons */ 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 = $('') .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'); }; /* Buttons are prefixed with $_ or $$ for quick access */ 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){ /* in case when no buttons are present & closeIcon is null, closeIcon is set to true, set closeIcon to true to explicitly tell to hide the close icon */ this.closeIcon = true; } if(this.closeIcon){ if(this.closeIconClass){ // user requires a custom class. var closeHtml = ''; 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 ? '' : ''); 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 is ajax loading via promise 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 = $(' (' + seconds + ')') .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){ // very necessary keys. 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'; } // only trust alphabets with this. var initial = String.fromCharCode(key); if(/^[A-z0-9]+$/.test(initial)) return initial.toLowerCase(); else return false; }, reactOnKey: function(e){ var that = this; /* Prevent keyup event if the dialog is not last! */ var a = $('.jconfirm'); if(a.eq(a.length - 1)[0] !== this.$el[0]) return false; var key = e.which; /* Do not react if Enter or Space is pressed on input elements */ if(this.$content.find(':input').is(':focus') && /13|32/.test(key)) return false; var keyChar = this._getKey(key); // If esc is pressed 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'); } } } // check if any button is listening to this key. $.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(); /* unbind the window resize & keyup event. */ $(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 = w.jconfirm.instances; var i = w.jconfirm.instances.length - 1; for(i; i >= 0; i--){ if(w.jconfirm.instances[i]._id === that._id){ w.jconfirm.instances.splice(i, 1); } } // Focusing a element, scrolls automatically to that element. // no instances should be open, lastFocused should be true, the lastFocused element must exists in DOM if(!w.jconfirm.instances.length){ if(that.scrollToPreviousElement && w.jconfirm.lastFocused && w.jconfirm.lastFocused.length && $.contains(document, w.jconfirm.lastFocused[0])){ var $lf = w.jconfirm.lastFocused; if(that.scrollToPreviousElementAnimate){ var st = $(window).scrollTop(); var ot = w.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(){ // gracefully scroll and then focus. $lf.focus(); }); }else{ // the element to be focused is already in view. $lf.focus(); } }else{ $lf.focus(); } w.jconfirm.lastFocused = false; } } if(typeof that.onDestroy === 'function') that.onDestroy(); }, closeTimer * 0.40); }, 50); return true; }, open: function(){ if(this.isOpen()) return false; // var that = this; this._buildHTML(); this._bindEvents(); this._open(); return true; }, setStartingPoint: function(){ var el = false; if(this.animateFromElement !== true && this.animateFromElement){ el = this.animateFromElement; w.jconfirm.lastClicked = false; }else if(w.jconfirm.lastClicked && this.animateFromElement === true){ el = w.jconfirm.lastClicked; w.jconfirm.lastClicked = false; }else{ return false; } if(!el) return false; var offset = el.offset(); var iTop = el.outerHeight() / 2; var iLeft = el.outerWidth() / 2; // placing position of jconfirm modal in center of clicked element iTop -= this.$jconfirmBox.outerHeight() / 2; iLeft -= this.$jconfirmBox.outerWidth() / 2; // absolute position on screen var sourceTop = offset.top + iTop; sourceTop = sourceTop - this._scrollTop(); var sourceLeft = offset.left + iLeft; // window halved 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; // Check if the element is inside the viewable window. 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.parent().length === 0; }, isOpen: function(){ return !this.isClosed(); }, toggle: function(){ if(!this.isOpen()) this.open(); else this.close(); } }; w.jconfirm.instances = []; w.jconfirm.lastFocused = false; w.jconfirm.pluginDefaults = { template: '' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '' + '
' + '
' + '
' + '
' + '
' + '
' + '
', title: 'Hello', titleClass: '', type: 'default', typeAnimated: true, draggable: true, dragWindowGap: 15, dragWindowBorder: true, animateFromElement: true, /** * @deprecated */ 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(){ } }; /** * This refers to the issue #241 and #246 * * Problem: * Button A is clicked (keydown) using the Keyboard ENTER key * A opens the jconfirm modal B, * B has registered ENTER key for one of its button C * A is released (keyup), B gets the keyup event and triggers C. * * Solution: * Register a global keydown event, that tells jconfirm if the keydown originated inside jconfirm */ 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; }); w.jconfirm.lastClicked = false; $(document).on('mousedown', 'button, a, [jc-source]', function(){ w.jconfirm.lastClicked = $(this); }); }));

Flight Crew International (FCI) is an established and world-class provider of skilled aviation personnel. See below for more information on our services.

WE ARE GLOBAL AVIATION RECRUITMENT EXPERTS

With over 20 years of aviation recruitment and crew leasing experience, FCI has a proven track record in effectively and promptly filling aviation jobs with clients worldwide.

With an ever-growing customer base, we are one of the fastest growing providers of HR Solutions and skilled personnel to the global aviation industry.


GET IN TOUCH

COMPREHENSIVE HR SOLUTIONS

We improve our clients’ profitability and operational efficiency by offering comprehensive HR Solutions, including:

  • Aviation Recruitment
  • Crew Leasing (Contract Crews)
  • Crew Training
  • Ferry & Test Flight Services
  • Strategic & Tactical Consulting
  • Payroll Processing
  • Insurance & Worker’s Compensation


CONTACT US