/* Fully JS EndofYear Sitenotice, init events etc See detailed documentation in Dev/mediawiki */ function initEndOfYearSitenotice( endOfYearDiv, contentForSlides, donatePageUrl = '/wiki/Donate', isLocalFileSystem = false ) { const localStorageName = 'dismiss-end-of-year-sitenotice'; let valid = true; // Basic error checks if( ! contentForSlides ) { console.error('Dev: contentForSlides is missing but needed. Please check for errors'); valid = false; } // If the user has the dismissed less than a week ago, it will not be executed if( isLocalFileSystem && localStorage.getItem(localStorageName) > Date.now() ) valid = false; // If it failed at least on test if( ! valid ) { $('#donate-end-of-year').hide(); return; } // Remove item (because it's not valid) if it exists if( isLocalFileSystem ) localStorage.removeItem(localStorageName); // -------------------- // Settings and Globals const settings = { durationSlide: 10000, // Milliseconds durationProgressbar: 9500, // Milliseconds mobileBreak: 660, // Pixels paymentBottomBorderSpace: 15, // Pixels }; const refs = { playNextTimeout: null, }; const states = { slideIndex: null, slideCount: 0, isPlay: null, crypto: { payBitcoin: '', payMonero: '', payEthereum: '', }, }; // --- // DOM let content = $(`
Please support us!
PayPal
Or Crypto
Addresses
Or Other Payment Options
`); endOfYearDiv = $(endOfYearDiv); endOfYearDiv.append( content ); let mobileDonateButtonTemplate = $('Donate'); // --- // FNs function switchSlide( slideButton ) { endOfYearDiv.find('.slideshow .content > div').removeClass('active'); endOfYearDiv.find('.slideshow .control > .slide-buttons span').removeClass('active'); endOfYearDiv.find('.slideshow .slide-buttons span.active').removeClass('active'); slideButton.addClass('active'); states.slideIndex = slideButton.index(); let slide = endOfYearDiv.find('.slideshow .content > div').eq( states.slideIndex ); slide.addClass('active'); slide.css( 'opacity', 0 ); slide.animate( { opacity: 1 }, 300 ); } function playNext( isPlay ) { if( isPlay != 'auto' ) { clearTimeout( refs.playNextTimeout ); endOfYearDiv.find('.slideshow .progress').stop( true ); if( isPlay != states.isPlay ) { if( typeof isPlay == 'boolean' ) states.isPlay = isPlay; else if( isPlay == 'toggle' ) states.isPlay = ! states.isPlay; endOfYearDiv.find('.slideshow .control .flow i').removeClass('active'); endOfYearDiv.find('.slideshow .control .flow i.is-' + ( states.isPlay ? 'play' : 'pause' ) ).addClass('active'); } if( ! states.isPlay ) return; } if( states.slideIndex == null || states.slideIndex >= states.slideCount - 1 ) states.slideIndex = 0; else states.slideIndex++; switchSlide( endOfYearDiv.find( '.slideshow .slide-buttons span' ).eq( states.slideIndex ) ); endOfYearDiv.find('.slideshow .progress').css( 'width', '1%' ).stop( true ).animate( { width: '100%' }, settings.durationProgressbar ); refs.playNextTimeout = setTimeout( () => playNext( 'auto' ), settings.durationSlide ); } // ----- // Setup // Imported Initializations endOfYearDiv.find('.pay-via-paypal-module').payViaPaypal('init'); endOfYearDiv.find('.payment .crypto-container .code-select').codeSelect('init'); // Content endOfYearDiv.find('.content').html( contentForSlides ); if( endOfYearDiv.find('.content h1').length > 0 ) { endOfYearDiv.find( '.h1 span' ).html( endOfYearDiv.find('.content h1').html() ); endOfYearDiv.find('.content h1').remove(); } if( endOfYearDiv.find('.content [data-crypto-addresses]').length > 0 ) { let crypto = JSON.parse( endOfYearDiv.find('.content [data-crypto-addresses]').attr('data-crypto-addresses') ); endOfYearDiv.find('.content [data-crypto-addresses]').remove(); states.crypto = { ...crypto }; } if( ! states.crypto.payBitcoin ) console.warn('Dev: payBitcoin is missing. Please check for errors'); if( ! states.crypto.payMonero ) console.warn('Dev: payMonero is missing. Please check for errors'); if( ! states.crypto.payEthereum ) console.warn('Dev: payEthereum is missing. Please check for errors'); endOfYearDiv.find('.payment .btc .code').text( states.crypto.payBitcoin ); endOfYearDiv.find('.payment .xmr .code').text( states.crypto.payMonero ); endOfYearDiv.find('.payment .eth .code').text( states.crypto.payEthereum ); // Add Mobile donate link button if( $(window).width() <= settings.mobileBreak ) { endOfYearDiv.find('.content > div').append( mobileDonateButtonTemplate.clone() ); } // Iterate over slides let maxHeight = 0; endOfYearDiv.find('.slideshow .content > div').each( function() { $(this).css('display','block'); if( $(this).outerHeight() > maxHeight ) maxHeight = $(this).outerHeight(); $(this).css('display',''); endOfYearDiv.find('.slideshow .slide-buttons').append( '' ); states.slideCount++; }); // If not mobile include the height of payment if( $(window).width() > settings.mobileBreak ) { let paymentAdjustedHeight = endOfYearDiv.find('.payment').outerHeight() - endOfYearDiv.find('.slideshow .control').outerHeight() - settings.paymentBottomBorderSpace; if( paymentAdjustedHeight > maxHeight ) maxHeight = paymentAdjustedHeight; } endOfYearDiv.find('.slideshow .content').height( maxHeight ); endOfYearDiv.find('.payment').animate( { opacity: 1}, 300 ); // ------ // Events endOfYearDiv.find('.slideshow .slide-buttons span').on( 'click', function() { console.info([ states, $(this) ]); if( states.isPlay ) { states.slideIndex = $(this).index() - 1; playNext(); } else { switchSlide( $(this) ); } }); if( isLocalFileSystem ) { $('#siteNotice .sitenotice-close').on('click', function() { localStorage.setItem(localStorageName, Date.now() + cookieValidity ); }); } endOfYearDiv.find('.slideshow .control .flow i').on( 'click', () => playNext( 'toggle' ) ); endOfYearDiv.find('.content .mobile-donate-button').on( 'click', function() { playNext( false ); endOfYearDiv.find('.slideshow').hide(); endOfYearDiv.find('.payment').show(); endOfYearDiv.css('height','auto'); }); // ---- // Init // FadeIn endOf year the start playing the slideshow endOfYearDiv.animate( { opacity: 1}, 300 ); playNext( true ); } /* [[Category:MultiWiki]] */