(function($){ $scope = {}; AstraImageCommon = { images: {}, image: {}, action: '', offset: 0, loadingStatus: true, config: { q : '', lang : 'en', image_type : 'all', orientation : 'all', category : '', min_width : 0, min_height : 0, colors : '', editors_choice : false, safesearch : true, order : 'popular', page : $( 'body' ).data( 'page' ), per_page : 30, callback : '', pretty : true }, canSave: false, infiniteLoad: false, uploader: {}, file: {}, frame: {}, isPreview: false, apiStatus: true, id : '', isValidating: false, scopeSet: false, init: function() { this._bind(); }, /** * Binds events for the Astra Sites. * * @since 1.0.0 * @access private * @method _bind */ _bind: function() { // Triggers. $( document ).on( "ast-image__refresh", AstraImageCommon._initImages ); $( document ).on( "ast-image__set-scope", AstraImageCommon._setScope ); $( document ).on( "click", ".ast-image__list-img-overlay", AstraImageCommon._preview ); $( document ).on( "click", ".ast-image__go-back-text", AstraImageCommon._goBack ); $( document ).on( "click", ".ast-image__save", AstraImageCommon._save ); $( document ).on( "click", ".ast-image__filter-safesearch input", AstraImageCommon._filter ); $( document ).on( "change", ".ast-image__filter select", AstraImageCommon._filter ); $( document ).on( "click", ".ast-image__edit-api", AstraImageCommon._editAPI ); $( document ).on( "click", ".ast-image__browse-images", AstraImageCommon._browse ); $( document ).on( "click", ".ast-image__download-icon", AstraImageCommon._saveFromScreen ); }, _saveFromScreen: function() { let saveIcon = $(this); let source = saveIcon.closest('.ast-image__list-img-overlay'); saveIcon.addClass( 'installing' ); AstraImageCommon.image = { 'largeImageURL': source.data( 'img-url' ), 'tags' : source.find( 'span:first-child' ).html(), 'id' : source.data( 'img-id' ), }; AstraImageCommon._saveAjax( function ( data ) { if ( undefined == data.data ) { return; } astraImages.saved_images = data.data['updated-saved-images']; wp.media.view.AstraAttachmentsBrowser.object.photoUploadComplete( data.data ); saveIcon.text( 'Done' ); saveIcon.removeClass( 'installing' ); AstraImageCommon._empty(); } ); }, _browse: function() { $scope.find( '.ast-image__search' ).trigger( 'keyup' ); }, _editAPI: function( event ) { event.stopPropagation(); wp.media.view.AstraAttachmentsBrowser.images = []; $scope.find( '.ast-image__loader-wrap' ).show(); $scope.find( '.ast-image__skeleton' ).html( '' ); $scope.find( '.ast-image__skeleton' ).attr( 'style', '' ); $scope.find( '.ast-image__search' ).trigger( 'keyup' ); $scope.find( '.ast-image__loader-wrap' ).hide(); }, _filter: function() { let safesearch = $scope.find( '.ast-image__filter-safesearch input:checked' ).length ? true : false; let category = $scope.find( '.ast-image__filter-category select' ).val(); let orientation = $scope.find( '.ast-image__filter-orientation select' ).val(); let order = $scope.find( '.ast-image__filter-order select' ).val(); AstraImageCommon.config.safesearch = safesearch; AstraImageCommon.config.orientation = orientation; AstraImageCommon.config.category = category; AstraImageCommon.config.order = order; $scope.find( '.ast-image__search' ).trigger( 'keyup' ); $scope.find( '.ast-image__loader-wrap' ).show(); }, _save: function() { if ( ! AstraImageCommon.canSave ) { return; } let thisBtn = $( this ) if ( thisBtn.data( 'import-status' ) ) { return; } thisBtn.removeClass( 'updating-message' ); thisBtn.text( astraImages.downloading ); thisBtn.addClass( 'installing' ); AstraImageCommon.canSave = false; AstraImageCommon._saveAjax( function ( data ) { if ( undefined == data.data ) { return; } astraImages.saved_images = data.data['updated-saved-images']; wp.media.view.AstraAttachmentsBrowser.object.photoUploadComplete( data.data ); thisBtn.text( 'Done' ); thisBtn.removeClass( 'installing' ); AstraImageCommon._empty(); } ); }, _saveAjax: function( callback ) { // Work with JSON page here $.ajax({ url: astraImages.ajaxurl, type: 'POST', dataType: 'json', data: { 'action' : 'astra-sites-create-image', 'url' : AstraImageCommon.image.largeImageURL, 'name' : AstraImageCommon.image.tags, 'id' : AstraImageCommon.image.id, '_ajax_nonce' : astraImages._ajax_nonce, }, }) .fail(function( jqXHR ){ console.log( jqXHR ); }) .done( callback ); }, _empty: function() { AstraImageCommon.image = {}; AstraImageCommon.canSave = false; AstraImageCommon.uploader = {}; AstraImageCommon.file = {}; AstraImageCommon.isPreview = false; }, _goBack: function() { AstraImageCommon._empty(); $( document ).trigger( 'ast-image__refresh' ); $scope.find( '.ast-image__skeleton' ).show(); $scope.removeClass( 'preview-mode' ); $scope.find( '.ast-attachments-search-wrap' ).children().show(); $scope.find( '.ast-image__go-back' ).remove(); $scope.find( '.ast-image__save-wrap' ).remove(); $scope.find( '.ast-image__preview-skeleton' ).hide(); $scope.find( '.ast-image__preview-skeleton' ).html( '' ); let wrapHeight = ( AstraImageCommon.offset - 210 ); $scope.find( '.ast-image__skeleton-inner-wrap' ).css( 'height', wrapHeight ); }, _preview: function(event) { if( event && event.target.classList.contains( 'ast-image__download-icon' ) ) { return; } AstraImageCommon.isPreview = true; let height = ( AstraImageCommon.offset - 190 ); $scope.find( '.ast-image__skeleton-inner-wrap' ).css( 'height', height ); setTimeout( function() { $scope.find( '.ast-image__loader-wrap' ).hide(); }, 200 ); AstraImageCommon.image = { 'largeImageURL': $( this ).data( 'img-url' ), 'tags' : $( this ).find( 'span:first-child' ).html(), 'id' : $( this ).data( 'img-id' ), }; let preview = wp.template( 'ast-image-single' ); let single_html = preview( AstraImageCommon.image ); let save_btn = wp.template( 'ast-image-save' ); let single_btn = save_btn( AstraImageCommon.image ); let wrapHeight = $scope.find( '.ast-image__skeleton-inner-wrap' ).outerHeight(); wrapHeight = ( wrapHeight - 60 ); $scope.find( '.ast-image__skeleton' ).hide(); $scope.addClass( 'preview-mode' ); $scope.find( '.ast-attachments-search-wrap' ).children().hide(); $scope.find( '.ast-image__search-wrap' ).before( $( '#tmpl-ast-image-go-back' ).text() ); $scope.find( '.ast-image__search-wrap' ).after( single_btn ); $scope.find( '.ast-image__preview-skeleton' ).html( single_html ); $scope.find( '.ast-image__preview-skeleton' ).show(); $scope.find( '.single-site-preview' ).css( 'max-height', wrapHeight ); AstraImageCommon.canSave = true; }, _setScope: function() { AstraImageCommon.frame = wp.media.view.AstraAttachmentsBrowser.object.$el.closest( '.media-frame' ); $scope = AstraImageCommon.frame.find( '.ast-attachments-browser' ); if ( undefined == $scope ) { return; } $( 'body' ).data( 'page', 1 ); let skeleton = $( '#tmpl-ast-image-skeleton' ).text(); $scope.append( skeleton ); let pixabay_filter = wp.template( 'ast-image-filters' ); if ( ! $scope.find( '.ast-image__filter-wrap' ).length ) { $scope.find( '.ast-attachments-search-wrap' ).append( pixabay_filter() ); } AstraImageCommon.offset = AstraImageCommon.frame.outerHeight(); let wrapHeight = ( AstraImageCommon.offset - 210 ); $scope.find( '.ast-image__skeleton-inner-wrap' ).css( 'height', wrapHeight ); $scope.find( '.ast-image__search' ).trigger( 'keyup' ); $scope.find( '.ast-image__loader-wrap' ).show(); $scope.find( '.ast-image__skeleton-inner-wrap' ).scroll( AstraImageCommon._loadMore ); AstraImageCommon.scopeSet = true; }, _initImages: function() { let loop = wp.template( 'ast-image-list' ); let list_html = loop( wp.media.view.AstraAttachmentsBrowser.images ); let container = document.querySelector( '.ast-image__skeleton' ); $scope.find( '.ast-image__loader-wrap' ).show(); if ( AstraImageCommon.infiniteLoad ) { AstraImageCommon.images.push( wp.media.view.AstraAttachmentsBrowser.images ); $scope.find( '.ast-image__skeleton' ).append( list_html ); } else { AstraImageCommon.images = wp.media.view.AstraAttachmentsBrowser.images; $scope.find( '.ast-image__skeleton' ).html( list_html ); } AstraImageCommon.loadingStatus = true; if ( $scope.find( '.ast-image__list-wrap' ).length ) { imagesLoaded( container, function() { $scope.find( '.ast-image__list-wrap' ).each( function( index ) { $( this ).removeClass( 'loading' ); $( this ).addClass( 'loaded' ); } ); $scope.find( '.ast-image__loader-wrap' ).hide(); }); } else { $scope.find( '.ast-image__loader-wrap' ).hide(); } }, _loadMore: function() { if( AstraImageCommon.isPreview ) { return; } let page = $( 'body' ).data( 'page' ); page = ( undefined == page ) ? 2 : ( page + 1 ); if ( undefined != $scope.find( '.ast-image__list-wrap:last' ).offset() ) { if( ( $( window ).scrollTop() + AstraImageCommon.offset ) >= ( $scope.find( '.ast-image__list-wrap:last' ).offset().top ) ) { if ( AstraImageCommon.loadingStatus ) { $scope.find( '.ast-image__loader-wrap' ).show(); AstraImageCommon.loadingStatus = false; AstraImageCommon.infiniteLoad = true; AstraImageCommon.config.page = page; $( 'body' ).data( 'page', page ); $scope.find( '.ast-image__search' ).trigger( 'infinite' ); } } } }, }; /** * Initialize AstraImageCommon */ $( function(){ AstraImageCommon.init(); }); })(jQuery);