// source --> https://www.ubora.io/wp-content/plugins/cookie-law-info/public/js/cookie-law-info-public.js?ver=1.9.1 CLI_ACCEPT_COOKIE_NAME =(typeof CLI_ACCEPT_COOKIE_NAME !== 'undefined' ? CLI_ACCEPT_COOKIE_NAME : 'viewed_cookie_policy'); CLI_PREFERNCE_COOKIE =(typeof CLI_PREFERNCE_COOKIE !== 'undefined' ? CLI_PREFERNCE_COOKIE : 'CookieLawInfoConsent'); CLI_ACCEPT_COOKIE_EXPIRE =(typeof CLI_ACCEPT_COOKIE_EXPIRE !== 'undefined' ? CLI_ACCEPT_COOKIE_EXPIRE : 365); CLI_COOKIEBAR_AS_POPUP=(typeof CLI_COOKIEBAR_AS_POPUP !== 'undefined' ? CLI_COOKIEBAR_AS_POPUP : false); var CLI_Cookie={ set: function (name, value, days) { if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); var expires = "; expires=" + date.toGMTString(); } else var expires = ""; document.cookie = name + "=" + value + expires + "; path=/"; if(days<1) { host_name=window.location.hostname; document.cookie = name + "=" + value + expires + "; path=/; domain=."+host_name+";"; if(host_name.indexOf("www")!=1) { var host_name_withoutwww=host_name.replace('www',''); document.cookie = name + "=" + value + expires + "; path=/; domain="+host_name_withoutwww+";"; } host_name=host_name.substring(host_name.lastIndexOf(".", host_name.lastIndexOf(".")-1)); document.cookie = name + "=" + value + expires + "; path=/; domain="+host_name+";"; } }, read: function (name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1, c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length, c.length); } } return null; }, erase: function (name) { this.set(name, "", -10); }, exists: function (name) { return (this.read(name) !== null); }, getallcookies:function() { var pairs = document.cookie.split(";"); var cookieslist = {}; for (var i = 0; i < pairs.length; i++) { var pair = pairs[i].split("="); cookieslist[(pair[0] + '').trim()] = unescape(pair[1]); } return cookieslist; } } var CLI= { bar_config:{}, showagain_config:{}, allowedCategories:[], js_blocking_enabled: false, set:function(args) { if(typeof JSON.parse !== "function") { console.log("CookieLawInfo requires JSON.parse but your browser doesn't support it"); return; } if(typeof args.settings!=='object') { this.settings = JSON.parse(args.settings); } else { this.settings = args.settings; } this.js_blocking_enabled = Boolean( Cli_Data.js_blocking ); this.settings = args.settings; this.bar_elm = jQuery(this.settings.notify_div_id); this.showagain_elm = jQuery(this.settings.showagain_div_id); this.settingsModal = jQuery('#cliSettingsPopup'); /* buttons */ this.main_button=jQuery('.cli-plugin-main-button'); this.main_link = jQuery('.cli-plugin-main-link'); this.reject_link = jQuery('.cookie_action_close_header_reject'); this.delete_link=jQuery(".cookielawinfo-cookie-delete"); this.settings_button=jQuery('.cli_settings_button'); if(this.settings.cookie_bar_as=='popup') { CLI_COOKIEBAR_AS_POPUP=true; } this.addStyleAttribute(); this.configBar(); this.toggleBar(); this.attachDelete(); this.attachEvents(); this.configButtons(); var cli_hidebar_on_readmore=this.hideBarInReadMoreLink(); if( Boolean( this.settings.scroll_close ) ===true && cli_hidebar_on_readmore===false) { window.addEventListener("scroll",CLI.closeOnScroll, false); } }, hideBarInReadMoreLink:function() { if( Boolean( CLI.settings.button_2_hidebar ) === true && this.main_link.length>0 && this.main_link.hasClass('cli-minimize-bar')) { this.hideHeader(); cliBlocker.cookieBar( false ); this.showagain_elm.slideDown(this.settings.animate_speed_show); return true; } return false; }, attachEvents:function() { jQuery('.cli_action_button').click(function(e){ e.preventDefault(); var elm=jQuery(this); var button_action=elm.attr('data-cli_action'); var open_link=elm[0].hasAttribute("href") && elm.attr("href") != '#' ? true : false; var new_window=false; if(button_action=='accept') { CLI.accept_close(); new_window= Boolean( CLI.settings.button_1_new_win ) ? true : false; }else if(button_action=='reject') { CLI.reject_close(); new_window= Boolean( CLI.settings.button_3_new_win ) ? true : false; } if(open_link) { if(new_window) { window.open(elm.attr("href"),'_blank'); }else { window.location.href =elm.attr("href"); } } }); this.settingsPopUp(); this.settingsTabbedAccordion(); this.toggleUserPreferenceCheckBox(); this.hideCookieBarOnClose(); this.cookieLawInfoRunCallBacks(); }, toggleUserPreferenceCheckBox:function() { jQuery('.cli-user-preference-checkbox').each(function(){ categoryCookie = 'cookielawinfo-'+jQuery(this).attr('data-id'); categoryCookieValue = CLI_Cookie.read(categoryCookie); if( categoryCookieValue == null ) { if(jQuery(this).is(':checked')) { CLI_Cookie.set(categoryCookie,'yes',CLI_ACCEPT_COOKIE_EXPIRE); }else { CLI_Cookie.set(categoryCookie,'no',CLI_ACCEPT_COOKIE_EXPIRE); } } else { if(categoryCookieValue == "yes") { jQuery(this).prop("checked",true); } else { jQuery(this).prop("checked",false); } } }); jQuery('.cli-user-preference-checkbox').click(function(){ var dataID = jQuery(this).attr('data-id'); var currentToggleElm = jQuery('.cli-user-preference-checkbox[data-id='+dataID+']'); if(jQuery(this).is(':checked')) { CLI_Cookie.set('cookielawinfo-'+dataID,'yes',CLI_ACCEPT_COOKIE_EXPIRE); currentToggleElm.prop('checked',true); }else { CLI_Cookie.set('cookielawinfo-'+dataID,'no',CLI_ACCEPT_COOKIE_EXPIRE); currentToggleElm.prop('checked',false); } CLI.checkCategories(); CLI.generateConsent(); }); }, settingsPopUp:function() { jQuery('.cli_settings_button').click(function (e) { e.preventDefault(); CLI.settingsModal.addClass("cli-show").css({'opacity':0}).animate({'opacity':1}); CLI.settingsModal.removeClass('cli-blowup cli-out').addClass("cli-blowup"); jQuery('body').addClass("cli-modal-open"); jQuery(".cli-settings-overlay").addClass("cli-show"); jQuery("#cookie-law-info-bar").css({'opacity':.1}); if(!jQuery('.cli-settings-mobile').is(':visible')) { CLI.settingsModal.find('.cli-nav-link:eq(0)').click(); } }); jQuery('#cliModalClose').click(function(){ CLI.settingsPopUpClose(); }); CLI.settingsModal.click(function(e){ if(!(document.getElementsByClassName('cli-modal-dialog')[0].contains(e.target))) { CLI.settingsPopUpClose(); } }); jQuery('.cli_enable_all_btn').click(function(){ var cli_toggle_btn = jQuery(this); var enable_text = cli_toggle_btn.attr('data-enable-text'); var disable_text= cli_toggle_btn.attr('data-disable-text'); if(cli_toggle_btn.hasClass('cli-enabled')){ CLI.disableAllCookies(); cli_toggle_btn.html(enable_text); } else { CLI.enableAllCookies(); cli_toggle_btn.html(disable_text); } jQuery(this).toggleClass('cli-enabled'); }); this.privacyReadmore(); }, settingsTabbedAccordion:function() { jQuery(".cli-tab-header").on("click", function(e) { if(!(jQuery(e.target).hasClass('cli-slider') || jQuery(e.target).hasClass('cli-user-preference-checkbox'))) { if (jQuery(this).hasClass("cli-tab-active")) { jQuery(this).removeClass("cli-tab-active"); jQuery(this) .siblings(".cli-tab-content") .slideUp(200); } else { jQuery(".cli-tab-header").removeClass("cli-tab-active"); jQuery(this).addClass("cli-tab-active"); jQuery(".cli-tab-content").slideUp(200); jQuery(this) .siblings(".cli-tab-content") .slideDown(200); } } }); }, settingsPopUpClose:function() { this.settingsModal.removeClass('cli-show'); this.settingsModal.addClass('cli-out'); jQuery('body').removeClass("cli-modal-open"); jQuery(".cli-settings-overlay").removeClass("cli-show"); jQuery("#cookie-law-info-bar").css({'opacity':1}); }, privacyReadmore:function() { var el= jQuery('.cli-privacy-content .cli-privacy-content-text'); if( el.length > 0 ) { var clone= el.clone(), originalHtml= clone.html(), originalHeight= el.outerHeight(), Trunc = { addReadmore:function(textBlock) { if(textBlock.html().length > 250) { jQuery('.cli-privacy-readmore').show(); } else { jQuery('.cli-privacy-readmore').hide(); } }, truncateText : function( textBlock ) { var strippedText = jQuery('
').html(textBlock.html()); strippedText.find('table').remove(); textBlock.html(strippedText.html()); currentText = textBlock.text(); if(currentText.trim().length > 250){ var newStr = currentText.substring(0, 250); textBlock.empty().html(newStr).append('...'); } }, replaceText: function ( textBlock, original ){ return textBlock.html(original); } }; Trunc.addReadmore(el); Trunc.truncateText(el); jQuery('a.cli-privacy-readmore').click(function(e){ e.preventDefault(); if(jQuery('.cli-privacy-overview').hasClass('cli-collapsed')) { Trunc.truncateText(el); jQuery('.cli-privacy-overview').removeClass('cli-collapsed'); el.css('height', '100%'); } else { jQuery('.cli-privacy-overview').addClass('cli-collapsed'); Trunc.replaceText(el, originalHtml); } }); } }, attachDelete:function() { this.delete_link.click(function () { CLI_Cookie.erase(CLI_ACCEPT_COOKIE_NAME); for(var k in Cli_Data.nn_cookie_ids) { CLI_Cookie.erase(Cli_Data.nn_cookie_ids[k]); } CLI.generateConsent(); return false; }); }, configButtons:function() { /*[cookie_button] */ this.main_button.css('color',this.settings.button_1_link_colour); if( Boolean( this.settings.button_1_as_button ) ) { this.main_button.css('background-color',this.settings.button_1_button_colour); this.main_button.hover(function () { jQuery(this).css('background-color',CLI.settings.button_1_button_hover); },function (){ jQuery(this).css('background-color',CLI.settings.button_1_button_colour); }); } /* [cookie_link] */ this.main_link.css('color',this.settings.button_2_link_colour); if( Boolean( this.settings.button_2_as_button ) ) { this.main_link.css('background-color',this.settings.button_2_button_colour); this.main_link.hover(function () { jQuery(this).css('background-color',CLI.settings.button_2_button_hover); },function (){ jQuery(this).css('background-color',CLI.settings.button_2_button_colour); }); } /* [cookie_reject] */ this.reject_link.css('color',this.settings.button_3_link_colour); if( Boolean( this.settings.button_3_as_button ) ) { this.reject_link.css('background-color',this.settings.button_3_button_colour); this.reject_link.hover(function () { jQuery(this).css('background-color',CLI.settings.button_3_button_hover); },function () { jQuery(this).css('background-color',CLI.settings.button_3_button_colour); }); } /* [cookie_settings] */ this.settings_button.css('color',this.settings.button_4_link_colour); if( Boolean( this.settings.button_4_as_button ) ) { this.settings_button.css('background-color',this.settings.button_4_button_colour); this.settings_button.hover(function () { jQuery(this).css('background-color',CLI.settings.button_4_button_hover); },function () { jQuery(this).css('background-color',CLI.settings.button_4_button_colour); }); } }, toggleBar:function() { if(CLI_COOKIEBAR_AS_POPUP) { this.barAsPopUp(1); } if(CLI.settings.cookie_bar_as=='widget') { this.barAsWidget(1); } if(!CLI_Cookie.exists(CLI_ACCEPT_COOKIE_NAME)) { this.displayHeader(); }else { this.hideHeader(); } if( Boolean( this.settings.show_once_yn )) { setTimeout(function(){ CLI.close_header(); },CLI.settings.show_once); } if( CLI.js_blocking_enabled === false ) { if( Boolean( Cli_Data.ccpaEnabled ) === true ) { if( Cli_Data.ccpaType === 'ccpa' && Boolean( Cli_Data.ccpaBarEnabled ) === false ) { cliBlocker.cookieBar( false ); } } else { jQuery('.wt-cli-ccpa-opt-out,.wt-cli-ccpa-checkbox,.wt-cli-ccpa-element').remove(); } } this.showagain_elm.click(function (e) { e.preventDefault(); CLI.showagain_elm.slideUp(CLI.settings.animate_speed_hide,function() { CLI.bar_elm.slideDown(CLI.settings.animate_speed_show); if(CLI_COOKIEBAR_AS_POPUP) { CLI.showPopupOverlay(); } }); }); }, configShowAgain:function() { this.showagain_config = { 'background-color': this.settings.background, 'color':this.l1hs(this.settings.text), 'position': 'fixed', 'font-family': this.settings.font_family }; if(Boolean( this.settings.border_on ) ) { var border_to_hide = 'border-' + this.settings.notify_position_vertical; this.showagain_config['border'] = '1px solid ' + this.l1hs(this.settings.border); this.showagain_config[border_to_hide] = 'none'; } var cli_win=jQuery(window); var cli_winw=cli_win.width(); var showagain_x_pos=this.settings.showagain_x_position; if(cli_winw<300) { showagain_x_pos=10; this.showagain_config.width=cli_winw-20; }else { this.showagain_config.width='auto'; } var cli_defw=cli_winw>400 ? 500 : cli_winw-20; if(CLI_COOKIEBAR_AS_POPUP) /* cookie bar as popup */ { var sa_pos=this.settings.popup_showagain_position; var sa_pos_arr=sa_pos.split('-'); if(sa_pos_arr[1]=='left') { this.showagain_config.left=showagain_x_pos; }else if(sa_pos_arr[1]=='right') { this.showagain_config.right=showagain_x_pos; } if(sa_pos_arr[0]=='top') { this.showagain_config.top=0; }else if(sa_pos_arr[0]=='bottom') { this.showagain_config.bottom=0; } this.bar_config['position'] = 'fixed'; }else if(this.settings.cookie_bar_as=='widget') { this.showagain_config.bottom=0; if(this.settings.widget_position=='left') { this.showagain_config.left=showagain_x_pos; }else if(this.settings.widget_position=='right') { this.showagain_config.right=showagain_x_pos; } } else { if(this.settings.notify_position_vertical == "top") { this.showagain_config.top = '0'; } else if(this.settings.notify_position_vertical == "bottom") { this.bar_config['position'] = 'fixed'; this.bar_config['bottom'] = '0'; this.showagain_config.bottom = '0'; } if(this.settings.notify_position_horizontal == "left") { this.showagain_config.left =showagain_x_pos; }else if(this.settings.notify_position_horizontal == "right") { this.showagain_config.right =showagain_x_pos; } } this.showagain_elm.css(this.showagain_config); }, configBar:function() { this.bar_config = { 'background-color':this.settings.background, 'color':this.settings.text, 'font-family':this.settings.font_family }; if(this.settings.notify_position_vertical=="top") { this.bar_config['top'] = '0'; if( Boolean( this.settings.header_fix ) === true) { this.bar_config['position'] = 'fixed'; } }else { this.bar_config['bottom'] = '0'; } this.configShowAgain(); this.bar_elm.css(this.bar_config).hide(); }, l1hs:function(str) { if (str.charAt(0) == "#") { str = str.substring(1, str.length); } else { return "#" + str; } return this.l1hs(str); }, close_header:function() { CLI_Cookie.set(CLI_ACCEPT_COOKIE_NAME,'yes',CLI_ACCEPT_COOKIE_EXPIRE); this.hideHeader(); }, accept_close:function() { this.hidePopupOverlay(); this.generateConsent(); this.cookieLawInfoRunCallBacks(); CLI_Cookie.set(CLI_ACCEPT_COOKIE_NAME,'yes',CLI_ACCEPT_COOKIE_EXPIRE); if( Boolean( this.settings.notify_animate_hide ) ) { if( CLI.js_blocking_enabled === true ) { this.bar_elm.slideUp( this.settings.animate_speed_hide, cliBlocker.runScripts ); } else { this.bar_elm.slideUp( this.settings.animate_speed_hide ); } }else { if( CLI.js_blocking_enabled === true ) { this.bar_elm.hide( cliBlocker.runScripts ); } else { this.bar_elm.hide(); } } if( Boolean( this.settings.showagain_tab ) ) { this.showagain_elm.slideDown(this.settings.animate_speed_show); } if( Boolean( this.settings.accept_close_reload ) === true ) { this.reload_current_page(); } return false; }, reject_close:function() { this.hidePopupOverlay(); this.generateConsent(); this.cookieLawInfoRunCallBacks(); for(var k in Cli_Data.nn_cookie_ids) { CLI_Cookie.erase(Cli_Data.nn_cookie_ids[k]); } CLI_Cookie.set(CLI_ACCEPT_COOKIE_NAME,'no',CLI_ACCEPT_COOKIE_EXPIRE); if( Boolean( this.settings.notify_animate_hide ) ) { if( CLI.js_blocking_enabled === true ) { this.bar_elm.slideUp(this.settings.animate_speed_hide, cliBlocker.runScripts); } else { this.bar_elm.slideUp(this.settings.animate_speed_hide); } } else { if( CLI.js_blocking_enabled === true ) { this.bar_elm.hide( cliBlocker.runScripts ); } else { this.bar_elm.hide(); } } if( Boolean( this.settings.showagain_tab ) ) { this.showagain_elm.slideDown(this.settings.animate_speed_show); } if( Boolean( this.settings.reject_close_reload ) === true ) { this.reload_current_page(); } return false; }, reload_current_page:function() { if(typeof cli_flush_cache!=='undefined' && cli_flush_cache === true) { window.location.href=this.add_clear_cache_url_query(); }else { window.location.reload(true); } }, add_clear_cache_url_query:function() { var cli_rand=new Date().getTime()/1000; var cli_url=window.location.href; var cli_hash_arr=cli_url.split('#'); var cli_urlparts= cli_hash_arr[0].split('?'); if(cli_urlparts.length>=2) { var cli_url_arr=cli_urlparts[1].split('&'); cli_url_temp_arr=new Array(); for(var cli_i=0; cli_i0 ? '&': '')+'cli_action='; }else { cli_url=cli_hash_arr[0]+'?cli_action='; } cli_url+=cli_rand; if(cli_hash_arr.length>1) { cli_url+='#'+cli_hash_arr[1]; } return cli_url; }, closeOnScroll:function() { if(window.pageYOffset > 100 && !CLI_Cookie.read(CLI_ACCEPT_COOKIE_NAME)) { CLI.accept_close(); if( Boolean( CLI.settings.scroll_close_reload ) === true) { window.location.reload(); } window.removeEventListener("scroll",CLI.closeOnScroll,false); } }, displayHeader:function() { if( Boolean( this.settings.notify_animate_show ) ) { this.bar_elm.slideDown(this.settings.animate_speed_show); }else { this.bar_elm.show(); } this.showagain_elm.hide(); if(CLI_COOKIEBAR_AS_POPUP) { this.showPopupOverlay(); } }, hideHeader:function() { if( Boolean( this.settings.showagain_tab ) ) { if( Boolean( this.settings.notify_animate_show ) ) { this.showagain_elm.slideDown(this.settings.animate_speed_show); } else { this.showagain_elm.show(); } }else { this.showagain_elm.hide(); } this.bar_elm.slideUp(this.settings.animate_speed_show); this.hidePopupOverlay(); }, hidePopupOverlay:function() { jQuery('body').removeClass("cli-barmodal-open"); jQuery(".cli-popupbar-overlay").removeClass("cli-show"); }, showPopupOverlay:function() { if( this.bar_elm.length ) { if( Boolean( this.settings.popup_overlay ) ) { jQuery('body').addClass("cli-barmodal-open"); jQuery(".cli-popupbar-overlay").addClass("cli-show"); } } }, barAsWidget:function(a) { var cli_elm=this.bar_elm; cli_elm.attr('data-cli-type','widget'); var cli_win=jQuery(window); var cli_winh=cli_win.height()-40; var cli_winw=cli_win.width(); var cli_defw=cli_winw>400 ? 300 : cli_winw-30; cli_elm.css({ 'width':cli_defw,'height':'auto','max-height':cli_winh,'overflow':'auto','position':'fixed','box-sizing':'border-box' }); if ( this.checkifStyleAttributeExist() === false ) { cli_elm.css({'padding':'25px 15px'}); } if(this.settings.widget_position=='left') { cli_elm.css({ 'left':'15px','right':'auto','bottom':'15px','top':'auto' }); }else { cli_elm.css({ 'left':'auto','right':'15px','bottom':'15px','top':'auto' }); } if(a) { this.setResize(); } }, barAsPopUp:function(a) { if(typeof cookie_law_info_bar_as_popup==='function') { return false; } var cli_elm=this.bar_elm; cli_elm.attr('data-cli-type','popup'); var cli_win=jQuery(window); var cli_winh=cli_win.height()-40; var cli_winw=cli_win.width(); var cli_defw=cli_winw>700 ? 500 : cli_winw-20; cli_elm.css({ 'width':cli_defw,'height':'auto','max-height':cli_winh,'bottom':'','top':'50%','left':'50%','margin-left':(cli_defw/2)*-1,'margin-top':'-100px','overflow':'auto' }).addClass('cli-bar-popup cli-modal-content'); if ( this.checkifStyleAttributeExist() === false ) { cli_elm.css({'padding':'25px 15px'}); } cli_h=cli_elm.height(); li_h=cli_h<200 ? 200 : cli_h; cli_elm.css({'top':'50%','margin-top':((cli_h/2)+30)*-1}); setTimeout(function(){ cli_elm.css({ 'bottom':'' }); },100); if(a) { this.setResize(); } }, setResize:function() { var resizeTmr=null; jQuery(window).resize(function() { clearTimeout(resizeTmr); resizeTmr=setTimeout(function() { if(CLI_COOKIEBAR_AS_POPUP) { CLI.barAsPopUp(); } if(CLI.settings.cookie_bar_as=='widget') { CLI.barAsWidget(); } CLI.configShowAgain(); },500); }); }, enableAllCookies:function() { jQuery('.cli-user-preference-checkbox').each(function(){ var cli_chkbox_elm=jQuery(this); var cli_chkbox_data_id=cli_chkbox_elm.attr('data-id'); if(cli_chkbox_data_id!='checkbox-necessary') { cli_chkbox_elm.prop('checked',true); CLI_Cookie.set('cookielawinfo-'+cli_chkbox_data_id,'yes',CLI_ACCEPT_COOKIE_EXPIRE); } }); }, hideCookieBarOnClose: function() { jQuery(document).on('click','.cli_cookie_close_button',function(e){ e.preventDefault(); var elm=jQuery(this); var button_action = elm.attr('data-cli_action'); if( Cli_Data.ccpaType === 'ccpa' ) { CLI.enableAllCookies(); } CLI.accept_close(); }); }, checkCategories:function() { var cliAllowedCategories = []; var cli_categories = {}; jQuery('.cli-user-preference-checkbox').each(function() { var status=false; cli_chkbox_elm=jQuery(this); cli_chkbox_data_id=cli_chkbox_elm.attr('data-id'); cli_chkbox_data_id=cli_chkbox_data_id.replace('checkbox-',''); cli_chkbox_data_id_trimmed=cli_chkbox_data_id.replace('-','_') if(jQuery(cli_chkbox_elm).is(':checked')) { status=true; cliAllowedCategories.push(cli_chkbox_data_id); } cli_categories[cli_chkbox_data_id_trimmed]= status; }); CLI.allowedCategories = cliAllowedCategories; }, cookieLawInfoRunCallBacks:function() { this.checkCategories(); if(CLI_Cookie.read(CLI_ACCEPT_COOKIE_NAME)=='yes') { if("function" == typeof CookieLawInfo_Accept_Callback){ CookieLawInfo_Accept_Callback(); } } }, generateConsent:function() { var preferenceCookie = CLI_Cookie.read(CLI_PREFERNCE_COOKIE); cliConsent = {}; if(preferenceCookie !== null) { cliConsent = window.atob(preferenceCookie); cliConsent = JSON.parse(cliConsent); } cliConsent.ver = Cli_Data.consentVersion; categories = []; jQuery('.cli-user-preference-checkbox').each(function(){ categoryVal = ''; cli_chkbox_data_id = jQuery(this).attr('data-id'); cli_chkbox_data_id = cli_chkbox_data_id.replace('checkbox-',''); if(jQuery(this).is(':checked')) { categoryVal = true; } else { categoryVal = false; } cliConsent[cli_chkbox_data_id] = categoryVal; }); cliConsent = JSON.stringify(cliConsent); cliConsent = window.btoa(cliConsent); CLI_Cookie.set(CLI_PREFERNCE_COOKIE,cliConsent,CLI_ACCEPT_COOKIE_EXPIRE); }, cookieLawInfoRunCallBacks:function() { this.checkCategories(); if(CLI_Cookie.read(CLI_ACCEPT_COOKIE_NAME)=='yes') { if("function" == typeof CookieLawInfo_Accept_Callback){ CookieLawInfo_Accept_Callback(); } } }, addStyleAttribute:function() { var bar=this.bar_elm; var styleClass=''; if(jQuery(bar).find('.cli-bar-container').length > 0) { styleClass=jQuery('.cli-bar-container').attr('class'); styleClass=jQuery.trim(styleClass.replace('cli-bar-container','')); jQuery(bar).attr('data-cli-style',styleClass); } }, CookieLawInfo_Callback: function( enableBar, enableBlocking ) { enableBar = typeof enableBar !== 'undefined' ? enableBar : true; enableBlocking = typeof enableBlocking !== 'undefined' ? enableBlocking : true; if( CLI.js_blocking_enabled === true && Boolean( Cli_Data.custom_integration ) === true ) { cliBlocker.cookieBar( enableBar ); cliBlocker.runScripts( enableBlocking ); } }, checkifStyleAttributeExist: function() { var exist = false; var attr = this.bar_elm.attr('data-cli-style'); if (typeof attr !== typeof undefined && attr !== false) { exist = true; } return exist; } } var cliBlocker = { blockingStatus: true, scriptsLoaded: false, ccpaEnabled : false, ccpaRegionBased : false, ccpaApplicable : false, ccpaBarEnabled: false, cliShowBar: true , checkPluginStatus: function(callbackA , callbackB ) { this.ccpaEnabled = Boolean( Cli_Data.ccpaEnabled ); this.ccpaRegionBased = Boolean( Cli_Data.ccpaRegionBased ); this.ccpaBarEnabled = Boolean( Cli_Data.ccpaBarEnabled ); if( Boolean( Cli_Data.custom_integration ) === true ) { callbackA( false ); } else { if( this.ccpaEnabled === true ) { this.ccpaApplicable = true; if( Cli_Data.ccpaType === 'ccpa') { if( this.ccpaBarEnabled !== true ) { this.cliShowBar = false; this.blockingStatus = false; } } } else { jQuery('.wt-cli-ccpa-opt-out,.wt-cli-ccpa-checkbox,.wt-cli-ccpa-element').remove(); } callbackA( this.cliShowBar ); callbackB( this.blockingStatus); } }, cookieBar: function( showbar ) { showbar = typeof showbar !== 'undefined' ? showbar : true; cliBlocker.cliShowBar = showbar; if(cliBlocker.cliShowBar === false) { CLI.bar_elm.hide(); CLI.showagain_elm.hide(); CLI.settingsModal.removeClass('cli-blowup cli-out'); CLI.hidePopupOverlay(); jQuery(".cli-settings-overlay").removeClass("cli-show"); } else { if(!CLI_Cookie.exists(CLI_ACCEPT_COOKIE_NAME)) { CLI.displayHeader(); } else { CLI.hideHeader(); } CLI.settingsModal.show(); jQuery('.cli-modal-backdrop').show(); } }, runScripts:function( blocking ) { blocking = typeof blocking !== 'undefined' ? blocking : true; cliBlocker.blockingStatus = blocking; srcReplaceableElms = ['iframe','IFRAME','EMBED','embed','OBJECT','object','IMG','img']; var genericFuncs = { renderByElement: function() { cliScriptFuncs.renderScripts(); cliBlocker.scriptsLoaded = true; }, }; var cliScriptFuncs = { // trigger DOMContentLoaded scriptsDone:function() { if (typeof Cli_Data.triggerDomRefresh !== 'undefined') { if( Boolean( Cli_Data.triggerDomRefresh ) === true ) { var DOMContentLoadedEvent = document.createEvent('Event') DOMContentLoadedEvent.initEvent('DOMContentLoaded', true, true) window.document.dispatchEvent(DOMContentLoadedEvent); } } }, seq :function(arr, callback, index) { // first call, without an index if (typeof index === 'undefined') { index = 0 } arr[index](function () { index++ if (index === arr.length) { callback() } else { cliScriptFuncs.seq(arr, callback, index) } }) }, /* script runner */ insertScript:function($script,callback) { var s =''; var scriptType = $script.getAttribute('data-cli-script-type'); var elementPosition = $script.getAttribute('data-cli-element-position'); var isBlock = $script.getAttribute('data-cli-block'); var s = document.createElement('script'); var ccpaOptedOut = cliBlocker.ccpaOptedOut(); s.type = 'text/plain'; if($script.async) { s.async = $script.async; } if($script.defer) { s.defer = $script.defer; } if ($script.src) { s.onload = callback s.onerror = callback s.src = $script.src } else { s.textContent = $script.innerText } var attrs = jQuery($script).prop("attributes"); for (var ii = 0; ii < attrs.length; ++ii) { if (attrs[ii].nodeName !== 'id') { s.setAttribute(attrs[ii].nodeName,attrs[ii].value); } } if(cliBlocker.blockingStatus === true) { if(( CLI_Cookie.read(CLI_ACCEPT_COOKIE_NAME)=='yes' && CLI.allowedCategories.indexOf(scriptType) !== -1 ) ) { s.setAttribute('data-cli-consent','accepted'); s.type = 'text/javascript'; } if( cliBlocker.ccpaApplicable === true ) { if( ccpaOptedOut === true || CLI_Cookie.read(CLI_ACCEPT_COOKIE_NAME) == null ) { s.type = 'text/plain'; } } } else { s.type = 'text/javascript'; } if($script.type != s.type) { if(elementPosition === 'head') { document.head.appendChild(s); } else { document.body.appendChild(s); } if (!$script.src) { callback() } $script.parentNode.removeChild($script); } else { callback(); } }, renderScripts:function() { var $scripts = document.querySelectorAll('script[data-cli-class="cli-blocker-script"]'); if($scripts.length > 0) { var runList = [] var typeAttr Array.prototype.forEach.call($scripts, function ($script) { // only run script tags without the type attribute // or with a javascript mime attribute value typeAttr = $script.getAttribute('type') runList.push(function (callback) { cliScriptFuncs.insertScript($script, callback) }) }) cliScriptFuncs.seq(runList, cliScriptFuncs.scriptsDone); } } }; genericFuncs.renderByElement(); }, ccpaOptedOut : function () { var ccpaOptedOut = false; var preferenceCookie = CLI_Cookie.read(CLI_PREFERNCE_COOKIE); if( preferenceCookie !== null ) { cliConsent = window.atob(preferenceCookie); cliConsent = JSON.parse(cliConsent); if( typeof cliConsent.ccpaOptout !== 'undefined') { ccpaOptedOut = cliConsent.ccpaOptout; } } return ccpaOptedOut; } } jQuery(document).ready(function() { if(typeof cli_cookiebar_settings!='undefined') { CLI.set({ settings:cli_cookiebar_settings }); if( CLI.js_blocking_enabled === true ) { cliBlocker.checkPluginStatus(cliBlocker.cookieBar,cliBlocker.runScripts); } } }); // source --> https://www.ubora.io/wp-content/plugins/team-showcase/js/modernizr.custom.js?ver=1.0 /* Modernizr 2.8.3 (Custom Build) | MIT & BSD * Build: http://modernizr.com/download/#-csstransitions-shiv-cssclasses-prefixed-testprop-testallprops-domprefixes-load */ ;window.Modernizr=function(a,b,c){function x(a){j.cssText=a}function y(a,b){return x(prefixes.join(a+";")+(b||""))}function z(a,b){return typeof a===b}function A(a,b){return!!~(""+a).indexOf(b)}function B(a,b){for(var d in a){var e=a[d];if(!A(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function C(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:z(f,"function")?f.bind(d||b):f}return!1}function D(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+n.join(d+" ")+d).split(" ");return z(b,"string")||z(b,"undefined")?B(e,b):(e=(a+" "+o.join(d+" ")+d).split(" "),C(e,b,c))}var d="2.8.3",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m="Webkit Moz O ms",n=m.split(" "),o=m.toLowerCase().split(" "),p={},q={},r={},s=[],t=s.slice,u,v={}.hasOwnProperty,w;!z(v,"undefined")&&!z(v.call,"undefined")?w=function(a,b){return v.call(a,b)}:w=function(a,b){return b in a&&z(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=t.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(t.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(t.call(arguments)))};return e}),p.csstransitions=function(){return D("transition")};for(var E in p)w(p,E)&&(u=E.toLowerCase(),e[u]=p[E](),s.push((e[u]?"":"no-")+u));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)w(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},x(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._domPrefixes=o,e._cssomPrefixes=n,e.testProp=function(a){return B([a])},e.testAllProps=D,e.prefixed=function(a,b,c){return b?D(a,b,c):D(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+s.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f https://www.ubora.io/wp-content/plugins/team-showcase/js/classie.js?ver=1.0 /*! * classie v1.0.1 * class helper functions * from bonzo https://github.com/ded/bonzo * MIT license * * classie.has( elem, 'my-class' ) -> true/false * classie.add( elem, 'my-new-class' ) * classie.remove( elem, 'my-unwanted-class' ) * classie.toggle( elem, 'my-class' ) */ /*jshint browser: true, strict: true, undef: true, unused: true */ /*global define: false, module: false */ ( function( window ) { 'use strict'; // class helper functions from bonzo https://github.com/ded/bonzo function classReg( className ) { return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); } // classList support for class management // altho to be fair, the api sucks because it won't accept multiple classes at once var hasClass, addClass, removeClass; if ( 'classList' in document.documentElement ) { hasClass = function( elem, c ) { return elem.classList.contains( c ); }; addClass = function( elem, c ) { elem.classList.add( c ); }; removeClass = function( elem, c ) { elem.classList.remove( c ); }; } else { hasClass = function( elem, c ) { return classReg( c ).test( elem.className ); }; addClass = function( elem, c ) { if ( !hasClass( elem, c ) ) { elem.className = elem.className + ' ' + c; } }; removeClass = function( elem, c ) { elem.className = elem.className.replace( classReg( c ), ' ' ); }; } function toggleClass( elem, c ) { var fn = hasClass( elem, c ) ? removeClass : addClass; fn( elem, c ); } var classie = { // full names hasClass: hasClass, addClass: addClass, removeClass: removeClass, toggleClass: toggleClass, // short names has: hasClass, add: addClass, remove: removeClass, toggle: toggleClass }; // transport if ( typeof define === 'function' && define.amd ) { // AMD define( classie ); } else if ( typeof exports === 'object' ) { // CommonJS module.exports = classie; } else { // browser global window.classie = classie; } })( window ); // source --> https://www.ubora.io/wp-content/plugins/team-showcase/js/featherlight.js?ver=1.0 /** * Featherlight - ultra slim jQuery lightbox * Version 1.7.0 - http://noelboss.github.io/featherlight/ * * Copyright 2016, Noël Raoul Bossart (http://www.noelboss.com) * MIT Licensed. **/ (function($) { "use strict"; if('undefined' === typeof $) { if('console' in window){ window.console.info('Too much lightness, Featherlight needs jQuery.'); } return; } /* Featherlight is exported as $.featherlight. It is a function used to open a featherlight lightbox. [tech] Featherlight uses prototype inheritance. Each opened lightbox will have a corresponding object. That object may have some attributes that override the prototype's. Extensions created with Featherlight.extend will have their own prototype that inherits from Featherlight's prototype, thus attributes can be overriden either at the object level, or at the extension level. To create callbacks that chain themselves instead of overriding, use chainCallbacks. For those familiar with CoffeeScript, this correspond to Featherlight being a class and the Gallery being a class extending Featherlight. The chainCallbacks is used since we don't have access to CoffeeScript's `super`. */ function Featherlight($content, config) { if(this instanceof Featherlight) { /* called with new */ this.id = Featherlight.id++; this.setup($content, config); this.chainCallbacks(Featherlight._callbackChain); } else { var fl = new Featherlight($content, config); fl.open(); return fl; } } var opened = [], pruneOpened = function(remove) { opened = $.grep(opened, function(fl) { return fl !== remove && fl.$instance.closest('body').length > 0; } ); return opened; }; // Removes keys of `set` from `obj` and returns the removed key/values. function slice(obj, set) { var r = {}; for (var key in obj) { if (key in set) { r[key] = obj[key]; delete obj[key]; } } return r; } // NOTE: List of available [iframe attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe). var iFrameAttributeSet = { allowfullscreen: 1, frameborder: 1, height: 1, longdesc: 1, marginheight: 1, marginwidth: 1, name: 1, referrerpolicy: 1, scrolling: 1, sandbox: 1, src: 1, srcdoc: 1, width: 1 }; // Converts camelCased attributes to dasherized versions for given prefix: // parseAttrs({hello: 1, hellFrozeOver: 2}, 'hell') => {froze-over: 2} function parseAttrs(obj, prefix) { var attrs = {}, regex = new RegExp('^' + prefix + '([A-Z])(.*)'); for (var key in obj) { var match = key.match(regex); if (match) { var dasherized = (match[1] + match[2].replace(/([A-Z])/g, '-$1')).toLowerCase(); attrs[dasherized] = obj[key]; } } return attrs; } /* document wide key handler */ var eventMap = { keyup: 'onKeyUp', resize: 'onResize' }; var globalEventHandler = function(event) { $.each(Featherlight.opened().reverse(), function() { if (!event.isDefaultPrevented()) { if (false === this[eventMap[event.type]](event)) { event.preventDefault(); event.stopPropagation(); return false; } } }); }; var toggleGlobalEvents = function(set) { if(set !== Featherlight._globalHandlerInstalled) { Featherlight._globalHandlerInstalled = set; var events = $.map(eventMap, function(_, name) { return name+'.'+Featherlight.prototype.namespace; } ).join(' '); $(window)[set ? 'on' : 'off'](events, globalEventHandler); } }; Featherlight.prototype = { constructor: Featherlight, /*** defaults ***/ /* extend featherlight with defaults and methods */ namespace: 'featherlight', /* Name of the events and css class prefix */ targetAttr: 'data-featherlight', /* Attribute of the triggered element that contains the selector to the lightbox content */ variant: null, /* Class that will be added to change look of the lightbox */ resetCss: false, /* Reset all css */ background: null, /* Custom DOM for the background, wrapper and the closebutton */ openTrigger: 'click', /* Event that triggers the lightbox */ closeTrigger: 'click', /* Event that triggers the closing of the lightbox */ filter: null, /* Selector to filter events. Think $(...).on('click', filter, eventHandler) */ root: 'body', /* Where to append featherlights */ openSpeed: 250, /* Duration of opening animation */ closeSpeed: 250, /* Duration of closing animation */ closeOnClick: 'background', /* Close lightbox on click ('background', 'anywhere' or false) */ closeOnEsc: true, /* Close lightbox when pressing esc */ closeIcon: '✕', /* Close icon */ loading: '', /* Content to show while initial content is loading */ persist: false, /* If set, the content will persist and will be shown again when opened again. 'shared' is a special value when binding multiple elements for them to share the same content */ otherClose: null, /* Selector for alternate close buttons (e.g. "a.close") */ beforeOpen: $.noop, /* Called before open. can return false to prevent opening of lightbox. Gets event as parameter, this contains all data */ beforeContent: $.noop, /* Called when content is loaded. Gets event as parameter, this contains all data */ beforeClose: $.noop, /* Called before close. can return false to prevent opening of lightbox. Gets event as parameter, this contains all data */ afterOpen: $.noop, /* Called after open. Gets event as parameter, this contains all data */ afterContent: $.noop, /* Called after content is ready and has been set. Gets event as parameter, this contains all data */ afterClose: $.noop, /* Called after close. Gets event as parameter, this contains all data */ onKeyUp: $.noop, /* Called on key up for the frontmost featherlight */ onResize: $.noop, /* Called after new content and when a window is resized */ type: null, /* Specify type of lightbox. If unset, it will check for the targetAttrs value. */ contentFilters: ['jquery', 'image', 'html', 'ajax', 'iframe', 'text'], /* List of content filters to use to determine the content */ /*** methods ***/ /* setup iterates over a single instance of featherlight and prepares the background and binds the events */ setup: function(target, config){ /* all arguments are optional */ if (typeof target === 'object' && target instanceof $ === false && !config) { config = target; target = undefined; } var self = $.extend(this, config, {target: target}), css = !self.resetCss ? self.namespace : self.namespace+'-reset', /* by adding -reset to the classname, we reset all the default css */ $background = $(self.background || [ '
', '
', '', '
' + self.loading + '
', '
', '
'].join('')), closeButtonSelector = '.'+self.namespace+'-close' + (self.otherClose ? ',' + self.otherClose : ''); self.$instance = $background.clone().addClass(self.variant); /* clone DOM for the background, wrapper and the close button */ /* close when click on background/anywhere/null or closebox */ self.$instance.on(self.closeTrigger+'.'+self.namespace, function(event) { var $target = $(event.target); if( ('background' === self.closeOnClick && $target.is('.'+self.namespace)) || 'anywhere' === self.closeOnClick || $target.closest(closeButtonSelector).length ){ self.close(event); event.preventDefault(); } }); return this; }, /* this method prepares the content and converts it into a jQuery object or a promise */ getContent: function(){ if(this.persist !== false && this.$content) { return this.$content; } var self = this, filters = this.constructor.contentFilters, readTargetAttr = function(name){ return self.$currentTarget && self.$currentTarget.attr(name); }, targetValue = readTargetAttr(self.targetAttr), data = self.target || targetValue || ''; /* Find which filter applies */ var filter = filters[self.type]; /* check explicit type like {type: 'image'} */ /* check explicit type like data-featherlight="image" */ if(!filter && data in filters) { filter = filters[data]; data = self.target && targetValue; } data = data || readTargetAttr('href') || ''; /* check explicity type & content like {image: 'photo.jpg'} */ if(!filter) { for(var filterName in filters) { if(self[filterName]) { filter = filters[filterName]; data = self[filterName]; } } } /* otherwise it's implicit, run checks */ if(!filter) { var target = data; data = null; $.each(self.contentFilters, function() { filter = filters[this]; if(filter.test) { data = filter.test(target); } if(!data && filter.regex && target.match && target.match(filter.regex)) { data = target; } return !data; }); if(!data) { if('console' in window){ window.console.error('Featherlight: no content filter found ' + (target ? ' for "' + target + '"' : ' (no target specified)')); } return false; } } /* Process it */ return filter.process.call(self, data); }, /* sets the content of $instance to $content */ setContent: function($content){ var self = this; /* we need a special class for the iframe */ if($content.is('iframe') || $('iframe', $content).length > 0){ self.$instance.addClass(self.namespace+'-iframe'); } self.$instance.removeClass(self.namespace+'-loading'); /* replace content by appending to existing one before it is removed this insures that featherlight-inner remain at the same relative position to any other items added to featherlight-content */ self.$instance.find('.'+self.namespace+'-inner') .not($content) /* excluded new content, important if persisted */ .slice(1).remove().end() /* In the unexpected event where there are many inner elements, remove all but the first one */ .replaceWith($.contains(self.$instance[0], $content[0]) ? '' : $content); self.$content = $content.addClass(self.namespace+'-inner'); return self; }, /* opens the lightbox. "this" contains $instance with the lightbox, and with the config. Returns a promise that is resolved after is successfully opened. */ open: function(event){ var self = this; self.$instance.hide().appendTo(self.root); if((!event || !event.isDefaultPrevented()) && self.beforeOpen(event) !== false) { if(event){ event.preventDefault(); } var $content = self.getContent(); if($content) { opened.push(self); toggleGlobalEvents(true); self.$instance.fadeIn(self.openSpeed); self.beforeContent(event); /* Set content and show */ return $.when($content) .always(function($content){ self.setContent($content); self.afterContent(event); }) .then(self.$instance.promise()) /* Call afterOpen after fadeIn is done */ .done(function(){ self.afterOpen(event); }); } } self.$instance.detach(); return $.Deferred().reject().promise(); }, /* closes the lightbox. "this" contains $instance with the lightbox, and with the config returns a promise, resolved after the lightbox is successfully closed. */ close: function(event){ var self = this, deferred = $.Deferred(); if(self.beforeClose(event) === false) { deferred.reject(); } else { if (0 === pruneOpened(self).length) { toggleGlobalEvents(false); } self.$instance.fadeOut(self.closeSpeed,function(){ self.$instance.detach(); self.afterClose(event); deferred.resolve(); }); } return deferred.promise(); }, /* resizes the content so it fits in visible area and keeps the same aspect ratio. Does nothing if either the width or the height is not specified. Called automatically on window resize. Override if you want different behavior. */ resize: function(w, h) { if (w && h) { /* Reset apparent image size first so container grows */ this.$content.css('width', '').css('height', ''); /* Calculate the worst ratio so that dimensions fit */ /* Note: -1 to avoid rounding errors */ var ratio = Math.max( w / (parseInt(this.$content.parent().css('width'),10)-1), h / (parseInt(this.$content.parent().css('height'),10)-1)); /* Resize content */ if (ratio > 1) { ratio = h / Math.floor(h / ratio); /* Round ratio down so height calc works */ this.$content.css('width', '' + w / ratio + 'px').css('height', '' + h / ratio + 'px'); } } }, /* Utility function to chain callbacks [Warning: guru-level] Used be extensions that want to let users specify callbacks but also need themselves to use the callbacks. The argument 'chain' has callback names as keys and function(super, event) as values. That function is meant to call `super` at some point. */ chainCallbacks: function(chain) { for (var name in chain) { this[name] = $.proxy(chain[name], this, $.proxy(this[name], this)); } } }; $.extend(Featherlight, { id: 0, /* Used to id single featherlight instances */ autoBind: '[data-featherlight]', /* Will automatically bind elements matching this selector. Clear or set before onReady */ defaults: Featherlight.prototype, /* You can access and override all defaults using $.featherlight.defaults, which is just a synonym for $.featherlight.prototype */ /* Contains the logic to determine content */ contentFilters: { jquery: { regex: /^[#.]\w/, /* Anything that starts with a class name or identifiers */ test: function(elem) { return elem instanceof $ && elem; }, process: function(elem) { return this.persist !== false ? $(elem) : $(elem).clone(true); } }, image: { regex: /\.(png|jpg|jpeg|gif|tiff|bmp|svg)(\?\S*)?$/i, process: function(url) { var self = this, deferred = $.Deferred(), img = new Image(), $img = $(''); img.onload = function() { /* Store naturalWidth & height for IE8 */ $img.naturalWidth = img.width; $img.naturalHeight = img.height; deferred.resolve( $img ); }; img.onerror = function() { deferred.reject($img); }; img.src = url; return deferred.promise(); } }, html: { regex: /^\s*<[\w!][^<]*>/, /* Anything that starts with some kind of valid tag */ process: function(html) { return $(html); } }, ajax: { regex: /./, /* At this point, any content is assumed to be an URL */ process: function(url) { var self = this, deferred = $.Deferred(); /* we are using load so one can specify a target with: url.html #targetelement */ var $container = $('
').load(url, function(response, status){ if ( status !== "error" ) { deferred.resolve($container.contents()); } deferred.fail(); }); return deferred.promise(); } }, iframe: { process: function(url) { var deferred = new $.Deferred(); var $content = $('