/** * Initialise l'objet "upload" ainsi que la méthode "init" obligatoire pour la bibliothèque EoxiaJS. * * @since 0.1.0-alpha * @version 1.0.0 * @copyright 2017 * @author Jimmy Latour */ window.eoxiaJS.upload = {}; /** * Keep the button in memory. * * @type {Object} */ window.eoxiaJS.upload.currentButton; /** * Keep the media frame in memory. * @type {Object} */ window.eoxiaJS.upload.mediaFrame; /** * Keep the selected media in memory. * @type {Object} */ window.eoxiaJS.upload.selectedInfos = { JSON: undefined, fileID: undefined }; /** * Init func. * * @return void * * @since 0.1.0-alpha * @version 0.1.0-alpha */ window.eoxiaJS.upload.init = function() { window.eoxiaJS.upload.event(); }; /** * Event func. * * @return void * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.upload.event = function() { jQuery( document ).on( 'click', '.media:not(.loading), .upload:not(.loading)', window.eoxiaJS.upload.openPopup ); jQuery( document ).on( 'click', '.media-modal-content, .media-toolbar, .media-modal-close, .media-button-insert', function( event ) { event.stopPropagation(); } ); }; /** * Open the media frame from WordPress or the custom gallery. * * @param {MouseEvent} event The mouse state. * @return void * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.upload.openPopup = function( event ) { if ( window.eoxiaJS.upload.currentButton ) { var tmp = window.eoxiaJS.upload.currentButton; } window.eoxiaJS.upload.currentButton = jQuery( this ); if ( tmp ) { window.eoxiaJS.upload.currentButton[0].initialButton = tmp; } event.preventDefault(); if ( jQuery( this ).hasClass( 'no-file' ) || jQuery( this ).is( "a" ) ) { window.eoxiaJS.upload.openMediaFrame(); } else { window.eoxiaJS.gallery.open(); } }; /** * Open the media frame from WordPress. * * @return void * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.upload.openMediaFrame = function() { window.eoxiaJS.upload.mediaFrame = new window.wp.media.view.MediaFrame.Post({ multiple: false, library: { type: window.eoxiaJS.upload.currentButton.data( 'mime-type' ) } }).open(); window.eoxiaJS.upload.mediaFrame.on( 'insert', function() { window.eoxiaJS.upload.selectedFile(); } ); }; /** * Get the media selected and call associateFile. * * @return void * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.upload.selectedFile = function() { window.eoxiaJS.upload.mediaFrame.state().get( 'selection' ).map( function( attachment ) { window.eoxiaJS.upload.selectedInfos.JSON = attachment.toJSON(); window.eoxiaJS.upload.selectedInfos.id = attachment.id; } ); window.eoxiaJS.upload.associateFile(); }; /** * Make request for associate file * * @return void * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.upload.associateFile = function() { var data = { action: 'eo_upload_associate_file', file_id: window.eoxiaJS.upload.selectedInfos.id, _wpnonce: window.eoxiaJS.upload.currentButton.attr( 'data-nonce' ), }; var key = ''; window.eoxiaJS.upload.currentButton.get_data( function( attrData ) { for ( key in attrData ) { data[key] = attrData[key]; } } ); window.eoxiaJS.loader.display( window.eoxiaJS.upload.currentButton ); jQuery.post( window.ajaxurl, data, function( response ) { window.eoxiaJS.upload.currentButton.removeClass( 'loading' ); window.eoxiaJS.upload.refreshButton( response.data ); if ( 'box' === response.data.display_type && 0 !== response.data.id ) { window.eoxiaJS.gallery.open( false ); } window.eoxiaJS.cb( 'eoUploadAssociatedFile', { element: window.eoxiaJS.upload.currentButton, data: data, response: response } ); } ); }; /** * Update the view of the button * * @param {Object} data Data of button. * @return {void} * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.upload.refreshButton = function( data ) { jQuery( window.eoxiaJS.upload.currentButton ).removeClass( 'no-file loading wpeo-loader' ); if( window.eoxiaJS.upload.currentButton.is( 'a' ) ) { window.eoxiaJS.loader.remove( window.eoxiaJS.upload.currentButton ); if ( ! data.id ) { window.eoxiaJS.upload.currentButton.closest( 'div' ).find( 'ul' ).append( data.view ); } } else { if ( data.view ) { if ( window.eoxiaJS.upload.currentButton.data( 'custom-class' ) ) { jQuery( 'span.media[data-id="' + window.eoxiaJS.upload.currentButton.data( 'id' ) + '"].' + window.eoxiaJS.upload.currentButton.data( 'custom-class' ) ).replaceWith( data.view ); } else { jQuery( 'span.media[data-id="' + window.eoxiaJS.upload.currentButton.data( 'id' ) + '"]' ).replaceWith( data.view ); } } else if ( data.document_view ) { window.eoxiaJS.upload.currentButton.find( '.default' ).replaceWith( data.document_view ); window.eoxiaJS.upload.currentButton.find( 'input[type="hidden"]' ).val( window.eoxiaJS.upload.selectedInfos.JSON.id ); } else { if ( data.media ) { if ( window.eoxiaJS.upload.currentButton[0] && window.eoxiaJS.upload.currentButton[0].initialButton ) { window.eoxiaJS.upload.currentButton[0].initialButton.find( 'img' ).replaceWith( data.media ); } window.eoxiaJS.upload.currentButton.find( 'img' ).replaceWith( data.media ); window.eoxiaJS.upload.currentButton.find( 'svg.fa-image' ).hide(); window.eoxiaJS.upload.currentButton.find( 'input[type="hidden"]' ).val( window.eoxiaJS.upload.selectedInfos.JSON.id ); } } } }; window.eoxiaJS.gallery = {}; /** * Init func. * * @return void * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.gallery.init = function() { window.eoxiaJS.gallery.event(); }; /** * Event func. * * @return void * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.gallery.event = function() { jQuery( document ).on( 'keyup', '.wpeo-gallery', window.eoxiaJS.gallery.keyup ); jQuery( document ).on( 'click', '.wpeo-gallery .modal-footer .button-main', window.eoxiaJS.gallery.close ); jQuery( document ).on( 'click', '.wpeo-gallery .navigation .prev', window.eoxiaJS.gallery.prevPicture ); jQuery( document ).on( 'click', '.wpeo-gallery .navigation .next', window.eoxiaJS.gallery.nextPicture ); }; /** * Make request for open gallery * * @return void * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.gallery.open = function( append = true ) { var currentButton = window.eoxiaJS.upload.currentButton; var data = { action: 'eo_upload_load_gallery' }; var key = ''; currentButton.get_data( function( attrData ) { for ( key in attrData ) { data[key] = attrData[key]; } } ); currentButton.addClass( 'loading' ); if ( append ) { jQuery( '.wpeo-gallery' ).remove(); } else { data['_wpnonce'] = currentButton.closest( '.wpeo-gallery' ).data( 'nonce' ); } jQuery.post( ajaxurl, data, function( response ) { if ( append ) { jQuery( '#wpwrap' ).append( response.data.view ); } else { jQuery( '.wpeo-gallery' ).replaceWith( response.data.view ); } currentButton.removeClass( 'loading' ); }); }; /** * Next and Previous picture in gallery * * @param {KeyEvent} event Keyboard state. * @return void * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.gallery.keyup = function( event ) { if ( 37 === event.keyCode ) { window.eoxiaJS.gallery.prevPicture(); } else if ( 39 === event.keyCode ) { window.eoxiaJS.gallery.nextPicture(); } else if ( 27 === event.keyCode ) { jQuery( '.wpeo-gallery .modal-close' ).click(); } }; /** * Close the popup * * @since 1.0.0 * @version 1.0.0 * * @param {ClickEvent} event L'évènement lors du clic. * @return {void} */ window.eoxiaJS.gallery.close = function( event ) { jQuery( '.wpeo-gallery .modal-close' ).click(); }; /** * Prev picture func. * * @param {KeyEvent} event Keyboard state. * @return void * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.gallery.prevPicture = function( event ) { if ( jQuery( '.wpeo-gallery .image-list li.current' ).prev().length <= 0 ) { jQuery( '.wpeo-gallery .image-list li.current' ).toggleClass( 'current hidden' ); jQuery( '.wpeo-gallery .image-list li:last' ).toggleClass( 'hidden current' ); } else { jQuery( '.wpeo-gallery .image-list li.current' ).toggleClass( 'current hidden' ).prev().toggleClass( 'hidden current' ); } jQuery( '.wpeo-gallery .edit-thumbnail-id' ).attr( 'data-file-id', jQuery( '.wpeo-gallery .current' ).attr( 'data-id' ) ); window.eoxiaJS.gallery.changeURL( jQuery( '.wpeo-gallery .current' ).attr( 'data-id' ) ); window.eoxiaJS.gallery.checkIsFeaturedMedia( jQuery( '.wpeo-gallery .current' ).attr( 'data-id' ) ); }; /** * Next picture func. * * @param {KeyEvent} event Keyboard state. * @return void * * @since 0.1.0-alpha * @version 0.1.0-alpha */ window.eoxiaJS.gallery.nextPicture = function( event ) { if ( jQuery( '.wpeo-gallery .image-list li.current' ).next().length <= 0 ) { jQuery( '.wpeo-gallery .image-list li.current' ).toggleClass( 'current hidden' ); jQuery( '.wpeo-gallery .image-list li:first' ).toggleClass( 'hidden current' ); } else { jQuery( '.wpeo-gallery .image-list li.current' ).toggleClass( 'current hidden' ).next().toggleClass( 'hidden current' ); } jQuery( '.wpeo-gallery .edit-thumbnail-id' ).attr( 'data-file-id', jQuery( '.wpeo-gallery .current' ).attr( 'data-id' ) ); window.eoxiaJS.gallery.changeURL( jQuery( '.wpeo-gallery .current' ).attr( 'data-id' ) ); window.eoxiaJS.gallery.checkIsFeaturedMedia( jQuery( '.wpeo-gallery .current' ).attr( 'data-id' ) ); }; /** * Change edit link URL with the current file ID. * * @since 1.0.0 * @version 1.0.0 * * @param {integer} fileID The current file ID. * @return {void} */ window.eoxiaJS.gallery.changeURL = function( fileID ) { var href = jQuery( '.wpeo-gallery .edit-link' ).attr( 'href' ); var tmpHREF = href.split( '?' ); href = tmpHREF[0] += "?item=" + fileID + "&mode=edit"; jQuery( '.wpeo-gallery .edit-link' ).attr( 'href', href ); }; window.eoxiaJS.gallery.checkIsFeaturedMedia = function( fileID ) { var mainFeaturedMediaID = jQuery( '.wpeo-gallery input.main-thumbnail-id' ).val(); if ( mainFeaturedMediaID == fileID ) { jQuery( '.wpeo-gallery .featured-thumbnail i' ).removeClass( 'fa-star-o' ); jQuery( '.wpeo-gallery .featured-thumbnail i' ).addClass( 'fa-star' ); } else { jQuery( '.wpeo-gallery .featured-thumbnail i' ).removeClass( 'fa-star' ); jQuery( '.wpeo-gallery .featured-thumbnail i' ).addClass( 'fa-star-o' ); } } /** * Le callback en cas de réussite à la requête Ajax "dissociate_file". * Remplaces les boutons pour ouvrir la popup "galerie" * * @param {HTMLDivElement} triggeredElement L'élement HTML déclenchant la requête Ajax. * @param {Object} response Les données renvoyées par la requête Ajax. * @return {void} * * @since 0.1.0-alpha * @version 1.0.0 */ window.eoxiaJS.gallery.dissociatedFileSuccess = function( element, response ) { if ( response.data.close_popup ) { jQuery( '.wpeo-gallery' ).remove(); } else { jQuery( '.wpeo-gallery .image-list .current' ).remove(); jQuery( '.wpeo-gallery .next' ).click(); jQuery( '.wpeo-gallery input.main-thumbnail-id' ).val( jQuery( '.wpeo-gallery .current' ).attr( 'data-id' ) ); window.eoxiaJS.gallery.checkIsFeaturedMedia( jQuery( '.wpeo-gallery .current' ).attr( 'data-id' ) ); } window.eoxiaJS.upload.refreshButton( response.data ); }; /** * Le callback en cas de réussite à la requête Ajax "eo_set_thumbnail". * Remplaces les boutons pour ouvrir la popup "galerie" * * @param {HTMLDivElement} triggeredElement L'élement HTML déclenchant la requête Ajax. * @param {Object} response Les données renvoyées par la requête Ajax. * @return {void} * * @since 0.1.0-alpha * @version 0.1.0-alpha */ window.eoxiaJS.gallery.successfulSetThumbnail = function( element, response ) { window.eoxiaJS.upload.refreshButton( response.data ); jQuery( '.wpeo-gallery input.main-thumbnail-id' ).val( response.data.file_id ); window.eoxiaJS.gallery.checkIsFeaturedMedia( response.data.file_id ); };