@@ -1318,9 +1272,6 @@ function CommentBox( props ) {
* This function should be called once to initialize the video engagement store.
* It is called automatically on page load by the Godam plugin.
*/
-export async function engagement() {
- const engagementStoreInstance = await engagementStore.init();
- // Dispatch custom event to notify that the engagement store is initialized.
- document.dispatchEvent( new CustomEvent( 'godamEngagementStoreInitialized', { detail: { engagementStoreInstance } } ) );
- return engagementStoreInstance;
+export function engagement() {
+ return engagementStore.init();
}
diff --git a/assets/src/js/godam-player/managers/configurationManager.js b/assets/src/js/godam-player/managers/configurationManager.js
index 0942ac4da..77d813ed6 100644
--- a/assets/src/js/godam-player/managers/configurationManager.js
+++ b/assets/src/js/godam-player/managers/configurationManager.js
@@ -77,13 +77,7 @@ export default class ConfigurationManager {
this.videoSetupControls = {
...videoSetupControls,
sources,
- // Disable native text tracks to use Video.js custom UI (crucial for Safari/iOS hover menus)
- nativeTextTracks: false,
- // Ensure video plays inline on mobile devices instead of forcing native fullscreen
- playsinline: true,
html5: {
- // Redundant but safe: ensure HTML5 tech also respects custom text tracks
- nativeTextTracks: false,
vhs: {
bandwidth: 14_000_000, // Pretend network can do ~14 Mbps at startup
bandwidthVariance: 1.0, // allow renditions close to estimate
@@ -91,19 +85,6 @@ export default class ConfigurationManager {
},
},
};
-
- const isIOS = /iPad|iPhone|iPod/.test( navigator.userAgent ) && ! window.MSStream;
- const isSafari = /^((?!chrome|android).)*safari/i.test( navigator.userAgent );
-
- if ( isIOS || isSafari ) {
- // forces VHS even on Safari and iOS devices
- // This will override native HLS playback with VHS to support features like quality selection.
- this.videoSetupControls.html5.vhs.overrideNative = true;
- this.videoSetupControls.html5.nativeAudioTracks = false;
- this.videoSetupControls.html5.nativeVideoTracks = false;
- this.videoSetupControls.html5.nativeTextTracks = false;
- }
-
this.isPreviewEnabled = this.videoSetupOptions?.preview;
this.ensureControlBarDefaults();
diff --git a/assets/src/js/godam-player/managers/controlsManager.js b/assets/src/js/godam-player/managers/controlsManager.js
index c01b3a4cc..d62f1da5e 100644
--- a/assets/src/js/godam-player/managers/controlsManager.js
+++ b/assets/src/js/godam-player/managers/controlsManager.js
@@ -95,57 +95,29 @@ export default class ControlsManager {
const videoContainer = e.target.closest( '.video-js' );
const godamVideoContainer = e.target.closest( '.easydam-video-container' );
- // Determine current fullscreen state by checking for fullscreen classes
+ // Check both containers for fullscreen classes
const isFullscreen = ( videoContainer && videoContainer.classList.contains( 'vjs-fullscreen' ) );
if ( isFullscreen ) {
- // EXIT FULLSCREEN MODE
-
- // Remove fullscreen CSS classes from video containers
if ( videoContainer ) {
videoContainer.classList.remove( 'vjs-fullscreen' );
}
if ( godamVideoContainer ) {
godamVideoContainer.classList.remove( 'godam-video-fullscreen' );
}
-
- // RESTORE BACKGROUND SCROLLING (iOS-compatible method)
- // Step 1: Get the saved scroll position from body's top style
- const scrollY = document.body.style.top;
- // Step 2: Reset all scroll-prevention styles
+ // Restore scrolling
document.body.style.overflow = '';
- document.body.style.position = '';
- document.body.style.top = '';
- document.body.style.width = '';
- document.documentElement.style.overflow = '';
- // Step 3: Restore the original scroll position (multiply by -1 because it was stored as negative)
- if ( scrollY ) {
- window.scrollTo( 0, parseInt( scrollY || '0' ) * -1 );
- }
} else {
- // ENTER FULLSCREEN MODE
-
- // Add fullscreen CSS classes to video containers
if ( videoContainer ) {
videoContainer.classList.add( 'vjs-fullscreen' );
}
if ( godamVideoContainer ) {
godamVideoContainer.classList.add( 'godam-video-fullscreen' );
}
-
- // PREVENT BACKGROUND SCROLLING (robust iOS method)
- // iOS Safari doesn't respect overflow: hidden alone, so we use position: fixed
- // Step 1: Save current scroll position
- const scrollY = window.scrollY;
- // Step 2: Prevent scrolling by fixing body position and offsetting it
+ // Prevent scrolling on iOS
document.body.style.overflow = 'hidden';
- document.documentElement.style.overflow = 'hidden';
- document.body.style.position = 'fixed';
- document.body.style.top = `-${ scrollY }px`; // Negative offset to keep content in place
- document.body.style.width = '100%'; // Prevent horizontal scrollbar
}
-
- // Notify other components about fullscreen state change
+ // Trigger customfullscreenchange event on the VideoJS player
this.player().trigger( 'customfullscreenchange' );
}
}
@@ -173,13 +145,9 @@ export default class ControlsManager {
}
handleClick( e ) {
- // Find the video containers that need fullscreen styling removed
const videoContainer = e.target.closest( '.video-js' );
const godamVideoContainer = e.target.closest( '.easydam-video-container' );
- // EXIT FULLSCREEN MODE (always exit when this button is clicked)
-
- // Remove fullscreen CSS classes from video containers
if ( videoContainer ) {
videoContainer.classList.remove( 'vjs-fullscreen' );
}
@@ -187,21 +155,9 @@ export default class ControlsManager {
godamVideoContainer.classList.remove( 'godam-video-fullscreen' );
}
- // RESTORE BACKGROUND SCROLLING (iOS-compatible method)
- // Step 1: Get the saved scroll position from body's top style
- const scrollY = document.body.style.top;
- // Step 2: Reset all scroll-prevention styles
+ // Restore scrolling
document.body.style.overflow = '';
- document.body.style.position = '';
- document.body.style.top = '';
- document.body.style.width = '';
- document.documentElement.style.overflow = '';
- // Step 3: Restore the original scroll position (multiply by -1 because it was stored as negative)
- if ( scrollY ) {
- window.scrollTo( 0, parseInt( scrollY || '0' ) * -1 );
- }
-
- // Notify other components about fullscreen state change
+ // Trigger customfullscreenchange event on the VideoJS player
this.player().trigger( 'customfullscreenchange' );
}
}
@@ -246,81 +202,36 @@ export default class ControlsManager {
* Setup iOS dynamic viewport height variable (--vh)
* Ensures fullscreen container height matches the visible viewport
*/
- /**
- * Setup dynamic viewport height tracking for iOS devices
- *
- * PROBLEM: On iOS Safari, the viewport height changes dynamically when:
- * - Address bar collapses/expands during scrolling
- * - On-screen keyboard appears/disappears
- * - Device rotates between portrait/landscape
- *
- * SOLUTION: Use the visualViewport API (iOS 13+) which provides accurate
- * viewport dimensions that account for dynamic UI elements. This ensures
- * fullscreen containers always fill the available screen space.
- */
setupIOSViewportHeight() {
- /**
- * Calculate and update the CSS custom property --vh with current viewport height
- *
- * This function is called whenever the viewport size changes to ensure
- * the fullscreen player container always matches the visible viewport.
- */
const setViewportHeight = () => {
- // Get accurate viewport height accounting for dynamic UI elements
- let vh;
-
- // PREFERRED: Use visualViewport API (iOS 13+, modern browsers)
- // - Accounts for on-screen keyboard
- // - Accounts for dynamic address bar (iOS Safari)
- // - Accounts for pinch-to-zoom scaling
- if ( window.visualViewport ) {
- vh = window.visualViewport.height * 0.01; // Convert to vh units (1% of viewport height)
- } else {
- // FALLBACK: Use window.innerHeight (older browsers)
- // Less accurate but better than nothing
- vh = window.innerHeight * 0.01;
- }
-
- // Set CSS custom property that can be used in stylesheets
- // Example usage: height: calc(var(--vh, 1vh) * 100);
+ // Calculate and set the custom CSS property --vh to match viewport height.
+ // Multiply by 0.01 to convert to viewport height percentage. (1vh = 1% of viewport height).
+ const vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty( '--vh', `${ vh }px` );
};
- // INITIALIZATION: Set viewport height immediately when called
+ // Initialize on load
setViewportHeight();
- // EVENT LISTENER 1: visualViewport API (most accurate, iOS 13+)
- if ( window.visualViewport ) {
- // Listen for viewport resize events (address bar, keyboard, etc.)
- window.visualViewport.addEventListener( 'resize', setViewportHeight );
-
- // Also listen for scroll events as viewport can change during scrolling
- window.visualViewport.addEventListener( 'scroll', setViewportHeight );
- }
-
- // EVENT LISTENER 2: Window resize (fallback for older browsers)
- // Use requestAnimationFrame for smooth updates instead of setTimeout
+ // Debounced resize handler
let resizeTimer = null;
window.addEventListener( 'resize', () => {
- // Cancel previous animation frame to debounce rapid events
if ( resizeTimer ) {
- cancelAnimationFrame( resizeTimer );
+ clearTimeout( resizeTimer );
}
- // Schedule update for next animation frame (smooth, performant)
- resizeTimer = requestAnimationFrame( setViewportHeight );
- }, { passive: true } ); // passive: true for better scroll performance
+ resizeTimer = setTimeout( setViewportHeight, 100 );
+ }, { passive: true } );
- // EVENT LISTENER 3: Orientation changes (device rotation)
+ // Handle orientation changes
if ( screen.orientation ) {
- // Modern Screen Orientation API (preferred)
screen.orientation.addEventListener( 'change', () => {
- // Delay slightly to allow iOS to finish recalculating viewport
+ // Give iOS a moment to recalc innerHeight
setTimeout( setViewportHeight, 200 );
} );
} else {
- // FALLBACK: Legacy orientationchange event
+ // Fallback for browsers that don't support ScreenOrientation API
window.addEventListener( 'orientationchange', () => {
- // Delay slightly to allow iOS to finish recalculating viewport
+ // Give iOS a moment to recalc innerHeight
setTimeout( setViewportHeight, 200 );
} );
}
@@ -537,33 +448,19 @@ export default class ControlsManager {
* @param {number} newHeight - New height value
*/
setupStandardControlLayout( playButton, skipButtons, newWidth, newHeight ) {
- const skin = this.config.videoSetupOptions?.playerSkin;
-
- if ( skin === PLAYER_SKINS.MINIMAL ) {
- // For Minimal skin, center the play button and skip buttons vertically and horizontally
- if ( playButton ) {
- // Use -15px offset for play button and -20px for skip buttons to align their centers
- // The play button is typically smaller than the skip button containers
- playButton.style.setProperty( 'bottom', `${ ( newHeight / 2 ) - 15 }px` );
- playButton.style.setProperty( 'left', `${ ( newWidth / 2 ) - 20 }px` );
- }
-
+ if ( this.config.videoSetupOptions?.playerSkin === PLAYER_SKINS.MINIMAL ) {
+ playButton.style.setProperty( 'bottom', `${ ( newHeight / 2 ) + 4 }px` );
skipButtons.forEach( ( button ) => {
- // Align skip buttons to the same vertical center as the play button
- button.style.setProperty( 'bottom', `${ ( newHeight / 2 ) - 20 }px` );
+ button.style.setProperty( 'bottom', `${ ( newHeight / 2 ) - 5 }px` );
} );
- } else if ( skin === PLAYER_SKINS.DEFAULT ) {
- // For Default skin, ONLY center the skip buttons. Play button stays at bottom left (CSS).
- skipButtons.forEach( ( button ) => {
- button.style.setProperty( 'bottom', `${ ( newHeight / 2 ) - 20 }px` );
- } );
- } else {
- // For other non-default skins
- if ( playButton ) {
- playButton.style.setProperty( 'bottom', `${ newHeight / 2 }px` );
- playButton.style.setProperty( 'left', `${ ( newWidth / 2 ) - 20 }px` );
- }
+ }
+
+ if ( this.config.videoSetupOptions?.playerSkin !== PLAYER_SKINS.DEFAULT ) {
+ playButton.style.setProperty( 'bottom', `${ newHeight / 2 }px` );
+ playButton.style.setProperty( 'left', `${ ( newWidth / 2 ) - 20 }px` );
+ }
+ if ( this.config.videoSetupOptions?.playerSkin !== PLAYER_SKINS.MINIMAL ) {
skipButtons.forEach( ( button ) => {
button.style.setProperty( 'bottom', `${ newHeight / 2 }px` );
} );
diff --git a/assets/src/js/godam-player/managers/eventsManager.js b/assets/src/js/godam-player/managers/eventsManager.js
index 2d83c2c97..e7068a3bd 100644
--- a/assets/src/js/godam-player/managers/eventsManager.js
+++ b/assets/src/js/godam-player/managers/eventsManager.js
@@ -54,7 +54,6 @@ export default class EventsManager {
this.onPlayerConfigurationSetup = callbacks.onPlayerConfigurationSetup;
this.onTimeUpdate = callbacks.onTimeUpdate;
this.onFullscreenChange = callbacks.onFullscreenChange;
- this.onVideoResize = callbacks.onVideoResize;
this.onPlay = callbacks.onPlay;
this.onControlsMove = callbacks.onControlsMove;
}
@@ -104,17 +103,12 @@ export default class EventsManager {
this.player.on( 'resize', () => this.handleVideoResize() );
window.addEventListener( 'resize', () => this.handleVideoResize() );
this.player.on( 'fullscreenchange', () => this.handleVideoResize() );
- this.player.on( 'customfullscreenchange', () => this.handleVideoResize() );
}
/**
* Handle video resize events
*/
handleVideoResize() {
- if ( this.onVideoResize ) {
- this.onVideoResize();
- }
-
// Skip if video is fullscreen or classic skin
if ( ! this.player ||
typeof this.player.isFullscreen !== 'function' ||
@@ -125,7 +119,7 @@ export default class EventsManager {
// Handle control bar positioning during fullscreen
this.handleFullscreenControlBar();
- // Check container width constraint for other skins
+ // Check container width constraint
const videoContainer = this.video.closest( '.easydam-video-container' );
if ( videoContainer?.offsetWidth > 480 ) {
return;
diff --git a/assets/src/js/godam-player/managers/layers/formLayerManager.js b/assets/src/js/godam-player/managers/layers/formLayerManager.js
index 4fb170f4f..eb3251a74 100644
--- a/assets/src/js/godam-player/managers/layers/formLayerManager.js
+++ b/assets/src/js/godam-player/managers/layers/formLayerManager.js
@@ -93,17 +93,6 @@ export default class FormLayerManager {
layerObj.layerElement.appendChild( skipButton );
}
- /**
- * Create arrow icon for skip button
- *
- * @return {HTMLElement} Created arrow icon element
- */
- createArrowIcon() {
- const arrowIcon = document.createElement( 'span' );
- arrowIcon.innerHTML = `
`;
- return arrowIcon;
- }
-
/**
* Create skip button
*
@@ -114,7 +103,10 @@ export default class FormLayerManager {
const skipButton = document.createElement( 'button' );
skipButton.textContent = skipText;
skipButton.classList.add( 'skip-button' );
- skipButton.appendChild( this.createArrowIcon() );
+
+ const arrowIcon = document.createElement( 'span' );
+ arrowIcon.innerHTML = `
`;
+ skipButton.appendChild( arrowIcon );
return skipButton;
}
@@ -128,22 +120,7 @@ export default class FormLayerManager {
setupFormObserver( layerObj, skipButton ) {
const observer = new MutationObserver( () => {
if ( this.hasConfirmationMessage( layerObj.layerElement ) ) {
- // Update button text while preserving the arrow icon
- let textNode = null;
- for ( let i = 0; i < skipButton.childNodes.length; i++ ) {
- if ( skipButton.childNodes[ i ].nodeType === Node.TEXT_NODE ) {
- textNode = skipButton.childNodes[ i ];
- break;
- }
- }
-
- if ( textNode ) {
- textNode.textContent = __( 'Continue', 'godam' );
- } else {
- // Fallback: if no text node exists, update all content
- skipButton.textContent = __( 'Continue', 'godam' );
- skipButton.appendChild( this.createArrowIcon() );
- }
+ skipButton.textContent = __( 'Continue', 'godam' );
skipButton.classList.remove( 'hidden' );
observer.disconnect();
}
@@ -182,8 +159,8 @@ export default class FormLayerManager {
// Special cases
const wpPollsForm = element.querySelector( '.wp-polls-form' );
- const wpPollsResult = element.querySelector( '.wp-polls-ans' );
- if ( ! wpPollsForm && wpPollsResult ) {
+ const wpPollsAnswer = element.querySelector( '.wp-polls-answer' );
+ if ( ! wpPollsForm && wpPollsAnswer ) {
return true;
}
diff --git a/assets/src/js/godam-player/managers/layers/hotspotLayerManager.js b/assets/src/js/godam-player/managers/layers/hotspotLayerManager.js
index 7880de4df..446ddbb20 100644
--- a/assets/src/js/godam-player/managers/layers/hotspotLayerManager.js
+++ b/assets/src/js/godam-player/managers/layers/hotspotLayerManager.js
@@ -3,18 +3,13 @@
*/
import { __, sprintf } from '@wordpress/i18n';
-/**
- * Internal dependencies
- */
-import { HOTSPOT_CONSTANTS } from '../../utils/constants';
-
/**
* Hotspot Layer Manager
* Handles hotspot layer functionality including creation, positioning, and interaction
*/
export default class HotspotLayerManager {
- static BASE_WIDTH = HOTSPOT_CONSTANTS.BASE_WIDTH;
- static BASE_HEIGHT = HOTSPOT_CONSTANTS.BASE_HEIGHT;
+ static BASE_WIDTH = 800;
+ static BASE_HEIGHT = 600;
constructor( player, isDisplayingLayers, currentPlayerVideoInstanceId ) {
this.player = player;
@@ -94,17 +89,7 @@ export default class HotspotLayerManager {
}
} );
- // Use requestAnimationFrame to wait for layout to stabilize after fullscreen resize
- let framesToWait = 2;
- const waitForResize = () => {
- if ( framesToWait > 0 ) {
- framesToWait--;
- window.requestAnimationFrame( waitForResize );
- } else {
- this.updateHotspotPositions();
- }
- };
- window.requestAnimationFrame( waitForResize );
+ this.updateHotspotPositions();
}
/**
@@ -138,64 +123,6 @@ export default class HotspotLayerManager {
} );
}
- /**
- * Compute content rectangle
- *
- * @return {Object|null} Content rectangle {left, top, width, height} or null
- */
- computeContentRect() {
- const videoEl = this.player.tech( true )?.el() || this.player.el().querySelector( 'video' );
- const containerEl = this.player.el();
-
- if ( ! videoEl || ! containerEl ) {
- return null;
- }
-
- const nativeW = videoEl.videoWidth || this.player.videoWidth() || 0;
- const nativeH = videoEl.videoHeight || this.player.videoHeight() || 0;
-
- const elW = containerEl.offsetWidth;
- const elH = containerEl.offsetHeight;
-
- // If video dimensions aren't loaded yet, use full container
- if ( ! nativeW || ! nativeH ) {
- return {
- left: 0,
- top: 0,
- width: elW,
- height: elH,
- };
- }
-
- const videoAspectRatio = nativeW / nativeH;
- const containerAspectRatio = elW / elH;
-
- let contentW, contentH, offsetX, offsetY;
-
- if ( containerAspectRatio > videoAspectRatio ) {
- // Pillarboxed (black bars on left/right)
- contentH = elH;
- contentW = elH * videoAspectRatio;
- offsetX = ( elW - contentW ) / 2;
- offsetY = 0;
- } else {
- // Letterboxed (black bars on top/bottom)
- contentW = elW;
- contentH = elW / videoAspectRatio;
- offsetX = 0;
- offsetY = ( elH - contentH ) / 2;
- }
-
- const result = {
- left: Math.round( offsetX ),
- top: Math.round( offsetY ),
- width: Math.round( contentW ),
- height: Math.round( contentH ),
- };
-
- return result;
- }
-
/**
* Create hotspot element
*
@@ -212,39 +139,18 @@ export default class HotspotLayerManager {
hotspotDiv.classList.add( 'hotspot', 'circle' );
hotspotDiv.style.position = 'absolute';
- const contentRect = this.computeContentRect();
-
// Positioning
const fallbackPosX = hotspot.oPosition?.x ?? hotspot.position.x;
const fallbackPosY = hotspot.oPosition?.y ?? hotspot.position.y;
-
- let fallbackDiameter = hotspot.oSize?.diameter ?? hotspot.size?.diameter;
- if ( ! fallbackDiameter ) {
- if ( hotspot.unit === 'percent' && contentRect ) {
- fallbackDiameter = ( HOTSPOT_CONSTANTS.DEFAULT_DIAMETER_PX / contentRect.width ) * 100;
- } else {
- fallbackDiameter = hotspot.unit === 'percent' ? HOTSPOT_CONSTANTS.DEFAULT_DIAMETER_PERCENT : HOTSPOT_CONSTANTS.DEFAULT_DIAMETER_PX;
- }
- }
-
- let pixelX, pixelY, pixelDiameter;
-
- if ( hotspot.unit === 'percent' && contentRect ) {
- // New percentage-based positioning
- pixelX = contentRect.left + ( ( fallbackPosX / 100 ) * contentRect.width );
- pixelY = contentRect.top + ( ( fallbackPosY / 100 ) * contentRect.height );
- pixelDiameter = ( fallbackDiameter / 100 ) * contentRect.width;
- } else {
- // Legacy pixel-based positioning (relative to 800x600)
- // We now map these to the contentRect instead of the full container to avoid black bars
- const effectiveRect = contentRect || { left: 0, top: 0, width: containerWidth, height: containerHeight };
- pixelX = effectiveRect.left + ( ( fallbackPosX / baseWidth ) * effectiveRect.width );
- pixelY = effectiveRect.top + ( ( fallbackPosY / baseHeight ) * effectiveRect.height );
- pixelDiameter = ( fallbackDiameter / baseWidth ) * effectiveRect.width;
- }
+ const pixelX = ( fallbackPosX / baseWidth ) * containerWidth;
+ const pixelY = ( fallbackPosY / baseHeight ) * containerHeight;
hotspotDiv.style.left = `${ pixelX }px`;
hotspotDiv.style.top = `${ pixelY }px`;
+
+ // Sizing
+ const fallbackDiameter = hotspot.oSize?.diameter ?? hotspot.size?.diameter ?? 48;
+ const pixelDiameter = ( fallbackDiameter / baseWidth ) * containerWidth;
hotspotDiv.style.width = `${ pixelDiameter }px`;
hotspotDiv.style.height = `${ pixelDiameter }px`;
@@ -351,100 +257,57 @@ export default class HotspotLayerManager {
}
/**
- * Position tooltip relative to hotspot, constrained within the video container
+ * Position tooltip relative to hotspot
*
* @param {HTMLElement} hotspotDiv - The hotspot element for positioning reference
* @param {HTMLElement} tooltipDiv - The tooltip element to position
*/
positionTooltip( hotspotDiv, tooltipDiv ) {
- const videoContainer = this.player.el();
- const containerRect = videoContainer.getBoundingClientRect();
const hotspotRect = hotspotDiv.getBoundingClientRect();
-
- // Temporarily make tooltip visible to measure it accurately
- const originalVisibility = tooltipDiv.style.visibility;
- const originalOpacity = tooltipDiv.style.opacity;
- tooltipDiv.style.visibility = 'hidden';
- tooltipDiv.style.opacity = '0';
- tooltipDiv.style.display = 'block';
-
const tooltipRect = tooltipDiv.getBoundingClientRect();
+ const viewportWidth = window.innerWidth;
- // Restore original styles
- tooltipDiv.style.visibility = originalVisibility;
- tooltipDiv.style.opacity = originalOpacity;
-
- // Calculate space relative to video container (not viewport)
- const spaceAbove = hotspotRect.top - containerRect.top;
- const spaceBelow = containerRect.bottom - hotspotRect.bottom;
-
- const tooltipHeight = tooltipRect.height;
- const tooltipWidth = tooltipRect.width;
-
- // Minimum padding from container edges
- const edgePadding = 8;
-
- // Reset all positioning classes and styles first
- tooltipDiv.classList.remove( 'tooltip-top', 'tooltip-bottom', 'tooltip-left', 'tooltip-right', 'no-arrow' );
- tooltipDiv.style.top = '';
- tooltipDiv.style.bottom = '';
- tooltipDiv.style.left = '';
- tooltipDiv.style.right = '';
- tooltipDiv.style.transform = '';
-
- // Vertical positioning - prefer above, fallback to below
- if ( spaceAbove >= tooltipHeight + edgePadding ) {
- // Place above
- tooltipDiv.style.bottom = '100%';
- tooltipDiv.style.top = 'auto';
- tooltipDiv.classList.add( 'tooltip-top' );
- } else if ( spaceBelow >= tooltipHeight + edgePadding ) {
+ // Vertical positioning
+ const spaceAbove = hotspotRect.top;
+ if ( spaceAbove < tooltipRect.height + 10 ) {
// Place below
tooltipDiv.style.bottom = 'auto';
tooltipDiv.style.top = '100%';
tooltipDiv.classList.add( 'tooltip-bottom' );
- } else if ( spaceAbove >= spaceBelow ) {
+ tooltipDiv.classList.remove( 'tooltip-top' );
+ } else {
+ // Place above
tooltipDiv.style.bottom = '100%';
tooltipDiv.style.top = 'auto';
tooltipDiv.classList.add( 'tooltip-top' );
- } else {
- tooltipDiv.style.bottom = 'auto';
- tooltipDiv.style.top = '100%';
- tooltipDiv.classList.add( 'tooltip-bottom' );
+ tooltipDiv.classList.remove( 'tooltip-bottom' );
}
- // Horizontal positioning - calculate where tooltip would overflow
- const hotspotCenterInContainer = ( hotspotRect.left + ( hotspotRect.width / 2 ) ) - containerRect.left;
- const tooltipHalfWidth = tooltipWidth / 2;
+ // Horizontal positioning
+ const spaceLeft = hotspotRect.left;
+ const spaceRight = viewportWidth - hotspotRect.right;
- // Check if centered tooltip would overflow left or right of container
- const wouldOverflowLeft = ( hotspotCenterInContainer - tooltipHalfWidth ) < edgePadding;
- const wouldOverflowRight = ( hotspotCenterInContainer + tooltipHalfWidth ) > ( containerRect.width - edgePadding );
-
- if ( wouldOverflowLeft && wouldOverflowRight ) {
- // Tooltip is wider than available space, center it as best as possible
- tooltipDiv.style.left = '50%';
- tooltipDiv.style.transform = 'translateX(-50%)';
- tooltipDiv.classList.add( 'no-arrow' );
- } else if ( wouldOverflowLeft ) {
- // Align tooltip to the left edge of hotspot, but ensure it stays within container
- const leftOffset = Math.max( edgePadding - ( hotspotRect.left - containerRect.left ), 0 );
- tooltipDiv.style.left = `${ leftOffset }px`;
- tooltipDiv.style.right = 'auto';
+ if ( spaceLeft < 10 ) {
+ // Adjust to the right
+ tooltipDiv.style.left = '0';
tooltipDiv.style.transform = 'translateX(0)';
- tooltipDiv.classList.add( 'tooltip-left', 'no-arrow' );
- } else if ( wouldOverflowRight ) {
- // Align tooltip to the right edge of hotspot, but ensure it stays within container
- const rightOffset = Math.max( edgePadding - ( containerRect.right - hotspotRect.right ), 0 );
+ tooltipDiv.classList.add( 'tooltip-left' );
+ tooltipDiv.classList.remove( 'tooltip-right' );
+ tooltipDiv.classList.add( 'no-arrow' );
+ } else if ( spaceRight < 10 ) {
+ // Adjust to the left
tooltipDiv.style.left = 'auto';
- tooltipDiv.style.right = `${ rightOffset }px`;
+ tooltipDiv.style.right = '0';
tooltipDiv.style.transform = 'translateX(0)';
- tooltipDiv.classList.add( 'tooltip-right', 'no-arrow' );
+ tooltipDiv.classList.add( 'tooltip-right' );
+ tooltipDiv.classList.remove( 'tooltip-left' );
+ tooltipDiv.classList.add( 'no-arrow' );
} else {
- // Centered horizontally - tooltip fits within container
+ // Centered horizontally
tooltipDiv.style.left = '50%';
tooltipDiv.style.right = 'auto';
tooltipDiv.style.transform = 'translateX(-50%)';
+ tooltipDiv.classList.remove( 'tooltip-left', 'tooltip-right', 'no-arrow' );
}
}
@@ -459,8 +322,6 @@ export default class HotspotLayerManager {
const baseWidth = HotspotLayerManager.BASE_WIDTH;
const baseHeight = HotspotLayerManager.BASE_HEIGHT;
- const contentRect = this.computeContentRect();
-
this.hotspotLayers.forEach( ( layerObj ) => {
const hotspotDivs = layerObj.layerElement.querySelectorAll( '.hotspot' );
hotspotDivs.forEach( ( hotspotDiv, index ) => {
@@ -469,26 +330,14 @@ export default class HotspotLayerManager {
// Recalc position
const fallbackPosX = hotspot.oPosition?.x ?? hotspot.position.x;
const fallbackPosY = hotspot.oPosition?.y ?? hotspot.position.y;
- const fallbackDiameter = hotspot.oSize?.diameter ?? hotspot.size?.diameter ?? 48;
-
- let pixelX, pixelY, pixelDiameter;
-
- if ( hotspot.unit === 'percent' && contentRect ) {
- // New percentage-based positioning
- pixelX = contentRect.left + ( ( fallbackPosX / 100 ) * contentRect.width );
- pixelY = contentRect.top + ( ( fallbackPosY / 100 ) * contentRect.height );
- pixelDiameter = ( fallbackDiameter / 100 ) * contentRect.width;
- } else {
- // Legacy pixel-based positioning
- // We now map these to the contentRect instead of the full container to avoid black bars
- const effectiveRect = contentRect || { left: 0, top: 0, width: containerWidth, height: containerHeight };
- pixelX = effectiveRect.left + ( ( fallbackPosX / baseWidth ) * effectiveRect.width );
- pixelY = effectiveRect.top + ( ( fallbackPosY / baseHeight ) * effectiveRect.height );
- pixelDiameter = ( fallbackDiameter / baseWidth ) * effectiveRect.width;
- }
-
+ const pixelX = ( fallbackPosX / baseWidth ) * containerWidth;
+ const pixelY = ( fallbackPosY / baseHeight ) * containerHeight;
hotspotDiv.style.left = `${ pixelX }px`;
hotspotDiv.style.top = `${ pixelY }px`;
+
+ // Recalc size
+ const fallbackDiameter = hotspot.oSize?.diameter ?? hotspot.size?.diameter ?? 48;
+ const pixelDiameter = ( fallbackDiameter / baseWidth ) * containerWidth;
hotspotDiv.style.width = `${ pixelDiameter }px`;
hotspotDiv.style.height = `${ pixelDiameter }px`;
diff --git a/assets/src/js/godam-player/managers/layersManager.js b/assets/src/js/godam-player/managers/layersManager.js
index e184e83c3..64a2dd432 100644
--- a/assets/src/js/godam-player/managers/layersManager.js
+++ b/assets/src/js/godam-player/managers/layersManager.js
@@ -122,13 +122,6 @@ export default class LayersManager {
this.hotspotLayerManager.handleHotspotLayersTimeUpdate( currentTime );
}
- /**
- * Handle video resize events
- */
- handleVideoResize() {
- this.hotspotLayerManager.updateHotspotPositions();
- }
-
/**
* Handle fullscreen changes for layers
*/
diff --git a/assets/src/js/godam-player/managers/menuButtonHover.js b/assets/src/js/godam-player/managers/menuButtonHover.js
index 0cbd35f6c..bbc421da0 100644
--- a/assets/src/js/godam-player/managers/menuButtonHover.js
+++ b/assets/src/js/godam-player/managers/menuButtonHover.js
@@ -9,7 +9,7 @@ class MenuButtonHoverManager {
this.player = player;
// Add more menu button component names as needed
- this.menuButtons = [ 'SubsCapsButton', 'SettingsButton', 'CaptionsButton', 'SubtitlesButton' ];
+ this.menuButtons = [ 'SubsCapsButton', 'SettingsButton' ];
this.init();
}
@@ -17,24 +17,12 @@ class MenuButtonHoverManager {
init() {
this.menuButtons.forEach( ( buttonName ) => {
const button = this.player.controlBar?.getChild( buttonName );
- let btnEl = button?.el();
- // Fallback to DOM search if component not found via getChild (common in Safari/iOS)
- if ( ! btnEl ) {
- const classMap = {
- SubsCapsButton: '.vjs-subs-caps-button',
- SettingsButton: '.vjs-settings-button',
- CaptionsButton: '.vjs-captions-button',
- SubtitlesButton: '.vjs-subtitles-button',
- };
-
- const className = classMap[ buttonName ] || null;
-
- if ( className ) {
- btnEl = this.player.el().querySelector( className );
- }
+ if ( ! button ) {
+ return;
}
+ const btnEl = button.el();
if ( ! btnEl ) {
return;
}
@@ -100,15 +88,12 @@ class MenuButtonHoverManager {
if ( ! isClickedOpen() ) {
menuEl.style.display = 'block';
menuEl.classList.add( 'vjs-lock-showing' );
- // Add vjs-hover class to button to maintain active state in Safari
- btnEl.classList.add( 'vjs-hover' );
this.closeOtherMenus( menuEl );
}
} );
btnEl.addEventListener( 'mouseleave', () => {
overBtn = false;
- btnEl.classList.remove( 'vjs-hover' );
setTimeout( update, 500 ); // small delay to allow moving between
} );
@@ -117,15 +102,12 @@ class MenuButtonHoverManager {
if ( ! isClickedOpen() ) {
menuEl.style.display = 'block';
menuEl.classList.add( 'vjs-lock-showing' );
- // Keep button in hover state while interacting with menu
- btnEl.classList.add( 'vjs-hover' );
this.closeOtherMenus( menuEl );
}
} );
menuEl.addEventListener( 'mouseleave', () => {
overMenu = false;
- btnEl.classList.remove( 'vjs-hover' );
setTimeout( update, 500 );
} );
diff --git a/assets/src/js/godam-player/managers/playerManager.js b/assets/src/js/godam-player/managers/playerManager.js
index e7761a653..92f97f723 100644
--- a/assets/src/js/godam-player/managers/playerManager.js
+++ b/assets/src/js/godam-player/managers/playerManager.js
@@ -385,10 +385,10 @@ export default class PlayerManager {
togglePlayPause( player ) {
if ( player.paused() ) {
player.play();
- this.showIndicator( player.el(), 'play-indicator', '
' );
+ this.showIndicator( player.el(), 'play-indicator', '
' );
} else {
player.pause();
- this.showIndicator( player.el(), 'pause-indicator', '
' );
+ this.showIndicator( player.el(), 'pause-indicator', '
' );
}
}
diff --git a/assets/src/js/godam-player/utils/constants.js b/assets/src/js/godam-player/utils/constants.js
index dc380b80a..2d8a5b9f3 100644
--- a/assets/src/js/godam-player/utils/constants.js
+++ b/assets/src/js/godam-player/utils/constants.js
@@ -26,18 +26,6 @@ export const FORM_TYPES = {
METFORM: 'metform',
};
-/**
- * Hotspot constants.
- */
-export const HOTSPOT_CONSTANTS = {
- DEFAULT_DIAMETER_PERCENT: 15,
- DEFAULT_DIAMETER_PX: 48,
- MIN_PX: 10,
- MIN_PERCENT_FALLBACK: 5,
- BASE_WIDTH: 800,
- BASE_HEIGHT: 600,
-};
-
/**
* Layer types.
*/
diff --git a/assets/src/js/godam-player/videoPlayer.js b/assets/src/js/godam-player/videoPlayer.js
index 5f42e59db..1b848ca86 100644
--- a/assets/src/js/godam-player/videoPlayer.js
+++ b/assets/src/js/godam-player/videoPlayer.js
@@ -149,13 +149,7 @@ export default class GodamVideoPlayer {
if ( isInModal ) {
const aspectRatio = window.innerWidth < 420 ? '9:16' : '16:9';
- // Check if aspect ratio is valid x:y format
- if ( ! /^\d+:\d+$/.test( aspectRatio ) ) {
- // eslint-disable-next-line no-console
- console.warn( `Invalid aspect ratio format: "${ aspectRatio }". Falling back to "16:9".` );
- } else {
- this.player.aspectRatio( aspectRatio );
- }
+ this.player.aspectRatio( aspectRatio );
}
}
@@ -195,13 +189,7 @@ export default class GodamVideoPlayer {
if ( ! isInModal ) {
const aspectRatio = this.configManager.videoSetupOptions?.aspectRatio || '16:9';
- // Check if aspect ratio is valid x:y format
- if ( ! /^\d+:\d+$/.test( aspectRatio ) ) {
- // eslint-disable-next-line no-console
- console.warn( `Invalid aspect ratio format: "${ aspectRatio }". Falling back to "16:9".` );
- } else {
- this.player.aspectRatio( aspectRatio );
- }
+ this.player.aspectRatio( aspectRatio );
}
}
@@ -251,7 +239,6 @@ export default class GodamVideoPlayer {
onPlayerConfigurationSetup: () => this.controlsManager.setupPlayerConfiguration(),
onTimeUpdate: ( currentTime ) => this.handleTimeUpdate( currentTime ),
onFullscreenChange: () => this.layersManager.handleFullscreenChange(),
- onVideoResize: () => this.layersManager.handleVideoResize(),
onPlay: () => this.layersManager.handlePlay(),
onControlsMove: () => this.controlsManager.moveVideoControls(),
} );
diff --git a/assets/src/js/godam-video-embed.js b/assets/src/js/godam-video-embed.js
deleted file mode 100644
index a38b4aaf8..000000000
--- a/assets/src/js/godam-video-embed.js
+++ /dev/null
@@ -1,390 +0,0 @@
-/**
- * GoDAM Video Embed Script
- *
- * Listens for scroll events on the video embed page and sends postMessage
- * to the parent window to trigger video navigation.
- *
- * @since 1.5.0
- */
-
-document.addEventListener( 'DOMContentLoaded', function() {
- // Only run if we're in an iframe
- if ( window.self === window.top ) {
- return;
- }
-
- // Scroll functionality with cooldown and threshold
- const SCROLL_COOLDOWN = 1000; // milliseconds
- const SCROLL_THRESHOLD = 280; // Minimum scroll distance to trigger
- let lastScrollTime = 0;
- let scrollTimeout;
- let accumulatedDelta = 0;
-
- // Helper function to check if an element is scrollable
- const isElementScrollable = ( element ) => {
- if ( ! element || element === document.body || element === document.documentElement ) {
- return false;
- }
-
- const style = window.getComputedStyle( element );
- const overflowY = style.overflowY;
- const overflowX = style.overflowX;
- const isScrollable = ( overflowY === 'auto' || overflowY === 'scroll' ) || ( overflowX === 'auto' || overflowX === 'scroll' );
-
- if ( ! isScrollable ) {
- return false;
- }
-
- // Check if element can actually scroll
- const canScrollVertically = element.scrollHeight > element.clientHeight;
- const canScrollHorizontally = element.scrollWidth > element.clientWidth;
-
- return canScrollVertically || canScrollHorizontally;
- };
-
- // Helper function to find the scrollable parent of an element
- const findScrollableParent = ( element ) => {
- let current = element;
- while ( current && current !== document.body && current !== document.documentElement ) {
- if ( isElementScrollable( current ) ) {
- return current;
- }
- current = current.parentElement;
- }
- return null;
- };
-
- // Helper function to check if element can scroll in the given direction
- const canScrollInDirection = ( element, deltaY ) => {
- if ( ! element ) {
- return false;
- }
-
- if ( deltaY > 0 ) {
- // Scrolling down - check if can scroll down
- return element.scrollTop < element.scrollHeight - element.clientHeight;
- }
- // Scrolling up - check if can scroll up
- return element.scrollTop > 0;
- };
-
- // Helper function to check if easydam-layer is visible (excluding hotspot-layer)
- const isGoDAMLayerVisible = () => {
- const layers = document.querySelectorAll( '.easydam-layer' );
- for ( const layer of layers ) {
- // Skip hotspot-layer
- if ( layer.classList.contains( 'hotspot-layer' ) ) {
- continue;
- }
- // Check if layer is visible
- const style = window.getComputedStyle( layer );
- if ( style.display !== 'none' && style.visibility !== 'hidden' ) {
- return true;
- }
- }
- return false;
- };
-
- // Helper function to check if any player is in fullscreen mode
- const isAnyPlayerFullscreen = () => {
- // Check if GoDAM API is available
- if ( ! window.GoDAMAPI ) {
- return false;
- }
-
- try {
- const players = window.GoDAMAPI.getAllPlayers();
- for ( const playerObj of players ) {
- if ( playerObj.player && playerObj.player.isFullscreen && playerObj.player.isFullscreen() ) {
- return true;
- }
- }
- } catch ( error ) {
- // If API call fails, assume not fullscreen
- return false;
- }
-
- return false;
- };
-
- // Handle wheel scroll events
- const handleScroll = ( event ) => {
- // Find the target element and check if it's within a scrollable container
- const target = event.target;
- const scrollableParent = findScrollableParent( target );
-
- // If we're scrolling within a scrollable element, check if it can scroll further
- if ( scrollableParent ) {
- const canScroll = canScrollInDirection( scrollableParent, event.deltaY );
- // If the scrollable element can still scroll, don't trigger navigation
- if ( canScroll ) {
- return;
- }
- // If the scrollable element is at its limit, prevent default and allow navigation
- event.preventDefault();
- event.stopPropagation();
- } else {
- // Not in a scrollable container, prevent default and allow navigation
- event.preventDefault();
- event.stopPropagation();
- }
-
- // Accumulate scroll delta
- accumulatedDelta += event.deltaY;
-
- // Clear any existing timeout
- clearTimeout( scrollTimeout );
-
- // Set a new timeout for debouncing
- scrollTimeout = setTimeout( () => {
- // Check if accumulated scroll meets threshold
- if ( Math.abs( accumulatedDelta ) < SCROLL_THRESHOLD ) {
- accumulatedDelta = 0;
- return;
- }
-
- const currentTime = Date.now();
- if ( currentTime - lastScrollTime < SCROLL_COOLDOWN ) {
- accumulatedDelta = 0;
- return;
- }
-
- // Don't send scroll event if easydam-layer is visible (excluding hotspot-layer)
- if ( isGoDAMLayerVisible() ) {
- accumulatedDelta = 0;
- return;
- }
-
- // Don't send scroll event if any player is in fullscreen mode
- if ( isAnyPlayerFullscreen() ) {
- accumulatedDelta = 0;
- return;
- }
-
- // Determine scroll direction
- if ( accumulatedDelta > 0 ) {
- // Scrolling down (next video)
- window.parent.postMessage( { type: 'godamScrollNext' }, window.location.origin );
- } else {
- // Scrolling up (previous video)
- window.parent.postMessage( { type: 'godamScrollPrevious' }, window.location.origin );
- }
-
- lastScrollTime = currentTime;
- accumulatedDelta = 0;
- }, 150 ); // Debounce delay
- };
-
- // Touch functionality for mobile
- let touchStartY = 0;
- let touchEndY = 0;
- let touchStartElement = null;
-
- const handleTouchStart = ( event ) => {
- touchStartY = event.touches[ 0 ].clientY;
- touchStartElement = event.target;
- };
-
- const handleTouchMove = ( event ) => {
- // Find the target element and check if it's within a scrollable container
- const target = event.target;
- const scrollableParent = findScrollableParent( target );
-
- // If we're touching within a scrollable element, allow normal scrolling
- if ( scrollableParent ) {
- // Check if the scrollable element can scroll
- const canScrollVertically = scrollableParent.scrollHeight > scrollableParent.clientHeight;
- if ( canScrollVertically ) {
- // Allow the scrollable element to handle the scroll
- return;
- }
- }
-
- // Not in a scrollable container or container can't scroll, prevent default
- event.preventDefault(); // Prevent background scroll
- event.stopPropagation(); // Prevent event bubbling
- };
-
- const handleTouchEnd = ( event ) => {
- touchEndY = event.changedTouches[ 0 ].clientY;
- const touchDiff = touchStartY - touchEndY;
-
- // Check if the touch started within a scrollable container
- if ( touchStartElement ) {
- const scrollableParent = findScrollableParent( touchStartElement );
- if ( scrollableParent ) {
- // Check if the scrollable element can scroll in the swipe direction
- const canScrollVertically = scrollableParent.scrollHeight > scrollableParent.clientHeight;
- if ( canScrollVertically ) {
- // Check if element can still scroll in the swipe direction
- const canScroll = canScrollInDirection( scrollableParent, touchDiff );
- if ( canScroll ) {
- // The scrollable element can still scroll, don't trigger navigation
- return;
- }
- }
- }
- }
-
- // Minimum swipe distance
- if ( Math.abs( touchDiff ) < SCROLL_THRESHOLD ) {
- return;
- }
-
- // Clear any existing timeout
- clearTimeout( scrollTimeout );
-
- // Set a new timeout for debouncing
- scrollTimeout = setTimeout( () => {
- const currentTime = Date.now();
- if ( currentTime - lastScrollTime < SCROLL_COOLDOWN ) {
- return;
- }
-
- // Don't send scroll event if easydam-layer is visible (excluding hotspot-layer)
- if ( isGoDAMLayerVisible() ) {
- return;
- }
-
- // Don't send scroll event if any player is in fullscreen mode
- if ( isAnyPlayerFullscreen() ) {
- return;
- }
-
- // Determine swipe direction
- if ( touchDiff > 0 ) {
- // Swiping up (next video)
- window.parent.postMessage( { type: 'godamScrollNext' }, window.location.origin );
- } else {
- // Swiping down (previous video)
- window.parent.postMessage( { type: 'godamScrollPrevious' }, window.location.origin );
- }
-
- lastScrollTime = currentTime;
- }, 150 ); // Debounce delay
- };
-
- // Add scroll listener
- document.addEventListener( 'wheel', handleScroll, { passive: false } );
-
- // Add touch listeners
- document.body.addEventListener( 'touchstart', handleTouchStart, { passive: true } );
- document.body.addEventListener( 'touchmove', handleTouchMove, { passive: false } );
- document.body.addEventListener( 'touchend', handleTouchEnd, { passive: false } );
-} );
-
-// Listen for GoDAM Player ready event to set up fullscreen change listener
-document.addEventListener( 'godamAllPlayersReady', () => {
- // Check if GoDAM API is available
- if ( ! window.GoDAMAPI ) {
- return;
- }
-
- // Get all ready players
- const players = window.GoDAMAPI.getAllPlayers();
-
- // Listen for fullscreen changes on all players
- players.forEach( ( playerObj ) => {
- if ( playerObj.player ) {
- // Listen for fullscreen change event
- playerObj.player.on( 'fullscreenchange', ( data ) => {
- // Send postMessage to parent window
- window.parent.postMessage( {
- type: 'godamFullscreenChange',
- isFullscreen: data.isFullscreen,
- attachmentId: playerObj.attachmentId,
- }, window.location.origin );
- } );
- }
- } );
-} );
-
-/**
- * Render CommentBox component on video embed page by default.
- *
- * @since 1.5.0
- */
-document.addEventListener( 'DOMContentLoaded', function() {
- const urlParams = new URLSearchParams( window.location.search );
- const videoId = urlParams.get( 'id' );
-
- if ( ! videoId ) {
- return;
- }
-
- const videoIdNum = parseInt( videoId, 10 );
- if ( ! videoIdNum || isNaN( videoIdNum ) ) {
- return;
- }
-
- // Create and show loading overlay
- const loadingOverlay = document.createElement( 'div' );
- loadingOverlay.className = 'godam-video-embed-loading';
- loadingOverlay.style.cssText = 'position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: #fff; z-index: 9999; display: flex; align-items: center; justify-content: center;';
-
- // Create spinner element
- const spinner = document.createElement( 'div' );
- spinner.className = 'godam-video-embed-spinner';
- loadingOverlay.appendChild( spinner );
-
- document.body.appendChild( loadingOverlay );
-
- // Function to hide loading overlay
- const hideLoadingOverlay = () => {
- if ( loadingOverlay && loadingOverlay.parentNode ) {
- loadingOverlay.style.opacity = '0';
- loadingOverlay.style.pointerEvents = 'none';
- loadingOverlay.style.transition = 'opacity 0.3s ease-out';
- setTimeout( () => {
- loadingOverlay.remove();
- }, 300 );
- }
- };
-
- // Listen for the engagement store to be initialized.
- document.addEventListener( 'godamEngagementStoreInitialized', renderCommentBox );
-
- // Render the comment box.
- function renderCommentBox() {
- // Check WordPress dependencies
- if ( typeof wp === 'undefined' || ! wp.data || ! wp.element?.createRoot ) {
- return;
- }
-
- const storeName = 'godam-video-engagement';
- const select = wp.data.select( storeName );
- const dispatch = wp.data.dispatch( storeName );
-
- if ( ! select || ! dispatch ) {
- return;
- }
-
- // Find video element and get instance ID
- const videoElement = document.querySelector( `.easydam-player.video-js[data-id="${ videoIdNum }"]` );
- const videoInstanceId = videoElement?.getAttribute( 'data-instance-id' );
-
- if ( ! videoInstanceId ) {
- return;
- }
-
- // Get site URL
- const siteUrl = window.location.origin;
-
- // Determine if engagements should be shown
- const embedElement = document.querySelector( '.godam-video-embed' );
- const skipEngagements = embedElement?.getAttribute( 'data-show-engagements' ) !== 'true';
-
- // Dispatch action to initiate comment modal
- dispatch.initiateCommentModal(
- videoIdNum.toString(),
- siteUrl,
- `engagement-${ videoInstanceId }`,
- skipEngagements,
- true,
- );
-
- // Hide loading overlay after modal is initiated
- hideLoadingOverlay();
- }
-} );
-
diff --git a/assets/src/js/media-library/views/attachment-details.js b/assets/src/js/media-library/views/attachment-details.js
index 969ad8cc4..0a124a9d1 100644
--- a/assets/src/js/media-library/views/attachment-details.js
+++ b/assets/src/js/media-library/views/attachment-details.js
@@ -112,23 +112,12 @@ export default AttachmentDetails?.extend( {
render() {
AttachmentDetails.prototype.render.apply( this, arguments );
- const mime = this.model.get( 'mime' );
-
- if ( mime && ! mime.startsWith( 'video/' ) ) {
- return this;
- }
const hlsUrl = this.model.get( 'hls_url' );
- const mpdUrl = this.model.get( 'mpd_url' );
- const id = this.model.get( 'id' );
- const godamAPIBase = window?.godamRestRoute?.apiBase;
- let oEmbeddedVideoUrl = null;
- if ( godamAPIBase && id ) {
- oEmbeddedVideoUrl = godamAPIBase + '/web/video/' + id;
- }
+ const attachmentUrl = this.model.get( 'url' );
// Skip the local Media Library attachments.
- if ( ( ! mpdUrl || ! isMpd( mpdUrl ) ) && ( ! hlsUrl || ! isM3U8( hlsUrl ) ) ) {
+ if ( ( ! attachmentUrl || ! isMpd( attachmentUrl ) ) && ( ! hlsUrl || ! isM3U8( hlsUrl ) ) ) {
return this;
}
@@ -137,25 +126,13 @@ export default AttachmentDetails?.extend( {
// No need to check if table exists, as if it did we would have returned early on link checks.
const tableBody = createTable( this.el );
- if ( oEmbeddedVideoUrl ) {
- tableBody.appendChild(
- createAttachmentField( {
- id: attachmentId,
- fieldName: 'oembed_video_url',
- fieldLabel: __( 'oEmbed Video URL', 'godam' ),
- url: oEmbeddedVideoUrl,
- helpText: __( 'The oEmbed URL can be used to embed the video in other platforms that support oEmbed.', 'godam' ),
- } ),
- );
- }
-
- if ( mpdUrl && isMpd( mpdUrl ) ) {
+ if ( attachmentUrl && isMpd( attachmentUrl ) ) {
tableBody.appendChild(
createAttachmentField( {
id: attachmentId,
fieldName: 'transcoded_url',
fieldLabel: __( 'Transcoded CDN URL (MPD)', 'godam' ),
- url: mpdUrl,
+ url: attachmentUrl,
helpText: __( 'The URL of the transcoded file is generated automatically and cannot be edited.', 'godam' ),
} ),
);
diff --git a/assets/src/js/media-library/views/attachment.js b/assets/src/js/media-library/views/attachment.js
index 0956ab4ee..bff52fe74 100644
--- a/assets/src/js/media-library/views/attachment.js
+++ b/assets/src/js/media-library/views/attachment.js
@@ -162,12 +162,7 @@ const Attachment = wp?.media?.view?.Attachment?.extend( {
return this;
}
- const modelTypes = [ 'video', 'audio', 'image' ];
-
- if ( isAPIKeyValid() && (
- modelTypes.includes( this.model.get( 'type' ) ) ||
- ( this.model.get( 'type' ) === 'application' && this.model.get( 'subtype' ) === 'pdf' )
- ) ) {
+ if ( isAPIKeyValid() && ( this.model.get( 'type' ) === 'video' || this.model.get( 'type' ) === 'audio' || this.model.get( 'type' ) === 'application' ) ) {
// Get the transcoding status from the model
const transcodingStatus = this.model.get( 'transcoding_status' );
const virtual = this.model.get( 'virtual' );
diff --git a/assets/src/js/media-library/views/filters/media-retranscode.js b/assets/src/js/media-library/views/filters/media-retranscode.js
index 3553c9ff3..edc5b5029 100644
--- a/assets/src/js/media-library/views/filters/media-retranscode.js
+++ b/assets/src/js/media-library/views/filters/media-retranscode.js
@@ -28,7 +28,7 @@ MediaRetranscode = MediaRetranscode?.extend( {
this.controller.on( 'select:activate select:deactivate', this.toggleButtonSelectClass, this );
- this.model.set( 'text', 'Transcode Media' );
+ this.model.set( 'text', 'Retranscode Media' );
},
toggleButtonSelectClass() {
diff --git a/assets/src/js/media-library/views/godam-media-frame-shared.js b/assets/src/js/media-library/views/godam-media-frame-shared.js
index 048d7cf34..08315f7ca 100644
--- a/assets/src/js/media-library/views/godam-media-frame-shared.js
+++ b/assets/src/js/media-library/views/godam-media-frame-shared.js
@@ -98,8 +98,10 @@ const GoDAMMediaFrameShared = {
this.content.set( RenderedContent );
// Attaches callback to create attachment entry in WordPress for GoDAM Video.
- state.off( 'select', this.onGoDAMSelect, this );
- state.on( 'select', this.onGoDAMSelect, this );
+ if ( 'video' === mimeTypes ) {
+ state.off( 'select', this.onGoDAMSelect, this );
+ state.on( 'select', this.onGoDAMSelect, this );
+ }
},
onGoDAMSelect() {
@@ -129,7 +131,7 @@ const GoDAMMediaFrameShared = {
url: data.url,
hls_url: data.hls_url,
mpd_url: data.mpd_url,
- mime: data.mime,
+ mime: 'video/mp4',
type: data.type,
subtype: data.subtype,
status: data.status,
@@ -140,7 +142,6 @@ const GoDAMMediaFrameShared = {
owner: data.owner,
label: data.label,
icon: data.icon,
- thumbnail_url: data.thumbnail_url,
caption: data.caption,
description: data.description,
} ),
diff --git a/assets/src/js/ninja-forms/ninja-forms-submissions-list.js b/assets/src/js/ninja-forms/ninja-forms-submissions-list.js
deleted file mode 100644
index 8a1cd2865..000000000
--- a/assets/src/js/ninja-forms/ninja-forms-submissions-list.js
+++ /dev/null
@@ -1,55 +0,0 @@
-document.addEventListener( 'DOMContentLoaded', () => {
- const processCells = () => {
- const list = document.querySelector( '#the-list' );
-
- if ( ! list ) {
- return;
- }
-
- list.querySelectorAll( '.nf-submissions-cell' ).forEach( ( cell ) => {
- // Prevent re-processing
- if ( cell && cell.dataset && cell.dataset.godamProcessed === '1' ) {
- return;
- }
-
- const text = cell.textContent.trim();
-
- if ( ( text.startsWith( 'http://' ) || text.startsWith( 'https://' ) ) && text.includes( '/wp-content/uploads/' ) ) {
- let url;
-
- try {
- url = new URL( text, window.location.origin );
- } catch ( e ) {
- // If the URL is invalid, do not transform the cell into a link.
- return;
- }
-
- // Only allow same-origin http(s) URLs.
- if ( ( url.protocol === 'http:' || url.protocol === 'https:' ) && url.origin === window.location.origin ) {
- const link = document.createElement( 'a' );
- link.href = url.href;
- link.target = '_blank';
- link.rel = 'noopener noreferrer';
- link.textContent = 'View Recording';
-
- cell.textContent = '';
- cell.appendChild( link );
-
- cell.dataset.godamProcessed = '1';
- }
- }
- } );
- };
-
- // Initial run
- processCells();
-
- const ninjaFormEntriesObserver = new MutationObserver( () => {
- processCells();
- } );
-
- ninjaFormEntriesObserver.observe( document.getElementById( 'nf-submissions-element' ), {
- childList: true,
- subtree: true,
- } );
-} );
diff --git a/godam.php b/godam.php
index d592b2632..21b5436c6 100644
--- a/godam.php
+++ b/godam.php
@@ -3,7 +3,7 @@
* Plugin Name: GoDAM
* Plugin URI: https://godam.io
* Description: Seamlessly manage and deliver your media assets directly from the cloud-based media management. Store assets efficiently, stream them via a CDN, and enhance your website's performance and user experience. Featuring adaptive bit rate streaming, adding interactive layers in videos, and taking full advantage of a digital asset management solution within WordPress.
- * Version: 1.5.0
+ * Version: 1.4.9
* Requires at least: 6.5
* Requires PHP: 7.4
* Text Domain: godam
@@ -43,7 +43,7 @@
/**
* The version of the plugin
*/
- define( 'RTGODAM_VERSION', '1.5.0' );
+ define( 'RTGODAM_VERSION', '1.4.9' );
}
if ( ! defined( 'RTGODAM_API_BASE' ) ) {
diff --git a/inc/classes/assets/class-ima-assets.php b/inc/classes/assets/class-ima-assets.php
index 9ff82575d..8057fbf0b 100644
--- a/inc/classes/assets/class-ima-assets.php
+++ b/inc/classes/assets/class-ima-assets.php
@@ -7,10 +7,6 @@
namespace RTGODAM\Inc\Assets;
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
use RTGODAM\Inc\Traits\Singleton;
/**
diff --git a/inc/classes/assets/class-jetpack-form-assets.php b/inc/classes/assets/class-jetpack-form-assets.php
index 6142f237c..97dc9cd84 100644
--- a/inc/classes/assets/class-jetpack-form-assets.php
+++ b/inc/classes/assets/class-jetpack-form-assets.php
@@ -7,10 +7,6 @@
namespace RTGODAM\Inc\Assets;
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
use RTGODAM\Inc\Traits\Singleton;
/**
diff --git a/inc/classes/class-assets.php b/inc/classes/class-assets.php
index 07fd2f4bc..9568b9eb4 100644
--- a/inc/classes/class-assets.php
+++ b/inc/classes/class-assets.php
@@ -36,7 +36,6 @@ protected function setup_hooks() {
*/
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
- add_action( 'enqueue_block_editor_assets', array( $this, 'enqueue_block_editor_assets' ) );
}
/**
@@ -282,41 +281,6 @@ public function admin_enqueue_scripts() {
wp_enqueue_style( 'daterangepicker-css', RTGODAM_URL . 'assets/src/libs/daterangepicker.css', array(), filemtime( RTGODAM_PATH . 'assets/src/libs/daterangepicker.css' ) );
}
- /**
- * Enqueue block editor assets.
- *
- * @since 1.5.0
- *
- * @return void
- */
- public function enqueue_block_editor_assets() {
- $block_extensions_asset_file = RTGODAM_PATH . 'assets/build/js/block-extensions.min.asset.php';
-
- // Default dependencies if asset file doesn't exist yet.
- $block_extensions_asset = array(
- 'dependencies' => array(
- 'wp-blocks',
- 'wp-element',
- 'wp-hooks',
- 'wp-compose',
- ),
- 'version' => RTGODAM_VERSION,
- );
-
- // Check if asset file exists (generated by @wordpress/scripts).
- if ( file_exists( $block_extensions_asset_file ) ) {
- $block_extensions_asset = include $block_extensions_asset_file;
- }
-
- wp_enqueue_script(
- 'godam-block-extensions',
- RTGODAM_URL . 'assets/build/js/block-extensions.min.js',
- $block_extensions_asset['dependencies'],
- $block_extensions_asset['version'],
- true
- );
- }
-
/**
* Enqueue GoDAM Settings JS localization.
*
diff --git a/inc/classes/class-elementor-widgets.php b/inc/classes/class-elementor-widgets.php
index 411fb2693..549fa12ad 100644
--- a/inc/classes/class-elementor-widgets.php
+++ b/inc/classes/class-elementor-widgets.php
@@ -7,10 +7,6 @@
namespace RTGODAM\Inc;
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
use RTGODAM\Inc\Elementor_Controls\Godam_Media;
use RTGODAM\Inc\Elementor_Widgets\Godam_Audio;
use RTGODAM\Inc\Elementor_Widgets\Godam_Gallery;
diff --git a/inc/classes/class-media-library-ajax.php b/inc/classes/class-media-library-ajax.php
index aa786ae3d..9a51121e1 100644
--- a/inc/classes/class-media-library-ajax.php
+++ b/inc/classes/class-media-library-ajax.php
@@ -47,22 +47,6 @@ public function setup_hooks() {
add_action( 'rtgodam_handle_callback_finished', array( $this, 'download_transcoded_mp4_source' ), 10, 4 );
add_filter( 'wp_get_attachment_url', array( $this, 'filter_attachment_url_for_virtual_media' ), 10, 2 );
-
- // Add filters for virtual media srcset support.
- add_filter( 'wp_calculate_image_srcset', array( $this, 'filter_virtual_media_srcset' ), 10, 5 );
- }
-
- /**
- * Validate if a URL is valid.
- * Ref: https://cmljnelson.blog/2018/08/31/url-validation-in-wordpress
- *
- * @since 1.5.0
- *
- * @param string $url The URL to validate.
- * @return bool True if valid, false otherwise.
- */
- public function is_valid_url( $url ) {
- return esc_url_raw( $url ) === $url;
}
/**
@@ -106,18 +90,8 @@ public function prepare_godam_media_item( $item ) {
'mpd_url' => $item['transcoded_file_path'] ?? '',
);
- // Set icon with fallback to default mime type icon for audio and PDF.
$result['icon'] = $item['thumbnail_url'] ?? '';
- // If no thumbnail URL, use WordPress default icons for audio and PDF.
- if ( empty( $result['icon'] ) ) {
- if ( 'audio' === $item['job_type'] ) {
- $result['icon'] = includes_url( 'images/media/audio.png' );
- } elseif ( 'application/pdf' === $item['mime_type'] ) {
- $result['icon'] = includes_url( 'images/media/document.png' );
- }
- }
-
if ( 'stream' === $item['job_type'] ) {
$result['type'] = 'video';
}
@@ -148,51 +122,16 @@ private function get_mime_type_for_job_type( $job_type, $mime_type ) {
/**
* Upload media to the Frappe backend.
*
- * @param int $attachment_id Attachment ID.
- * @param bool $retranscode Whether this is a retranscode request.
+ * @param int $attachment_id Attachment ID.
* @return void
*/
- public function upload_media_to_frappe_backend( $attachment_id, $retranscode = false ) {
+ public function upload_media_to_frappe_backend( $attachment_id ) {
// Check if local development environment.
if ( rtgodam_is_local_environment() ) {
return;
}
- /**
- * Filter to allow external developers to disable automatic transcoding on upload.
- * This allows users to have manual control over when media files get transcoded.
- *
- * Note: This filter only applies to automatic uploads. Manual retranscoding requests
- * (via bulk actions, tools page, etc.) will always proceed regardless of this setting.
- * Form integrations will also use this filter to disable transcoding for form uploads.
- *
- * Example usage:
- * add_filter( 'godam_auto_transcode_on_upload', '__return_false' ); // Disable globally
- *
- * @since 1.5.0
- *
- * @param bool $auto_transcode_on_upload Whether to automatically transcode on upload. Default true.
- */
- if ( ! $retranscode ) {
- $auto_transcode_on_upload = apply_filters( 'godam_auto_transcode_on_upload', true );
-
- if ( ! $auto_transcode_on_upload ) {
- return;
- }
- }
-
- $transcoding_job_id = get_post_meta( $attachment_id, 'rtgodam_transcoding_job_id', true );
-
- // Check virtual media status for transcoding requests.
- $godam_original_id = get_post_meta( $attachment_id, '_godam_original_id', true );
- $is_virtual_media = ! empty( $godam_original_id );
-
- // Skip transcoding for virtual media.
- if ( $is_virtual_media ) {
- return;
- }
-
- // Only if attachment type is image.
+ // Only if attachment type if image.
if ( 'image' !== substr( get_post_mime_type( $attachment_id ), 0, 5 ) ) {
return;
}
@@ -203,7 +142,7 @@ public function upload_media_to_frappe_backend( $attachment_id, $retranscode = f
return;
}
- $api_url = RTGODAM_API_BASE . '/api/resource/Transcoder Job' . ( empty( $transcoding_job_id ) ? '' : '/' . $transcoding_job_id );
+ $api_url = RTGODAM_API_BASE . '/api/resource/Transcoder Job';
$attachment_url = wp_get_attachment_url( $attachment_id );
@@ -218,52 +157,33 @@ public function upload_media_to_frappe_backend( $attachment_id, $retranscode = f
// Get author name with fallback to username.
$author_first_name = '';
$author_last_name = '';
- $author_email = '';
if ( $attachment_author ) {
- $author_first_name = $attachment_author->first_name ?? '';
- $author_last_name = $attachment_author->last_name ?? '';
- $author_email = $attachment_author->user_email ?? '';
+ $author_first_name = $attachment_author->first_name;
+ $author_last_name = $attachment_author->last_name;
// If first and last names are empty, use username as fallback.
if ( empty( $author_first_name ) && empty( $author_last_name ) ) {
- $author_first_name = $attachment_author->user_login ?? '';
+ $author_first_name = $attachment_author->user_login;
}
}
- if ( ! defined( 'RTGODAM_TRANSCODER_CALLBACK_URL' ) ) {
- include_once RTGODAM_PATH . 'admin/class-rtgodam-transcoder-rest-routes.php'; // phpcs:ignore WordPressVIPMinimum.Files.IncludingFile.UsingCustomConstant
- define( 'RTGODAM_TRANSCODER_CALLBACK_URL', \RTGODAM_Transcoder_Rest_Routes::get_callback_url() );
- }
-
- $callback_url = RTGODAM_TRANSCODER_CALLBACK_URL;
-
- /**
- * Manually setting the rest api endpoint, we can refactor that later to use similar functionality as callback_url.
- */
- $status_callback_url = get_rest_url( get_current_blog_id(), '/godam/v1/transcoding/transcoding-status' );
-
// Request params.
$params = array(
- 'retranscode' => empty( $transcoding_job_id ) ? 0 : 1,
'api_token' => $api_key,
'job_type' => 'image',
- 'job_for' => 'wp-media',
'file_origin' => $attachment_url,
'orignal_file_name' => $file_name ?? $file_title,
- 'callback_url' => rawurlencode( $callback_url ),
- 'status_callback' => rawurlencode( $status_callback_url ),
- 'wp_author_email' => apply_filters( 'godam_author_email_to_send', $author_email, $attachment_id ),
+ 'wp_author_email' => apply_filters( 'godam_author_email_to_send', $attachment_author ? $attachment_author->user_email : '', $attachment_id ),
'wp_site' => $site_url,
'wp_author_first_name' => apply_filters( 'godam_author_first_name_to_send', $author_first_name, $attachment_id ),
'wp_author_last_name' => apply_filters( 'godam_author_last_name_to_send', $author_last_name, $attachment_id ),
'public' => 1,
);
- $upload_media = wp_remote_request(
+ $upload_media = wp_remote_post(
$api_url,
array(
- 'method' => empty( $transcoding_job_id ) ? 'POST' : 'PUT',
'body' => wp_json_encode( $params ),
'headers' => array(
'Content-Type' => 'application/json',
@@ -357,15 +277,8 @@ public function delete_child_media_folder( $term, $taxonomy ) {
* @return array $response Attachment response.
*/
public function add_media_transcoding_status_js( $response, $attachment ) {
- // Check if attachment type is video, audio, PDF, or image.
- $mime_type = $attachment->post_mime_type;
- $is_video = 'video' === substr( $mime_type, 0, 5 );
- $is_audio = 'audio' === substr( $mime_type, 0, 5 );
- $is_pdf = 'application/pdf' === $mime_type;
- $is_image = 'image' === substr( $mime_type, 0, 5 );
-
- // Only process supported attachment types.
- if ( ! ( $is_video || $is_audio || $is_pdf || $is_image ) ) {
+ // Check if attachment type is video.
+ if ( 'video' !== substr( $attachment->post_mime_type, 0, 5 ) ) {
return $response;
}
@@ -406,26 +319,11 @@ public function add_media_transcoding_status_js( $response, $attachment ) {
if ( ! empty( $godam_original_id ) ) {
// Indicate that this is a virtual attachment.
$response['virtual'] = true;
-
// Set the icon to be used for the virtual media preview.
+ $response['icon'] = get_post_meta( $attachment->ID, 'icon', true );
// Populate the image field used by the media library to show previews.
- $icon_url = wp_mime_type_icon( $attachment->ID );
-
- // For audio and PDF, ensure we use the default icons.
- if ( empty( $icon_url ) || strpos( $icon_url, '.svg' ) !== false ) {
- if ( $is_audio ) {
- $icon_url = includes_url( 'images/media/audio.png' );
- } elseif ( $is_pdf ) {
- $icon_url = includes_url( 'images/media/document.png' );
- }
- }
-
- $response['image'] = array();
-
- if ( ! empty( $icon_url ) ) {
- $response['icon'] = $icon_url;
- $response['image']['src'] = $icon_url;
- }
+ $response['image'] = array();
+ $response['image']['src'] = $response['icon'];
}
return $response;
@@ -761,7 +659,7 @@ class="annual-plan-offer-banner__dismiss"
* @return int|WP_Error Attachment ID on success, WP_Error on failure.
*/
private function godam_replace_attachment_with_external_file( $attachment_id, $file_url = '' ) {
- if ( ! $attachment_id || ! $this->is_valid_url( $file_url ) ) {
+ if ( ! $attachment_id || ! filter_var( $file_url, FILTER_VALIDATE_URL ) || ! wp_http_validate_url( $file_url ) ) {
return new \WP_Error( 'invalid_input', __( 'Invalid attachment ID or URL.', 'godam' ) );
}
@@ -889,54 +787,4 @@ public function filter_attachment_url_for_virtual_media( $url, $post_id ) {
return $url;
}
-
- /**
- * Filter srcset calculation for virtual media to use full URLs.
- *
- * @since 1.5.0
- *
- * @param array|false $sources Array of image sources for srcset or false.
- * @param array $size_array Array of width and height values.
- * @param string $image_src The 'src' of the image.
- * @param array $image_meta The image meta data.
- * @param int $attachment_id The image attachment ID.
- *
- * @return array|false Filtered sources array or false.
- */
- public function filter_virtual_media_srcset( $sources, $size_array, $image_src, $image_meta, $attachment_id ) {
- $godam_original_id = get_post_meta( $attachment_id, '_godam_original_id', true );
-
- if ( empty( $godam_original_id ) ) {
- return $sources;
- }
-
- // Check if image attachment.
- $attachment_mime_type = get_post_mime_type( $attachment_id );
- if ( 'image' !== substr( $attachment_mime_type, 0, 5 ) ) {
- return $sources;
- }
-
- // Rebuild sources array for virtual media.
- if ( empty( $sources ) || ! is_array( $sources ) ) {
- return $sources;
- }
-
- // Use the current image URL as the base for all subsizes.
- $base_url = trailingslashit( untrailingslashit( dirname( $image_src ) ) );
-
- // Rebuild sources array for virtual media.
- foreach ( $sources as &$source ) {
-
- // Get last string after the last slash in the file url.
- $file_basename = basename( $source['url'] );
-
- // Rebuild the full URL using the base URL and the file basename.
- $url = $base_url . ltrim( $file_basename, '/' );
-
- $source['url'] = esc_url( $url );
- }
- unset( $source ); // Break the reference.
-
- return $sources;
- }
}
diff --git a/inc/classes/class-pages.php b/inc/classes/class-pages.php
index 1fed19a20..678c47d19 100644
--- a/inc/classes/class-pages.php
+++ b/inc/classes/class-pages.php
@@ -507,12 +507,6 @@ public function admin_enqueue_scripts() {
)
);
- wp_localize_script(
- 'transcoder-page-script-video-editor',
- 'posthogConfig',
- $this->get_posthog_config()
- );
-
// Enqueue Gravity Forms styles if the plugin is active.
if ( $is_gf_active ) {
$this->enqueue_gravity_forms_styles();
@@ -615,12 +609,6 @@ public function admin_enqueue_scripts() {
$current_time = new \DateTime( 'now', $timezone );
$end_time = new \DateTime( '2026-01-20 23:59:59', $timezone );
- wp_localize_script(
- 'godam-page-script-dashboard',
- 'posthogConfig',
- $this->get_posthog_config()
- );
-
wp_localize_script(
'godam-page-script-dashboard',
'videoData',
@@ -680,12 +668,6 @@ public function admin_enqueue_scripts() {
)
);
- wp_localize_script(
- 'transcoder-page-script-analytics',
- 'posthogConfig',
- $this->get_posthog_config()
- );
-
$rtgodam_user_data = rtgodam_get_user_data( true );
wp_localize_script(
@@ -721,12 +703,6 @@ public function admin_enqueue_scripts() {
$rtgodam_user_data
);
- wp_localize_script(
- 'godam-page-script-help',
- 'posthogConfig',
- $this->get_posthog_config()
- );
-
// Footer URL data for internal redirection.
wp_localize_script(
'godam-page-script-help',
@@ -757,12 +733,6 @@ public function admin_enqueue_scripts() {
);
}
- wp_localize_script(
- 'transcoder-page-script-godam',
- 'posthogConfig',
- $this->get_posthog_config()
- );
-
// Footer URL data for internal redirection.
wp_localize_script(
'transcoder-page-script-godam',
@@ -794,12 +764,6 @@ public function admin_enqueue_scripts() {
$rtgodam_user_data
);
- wp_localize_script(
- 'godam-page-script-tools',
- 'posthogConfig',
- $this->get_posthog_config()
- );
-
// Footer URL data for internal redirection.
wp_localize_script(
'godam-page-script-tools',
@@ -830,12 +794,6 @@ public function admin_enqueue_scripts() {
)
);
- wp_localize_script(
- 'godam-page-script-whats-new',
- 'posthogConfig',
- $this->get_posthog_config()
- );
-
wp_enqueue_script( 'godam-page-script-whats-new' );
}
@@ -868,53 +826,6 @@ public function admin_enqueue_scripts() {
'roles' => $roles,
)
);
-
- wp_localize_script(
- 'media-library-react',
- 'posthogConfig',
- $this->get_posthog_config()
- );
- }
-
- /**
- * Get PostHog configuration for internal GoDAM analytics tracking.
- * These are hardcoded public keys - clients don't need to configure anything.
- *
- * @return array PostHog configuration array with 'key', 'host', and 'enabled' settings.
- */
- private function get_posthog_config() {
- $settings = get_option( 'rtgodam-settings', array() );
- $enable_tracking = isset( $settings['general']['enable_posthog_tracking'] ) ? $settings['general']['enable_posthog_tracking'] : false;
-
- $config = array(
- 'key' => 'phc_9P3X3py1SfwrF78SXXkIyL2cHjkRTpvWzqf8RZJDaSk',
- 'host' => 'https://us.i.posthog.com',
- 'enabled' => (int) $enable_tracking, // Convert boolean to int (0/1) for proper JS encoding.
- );
-
- if ( $enable_tracking ) {
- global $wpdb, $wp_version;
-
- if ( ! function_exists( 'get_plugins' ) ) {
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
- }
-
- $all_plugins = get_plugins();
- $active_plugins = get_option( 'active_plugins', array() );
-
- $config['properties'] = array(
- 'php_version' => phpversion(),
- 'mysql_version' => $wpdb->db_version(),
- 'server_software' => isset( $_SERVER['SERVER_SOFTWARE'] ) ? sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) ) : '',
- 'wp_version' => $wp_version,
- 'site_language' => get_locale(),
- 'active_plugins_count' => count( $active_plugins ),
- 'total_plugins_count' => count( $all_plugins ),
- 'user_count' => count_users()['total_users'] ?? 0,
- );
- }
-
- return $config;
}
/**
diff --git a/inc/classes/class-plugin.php b/inc/classes/class-plugin.php
index 47acdcd24..28b8f2a5e 100644
--- a/inc/classes/class-plugin.php
+++ b/inc/classes/class-plugin.php
@@ -17,7 +17,6 @@
use RTGODAM\Inc\Media_Tracker;
use RTGODAM\Inc\Rewrite;
use RTGODAM\Inc\Video_Preview;
-use RTGODAM\Inc\Video_Embed;
use RTGODAM\Inc\Video_Permalinks;
use RTGODAM\Inc\Video_Engagement;
use RTGODAM\Inc\Update;
@@ -88,7 +87,6 @@ protected function __construct() {
Seo::get_instance();
Rewrite::get_instance();
Video_Preview::get_instance();
- Video_Embed::get_instance();
Video_Permalinks::get_instance();
Embed::get_instance();
diff --git a/inc/classes/class-rewrite.php b/inc/classes/class-rewrite.php
index 3cd28e763..65ad59740 100644
--- a/inc/classes/class-rewrite.php
+++ b/inc/classes/class-rewrite.php
@@ -8,10 +8,6 @@
namespace RTGODAM\Inc;
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
use RTGODAM\Inc\Traits\Singleton;
/**
diff --git a/inc/classes/class-video-embed.php b/inc/classes/class-video-embed.php
deleted file mode 100644
index aadb32c47..000000000
--- a/inc/classes/class-video-embed.php
+++ /dev/null
@@ -1,115 +0,0 @@
-setup_hooks();
- }
-
- /**
- * To setup action/filter.
- *
- * @since 1.5.0
- *
- * @return void
- */
- protected function setup_hooks() {
- add_action( 'template_include', array( $this, 'load_video_embed_template' ) );
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_video_embed_assets' ) );
- add_filter( 'show_admin_bar', array( $this, 'hide_admin_bar_on_embed' ) ); // phpcs:ignore WordPressVIPMinimum.UserExperience.AdminBarRemoval.RemovalDetected -- This is a valid use case for the video embed page.
- add_filter( 'qm/dispatch/html', array( $this, 'disable_query_monitor_on_embed' ) );
- }
-
- /**
- * Load the video embed template.
- *
- * @since 1.5.0
- *
- * @param string $template The current template.
- * @return string The path to the video embed template.
- */
- public function load_video_embed_template( $template ) {
- if ( 'video-embed' === get_query_var( 'godam_page' ) ) {
- return RTGODAM_PATH . 'inc/templates/video-embed.php';
- }
- return $template;
- }
-
- /**
- * Enqueue assets for the video embed page.
- *
- * @since 1.5.0
- *
- * This method registers the styles and scripts needed for the video embed page.
- */
- public function enqueue_video_embed_assets() {
- // Enqueue style for the video embed page.
- wp_register_style(
- 'godam-video-embed-style',
- RTGODAM_URL . 'assets/build/css/godam-video-embed.css',
- array(),
- filemtime( RTGODAM_PATH . 'assets/build/css/godam-video-embed.css' )
- );
-
- // Enqueue script for the video embed page.
- wp_register_script(
- 'godam-video-embed-script',
- RTGODAM_URL . 'assets/build/js/godam-video-embed.min.js',
- array(),
- filemtime( RTGODAM_PATH . 'assets/build/js/godam-video-embed.min.js' ),
- true
- );
- }
-
- /**
- * Hide the admin bar on the video embed page.
- *
- * @since 1.5.0
- *
- * @param bool $show_admin_bar Whether to show the admin bar.
- * @return bool False if on embed page, otherwise the original value.
- */
- public function hide_admin_bar_on_embed( $show_admin_bar ) {
- if ( 'video-embed' === get_query_var( 'godam_page' ) ) {
- return false;
- }
- return $show_admin_bar;
- }
-
- /**
- * Disable Query Monitor on the video embed page.
- *
- * @since 1.5.0
- *
- * @param bool $dispatch Whether to dispatch Query Monitor output.
- * @return bool False if on embed page, otherwise the original value.
- */
- public function disable_query_monitor_on_embed( $dispatch ) {
- if ( 'video-embed' === get_query_var( 'godam_page' ) ) {
- return false;
- }
- return $dispatch;
- }
-}
diff --git a/inc/classes/class-video-engagement.php b/inc/classes/class-video-engagement.php
index 59acba65b..935ab1f2c 100644
--- a/inc/classes/class-video-engagement.php
+++ b/inc/classes/class-video-engagement.php
@@ -7,10 +7,6 @@
namespace RTGODAM\Inc;
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
use RTGODAM\Inc\Traits\Singleton;
use WP_Error;
diff --git a/inc/classes/class-video-metadata.php b/inc/classes/class-video-metadata.php
index 7fafb89d7..9cec66957 100644
--- a/inc/classes/class-video-metadata.php
+++ b/inc/classes/class-video-metadata.php
@@ -191,13 +191,7 @@ private function migrate_existing_video_metadata() {
public function set_media_library_thumbnail( $response, $attachment, $meta ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed -- $attachment and $meta are not modified.
if ( 0 === strpos( $response['mime'], 'video/' ) || 'application/pdf' === $response['mime'] ) {
- $thumbnail_url = get_post_meta( $response['id'], 'rtgodam_media_video_thumbnail', true );
-
- // Check for icon if it is a virtual media (for PDFs imported from GoDAM).
- if ( empty( $thumbnail_url ) ) {
- $thumbnail_url = get_post_meta( $response['id'], 'rtgodam_media_pdf_thumbnail', true );
- }
-
+ $thumbnail_url = get_post_meta( $response['id'], 'rtgodam_media_video_thumbnail', true );
$attachment_meta = get_post_meta( $response['id'], '_wp_attachment_metadata', true );
if ( ! empty( $thumbnail_url ) ) {
diff --git a/inc/classes/class-video-preview.php b/inc/classes/class-video-preview.php
index 697f7340d..84dcc2cfd 100644
--- a/inc/classes/class-video-preview.php
+++ b/inc/classes/class-video-preview.php
@@ -8,10 +8,6 @@
namespace RTGODAM\Inc;
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
use RTGODAM\Inc\Traits\Singleton;
/**
diff --git a/inc/classes/everest-forms/everest-forms-field-godam-record-frontend.php b/inc/classes/everest-forms/everest-forms-field-godam-record-frontend.php
index 7d92c0452..1b551268a 100644
--- a/inc/classes/everest-forms/everest-forms-field-godam-record-frontend.php
+++ b/inc/classes/everest-forms/everest-forms-field-godam-record-frontend.php
@@ -7,10 +7,6 @@
* @since 1.4.0
*/
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
// Get the primary field data.
$godam_primary = $field['properties']['inputs']['primary'] ?? array();
diff --git a/inc/classes/fluentforms/class-form-submit.php b/inc/classes/fluentforms/class-form-submit.php
index 7cba617dc..56f75f0c5 100644
--- a/inc/classes/fluentforms/class-form-submit.php
+++ b/inc/classes/fluentforms/class-form-submit.php
@@ -7,10 +7,6 @@
namespace RTGODAM\Inc\FluentForms;
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
use RTGODAM\Inc\Traits\Singleton;
/**
diff --git a/inc/classes/fluentforms/fields/class-recorder-field.php b/inc/classes/fluentforms/fields/class-recorder-field.php
index 81ba32284..29881584d 100644
--- a/inc/classes/fluentforms/fields/class-recorder-field.php
+++ b/inc/classes/fluentforms/fields/class-recorder-field.php
@@ -80,7 +80,7 @@ public function __construct() {
/**
* Initialize all values.
*/
- $this->editor_label = __( 'GoDAM Recorder', 'godam' );
+ $this->editor_label = __( 'Godam Recorder', 'godam' );
$this->button_text = __( 'Record Video', 'godam' );
}
diff --git a/inc/classes/lifter-lms/class-lifter-lms.php b/inc/classes/lifter-lms/class-lifter-lms.php
index 2273ca27b..bf16667db 100644
--- a/inc/classes/lifter-lms/class-lifter-lms.php
+++ b/inc/classes/lifter-lms/class-lifter-lms.php
@@ -10,10 +10,6 @@
namespace RTGODAM\Inc\Lifter_LMS;
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
use RTGODAM\Inc\Traits\Singleton;
/**
diff --git a/inc/classes/ninja-forms/class-ninja-forms-integration.php b/inc/classes/ninja-forms/class-ninja-forms-integration.php
index 9b219a603..00ea61cfb 100644
--- a/inc/classes/ninja-forms/class-ninja-forms-integration.php
+++ b/inc/classes/ninja-forms/class-ninja-forms-integration.php
@@ -46,7 +46,7 @@ public function init() {
* @return void
*/
public function setup_hooks() {
- add_action( 'admin_enqueue_scripts', array( $this, 'add_additional_scripts' ), 11 );
+ add_action( 'admin_enqueue_scripts', array( $this, 'add_additional_css_for_video_editor' ), 11 );
add_action( 'wp_enqueue_scripts', array( $this, 'add_additional_css_for_godam_player' ), 11 );
add_action( 'rtgodam_render_layer_for_video_editor_before', array( $this, 'add_css_for_the_layer_inside_iframe' ), 10, 2 );
@@ -57,13 +57,13 @@ public function setup_hooks() {
}
/**
- * Add additional scripts.
+ * Add additional css for video editor.
*
* @since 1.4.0
*
* @return void
*/
- public function add_additional_scripts() {
+ public function add_additional_css_for_video_editor() {
$custom_css = '
.form-container.ninja-form {
margin: unset;
@@ -78,24 +78,8 @@ public function add_additional_scripts() {
}
';
- wp_add_inline_style( 'rtgodam-style', $custom_css );
- $screen = get_current_screen();
- if ( ! $screen ) {
- return;
- }
-
- if ( 'ninja-forms_page_nf-submissions' !== $screen->id ) {
- return;
- }
-
- wp_enqueue_script(
- 'rtgodam-ninja-forms-submissions-list',
- RTGODAM_URL . 'assets/build/js/ninja-forms-submissions-list.min.js',
- array( 'jquery', 'rtgodam-script' ),
- filemtime( RTGODAM_PATH . 'assets/build/js/ninja-forms-submissions-list.min.js' ),
- true
- );
+ wp_add_inline_style( 'rtgodam-style', $custom_css );
}
/**
@@ -112,6 +96,7 @@ public function add_additional_css_for_godam_player() {
}
';
+
wp_add_inline_style( 'godam-player-style', $custom_css );
}
diff --git a/inc/classes/rest-api/class-dynamic-gallery.php b/inc/classes/rest-api/class-dynamic-gallery.php
index 3728d0b43..2788446ba 100644
--- a/inc/classes/rest-api/class-dynamic-gallery.php
+++ b/inc/classes/rest-api/class-dynamic-gallery.php
@@ -101,14 +101,6 @@ public function get_rest_routes() {
'type' => 'string',
'default' => '',
),
- 'engagements' => array(
- 'type' => 'boolean',
- 'default' => true,
- ),
- 'open_to_new_page' => array(
- 'type' => 'boolean',
- 'default' => false,
- ),
),
),
),
@@ -139,8 +131,6 @@ public function render_gallery( WP_REST_Request $request ) {
'date_range' => $request->get_param( 'date_range' ),
'custom_date_start' => $request->get_param( 'custom_date_start' ),
'custom_date_end' => $request->get_param( 'custom_date_end' ),
- 'engagements' => $request->get_param( 'engagements' ),
- 'open_to_new_page' => $request->get_param( 'open_to_new_page' ),
);
// Add filter for dynamic gallery attributes.
@@ -248,7 +238,7 @@ public function render_gallery( WP_REST_Request $request ) {
$video_settings = get_option( 'rtgodam_video_post_settings', array() );
$cpt_url_slug = ! empty( $video_settings['video_slug'] ) ? sanitize_title( $video_settings['video_slug'] ) : 'videos';
- $cpt_base_url = home_url( '/' );
+ $cpt_base_url = home_url( '/' . $cpt_url_slug );
$query = new \WP_Query( $args );
ob_start();
@@ -276,9 +266,7 @@ public function render_gallery( WP_REST_Request $request ) {
data-search="' . esc_attr( $atts['search'] ?? '' ) . '"
data-date-range="' . esc_attr( $atts['date_range'] ?? '' ) . '"
data-custom-date-start="' . esc_attr( $atts['custom_date_start'] ?? '' ) . '"
- data-custom-date-end="' . esc_attr( $atts['custom_date_end'] ?? '' ) . '"
- data-engagements="' . ( $atts['engagements'] ? '1' : '0' ) . '"
- data-open-to-new-page="' . ( $atts['open_to_new_page'] ? '1' : '0' ) . '">';
+ data-custom-date-end="' . esc_attr( $atts['custom_date_end'] ?? '' ) . '">';
}
do_action( 'rtgodam_dynamic_gallery_before_output', $query, $atts );
@@ -307,49 +295,9 @@ public function render_gallery( WP_REST_Request $request ) {
$duration = $metadata['length_formatted'];
}
}
-
- // Check if engagements are enabled for the video.
- $engagements_enabled = $atts['engagements'];
- $item_engagements_enabled = false;
- if ( $engagements_enabled ) {
- // Check if engagements are enabled for the video is transcoded.
- $transcoded_job_id = get_post_meta( $video_id, 'rtgodam_transcoding_job_id', true );
- $tanscoded_status = get_post_meta( $video_id, 'rtgodam_transcoding_status', true );
- $item_engagements_enabled = ! empty( $transcoded_job_id ) && 'transcoded' === strtolower( $tanscoded_status );
- }
-
- // Build the query arguments for the video embed page.
- $query_args = array(
- 'godam_page' => 'video-embed',
- 'id' => $video_id,
- );
-
- // Add the engagements query argument if it is enabled.
- if ( $item_engagements_enabled ) {
- $query_args['engagements'] = 'show';
- }
-
- $video_url = add_query_arg( $query_args, $cpt_base_url );
-
- if ( isset( $atts['open_to_new_page'] ) && $atts['open_to_new_page'] ) {
- $video_slug = get_post_field( 'post_name', $video_id );
- $video_settings = get_option( 'rtgodam_video_post_settings', array() );
- $cpt_url_slug = ! empty( $video_settings['video_slug'] ) ? sanitize_title( $video_settings['video_slug'] ) : 'videos';
- $cpt_base_url = home_url( '/' . $cpt_url_slug );
- $video_url = $cpt_base_url . '/' . $video_slug;
-
- if ( $item_engagements_enabled ) {
- $video_url = add_query_arg(
- array(
- 'engagements' => 'show',
- ),
- $video_url
- );
- }
- }
-
+
echo '
';
- echo '
';
+ echo '
';
echo '
';
if ( $duration ) {
echo '
' . esc_html( $duration ) . ' ';
diff --git a/inc/classes/rest-api/class-media-library.php b/inc/classes/rest-api/class-media-library.php
index d3d9701fb..4d320600f 100644
--- a/inc/classes/rest-api/class-media-library.php
+++ b/inc/classes/rest-api/class-media-library.php
@@ -303,207 +303,6 @@ public function get_rest_routes() {
},
),
),
- array(
- 'namespace' => $this->namespace,
- 'route' => '/' . $this->rest_base . '/generate-image-subsizes-callback',
- 'args' => array(
- 'methods' => \WP_REST_Server::CREATABLE,
- 'callback' => array( $this, 'generate_image_subsizes_callback' ),
- 'permission_callback' => array( $this, 'verify_callback_permission' ),
- ),
- ),
- );
- }
-
- /**
- * Verify callback permission by checking API key.
- *
- * @since 1.5.0
- *
- * @param WP_REST_Request $request The request object.
- * @return bool|WP_Error True if permission granted, WP_Error otherwise.
- */
- public function verify_callback_permission( $request ) {
- $event = $request->get_param( 'event' );
- $data = $request->get_param( 'data' );
-
- if ( empty( $data['api_key'] ) ) {
- return new \WP_Error( 'api_key_required', __( 'API key is required.', 'godam' ), array( 'status' => 403 ) );
- }
-
- $provided_api_key = $data['api_key'];
- $stored_api_key = get_option( 'rtgodam-api-key' );
-
- if ( ! hash_equals( $stored_api_key, $provided_api_key ) ) {
- return new \WP_Error( 'forbidden', __( 'Invalid API key.', 'godam' ), array( 'status' => 403 ) );
- }
-
- if ( 'image_resize' !== $event ) {
- return new \WP_Error( 'invalid_event', __( 'Invalid event.', 'godam' ), array( 'status' => 403 ) );
- }
-
- return true;
- }
-
- /**
- * Update image attachment meta with subsizes.
- *
- * @since 1.5.0
- *
- * @param array $sizes Array of sizes data.
- * @param int $job_id Job ID.
- * @param int $attachment_id Attachment ID. Default to 0.
- *
- * @return bool True if successful, false otherwise.
- */
- private function update_image_attachment_meta( $sizes, $job_id, $attachment_id = 0 ) {
- if ( empty( $sizes ) || ! is_array( $sizes ) ) {
- return false;
- }
-
- if ( empty( $attachment_id ) && empty( $job_id ) ) {
- return false;
- }
-
- if ( empty( $attachment_id ) || ! is_numeric( $attachment_id ) ) {
- $attachment_id = rtgodam_get_post_id_by_meta_key_and_value( 'rtgodam_transcoding_job_id', $job_id );
- }
-
- $subsizes = array();
- foreach ( $sizes as $size ) {
- $subsizes[] = array(
- 'file' => $size['url'],
- 'filesize' => $size['file_size'],
- 'width' => $size['width'],
- 'height' => $size['height'],
- );
- }
-
- $attachment_meta = get_post_meta( $attachment_id, '_wp_attachment_metadata', true );
-
- // Normalize attachment meta to an array with a sizes key.
- if ( ! is_array( $attachment_meta ) ) {
- $attachment_meta = array();
- }
-
- if ( empty( $attachment_meta['sizes'] ) || ! is_array( $attachment_meta['sizes'] ) ) {
- $attachment_meta['sizes'] = array();
- }
-
- // Get registered image sizes from WordPress Settings > Media.
- $registered_sizes = wp_get_registered_image_subsizes();
- $additional_sizes = wp_get_additional_image_sizes();
-
- // Remove additional sizes from registered sizes to avoid duplicates.
- foreach ( $additional_sizes as $size_name => $size_data ) {
- if ( isset( $registered_sizes[ $size_name ] ) ) {
- unset( $registered_sizes[ $size_name ] );
- }
- }
-
- // Map received subsizes to registered size names.
- // Determine the closest matching registered size for each received size.
- foreach ( $subsizes as $size ) {
- $external_size_name = '';
- $min_diff = PHP_INT_MAX;
- foreach ( $registered_sizes as $size_name => $registered_size_data ) {
- if ( $registered_size_data['width'] === $size['width'] && $registered_size_data['height'] === $size['height'] ) {
- $external_size_name = $size_name;
- break;
- } elseif ( $size['width'] <= $registered_size_data['width'] && $size['height'] <= $registered_size_data['height'] ) {
- $diff = $registered_size_data['width'] - $size['width'] + $registered_size_data['height'] - $size['height'];
- if ( $diff < $min_diff ) {
- $min_diff = $diff;
- $external_size_name = $size_name;
- }
- }
- }
-
- if ( empty( $external_size_name ) ) {
- continue;
- }
-
- // Get last string after the last slash in the file url.
- $file_basename = basename( $size['file'] );
-
- $attachment_meta['sizes'][ $external_size_name ] = array(
- 'file' => $file_basename,
- 'filesize' => $size['filesize'],
- 'width' => $size['width'],
- 'height' => $size['height'],
- );
- }
-
- // Ensure top-level width/height exist for srcset calculation, fall back to the largest generated size.
- if ( ( empty( $attachment_meta['width'] ) || empty( $attachment_meta['height'] ) ) && ! empty( $subsizes ) ) {
- $largest = array_reduce(
- $subsizes,
- function ( $carry, $item ) {
- if ( null === $carry ) {
- return $item;
- }
- return ( $item['width'] > $carry['width'] ) ? $item : $carry;
- },
- null
- );
-
- if ( $largest ) {
- $attachment_meta['width'] = (int) $largest['width'];
- $attachment_meta['height'] = (int) $largest['height'];
- }
- }
-
- // Backfill the "file" key so WordPress does not bail early while building srcset.
- if ( empty( $attachment_meta['file'] ) ) {
- $full_url = wp_get_attachment_url( $attachment_id );
- if ( $full_url ) {
- $path = wp_parse_url( $full_url, PHP_URL_PATH );
- $attachment_meta['file'] = ltrim( wp_basename( $path ), '/' );
- }
- }
-
- update_post_meta( $attachment_id, '_wp_attachment_metadata', $attachment_meta );
- return true;
- }
-
- /**
- * Generate image subsizes callback.
- *
- * @param \WP_REST_Request $request REST API request.
- * @return \WP_REST_Response|WP_Error Success response or WP_Error on invalid event.
- *
- * @since 1.5.0
- */
- public function generate_image_subsizes_callback( $request ) {
- $data = $request->get_json_params();
-
- if ( 'image_resize' !== $data['event'] ) {
- return rest_ensure_response(
- array(
- 'success' => false,
- 'message' => __( 'Invalid event.', 'godam' ),
- )
- );
- }
-
- $job_id = isset( $data['data']['job_id'] ) ? $data['data']['job_id'] : '';
- $sizes = isset( $data['data']['resized_images'] ) && is_array( $data['data']['resized_images'] ) ? $data['data']['resized_images'] : array();
-
- if ( empty( $job_id ) || empty( $sizes ) ) {
- return new \WP_Error( 'invalid_data', __( 'job_id and resized_images are required.', 'godam' ), array( 'status' => 400 ) );
- }
-
- $result = $this->update_image_attachment_meta( $sizes, $job_id );
-
- if ( ! $result ) {
- return new \WP_Error( 'update_failed', __( 'Failed to update attachment metadata.', 'godam' ), array( 'status' => 500 ) );
- }
-
- return rest_ensure_response(
- array(
- 'success' => true,
- 'message' => __( 'Image subsizes successfully generated.', 'godam' ),
- )
);
}
@@ -1508,63 +1307,15 @@ public function create_media_entry( $request ) {
// Set custom metadata to track GoDAM-related properties.
update_post_meta( $attach_id, '_godam_original_id', $godam_id );
+ update_post_meta( $attach_id, '_godam_icon', esc_url_raw( $data['icon'] ?? '' ) );
+ update_post_meta( $attach_id, '_filesize_human', sanitize_text_field( $data['filesizeHumanReadable'] ?? '' ) );
+ update_post_meta( $attach_id, '_godam_label', sanitize_text_field( $data['label'] ?? '' ) );
update_post_meta( $attach_id, '_owner_email', sanitize_email( $data['owner'] ?? '' ) );
update_post_meta( $attach_id, 'rtgodam_transcoded_url', esc_url_raw( $data['mpd_url'] ?? '' ) );
update_post_meta( $attach_id, 'rtgodam_transcoding_status', 'transcoded' );
+ update_post_meta( $attach_id, 'icon', $data['icon'] );
+ update_post_meta( $attach_id, 'rtgodam_hls_transcoded_url', esc_url_raw( $data['hls_url'] ?? '' ) );
update_post_meta( $attach_id, 'rtgodam_transcoding_job_id', $godam_id );
- update_post_meta( $attach_id, '_wp_attached_file', sanitize_text_field( $data['filename'] ) ); // Virtual media path.
-
-
- if ( 'video' === $data['type'] ) {
- update_post_meta( $attach_id, 'rtgodam_hls_transcoded_url', esc_url_raw( $data['hls_url'] ?? '' ) );
-
- $wp_attachment_metadata = array(
- 'filesize' => isset( $data['filesizeInBytes'] ) ? (int) $data['filesizeInBytes'] : 0,
- );
-
- // Set Video thumbnail from icon URL if provided.
- if ( ! empty( $data['icon'] ) ) {
- update_post_meta( $attach_id, 'rtgodam_media_video_thumbnail', esc_url_raw( $data['icon'] ) );
- }
-
- update_post_meta( $attach_id, '_wp_attachment_metadata', $wp_attachment_metadata );
- } elseif ( 'image' === $data['type'] ) {
- // Initialize metadata with basic info.
- $wp_attachment_metadata = array(
- 'filesize' => isset( $data['filesizeInBytes'] ) ? (int) $data['filesizeInBytes'] : 0,
- 'sizes' => array(),
- );
-
- // Add width and height if available.
- if ( ! empty( $data['width'] ) && ! empty( $data['height'] ) ) {
- $wp_attachment_metadata['width'] = (int) $data['width'];
- $wp_attachment_metadata['height'] = (int) $data['height'];
- }
-
- update_post_meta( $attach_id, '_wp_attachment_metadata', $wp_attachment_metadata );
-
- // Request image subsizes from GoDAM Central.
- $this->request_image_subsizes_from_godam( $godam_id, $attach_id );
- } elseif ( 'audio' === $data['type'] ) {
- $wp_attachment_metadata = array(
- 'filesize' => isset( $data['filesizeInBytes'] ) ? (int) $data['filesizeInBytes'] : 0,
- 'mime_type' => $data['mime'],
- );
-
- update_post_meta( $attach_id, '_wp_attachment_metadata', $wp_attachment_metadata );
- } elseif ( 'pdf' === $data['type'] ) {
- $wp_attachment_metadata = array(
- 'filesize' => isset( $data['filesizeInBytes'] ) ? (int) $data['filesizeInBytes'] : 0,
- );
-
- update_post_meta( $attach_id, '_wp_attachment_metadata', $wp_attachment_metadata );
-
- // Set PDF thumbnail from icon URL if provided.
- if ( ! empty( $data['icon'] ) ) {
- update_post_meta( $attach_id, 'rtgodam_media_pdf_thumbnail', esc_url_raw( $data['icon'] ) );
- }
- }
-
// Return the newly created media object.
return new \WP_REST_Response(
@@ -1881,111 +1632,4 @@ private function prepare_term_responses( $terms ) {
return $prepared;
}
-
- /**
- * Request image subsizes generation from GoDAM Central.
- *
- * Sends a request to GoDAM Central API to generate image subsizes based on
- * WordPress registered image sizes (from Settings > Media). The API endpoint
- * should accept:
- * - job_id: The GoDAM file ID
- * - api_key: The GoDAM API key
- * - sizes_data: Array of size requests with width, height, crop
- * - events_callback_url: The URL to send events to.
- *
- * @since 1.5.0
- *
- * @param string $job_id The GoDAM job ID.
- * @param int $attachment_id The WordPress attachment ID.
- * @return bool True if request was successful, false otherwise.
- */
- private function request_image_subsizes_from_godam( $job_id, $attachment_id ) {
- $api_key = get_option( 'rtgodam-api-key', '' );
-
- if ( empty( $api_key ) ) {
- return false;
- }
-
- // Get registered image sizes from WordPress Settings > Media.
- $registered_sizes = wp_get_registered_image_subsizes();
- $additional_sizes = wp_get_additional_image_sizes();
-
- // Remove additional sizes from registered sizes to avoid duplicates.
- foreach ( $additional_sizes as $size_name => $size_data ) {
- if ( isset( $registered_sizes[ $size_name ] ) ) {
- unset( $registered_sizes[ $size_name ] );
- }
- }
-
- if ( empty( $registered_sizes ) ) {
- return false;
- }
-
-
- // Prepare size requests for GoDAM Central.
- $size_requests = array();
- foreach ( $registered_sizes as $size_name => $size_data ) {
- $size_requests[] = array(
- 'width' => $size_data['width'],
- 'height' => $size_data['height'],
- 'crop' => $size_data['crop'],
- );
- }
-
- // Construct the GoDAM API endpoint URL.
- $api_url = RTGODAM_API_BASE . '/api/method/godam_core.api.image.generate_resized_images';
-
- $events_callback_url = rest_url( 'godam/v1/media-library/generate-image-subsizes-callback' );
-
- // Prepare request body.
- $request_body = array(
- 'job_id' => $job_id,
- 'api_key' => $api_key,
- 'sizes_data' => $size_requests,
- 'events_callback_url' => $events_callback_url,
- );
-
- $args = array(
- 'body' => wp_json_encode( $request_body ),
- 'headers' => array(
- 'Content-Type' => 'application/json',
- ),
- );
-
- // Use vip_safe_wp_remote_post as primary and wp_safe_remote_post as fallback.
- if ( function_exists( 'vip_safe_wp_remote_post' ) ) {
- $response = vip_safe_wp_remote_post( $api_url, $args, 3, 3 );
- } else {
- $response = wp_safe_remote_post( $api_url, $args );
- }
-
- // Check for WP_Error or non-200 status codes.
- if ( is_wp_error( $response ) ) {
- return false;
- }
-
- $response_code = wp_remote_retrieve_response_code( $response );
-
- if ( 200 !== $response_code ) {
- return false;
- }
-
- $body = json_decode( wp_remote_retrieve_body( $response ), true );
-
- if ( empty( $body ) || ! is_array( $body ) ) {
- return false;
- }
-
- $body = isset( $body['message'] ) && ! empty( $body['message'] ) ? $body['message'] : array();
-
- if ( ! isset( $body['message'] ) ) {
- return false;
- }
-
- if ( 'sizes_exist' === $body['message'] && isset( $body['sizes'] ) && is_array( $body['sizes'] ) ) {
- return $this->update_image_attachment_meta( $body['sizes'], $job_id, $attachment_id );
- }
-
- return true;
- }
}
diff --git a/inc/classes/rest-api/class-settings.php b/inc/classes/rest-api/class-settings.php
index 52500bea9..d7332d5a5 100644
--- a/inc/classes/rest-api/class-settings.php
+++ b/inc/classes/rest-api/class-settings.php
@@ -49,8 +49,6 @@ private function get_default_settings() {
'general' => array(
'enable_folder_organization' => true,
'enable_gtm_tracking' => false,
- 'enable_posthog_tracking' => false,
- 'posthog_initialized' => false,
),
'video_player' => array(
'brand_image' => '',
@@ -178,7 +176,6 @@ public function verify_api_key( $request ) {
$result['data']['api_key'] = rtgodam_mask_string( $result['data']['api_key'] );
}
-
return new \WP_REST_Response(
array(
'status' => 'success',
@@ -244,13 +241,9 @@ public function get_api_key() {
*/
public function get_easydam_settings() {
// Retrieve settings from the database.
- $easydam_settings = get_option( 'rtgodam-settings', array() );
- $default_settings = $this->get_default_settings();
-
- // Merge defaults with saved settings.
- $merged_settings = array_replace_recursive( $default_settings, $easydam_settings );
+ $easydam_settings = get_option( 'rtgodam-settings', $this->get_default_settings() );
- return new \WP_REST_Response( $merged_settings, 200 );
+ return new \WP_REST_Response( $easydam_settings, 200 );
}
/**
@@ -315,8 +308,6 @@ public function sanitize_settings( $settings ) {
'general' => array(
'enable_folder_organization' => rest_sanitize_boolean( $settings['general']['enable_folder_organization'] ?? $default['general']['enable_folder_organization'] ),
'enable_gtm_tracking' => rest_sanitize_boolean( $settings['general']['enable_gtm_tracking'] ?? $default['general']['enable_gtm_tracking'] ),
- 'enable_posthog_tracking' => rest_sanitize_boolean( $settings['general']['enable_posthog_tracking'] ?? $default['general']['enable_posthog_tracking'] ),
- 'posthog_initialized' => rest_sanitize_boolean( $settings['general']['posthog_initialized'] ?? $default['general']['posthog_initialized'] ),
),
'video_player' => array(
'brand_image' => sanitize_text_field( $settings['video_player']['brand_image'] ?? $default['video_player']['brand_image'] ),
diff --git a/inc/classes/rest-api/class-transcoding.php b/inc/classes/rest-api/class-transcoding.php
index 9d9aa7f2e..51b0a4080 100644
--- a/inc/classes/rest-api/class-transcoding.php
+++ b/inc/classes/rest-api/class-transcoding.php
@@ -7,8 +7,6 @@
namespace RTGODAM\Inc\REST_API;
-use RTGODAM\Inc\Media_Library_Ajax;
-
defined( 'ABSPATH' ) || exit;
/**
@@ -117,25 +115,6 @@ public function get_rest_routes() {
},
),
),
- array(
- 'namespace' => $this->namespace,
- 'route' => '/' . $this->rest_base . '/check-transcoded-status/',
- 'args' => array(
- 'methods' => \WP_REST_Server::READABLE,
- 'callback' => array( $this, 'check_transcoded_status' ),
- 'permission_callback' => function () {
- return current_user_can( 'edit_others_posts' );
- },
- 'args' => array(
- 'ids' => array(
- 'required' => true,
- 'type' => 'string',
- 'description' => __( 'The comma-separated string of attachment IDs to check.', 'godam' ),
- 'sanitize_callback' => 'sanitize_text_field',
- ),
- ),
- ),
- ),
);
}
@@ -261,7 +240,7 @@ private function get_status_object_from_attachment( int $attachment_id ) {
$thumbnail_id = get_post_meta( $attachment_id, 'rtgodam_media_video_thumbnail', true );
// Handle retry logic for missing thumbnails when transcoding is complete.
- if ( 'transcoded' === strtolower( $status ) && empty( $thumbnail_id ) ) {
+ if ( 'Transcoded' === $status && empty( $thumbnail_id ) ) {
$retry_count = intval( get_post_meta( $attachment_id, 'rtgodam_thumbnail_retry_count', true ) );
$max_retries = 3;
@@ -413,75 +392,10 @@ public function get_media_require_retranscoding( $request ) {
}
} while ( true );
- // Get counts for transcoded and untranscoded media.
- $total_video_count = array_sum( (array) wp_count_attachments( 'video' ) );
-
- // Count transcoded media (have rtgodam_transcoded_url meta).
- $transcoded_args = array(
- 'post_type' => 'attachment',
- 'post_mime_type' => 'video',
- 'post_status' => 'any',
- 'posts_per_page' => 1,
- 'fields' => 'ids',
- // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- This is a necessary query to find posts that have the rtgodam_transcoded_url meta.
- 'meta_query' => array(
- array(
- 'key' => 'rtgodam_transcoded_url',
- 'compare' => 'EXISTS',
- ),
- ),
- );
- $transcoded_query = new \WP_Query( $transcoded_args );
- $transcoded_count = $transcoded_query->found_posts; // This will return the number of posts that have the rtgodam_transcoded_url meta.
-
- // Count untranscoded media (don't have rtgodam_transcoded_url meta).
- $untranscoded_count = $total_video_count - $transcoded_count;
-
return new \WP_REST_Response(
array(
'data' => $all_posts,
- 'total_media_count' => $total_video_count,
- 'transcode_count' => $untranscoded_count,
- 'retranscode_count' => $transcoded_count,
- ),
- 200
- );
- }
-
- /**
- * Check if specific media IDs are transcoded.
- *
- * @param \WP_REST_Request $request REST request object.
- *
- * @return \WP_REST_Response
- */
- public function check_transcoded_status( $request ) {
- $ids_param = $request->get_param( 'ids' );
-
- // If it's a string (comma-separated), split it into array.
- if ( is_string( $ids_param ) ) {
- $attachment_ids = array_map( 'intval', explode( ',', $ids_param ) );
- } else {
- $attachment_ids = array_map( 'intval', (array) $ids_param );
- }
-
- $transcode_count = 0;
- $retranscode_count = 0;
-
- foreach ( $attachment_ids as $attachment_id ) {
- $transcoded_url = get_post_meta( $attachment_id, 'rtgodam_transcoded_url', true );
- // If transcoded, it should have URL.
- if ( ! empty( $transcoded_url ) ) {
- ++$retranscode_count;
- } else {
- ++$transcode_count;
- }
- }
-
- return new \WP_REST_Response(
- array(
- 'transcode_count' => $transcode_count,
- 'retranscode_count' => $retranscode_count,
+ 'total_media_count' => array_sum( (array) wp_count_attachments( 'video' ) ),
),
200
);
@@ -535,7 +449,7 @@ public function retranscode_media( \WP_REST_Request $request ) {
if ( ! empty( $godam_original_id ) ) {
$message = sprintf(
// translators: 1: Attachment title, 2: Attachment ID.
- __( '%1$s (ID %2$d) is virtual media from GoDAM Central. Please retranscode this media on GoDAM Central.', 'godam' ),
+ __( '%1$s (ID %2$d) is virtual media from GoDAM Central. Please retranscode this video on GoDAM Central.', 'godam' ),
esc_html( $title ),
absint( $attachment_id )
);
@@ -605,13 +519,8 @@ public function retranscode_media( \WP_REST_Request $request ) {
$wp_metadata['mime_type'] = $mime_type;
// Retranscode the media.
- if ( preg_match( '/image/i', $mime_type ) ) {
- $transcoder = Media_Library_Ajax::get_instance();
- $transcoder->upload_media_to_frappe_backend( $attachment_id, true );
- } else {
- $transcoder = new \RTGODAM_Transcoder_Handler( true );
- $transcoder->wp_media_transcoding( $wp_metadata, $attachment_id, true, true );
- }
+ $transcoder = new \RTGODAM_Transcoder_Handler( true );
+ $transcoder->wp_media_transcoding( $wp_metadata, $attachment_id );
// Check if the transcoding job ID is set.
$is_sent = get_post_meta( $attachment_id, 'rtgodam_transcoding_job_id', true );
diff --git a/inc/classes/shortcodes/class-godam-video-gallery.php b/inc/classes/shortcodes/class-godam-video-gallery.php
index 99f05de70..2af0ff9cb 100644
--- a/inc/classes/shortcodes/class-godam-video-gallery.php
+++ b/inc/classes/shortcodes/class-godam-video-gallery.php
@@ -220,7 +220,7 @@ public function render( $atts ) {
$video_settings = get_option( 'rtgodam_video_post_settings', array() );
$cpt_url_slug = ! empty( $video_settings['video_slug'] ) ? sanitize_title( $video_settings['video_slug'] ) : 'videos';
- $cpt_base_url = home_url( '/' );
+ $cpt_base_url = home_url( '/' . $cpt_url_slug );
$query = new \WP_Query( $args );
@@ -230,19 +230,14 @@ public function render( $atts ) {
// Add action before gallery output.
do_action( 'rtgodam_gallery_before_output', $query, $atts );
- $godam_figure_attributes = get_block_wrapper_attributes(
- array(
- 'class' => 'godam-video-gallery-wrapper',
- )
- );
-
// Calculate these values before using them.
$total_videos = $query->found_posts;
$shown_videos = count( $query->posts );
- echo '
';
+ $alignment_class = ! empty( $atts['align'] ) ? ' align' . $atts['align'] : '';
echo '
'video-embed',
- 'id' => $video_id,
- );
-
- // Add the engagements query argument if it is enabled.
- if ( $item_engagements_enabled ) {
- $query_args['engagements'] = 'show';
- }
-
- $video_url = add_query_arg( $query_args, $cpt_base_url );
-
- if ( isset( $atts['open_to_new_page'] ) && $atts['open_to_new_page'] ) {
- $video_slug = get_post_field( 'post_name', $video_id );
- $video_settings = get_option( 'rtgodam_video_post_settings', array() );
- $cpt_url_slug = ! empty( $video_settings['video_slug'] ) ? sanitize_title( $video_settings['video_slug'] ) : 'videos';
- $cpt_base_url = home_url( '/' . $cpt_url_slug );
- $video_url = $cpt_base_url . '/' . $video_slug;
-
- if ( $item_engagements_enabled ) {
- $video_url = add_query_arg(
- array(
- 'engagements' => 'show',
- ),
- $video_url
- );
- }
- }
-
echo '
';
- echo '
';
+ echo '
';
echo '
';
if ( $duration ) {
echo '
' . esc_html( $duration ) . ' ';
@@ -367,15 +322,11 @@ class="godam-load-more wp-element-button"
data-orderby="' . esc_attr( $atts['orderby'] ) . '"
data-order="' . esc_attr( $atts['order'] ) . '"
data-total="' . esc_attr( $total_videos ) . '"
- data-engagements="' . esc_attr( $atts['engagements'] ) . '"
- data-open-to-new-page="' . esc_attr( $atts['open_to_new_page'] ) . '"
>' . esc_html__( 'Load More', 'godam' ) . '';
}
echo '
';
}
- echo '
';
-
echo '
diff --git a/inc/classes/sureforms/class-assets.php b/inc/classes/sureforms/class-assets.php
index ce0be5f43..8d7e4b21f 100644
--- a/inc/classes/sureforms/class-assets.php
+++ b/inc/classes/sureforms/class-assets.php
@@ -51,7 +51,6 @@ public function register_scripts() {
* Get current post to check.
*/
$current_post = get_post();
- $preview_page = get_query_var( 'godam_page' );
if ( $current_post instanceof WP_Post ) {
$load_assets = ( SRFM_FORMS_POST_TYPE === $current_post->post_type || ( false !== strpos( $current_post->post_content, 'wp:srfm/form' ) || has_shortcode( $current_post->post_content, 'sureforms' ) ) );
@@ -63,45 +62,31 @@ public function register_scripts() {
if ( ! $load_assets && ! $is_godam ) {
return;
}
- $this->load_scripts();
- }
-
- if ( 'video-preview' === $preview_page ) {
- $this->load_scripts();
- }
- }
- /**
- * Load the necessary scripts for sureforms and godam.
- *
- * This function will enqueue the godam-recorder-script and godam-uppy-video-style if they are not already enqueued.
- *
- * @return void
- */
- public function load_scripts() {
- if ( ! wp_script_is( 'godam-recorder-script' ) ) {
- /**
- * Enqueue script if not already enqueued.
- */
- wp_enqueue_script(
- 'godam-recorder-script',
- RTGODAM_URL . 'assets/build/js/godam-recorder.min.js',
- array( 'jquery' ),
- filemtime( RTGODAM_PATH . 'assets/build/js/godam-recorder.min.js' ),
- true
- );
- }
+ if ( ! wp_script_is( 'godam-recorder-script' ) ) {
+ /**
+ * Enqueue script if not already enqueued.
+ */
+ wp_enqueue_script(
+ 'godam-recorder-script',
+ RTGODAM_URL . 'assets/build/js/godam-recorder.min.js',
+ array( 'jquery' ),
+ filemtime( RTGODAM_PATH . 'assets/build/js/godam-recorder.min.js' ),
+ true
+ );
+ }
- if ( ! wp_script_is( 'godam-uppy-video-style' ) ) {
- /**
- * Enqueue style for the uppy video.
- */
- wp_enqueue_style(
- 'godam-uppy-video-style',
- RTGODAM_URL . 'assets/build/css/gf-uppy-video.css',
- array(),
- filemtime( RTGODAM_PATH . 'assets/build/css/gf-uppy-video.css' )
- );
+ if ( ! wp_script_is( 'godam-uppy-video-style' ) ) {
+ /**
+ * Enqueue style for the uppy video.
+ */
+ wp_enqueue_style(
+ 'godam-uppy-video-style',
+ RTGODAM_URL . 'assets/build/css/gf-uppy-video.css',
+ array(),
+ filemtime( RTGODAM_PATH . 'assets/build/css/gf-uppy-video.css' )
+ );
+ }
}
}
}
diff --git a/inc/classes/wpforms/class-wpforms-field-godam-video.php b/inc/classes/wpforms/class-wpforms-field-godam-video.php
index 5eaeff683..ba4e85285 100644
--- a/inc/classes/wpforms/class-wpforms-field-godam-video.php
+++ b/inc/classes/wpforms/class-wpforms-field-godam-video.php
@@ -460,10 +460,8 @@ public function format_field_value_for_html( $value, $field, $form_data, $contex
return $value;
}
- $original_field_value = isset( $field['value'] ) ? trim( $field['value'] ) : $value;
-
// Default formatting style.
- $formatted_value = sprintf( '
%s ', esc_url( $original_field_value ), esc_html( basename( $value ) ) );
+ $formatted_value = sprintf( '
%s ', esc_url( $value ), esc_html( basename( $value ) ) );
// Format for entry view page.
if ( 'entry-single' === $context && \wpforms_is_admin_page( 'entries', 'details' ) ) {
diff --git a/inc/classes/wpforms/wpforms-field-godam-record-entry-edit.php b/inc/classes/wpforms/wpforms-field-godam-record-entry-edit.php
index 15274157c..0467c2ced 100644
--- a/inc/classes/wpforms/wpforms-field-godam-record-entry-edit.php
+++ b/inc/classes/wpforms/wpforms-field-godam-record-entry-edit.php
@@ -7,10 +7,6 @@
* @since 1.3.0
*/
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
// Check if the field is not a video field.
if ( ! isset( $field['type'] ) || 'godam_record' !== $field['type'] ) {
return;
diff --git a/inc/classes/wpforms/wpforms-field-godam-record-entry-view.php b/inc/classes/wpforms/wpforms-field-godam-record-entry-view.php
index e293d4f78..99efb34c9 100644
--- a/inc/classes/wpforms/wpforms-field-godam-record-entry-view.php
+++ b/inc/classes/wpforms/wpforms-field-godam-record-entry-view.php
@@ -7,10 +7,6 @@
* @since 1.3.0
*/
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
use RTGODAM\Inc\WPForms\WPForms_Integration_Helper;
$godam_form_id = absint( $form_data['id'] );
@@ -39,7 +35,7 @@ class="godam-video-link "
-
+
diff --git a/inc/classes/wpforms/wpforms-field-godam-record-frontend.php b/inc/classes/wpforms/wpforms-field-godam-record-frontend.php
index 96683fbed..f9d13ba31 100644
--- a/inc/classes/wpforms/wpforms-field-godam-record-frontend.php
+++ b/inc/classes/wpforms/wpforms-field-godam-record-frontend.php
@@ -7,10 +7,6 @@
* @since 1.3.0
*/
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
$godam_video_upload_button_id = wp_unique_id( 'uppy-video-upload-' );
// Define data.
diff --git a/inc/helpers/custom-functions.php b/inc/helpers/custom-functions.php
index 134642fe4..c6f079cc9 100644
--- a/inc/helpers/custom-functions.php
+++ b/inc/helpers/custom-functions.php
@@ -131,6 +131,7 @@ function rtgodam_filter_input( $type, $variable_name, $filter = FILTER_DEFAULT,
* @param int $media_id The ID of the media attachment.
*
* @return string The URL of the media file, or an empty string if invalid or not found.
+ * @throws Exception If the media is not found or is not an attachment.
*/
function rtgodam_fetch_overlay_media_url( $media_id ) {
if ( empty( $media_id ) || 0 === intval( $media_id ) ) {
@@ -140,7 +141,7 @@ function rtgodam_fetch_overlay_media_url( $media_id ) {
$media = get_post( $media_id );
if ( ! $media || 'attachment' !== $media->post_type ) {
- return '';
+ throw new Exception( 'Media not found' );
}
$media_url = wp_get_attachment_url( $media_id );
@@ -188,23 +189,18 @@ function rtgodam_image_cta_html( $layer ) {
$image_link = isset( $layer['imageLink'] ) ? $layer['imageLink'] : '/';
$cta_background_color = isset( $layer['imageCtaButtonColor'] ) ? $layer['imageCtaButtonColor'] : '#eeab95';
$cta_button_text = ! empty( $layer['imageCtaButtonText'] ) ? $layer['imageCtaButtonText'] : 'Buy Now'; // Null coalescing with empty check.
- $image_box = "
" . __( 'No Image', 'godam' ) . '
';
-
- if ( ! empty( $image_url ) ) {
- $image_box = "
";
- }
return "
- {$image_box}
+
" . ( ! empty( $image_text ) ? "
{$image_text} " : '' ) . '
' . ( ! empty( $image_description ) ? "
{$image_description}
" : '' ) . "
@@ -400,7 +396,7 @@ function rtgodam_is_api_key_valid() {
/**
* Checks if the given filename is an audio file based on its name.
- *
+ *
* Note: The files created by uppy webcam, screen capture, and audio plugin are in the same format. So we are checking the filename to determine if it's an audio file.
*
* @since 1.4.1
@@ -430,28 +426,6 @@ function godam_is_audio_file_by_name( $filename ) {
*/
function rtgodam_send_video_to_godam_for_transcoding( $form_type = '', $form_title = '', $file_url = '', $entry_id = 0, $job_type = 'stream' ) {
- /**
- * Filter to allow external developers to disable automatic transcoding for form uploads.
- * This allows clients to have manual control over when form-recorded videos get transcoded.
- *
- * This is the same filter used for media library uploads, providing unified control.
- * When disabled, form submissions will fail with an error message indicating transcoding is disabled.
- * Manual retranscoding via the admin interface will still work regardless of this setting.
- *
- * Example usage:
- * add_filter( 'godam_auto_transcode_on_upload', '__return_false' ); // Disable globally
- *
- * @since 1.5.0
- *
- * @param bool $auto_transcode_on_upload Whether to automatically transcode form uploads. Default true.
- */
- if ( ! apply_filters( 'godam_auto_transcode_on_upload', true ) ) {
- return new WP_Error(
- 'transcoding_disabled',
- __( 'Form transcoding has been disabled by the site administrator.', 'godam' )
- );
- }
-
/**
* Extract file extension.
*/
@@ -524,13 +498,12 @@ function rtgodam_send_video_to_godam_for_transcoding( $form_type = '', $form_tit
$site_url = get_site_url();
// Get author name with fallback to username.
- $author_first_name = $current_user->first_name ?? '';
- $author_last_name = $current_user->last_name ?? '';
- $author_email = $current_user->user_email ?? '';
+ $author_first_name = $current_user->first_name;
+ $author_last_name = $current_user->last_name;
// If first and last names are empty, use username as fallback.
if ( empty( $author_first_name ) && empty( $author_last_name ) ) {
- $author_first_name = $current_user->user_login ?? '';
+ $author_first_name = $current_user->user_login;
}
$body = array_merge(
@@ -548,7 +521,7 @@ function rtgodam_send_video_to_godam_for_transcoding( $form_type = '', $form_tit
'watermark' => boolval( $rtgodam_watermark ),
'resolutions' => array( 'auto' ),
'folder_name' => ! empty( $form_title ) ? $form_title : __( 'Gravity forms', 'godam' ),
- 'wp_author_email' => apply_filters( 'godam_author_email_to_send', $author_email, 0 ),
+ 'wp_author_email' => apply_filters( 'godam_author_email_to_send', $current_user->user_email, 0 ),
'wp_site' => $site_url,
'wp_author_first_name' => apply_filters( 'godam_author_first_name_to_send', $author_first_name, 0 ),
'wp_author_last_name' => apply_filters( 'godam_author_last_name_to_send', $author_last_name, 0 ),
@@ -720,13 +693,13 @@ function rtgodam_cache_delete( $key ) {
/**
* Check if the current environment is localhost.
- *
+ *
* This function checks the server's remote address and host to determine if the site is running in a local development environment.
* It checks against a whitelist of common localhost IPs and also looks for '.local' or '.test' in the host name.
* Additionally, it respects the RTGODAM_IS_LOCAL constant if defined.
- *
+ *
* @since 1.4.3
- *
+ *
* @return bool True if the environment is localhost, false otherwise.
*/
function rtgodam_is_local_environment() {
@@ -885,78 +858,4 @@ function godam_preview_page_content( $video_id ) {
get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->postmeta} WHERE meta_key = %s AND meta_value = %s", $key, $value ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
- rtgodam_cache_set( $cache_key, $meta, HOUR_IN_SECONDS );
- }
-
- if ( is_array( $meta ) && ! empty( $meta ) && isset( $meta[0] ) ) {
- $meta = $meta[0];
- }
- if ( is_object( $meta ) ) {
- return $meta->post_id;
- }
- return false;
-}
-
-/**
- * Generate HTML content for the video embed page.
- *
- * This function produces the HTML markup for embedding a single video.
- * It displays the video player only, without any headers or notices,
- * making it suitable for embedding in iframes or modals.
- *
- * @param int $video_id The ID of the video attachment to embed.
- * @param bool $show_engagements Whether to show engagements.
- *
- * @since 1.5.0
- *
- * @return string The generated HTML content for the video embed page.
- */
-function godam_embed_page_content( $video_id, $show_engagements = false ) {
- ob_start();
- // Check if video ID is provided and if video attachment exists.
- $video_attachment = null;
- $show_video = false;
- $video_id = intval( $video_id );
- $show_engagements = $show_engagements ? 'show' : '';
-
- if ( ! empty( $video_id ) ) {
- $video_attachment = get_post( $video_id );
- $show_video = $video_attachment && 'attachment' === $video_attachment->post_type && 'video/' === substr( $video_attachment->post_mime_type, 0, 6 );
- }
-
- if ( ! $show_video ) {
- // Display error message for missing or invalid video.
- ?>
-
-
-
-
-
-
-
>
-
-
-
-
-
-
+
>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -skin" >
-
-
-
-
-
-
-
-
-
+
-
- />
+ />
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
-
-
+
+
+
+
-
-
+
+
+
+
-
-
+
+
+
+
+
+
+
diff --git a/inc/templates/video-embed.php b/inc/templates/video-embed.php
deleted file mode 100644
index 4926b8c65..000000000
--- a/inc/templates/video-embed.php
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
->
-
-
-
-
-
-
->
-
-
-
-
diff --git a/languages/godam.pot b/languages/godam.pot
index 027548f76..57ffe8525 100644
--- a/languages/godam.pot
+++ b/languages/godam.pot
@@ -1,22 +1,22 @@
-# Copyright (C) 2026 rtCamp
+# Copyright (C) 2025 rtCamp
# This file is distributed under the GPLv2 or later.
msgid ""
msgstr ""
-"Project-Id-Version: GoDAM 1.5.0\n"
+"Project-Id-Version: GoDAM 1.4.9\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/godam\n"
"Last-Translator: FULL NAME
\n"
"Language-Team: LANGUAGE \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"POT-Creation-Date: 2026-01-20T06:40:37+00:00\n"
+"POT-Creation-Date: 2025-12-18T13:45:15+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"X-Generator: WP-CLI 2.11.0\n"
+"X-Generator: WP-CLI 2.12.0\n"
"X-Domain: godam\n"
#. Plugin Name of the plugin
#: godam.php
-#: inc/classes/class-elementor-widgets.php:138
+#: inc/classes/class-elementor-widgets.php:134
#: inc/classes/class-pages.php:166
#: inc/classes/class-pages.php:167
#: pages/video-editor/components/forms/CF7.js:24
@@ -52,7 +52,7 @@ msgstr ""
#: admin/class-rtgodam-retranscodemedia.php:284
#: admin/js/godam-retranscode-media.js:6
#: pages/tools/App.js:20
-#: pages/tools/components/tabs/RetranscodeTab.jsx:353
+#: pages/tools/components/tabs/RetranscodeTab.jsx:297
msgid "Retranscode Media"
msgstr ""
@@ -64,6 +64,7 @@ msgstr ""
#. translators: Link to the media page.
#: admin/class-rtgodam-retranscodemedia.php:183
#: admin/class-rtgodam-retranscodemedia.php:395
+#, php-format
msgid "Unable to find any media. Are you sure some exist ?"
msgstr ""
@@ -74,6 +75,7 @@ msgstr ""
#. translators: The URL to go back to the previous page.
#: admin/class-rtgodam-retranscodemedia.php:206
#: admin/class-rtgodam-retranscodemedia.php:475
+#, php-format
msgid "To go back to the previous page, click here ."
msgstr ""
@@ -112,11 +114,13 @@ msgstr ""
#. translators: Count of media which were successfully and media which were failed transcoded with the time in seconds and previout page link.
#: admin/class-rtgodam-retranscodemedia.php:478
+#, php-format
msgid "All done! %1$s media file(s) were successfully sent for transcoding in %2$s seconds and there were %3$s failure(s). To try transcoding the failed media again, click here . %5$s"
msgstr ""
#. translators: Count of media which were successfully transcoded with the time in seconds and previout page link.
#: admin/class-rtgodam-retranscodemedia.php:480
+#, php-format
msgid "All done! %1$s media file(s) were successfully sent for transcoding in %2$s seconds and there were 0 failures. %3$s"
msgstr ""
@@ -135,16 +139,19 @@ msgstr ""
#. translators: Total count of the media.
#: admin/class-rtgodam-retranscodemedia.php:496
+#, php-format
msgid "Total Media: %s"
msgstr ""
#. translators: Count of media which were successfully sent to the transcoder server.
#: admin/class-rtgodam-retranscodemedia.php:501
+#, php-format
msgid "Media Sent for Retranscoding: %s"
msgstr ""
#. translators: Count of media which were failed while sending to the transcoder server.
#: admin/class-rtgodam-retranscodemedia.php:506
+#, php-format
msgid "Failed While Sending: %s"
msgstr ""
@@ -158,6 +165,7 @@ msgstr ""
#. translators: Placeholder is for admin media section link.
#: admin/class-rtgodam-retranscodemedia.php:528
+#, php-format
msgid "You can retranscode specific media files (rather than ALL media) from the Media page using Bulk Action via drop down or mouse hover a specific media (audio/video) file."
msgstr ""
@@ -171,6 +179,7 @@ msgstr ""
#. translators: Media name, Media ID and message for failed transcode.
#: admin/class-rtgodam-retranscodemedia.php:555
+#, php-format
msgid ""%1$s" (ID %2$s) failed to send. The error message was: %3$s"
msgstr ""
@@ -179,214 +188,185 @@ msgid "Insufficient bandwidth!"
msgstr ""
#. translators: %s is the URL to the plugin settings page where the API key can be activated.
-#: admin/class-rtgodam-transcoder-admin.php:83
-#: admin/class-rtgodam-transcoder-admin.php:145
-#: admin/class-rtgodam-transcoder-admin.php:160
+#: admin/class-rtgodam-transcoder-admin.php:79
+#: admin/class-rtgodam-transcoder-admin.php:141
+#: admin/class-rtgodam-transcoder-admin.php:156
+#, php-format
msgid "Enjoy using our DAM and Video Editor features for free! To unlock transcoding and other features, please activate your api key. "
msgstr ""
#. translators: %d: Number of days until trial ends
-#: admin/class-rtgodam-transcoder-admin.php:108
+#: admin/class-rtgodam-transcoder-admin.php:104
+#, php-format
msgid "Your product is under trial. You will be charged after %d days . If you wish to cancel, please visit your subscription settings ."
msgstr ""
#. translators: %d: Number of days until transcoded videos are deleted after subscription ends
-#: admin/class-rtgodam-transcoder-admin.php:132
+#: admin/class-rtgodam-transcoder-admin.php:128
+#, php-format
msgid "Your subscription has ended. No further transcoding can be done. Transcoded videos will be removed after %d days , and advanced video layers will not be accessible. After the 30-day grace period, already transcoded videos will no longer be served from the CDN. Renew your subscription to keep it up and running."
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:182
-#: admin/class-rtgodam-transcoder-admin.php:343
+#: admin/class-rtgodam-transcoder-admin.php:178
+#: admin/class-rtgodam-transcoder-admin.php:339
msgid "Activate API Key"
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:182
+#: admin/class-rtgodam-transcoder-admin.php:178
msgid "Use Video Editor"
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:193
+#: admin/class-rtgodam-transcoder-admin.php:189
msgid "Welcome to GoDAM! Thank you for using our product."
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:218
-#: admin/class-rtgodam-transcoder-admin.php:542
-#: admin/class-rtgodam-transcoder-admin.php:605
-#: admin/class-rtgodam-transcoder-admin.php:644
+#: admin/class-rtgodam-transcoder-admin.php:214
+#: admin/class-rtgodam-transcoder-admin.php:497
+#: admin/class-rtgodam-transcoder-admin.php:560
+#: admin/class-rtgodam-transcoder-admin.php:599
msgid "Learn More"
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:273
-#: inc/classes/class-media-library-ajax.php:717
+#: admin/class-rtgodam-transcoder-admin.php:269
+#: inc/classes/class-media-library-ajax.php:625
#: pages/dashboard/Dashboard.js:207
#: pages/video-editor/AttachmentPicker.jsx:45
msgid "Claim the GoDAM New Year Sale 2026 offer"
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:275
-#: inc/classes/class-media-library-ajax.php:719
+#: admin/class-rtgodam-transcoder-admin.php:271
+#: inc/classes/class-media-library-ajax.php:627
#: pages/dashboard/Dashboard.js:211
#: pages/video-editor/AttachmentPicker.jsx:49
msgid "New Year Sale 2026 offer from GoDAM"
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:276
-#: inc/classes/class-media-library-ajax.php:720
+#: admin/class-rtgodam-transcoder-admin.php:272
+#: inc/classes/class-media-library-ajax.php:628
#: pages/video-editor/AttachmentPicker.jsx:58
msgid "Dismiss banner"
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:333
-#: assets/src/js/media-library/views/attachment.js:178
-#: pages/godam/components/GoDAMHeader.jsx:56
+#: admin/class-rtgodam-transcoder-admin.php:329
+#: assets/src/js/media-library/views/attachment.js:173
+#: pages/godam/components/GoDAMHeader.jsx:51
msgid "GoDAM Logo"
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:336
-msgid "Try GoDAM free for 60 days with all features, unlimited sites and users."
+#: admin/class-rtgodam-transcoder-admin.php:332
+msgid "GoDAM now has a Free Plan with 20GB of storage and bandwidth. Unlimited sites and users."
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:340
+#: admin/class-rtgodam-transcoder-admin.php:336
msgid "Get your Free Plan"
msgstr ""
#. translators: %1$s: bandwidth percentage, %2$s: storage percentage
-#: admin/class-rtgodam-transcoder-admin.php:505
+#: admin/class-rtgodam-transcoder-admin.php:460
+#, php-format
msgid "Your bandwidth (%1$s%%) and storage (%2$s%%) usage have exceeded your plan limits."
msgstr ""
#. translators: %s: bandwidth percentage
-#: admin/class-rtgodam-transcoder-admin.php:512
+#: admin/class-rtgodam-transcoder-admin.php:467
+#, php-format
msgid "Your bandwidth usage (%s%%) has exceeded your plan limit."
msgstr ""
#. translators: %s: storage percentage
-#: admin/class-rtgodam-transcoder-admin.php:518
+#: admin/class-rtgodam-transcoder-admin.php:473
+#, php-format
msgid "Your storage usage (%s%%) has exceeded your plan limit."
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:523
+#: admin/class-rtgodam-transcoder-admin.php:478
msgid "Transcoding requests may be blocked until you upgrade your plan."
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:535
+#: admin/class-rtgodam-transcoder-admin.php:490
msgid "GoDAM Usage Limit Exceeded"
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:539
-#: admin/class-rtgodam-transcoder-admin.php:641
+#: admin/class-rtgodam-transcoder-admin.php:494
+#: admin/class-rtgodam-transcoder-admin.php:596
msgid "Upgrade Your Plan"
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:545
-#: admin/class-rtgodam-transcoder-admin.php:608
-#: admin/class-rtgodam-transcoder-admin.php:647
+#: admin/class-rtgodam-transcoder-admin.php:500
+#: admin/class-rtgodam-transcoder-admin.php:563
+#: admin/class-rtgodam-transcoder-admin.php:602
msgid "Refresh Status"
msgstr ""
#. translators: %1$s: bandwidth percentage, %2$s: storage percentage
-#: admin/class-rtgodam-transcoder-admin.php:568
+#: admin/class-rtgodam-transcoder-admin.php:523
+#, php-format
msgid "Your bandwidth (%1$s%%) and storage (%2$s%%) usage are approaching your plan limits."
msgstr ""
#. translators: %s: bandwidth percentage
-#: admin/class-rtgodam-transcoder-admin.php:575
+#: admin/class-rtgodam-transcoder-admin.php:530
+#, php-format
msgid "Your bandwidth usage (%s%%) is approaching your plan limit."
msgstr ""
#. translators: %s: storage percentage
-#: admin/class-rtgodam-transcoder-admin.php:581
+#: admin/class-rtgodam-transcoder-admin.php:536
+#, php-format
msgid "Your storage usage (%s%%) is approaching your plan limit."
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:586
+#: admin/class-rtgodam-transcoder-admin.php:541
msgid "Consider upgrading your plan to avoid service interruptions."
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:598
+#: admin/class-rtgodam-transcoder-admin.php:553
msgid "GoDAM Usage Warning"
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:602
+#: admin/class-rtgodam-transcoder-admin.php:557
msgid "View Plans"
msgstr ""
#. translators: %s: bandwidth percentage
-#: admin/class-rtgodam-transcoder-admin.php:625
+#: admin/class-rtgodam-transcoder-admin.php:580
+#, php-format
msgid "Your bandwidth usage (%s%%) has exceeded your plan limit. Videos might not be served from CDN on frontend."
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:637
+#: admin/class-rtgodam-transcoder-admin.php:592
msgid "GoDAM Bandwidth Exceeded"
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:638
+#: admin/class-rtgodam-transcoder-admin.php:593
msgid "Transcoding will continue to work."
msgstr ""
-#: admin/class-rtgodam-transcoder-admin.php:683
-msgid "Want to help make GoDAM even more awesome? Allow GoDAM to collect anonymous diagnostic data and usage information."
-msgstr ""
-
-#: admin/class-rtgodam-transcoder-admin.php:690
-msgid "what we collect"
-msgstr ""
-
-#: admin/class-rtgodam-transcoder-admin.php:692
-msgid "Data we collect:"
-msgstr ""
-
-#: admin/class-rtgodam-transcoder-admin.php:694
-msgid "Server environment details (PHP, MySQL, Server, and WordPress versions)"
-msgstr ""
-
-#: admin/class-rtgodam-transcoder-admin.php:695
-msgid "Site and user count (Language and number of users)"
-msgstr ""
-
-#: admin/class-rtgodam-transcoder-admin.php:696
-msgid "Plugin details (Number of active and inactive plugins)"
-msgstr ""
-
-#: admin/class-rtgodam-transcoder-admin.php:697
-msgid "Usage data (Interactions, navigation, session replays, heatmaps, and errors via PostHog)"
-msgstr ""
-
-#. translators: %s: PostHog privacy policy URL
-#: admin/class-rtgodam-transcoder-admin.php:703
-msgid "We are using PostHog to collect anonymous data. Learn more . This can be disabled from the settings on the Help page."
-msgstr ""
-
-#: admin/class-rtgodam-transcoder-admin.php:715
-msgid "Allow"
-msgstr ""
-
-#: admin/class-rtgodam-transcoder-admin.php:716
-msgid "No thanks"
-msgstr ""
-
#. translators: %s: storage usage percent
-#: admin/class-rtgodam-transcoder-handler.php:258
+#: admin/class-rtgodam-transcoder-handler.php:233
+#, php-format
msgid "Storage exceeded (%s%%)."
msgstr ""
-#: admin/class-rtgodam-transcoder-handler.php:262
+#: admin/class-rtgodam-transcoder-handler.php:237
msgid "Please upgrade your plan to continue transcoding."
msgstr ""
-#: admin/class-rtgodam-transcoder-handler.php:529
+#: admin/class-rtgodam-transcoder-handler.php:505
msgid "You have successfully subscribed."
msgstr ""
-#: admin/class-rtgodam-transcoder-handler.php:551
+#: admin/class-rtgodam-transcoder-handler.php:527
msgid "This API key is invalid."
msgstr ""
-#: admin/class-rtgodam-transcoder-handler.php:566
+#: admin/class-rtgodam-transcoder-handler.php:542
msgid "Transcoding service can not be activated on the localhost"
msgstr ""
#. translators: Return an error if the value is neither a string nor an array.
#: admin/class-rtgodam-transcoder-rest-routes.php:193
+#, php-format
msgid "%s must be a valid URL or an array of URLs."
msgstr ""
@@ -394,97 +374,96 @@ msgstr ""
msgid "Thumbnail created successfully."
msgstr ""
-#: admin/class-rtgodam-transcoder-rest-routes.php:296
+#: admin/class-rtgodam-transcoder-rest-routes.php:291
msgid "Something went wrong. The required attachment id does not exists. It must have been deleted."
msgstr ""
-#: admin/class-rtgodam-transcoder-rest-routes.php:416
+#: admin/class-rtgodam-transcoder-rest-routes.php:411
msgid "Job ID is required."
msgstr ""
-#: admin/class-rtgodam-transcoder-rest-routes.php:420
+#: admin/class-rtgodam-transcoder-rest-routes.php:415
msgid "Transcription status is required."
msgstr ""
-#: admin/class-rtgodam-transcoder-rest-routes.php:424
+#: admin/class-rtgodam-transcoder-rest-routes.php:419
msgid "Transcript path is required."
msgstr ""
-#: admin/class-rtgodam-transcoder-rest-routes.php:431
+#: admin/class-rtgodam-transcoder-rest-routes.php:426
msgid "Video attachment not found for the provided job ID."
msgstr ""
-#: admin/class-rtgodam-transcoder-rest-routes.php:443
+#: admin/class-rtgodam-transcoder-rest-routes.php:438
msgid "Transcript path saved successfully."
msgstr ""
-#: admin/class-rtgodam-transcoder-rest-routes.php:453
+#: admin/class-rtgodam-transcoder-rest-routes.php:448
msgid "Transcription callback received."
msgstr ""
-#: admin/class-rtgodam-transcoder-rest-routes.php:471
+#: admin/class-rtgodam-transcoder-rest-routes.php:466
#: admin/godam-transcoder-functions.php:374
-#: inc/classes/rest-api/class-media-library.php:331
-#: inc/classes/rest-api/class-transcoding.php:335
+#: inc/classes/rest-api/class-transcoding.php:314
msgid "API key is required."
msgstr ""
-#: admin/class-rtgodam-transcoder-rest-routes.php:475
+#: admin/class-rtgodam-transcoder-rest-routes.php:470
msgid "API key not configured on the site."
msgstr ""
-#: admin/class-rtgodam-transcoder-rest-routes.php:479
-#: inc/classes/rest-api/class-media-library.php:338
-#: inc/classes/rest-api/class-transcoding.php:341
+#: admin/class-rtgodam-transcoder-rest-routes.php:474
+#: inc/classes/rest-api/class-transcoding.php:320
msgid "Invalid API key."
msgstr ""
-#: admin/godam-transcoder-actions.php:58
+#: admin/godam-transcoder-actions.php:59
msgid "oEmbed URL"
msgstr ""
-#: admin/godam-transcoder-actions.php:67
+#: admin/godam-transcoder-actions.php:68
msgid "The oEmbed URL of the file is generated automatically and cannot be edited."
msgstr ""
-#: admin/godam-transcoder-actions.php:71
+#: admin/godam-transcoder-actions.php:72
msgid "Transcoded CDN URL"
msgstr ""
-#: admin/godam-transcoder-actions.php:73
-#: assets/src/js/media-library/views/attachment-details.js:157
+#: admin/godam-transcoder-actions.php:74
+#: assets/src/js/media-library/views/attachment-details.js:134
msgid "Transcoded CDN URL (MPD)"
msgstr ""
-#: admin/godam-transcoder-actions.php:87
-#: assets/src/js/media-library/views/attachment-details.js:159
+#: admin/godam-transcoder-actions.php:88
+#: assets/src/js/media-library/views/attachment-details.js:136
msgid "The URL of the transcoded file is generated automatically and cannot be edited."
msgstr ""
-#: admin/godam-transcoder-actions.php:95
-#: assets/src/js/media-library/views/attachment-details.js:169
+#: admin/godam-transcoder-actions.php:96
+#: assets/src/js/media-library/views/attachment-details.js:146
msgid "Transcoded CDN URL (HLS)"
msgstr ""
-#: admin/godam-transcoder-actions.php:104
-#: assets/src/js/media-library/views/attachment-details.js:171
+#: admin/godam-transcoder-actions.php:105
+#: assets/src/js/media-library/views/attachment-details.js:148
msgid "The HLS URL of the transcoded file is generated automatically and cannot be edited."
msgstr ""
-#: admin/godam-transcoder-actions.php:110
+#: admin/godam-transcoder-actions.php:111
msgid "Transcoded CDN URL "
msgstr ""
-#: admin/godam-transcoder-actions.php:118
+#: admin/godam-transcoder-actions.php:119
msgid "Available in Premium version"
msgstr ""
#. translators: %1$s URL to the settings page, %2$s API key label.
-#: admin/godam-transcoder-actions.php:123
+#: admin/godam-transcoder-actions.php:124
+#, php-format
msgid "Activate the %2$s to enable transcoding and adaptive bitrate streaming."
msgstr ""
-#: admin/godam-transcoder-actions.php:125
+#: admin/godam-transcoder-actions.php:126
msgid "API key"
msgstr ""
@@ -508,83 +487,94 @@ msgstr ""
msgid "The provided API key does not match the RTGODAM_API_KEY constant defined in wp-config.php."
msgstr ""
-#: admin/godam-transcoder-functions.php:469
+#: admin/godam-transcoder-functions.php:456
msgid "API key verified and stored successfully!"
msgstr ""
-#: admin/godam-transcoder-functions.php:479
+#: admin/godam-transcoder-functions.php:466
msgid "API key verification temporarily unavailable."
msgstr ""
-#: admin/godam-transcoder-functions.php:484
+#: admin/godam-transcoder-functions.php:471
msgid "An unexpected error occurred. Please try again later."
msgstr ""
+#: assets/build/blocks/godam-audio/render.php:49
#: assets/src/blocks/godam-audio/render.php:49
#: inc/classes/elementor-widgets/class-godam-audio.php:185
msgid "Your browser does not support the audio element."
msgstr ""
#. translators: %s: PDF download URL
+#: assets/build/blocks/godam-pdf/render.php:56
#: assets/src/blocks/godam-pdf/render.php:56
+#, php-format
msgid "Your browser does not support PDFs. Download the PDF ."
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/render.php:20
+#: assets/build/blocks/sureforms/blocks/recorder/render.php:24
#: assets/src/blocks/sureforms/blocks/recorder/render.php:20
#: assets/src/blocks/sureforms/blocks/recorder/render.php:24
#: inc/classes/everest-forms/class-everest-forms-field-godam-video.php:208
#: inc/classes/everest-forms/class-everest-forms-field-godam-video.php:370
-#: inc/classes/everest-forms/everest-forms-field-godam-record-frontend.php:25
+#: inc/classes/everest-forms/everest-forms-field-godam-record-frontend.php:21
#: inc/classes/fluentforms/fields/class-recorder-field.php:84
#: inc/classes/fluentforms/fields/class-recorder-field.php:354
#: inc/classes/ninja-forms/config/field-settings.php:18
#: inc/classes/wpforms/class-wpforms-field-godam-video.php:142
-#: inc/classes/wpforms/wpforms-field-godam-record-frontend.php:61
+#: inc/classes/wpforms/wpforms-field-godam-record-frontend.php:57
msgid "Record Video"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/render.php:29
#: assets/src/blocks/sureforms/blocks/recorder/render.php:29
#: inc/classes/sureforms/class-form-submit.php:80
msgid "The field is required"
msgstr ""
#. Translators: %s will be replaced with the maximum file upload size allowed on the server (e.g., "300MB").
+#: assets/build/blocks/sureforms/blocks/recorder/render.php:113
#: assets/src/blocks/sureforms/blocks/recorder/render.php:113
+#, php-format
msgid "Maximum allowed on this server: %d MB"
msgstr ""
#: godam.php:103
#: inc/classes/class-pages.php:224
#: inc/classes/class-pages.php:225
+#: assets/build/blocks/godam-audio/index.js:1
+#: assets/build/blocks/godam-pdf/index.js:1
+#: assets/build/blocks/godam-player/index.js:5
#: assets/src/blocks/godam-audio/edit.js:147
#: assets/src/blocks/godam-pdf/edit.js:134
-#: assets/src/blocks/godam-player/edit.js:658
+#: assets/src/blocks/godam-player/edit.js:638
msgid "Settings"
msgstr ""
-#: inc/classes/assets/class-jetpack-form-assets.php:53
+#: inc/classes/assets/class-jetpack-form-assets.php:49
msgid "Submitting..."
msgstr ""
-#: inc/classes/assets/class-jetpack-form-assets.php:54
+#: inc/classes/assets/class-jetpack-form-assets.php:50
#: inc/classes/rest-api/class-jetpack.php:665
msgid "Success!"
msgstr ""
-#: inc/classes/assets/class-jetpack-form-assets.php:55
+#: inc/classes/assets/class-jetpack-form-assets.php:51
#: inc/classes/rest-api/class-jetpack.php:666
msgid "Your message has been sent successfully."
msgstr ""
-#: inc/classes/assets/class-jetpack-form-assets.php:56
+#: inc/classes/assets/class-jetpack-form-assets.php:52
msgid "An error occurred. Please try again."
msgstr ""
-#: inc/classes/assets/class-jetpack-form-assets.php:57
+#: inc/classes/assets/class-jetpack-form-assets.php:53
msgid "Network error. Please try again."
msgstr ""
-#: inc/classes/class-assets.php:93
+#: inc/classes/class-assets.php:92
msgid "No video found for attachment ID"
msgstr ""
@@ -596,33 +586,33 @@ msgstr ""
msgid "Invalid data."
msgstr ""
-#: inc/classes/class-media-library-ajax.php:583
+#: inc/classes/class-media-library-ajax.php:491
#: pages/media-library/App.js:214
msgid "Uncategorized"
msgstr ""
-#: inc/classes/class-media-library-ajax.php:587
+#: inc/classes/class-media-library-ajax.php:495
msgid "All collections"
msgstr ""
-#: inc/classes/class-media-library-ajax.php:669
+#: inc/classes/class-media-library-ajax.php:577
msgid "Offer banner dismissed successfully."
msgstr ""
-#: inc/classes/class-media-library-ajax.php:763
+#: inc/classes/class-media-library-ajax.php:671
msgid "Invalid attachment ID or URL."
msgstr ""
-#: inc/classes/class-media-library-ajax.php:769
-#: inc/classes/rest-api/class-media-library.php:547
+#: inc/classes/class-media-library-ajax.php:677
+#: inc/classes/rest-api/class-media-library.php:346
msgid "Invalid attachment ID."
msgstr ""
-#: inc/classes/class-media-library-ajax.php:781
+#: inc/classes/class-media-library-ajax.php:689
msgid "Could not initialize WordPress filesystem."
msgstr ""
-#: inc/classes/class-media-library-ajax.php:801
+#: inc/classes/class-media-library-ajax.php:709
msgid "Could not move file into uploads directory."
msgstr ""
@@ -636,6 +626,7 @@ msgstr ""
#. translators: %1$s is the name of the Transcoder plugin, %2$s is the name of the GoDAM plugin.
#: inc/classes/class-media-tracker.php:209
+#, php-format
msgid "Please deactivate the %1$s plugin to ensure the %2$s plugin functions correctly."
msgstr ""
@@ -675,15 +666,15 @@ msgstr ""
msgid "Sorry, you are not allowed to edit this item."
msgstr ""
-#: inc/classes/class-pages.php:581
+#: inc/classes/class-pages.php:575
msgid "Your last request is still being processed. Please wait a while ..."
msgstr ""
-#: inc/classes/class-pages.php:582
+#: inc/classes/class-pages.php:576
msgid "Please choose a valid poll answer."
msgstr ""
-#: inc/classes/class-pages.php:583
+#: inc/classes/class-pages.php:577
msgid "Maximum number of choices allowed: "
msgstr ""
@@ -736,7 +727,7 @@ msgid "Choose Image"
msgstr ""
#: inc/classes/elementor-controls/class-godam-media.php:140
-#: pages/analytics/Analytics.js:572
+#: pages/analytics/Analytics.js:581
msgid "Choose Video"
msgstr ""
@@ -752,8 +743,9 @@ msgstr ""
#: inc/classes/elementor-controls/class-godam-media.php:165
#: inc/classes/elementor-controls/class-godam-media.php:211
#: inc/classes/elementor-controls/class-godam-media.php:213
-#: inc/classes/wpforms/wpforms-field-godam-record-entry-edit.php:57
-#: assets/src/blocks/godam-player/edit.js:726
+#: inc/classes/wpforms/wpforms-field-godam-record-entry-edit.php:53
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:706
#: pages/godam/components/tabs/GeneralSettings/BrandImageSelector.jsx:109
#: pages/godam/components/tabs/VideoPlayer/VideoPlayer.jsx:457
#: pages/video-editor/components/appearance/Appearance.js:451
@@ -773,7 +765,7 @@ msgstr ""
#: inc/classes/elementor-controls/class-godam-media.php:215
#: inc/classes/elementor-controls/class-godam-media.php:217
-#: inc/classes/wpforms/wpforms-field-godam-record-entry-edit.php:52
+#: inc/classes/wpforms/wpforms-field-godam-record-entry-edit.php:48
#: pages/godam/components/tabs/GeneralSettings/BrandImageSelector.jsx:99
#: pages/video-editor/components/appearance/Appearance.js:442
#: pages/video-editor/components/appearance/Appearance.js:520
@@ -804,6 +796,8 @@ msgstr ""
#: inc/classes/elementor-widgets/class-godam-audio.php:60
#: inc/classes/elementor-widgets/class-godam-video.php:213
+#: assets/build/blocks/godam-audio/index.js:1
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-audio/edit.js:150
#: assets/src/blocks/godam-player/edit-common-settings.js:75
msgid "Autoplay"
@@ -811,6 +805,8 @@ msgstr ""
#: inc/classes/elementor-widgets/class-godam-audio.php:72
#: inc/classes/elementor-widgets/class-godam-video.php:225
+#: assets/build/blocks/godam-audio/index.js:1
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-audio/edit.js:157
#: assets/src/blocks/godam-player/edit-common-settings.js:89
msgid "Loop"
@@ -822,17 +818,21 @@ msgstr ""
#: inc/classes/elementor-widgets/class-godam-audio.php:96
#: inc/classes/elementor-widgets/class-godam-video.php:261
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-player/edit-common-settings.js:122
msgid "Preload"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-audio.php:100
+#: assets/build/blocks/godam-audio/index.js:1
#: assets/src/blocks/godam-audio/edit.js:173
msgid "Browser default"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-audio.php:101
#: inc/classes/elementor-widgets/class-godam-video.php:265
+#: assets/build/blocks/godam-audio/index.js:1
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-audio/edit.js:174
#: assets/src/blocks/godam-player/edit-common-settings.js:9
msgid "Auto"
@@ -841,6 +841,8 @@ msgstr ""
#: inc/classes/elementor-widgets/class-godam-audio.php:102
#: inc/classes/elementor-widgets/class-godam-video.php:111
#: inc/classes/elementor-widgets/class-godam-video.php:266
+#: assets/build/blocks/godam-audio/index.js:1
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-audio/edit.js:175
#: assets/src/blocks/godam-player/edit-common-settings.js:10
#: assets/src/blocks/godam-player/track-uploader.js:33
@@ -849,6 +851,8 @@ msgstr ""
#: inc/classes/elementor-widgets/class-godam-audio.php:103
#: inc/classes/elementor-widgets/class-godam-video.php:267
+#: assets/build/blocks/godam-audio/index.js:1
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-audio/edit.js:178
#: assets/src/blocks/godam-player/edit-common-settings.js:11
msgctxt "Preload value"
@@ -861,41 +865,49 @@ msgid "GoDAM Gallery"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:44
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:202
msgid "Gallery Settings"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:51
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:204
msgid "Enable Infinite Scroll"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:60
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:211
msgid "Show Video Titles and Dates"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:72
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:238
msgid "Layout"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:76
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:241
msgid "Grid"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:77
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:242
msgid "List"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:85
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:262
msgid "Number of videos"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:104
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:254
msgid "Number of columns"
msgstr ""
@@ -905,11 +917,13 @@ msgid "Order By"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:130
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:272
msgid "Date"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:131
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:104
#: assets/src/blocks/godam-gallery/edit.js:273
msgid "Title"
@@ -917,44 +931,52 @@ msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:132
#: inc/classes/elementor-widgets/class-godam-video.php:182
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:274
#: pages/analytics/charts.js:98
-#: pages/analytics/helper.js:715
+#: pages/analytics/helper.js:709
msgid "Duration"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:133
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:275
#: pages/dashboard/Dashboard.js:336
msgid "Size"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:141
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:280
msgid "Order"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:145
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:283
msgid "Descending"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:146
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:284
msgid "Ascending"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:154
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:292
msgid "All Categories"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:164
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:289
msgid "Category"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:174
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:304
msgid "All Tags"
msgstr ""
@@ -968,56 +990,67 @@ msgid "All Users"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:204
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:325
msgid "Author"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:214
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:337
msgid "Date Range"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:218
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:340
msgid "All Time"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:219
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:341
msgid "Last 7 Days"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:220
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:342
msgid "Last 30 Days"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:221
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:343
msgid "Last 90 Days"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:222
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:344
msgid "Custom Range"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:230
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:360
msgid "Start Date"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:244
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:387
msgid "End Date"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:258
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:415
msgid "Include Video IDs"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:260
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:416
msgid "Comma-separated list of video IDs to include"
msgstr ""
@@ -1031,11 +1064,13 @@ msgid "0"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:279
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:421
msgid "Search"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-gallery.php:282
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:422
msgid "Search in video titles and descriptions"
msgstr ""
@@ -1059,6 +1094,7 @@ msgid "Select video file"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:62
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/track-uploader.js:149
msgid "Add Video Caption"
msgstr ""
@@ -1083,12 +1119,15 @@ msgid "Text track file"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:90
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/godam-player/track-uploader.js:77
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:167
msgid "Label"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:91
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/track-uploader.js:80
msgid "Title of track"
msgstr ""
@@ -1098,39 +1137,46 @@ msgid "Source Language"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:98
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/track-uploader.js:87
msgid "Language tag (en, fr, etc.)"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:104
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/track-uploader.js:91
msgid "Kind"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:107
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-player/track-uploader.js:29
msgid "Subtitles"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:108
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-player/track-uploader.js:30
msgid "Captions"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:109
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-player/track-uploader.js:31
msgid "Descriptions"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:110
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-player/track-uploader.js:32
#: pages/video-editor/VideoEditor.js:301
msgid "Chapters"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:124
-#: assets/src/blocks/godam-player/edit.js:760
-#: assets/src/blocks/godam-player/edit.js:771
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:740
+#: assets/src/blocks/godam-player/edit.js:751
msgid "SEO Settings"
msgstr ""
@@ -1139,6 +1185,7 @@ msgid "Content URL"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:144
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/components/VideoSEOModal.js:113
msgid "URL of the video content can be MOV, MP4, MPD. Example: https://www.example.com/video.mp4"
msgstr ""
@@ -1148,17 +1195,20 @@ msgid "Headline"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:154
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/components/VideoSEOModal.js:120
msgid "Title of the video"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:161
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:182
#: pages/video-editor/components/cta/ImageCTA.js:272
msgid "Description"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:164
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/components/VideoSEOModal.js:127
msgid "Description of the video"
msgstr ""
@@ -1180,22 +1230,26 @@ msgid "Is Family Friendly"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:203
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/components/VideoSEOModal.js:156
msgid "Is the video suitable for all audiences?"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:237
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-player/edit-common-settings.js:95
msgid "Muted"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:249
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-player/edit-common-settings.js:103
msgid "Playback controls"
msgstr ""
#: inc/classes/elementor-widgets/class-godam-video.php:278
-#: assets/src/blocks/godam-player/edit.js:690
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:670
#: assets/src/js/media-library/views/attachment-detail-two-column.js:333
msgid "Video Thumbnail"
msgstr ""
@@ -1221,7 +1275,7 @@ msgstr ""
#: inc/classes/everest-forms/class-everest-forms-field-godam-video.php:129
#: inc/classes/fluentforms/fields/class-recorder-field.php:844
#: inc/classes/sureforms/class-form-submit.php:341
-#: inc/classes/wpforms/wpforms-field-godam-record-entry-view.php:43
+#: inc/classes/wpforms/wpforms-field-godam-record-entry-view.php:39
msgid "Video saved and transcoded successfully on GoDAM"
msgstr ""
@@ -1234,6 +1288,7 @@ msgstr ""
#. translators: %s is the max file size in MB
#: inc/classes/everest-forms/class-everest-forms-field-godam-video.php:220
+#, php-format
msgid "Max file size: %s MB"
msgstr ""
@@ -1241,6 +1296,7 @@ msgstr ""
#: inc/classes/fluentforms/fields/class-recorder-field.php:249
#: inc/classes/gravity-forms/class-init.php:160
#: inc/classes/wpforms/class-wpforms-field-godam-video.php:186
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:196
msgid "Choose file selector"
msgstr ""
@@ -1261,6 +1317,7 @@ msgstr ""
#: inc/classes/gravity-forms/class-init.php:176
#: inc/classes/ninja-forms/config/field-settings.php:52
#: inc/classes/wpforms/class-wpforms-field-godam-video.php:194
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:218
msgid "Webcam"
msgstr ""
@@ -1269,6 +1326,7 @@ msgstr ""
#: inc/classes/fluentforms/fields/class-recorder-field.php:261
#: inc/classes/gravity-forms/class-init.php:183
#: inc/classes/wpforms/class-wpforms-field-godam-video.php:195
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:224
msgid "Screencast"
msgstr ""
@@ -1295,7 +1353,7 @@ msgid "Everest Forms"
msgstr ""
#: inc/classes/everest-forms/class-everest-forms-integration.php:257
-#: inc/classes/fluentforms/class-form-submit.php:120
+#: inc/classes/fluentforms/class-form-submit.php:116
#: inc/classes/gravity-forms/class-init.php:315
#: inc/classes/ninja-forms/class-ninja-forms-field-godam-recorder.php:601
#: inc/classes/sureforms/class-form-submit.php:254
@@ -1329,25 +1387,27 @@ msgid "Invalid form ID."
msgstr ""
#. Translators: %s will be replaced with the maximum file upload size allowed on the server (e.g., "300MB").
-#: inc/classes/everest-forms/everest-forms-field-godam-record-frontend.php:76
+#: inc/classes/everest-forms/everest-forms-field-godam-record-frontend.php:72
#: inc/classes/fluentforms/fields/class-recorder-field.php:422
#: inc/classes/ninja-forms/class-ninja-forms-field-godam-recorder.php:259
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:4
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:241
+#, php-format,js-format
msgid "Maximum allowed on this server: %s MB"
msgstr ""
-#: inc/classes/fluentforms/class-form-submit.php:65
-#: inc/classes/fluentforms/class-form-submit.php:98
+#: inc/classes/fluentforms/class-form-submit.php:61
+#: inc/classes/fluentforms/class-form-submit.php:94
msgid "Fluentforms"
msgstr ""
#: inc/classes/fluentforms/fields/class-recorder-field.php:83
-#: inc/classes/ninja-forms/class-ninja-forms-field-godam-recorder.php:121
-msgid "GoDAM Recorder"
+msgid "Godam Recorder"
msgstr ""
#: inc/classes/fluentforms/fields/class-recorder-field.php:253
#: inc/classes/gravity-forms/class-init.php:169
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:212
msgid "Local files"
msgstr ""
@@ -1375,16 +1435,19 @@ msgstr ""
#. translators: %s is the allowed file types.
#: inc/classes/gravity-forms/class-gf-field-godam-video.php:118
+#, php-format
msgid "Accepted file types: %s"
msgstr ""
#. translators: %s is the maximum file size allowed.
#: inc/classes/gravity-forms/class-gf-field-godam-video.php:124
+#, php-format
msgid "Max. file size: %s"
msgstr ""
#. translators: %s is the maximum number of files allowed.
#: inc/classes/gravity-forms/class-gf-field-godam-video.php:130
+#, php-format
msgid "Max. files: %s"
msgstr ""
@@ -1395,6 +1458,7 @@ msgstr ""
#. translators: %d is the number of files.
#: inc/classes/gravity-forms/class-gf-field-godam-video.php:217
+#, php-format
msgid "%d files"
msgstr ""
@@ -1441,7 +1505,7 @@ msgid "Audio"
msgstr ""
#: inc/classes/gravity-forms/class-init.php:293
-#: inc/helpers/custom-functions.php:549
+#: inc/helpers/custom-functions.php:497
msgid "Gravity forms"
msgstr ""
@@ -1472,6 +1536,7 @@ msgstr ""
#. translators: %d is the error code returned by ZipArchive::open()
#: inc/classes/media-library/class-media-folder-create-zip.php:175
+#, php-format
msgid "Failed to create ZIP file. Error code: %d"
msgstr ""
@@ -1481,6 +1546,7 @@ msgstr ""
#. translators: %1$d: added files, %2$d: skipped files, %3$d: total attachments
#: inc/classes/media-library/class-media-folder-create-zip.php:267
+#, php-format
msgid "ZIP file created successfully. %1$d files added, %2$d files skipped out of %3$d total attachments."
msgstr ""
@@ -1503,9 +1569,14 @@ msgstr ""
#. translators: %d is the Metform ID
#: inc/classes/metform/class-metform-rest-api.php:152
+#, php-format
msgid "Unable to find the Metform with ID:%d"
msgstr ""
+#: inc/classes/ninja-forms/class-ninja-forms-field-godam-recorder.php:121
+msgid "GoDAM Recorder"
+msgstr ""
+
#: inc/classes/ninja-forms/class-ninja-forms-field-godam-recorder.php:362
msgid "File exceeds maximum file size. File must be under %nMB."
msgstr ""
@@ -1524,6 +1595,7 @@ msgstr ""
#. Translators: %s: Maximum allowed file size in MB.
#: inc/classes/ninja-forms/class-ninja-forms-field-godam-recorder.php:431
+#, php-format
msgid "File exceeds maximum file size. File must be under %sMB."
msgstr ""
@@ -1546,6 +1618,7 @@ msgstr ""
#. translators: %d is the Ninja Form ID
#: inc/classes/ninja-forms/class-ninja-forms-rest-api.php:130
+#, php-format
msgid "Unable to find the Ninja Form with ID:%d"
msgstr ""
@@ -1584,10 +1657,12 @@ msgid "Video Archives"
msgstr ""
#: inc/classes/post-types/class-godam-video.php:178
+#: assets/build/blocks/godam-gallery/index.js:1
+#: assets/build/blocks/godam-player/index.js:8
#: assets/src/blocks/godam-gallery/edit.js:99
#: assets/src/blocks/godam-gallery/edit.js:119
-#: assets/src/blocks/godam-player/edit.js:865
-#: assets/src/js/godam-player/engagement.js:1151
+#: assets/src/blocks/godam-player/edit.js:845
+#: assets/src/js/godam-player/engagement.js:1131
msgid "GoDAM Video"
msgstr ""
@@ -1636,6 +1711,7 @@ msgstr ""
#. translators: %s is the error message from the API response.
#: inc/classes/rest-api/class-analytics.php:345
+#, php-format
msgid "Error fetching history data: %s"
msgstr ""
@@ -1728,11 +1804,13 @@ msgstr ""
#. translators: 1: Parameter.
#: inc/classes/rest-api/class-engagement.php:957
+#, php-format
msgid "%1$s is invalid."
msgstr ""
#. translators: 1: Parameter.
#: inc/classes/rest-api/class-engagement.php:967
+#, php-format
msgid "%1$s is empty."
msgstr ""
@@ -1839,6 +1917,7 @@ msgstr ""
#. translators: %s is the field label.
#: inc/classes/rest-api/class-jetpack.php:711
+#, php-format
msgid "Valid %s is required."
msgstr ""
@@ -1852,6 +1931,7 @@ msgstr ""
#. translators: %d is the number of errors, %s is the error text, %s is the list of errors.
#: inc/classes/rest-api/class-jetpack.php:722
+#, php-format
msgid "Please make sure all fields are valid. You need to fix %1$d %2$s: %3$s"
msgstr ""
@@ -1913,241 +1993,241 @@ msgstr ""
msgid "The desired bookmark status (true for bookmarked, false for unbookmarked)."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:342
-#: inc/classes/rest-api/class-media-library.php:484
-msgid "Invalid event."
-msgstr ""
-
-#: inc/classes/rest-api/class-media-library.php:493
-msgid "job_id and resized_images are required."
-msgstr ""
-
-#: inc/classes/rest-api/class-media-library.php:499
-msgid "Failed to update attachment metadata."
-msgstr ""
-
-#: inc/classes/rest-api/class-media-library.php:505
-msgid "Image subsizes successfully generated."
-msgstr ""
-
-#: inc/classes/rest-api/class-media-library.php:527
+#: inc/classes/rest-api/class-media-library.php:326
msgid "Failed to remove folder from the attachments."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:534
+#: inc/classes/rest-api/class-media-library.php:333
msgid "Attachments successfully removed from the folder."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:542
-#: inc/classes/rest-api/class-media-library.php:999
+#: inc/classes/rest-api/class-media-library.php:341
+#: inc/classes/rest-api/class-media-library.php:798
msgid "Invalid folder term ID."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:553
+#: inc/classes/rest-api/class-media-library.php:352
msgid "Failed to associate attachments with the folder."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:560
+#: inc/classes/rest-api/class-media-library.php:359
msgid "Attachments successfully associated with the folder."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:575
+#: inc/classes/rest-api/class-media-library.php:374
msgid "Invalid taxonomy."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:603
+#: inc/classes/rest-api/class-media-library.php:402
msgid "Image file not found."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:610
+#: inc/classes/rest-api/class-media-library.php:409
msgid "No EXIF data found."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:676
-#: inc/classes/rest-api/class-media-library.php:844
-#: inc/classes/rest-api/class-media-library.php:902
-#: inc/classes/rest-api/class-media-library.php:959
+#: inc/classes/rest-api/class-media-library.php:475
+#: inc/classes/rest-api/class-media-library.php:643
+#: inc/classes/rest-api/class-media-library.php:701
+#: inc/classes/rest-api/class-media-library.php:758
msgid "Attachment is not a video."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:709
+#: inc/classes/rest-api/class-media-library.php:508
msgid "Failed to fetch thumbnails from GoDAM."
msgstr ""
#. translators: %s is the HTTP status code from the GoDAM API response.
-#: inc/classes/rest-api/class-media-library.php:715
-#: inc/classes/rest-api/class-media-library.php:1359
+#: inc/classes/rest-api/class-media-library.php:514
+#: inc/classes/rest-api/class-media-library.php:1158
+#, php-format
msgid "GoDAM API returned HTTP status: %s"
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:720
+#: inc/classes/rest-api/class-media-library.php:519
msgid "Invalid JSON response from GoDAM API."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:728
-#: inc/classes/rest-api/class-media-library.php:748
+#: inc/classes/rest-api/class-media-library.php:527
+#: inc/classes/rest-api/class-media-library.php:547
msgid "No thumbnails found."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:858
+#: inc/classes/rest-api/class-media-library.php:657
msgid "Only 3 custom thumbnails are allowed per video."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:909
+#: inc/classes/rest-api/class-media-library.php:708
msgid "Custom thumbnail not found."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:921
-#: inc/classes/rest-api/class-media-library.php:938
+#: inc/classes/rest-api/class-media-library.php:720
+#: inc/classes/rest-api/class-media-library.php:737
msgid "Custom video thumbnail removed successfully."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:964
+#: inc/classes/rest-api/class-media-library.php:763
msgid "Invalid thumbnail URL."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:973
+#: inc/classes/rest-api/class-media-library.php:772
msgid "Video thumbnail successfully set."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:992
+#: inc/classes/rest-api/class-media-library.php:791
msgid "Invalid folder ID."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1011
+#: inc/classes/rest-api/class-media-library.php:810
msgid "ZIP file created successfully."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1031
+#: inc/classes/rest-api/class-media-library.php:830
msgid "You do not have permission to delete folders."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1037
-#: inc/classes/rest-api/class-media-library.php:1164
-#: inc/classes/rest-api/class-media-library.php:1222
+#: inc/classes/rest-api/class-media-library.php:836
+#: inc/classes/rest-api/class-media-library.php:963
+#: inc/classes/rest-api/class-media-library.php:1021
msgid "No folder IDs provided or invalid format."
msgstr ""
#. translators: %s is the invalid folder ID.
-#: inc/classes/rest-api/class-media-library.php:1046
-#: inc/classes/rest-api/class-media-library.php:1115
+#: inc/classes/rest-api/class-media-library.php:845
+#: inc/classes/rest-api/class-media-library.php:914
+#, php-format
msgid "Invalid folder ID: %s"
msgstr ""
#. translators: %s is the invalid folder ID.
-#: inc/classes/rest-api/class-media-library.php:1054
-#: inc/classes/rest-api/class-media-library.php:1123
+#: inc/classes/rest-api/class-media-library.php:853
+#: inc/classes/rest-api/class-media-library.php:922
+#, php-format
msgid "Folder ID %s not found or invalid."
msgstr ""
#. translators: %s is the invalid folder ID where delete failed.
-#: inc/classes/rest-api/class-media-library.php:1062
+#: inc/classes/rest-api/class-media-library.php:861
+#, php-format
msgid "Failed to delete folder %s"
msgstr ""
#. translators: %s is the ID of folder not found.
-#: inc/classes/rest-api/class-media-library.php:1065
+#: inc/classes/rest-api/class-media-library.php:864
+#, php-format
msgid "Folder ID %s not found during deletion attempt."
msgstr ""
#. translators: %s is the invalid folder ID.
-#: inc/classes/rest-api/class-media-library.php:1068
+#: inc/classes/rest-api/class-media-library.php:867
+#, php-format
msgid "Folder ID %s cannot be deleted (possibly uncategorized or default term)."
msgstr ""
#. translators: %d is the number of folders deleted.
-#: inc/classes/rest-api/class-media-library.php:1079
+#: inc/classes/rest-api/class-media-library.php:878
+#, php-format
msgid "%d folder(s) deleted successfully."
msgstr ""
#. translators: %1$d is the number of folders deleted, %2$s are the errors.
-#: inc/classes/rest-api/class-media-library.php:1087
+#: inc/classes/rest-api/class-media-library.php:886
+#, php-format
msgid "Error deleting some folders. Deleted: %1$d. Errors: %2$s"
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1094
+#: inc/classes/rest-api/class-media-library.php:893
msgid "No folders were deleted."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1157
+#: inc/classes/rest-api/class-media-library.php:956
msgid "You do not have permission to lock or unlock folders."
msgstr ""
#. translators: %d number of folders.
-#: inc/classes/rest-api/class-media-library.php:1176
+#: inc/classes/rest-api/class-media-library.php:975
+#, php-format
msgid "%d folder(s) locked successfully."
msgstr ""
#. translators: %d number of folders.
-#: inc/classes/rest-api/class-media-library.php:1178
+#: inc/classes/rest-api/class-media-library.php:977
+#, php-format
msgid "%d folder(s) unlocked successfully."
msgstr ""
#. translators: %d number of folders.
-#: inc/classes/rest-api/class-media-library.php:1192
+#: inc/classes/rest-api/class-media-library.php:991
+#, php-format
msgid "Some folders locked, but issues occurred with others. Locked: %d."
msgstr ""
#. translators: %d number of folders.
-#: inc/classes/rest-api/class-media-library.php:1194
+#: inc/classes/rest-api/class-media-library.php:993
+#, php-format
msgid "Some folders unlocked, but issues occurred with others. Unlocked: %d."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1205
+#: inc/classes/rest-api/class-media-library.php:1004
msgid "No folders were updated for lock status."
msgstr ""
#. translators: %d number of folders.
-#: inc/classes/rest-api/class-media-library.php:1234
+#: inc/classes/rest-api/class-media-library.php:1033
+#, php-format
msgid "%d folder(s) bookmarked successfully."
msgstr ""
#. translators: %d number of folders.
-#: inc/classes/rest-api/class-media-library.php:1236
+#: inc/classes/rest-api/class-media-library.php:1035
+#, php-format
msgid "%d folder(s) unbookmarked successfully."
msgstr ""
#. translators: %d number of folders.
-#: inc/classes/rest-api/class-media-library.php:1250
+#: inc/classes/rest-api/class-media-library.php:1049
+#, php-format
msgid "Some folders bookmarked, but issues occurred with others. Bookmarked: %d."
msgstr ""
#. translators: %d number of folders.
-#: inc/classes/rest-api/class-media-library.php:1252
+#: inc/classes/rest-api/class-media-library.php:1051
+#, php-format
msgid "Some folders unbookmarked, but issues occurred with others. Unbookmarked: %d."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1263
+#: inc/classes/rest-api/class-media-library.php:1062
msgid "No folders were updated for bookmark status."
msgstr ""
#. translators: %s is the error message from the GoDAM API request.
-#: inc/classes/rest-api/class-media-library.php:1344
+#: inc/classes/rest-api/class-media-library.php:1143
+#, php-format
msgid "GoDAM API request failed: %s"
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1372
+#: inc/classes/rest-api/class-media-library.php:1171
msgid "Unexpected API response format or no files found."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1401
+#: inc/classes/rest-api/class-media-library.php:1200
msgid "Filtered GoDAM files by MIME type."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1428
+#: inc/classes/rest-api/class-media-library.php:1227
msgid "Required fields are missing."
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1442
-#: inc/classes/rest-api/class-media-library.php:1469
+#: inc/classes/rest-api/class-media-library.php:1241
+#: inc/classes/rest-api/class-media-library.php:1268
msgid "Attachment already exists"
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1574
+#: inc/classes/rest-api/class-media-library.php:1325
msgid "Attachment created"
msgstr ""
-#: inc/classes/rest-api/class-media-library.php:1639
+#: inc/classes/rest-api/class-media-library.php:1390
msgid "A Folder ID is required"
msgstr ""
@@ -2164,23 +2244,23 @@ msgstr ""
msgid "Invalid poll ID."
msgstr ""
-#: inc/classes/rest-api/class-settings.php:89
+#: inc/classes/rest-api/class-settings.php:87
msgid "The API key to verify."
msgstr ""
-#: inc/classes/rest-api/class-settings.php:141
+#: inc/classes/rest-api/class-settings.php:139
msgid "The godam settings to save."
msgstr ""
-#: inc/classes/rest-api/class-settings.php:209
+#: inc/classes/rest-api/class-settings.php:206
msgid "API key deactivated successfully."
msgstr ""
-#: inc/classes/rest-api/class-settings.php:218
+#: inc/classes/rest-api/class-settings.php:215
msgid "Failed to deactivate the API key. It might not exist."
msgstr ""
-#: inc/classes/rest-api/class-settings.php:282
+#: inc/classes/rest-api/class-settings.php:275
msgid "EasyDAM settings updated successfully!"
msgstr ""
@@ -2197,118 +2277,109 @@ msgstr ""
msgid "No Sureforms on the site. Please create one"
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:44
+#: inc/classes/rest-api/class-transcoding.php:42
msgid "The jobID of transcoding job."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:50
+#: inc/classes/rest-api/class-transcoding.php:48
msgid "The status of the transcoding job."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:56
+#: inc/classes/rest-api/class-transcoding.php:54
msgid "The progress of the transcoding job."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:62
+#: inc/classes/rest-api/class-transcoding.php:60
msgid "The error message of the transcoding job."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:68
+#: inc/classes/rest-api/class-transcoding.php:66
msgid "The error code of the transcoding job."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:90
+#: inc/classes/rest-api/class-transcoding.php:88
msgid "The array of attachment IDs."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:133
-msgid "The comma-separated string of attachment IDs to check."
-msgstr ""
-
-#: inc/classes/rest-api/class-transcoding.php:160
+#: inc/classes/rest-api/class-transcoding.php:139
msgid "Attachment not found."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:178
+#: inc/classes/rest-api/class-transcoding.php:157
msgid "Transcoding status updated successfully."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:219
+#: inc/classes/rest-api/class-transcoding.php:198
msgid "Media has not been transcoded."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:229
+#: inc/classes/rest-api/class-transcoding.php:208
msgid "Transcoding has not started."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:250
+#: inc/classes/rest-api/class-transcoding.php:229
msgid "Media is queued for transcoding."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:251
+#: inc/classes/rest-api/class-transcoding.php:230
msgid "Media is downloading for transcoding."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:252
+#: inc/classes/rest-api/class-transcoding.php:231
msgid "Media is downloaded for transcoding."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:253
+#: inc/classes/rest-api/class-transcoding.php:232
msgid "Media is transcoding."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:254
+#: inc/classes/rest-api/class-transcoding.php:233
msgid "Media is transcoded."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:258
+#: inc/classes/rest-api/class-transcoding.php:237
msgid "Unknown transcoding status."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:276
+#: inc/classes/rest-api/class-transcoding.php:255
msgid "Transcoding complete, generating thumbnail..."
msgstr ""
-#: inc/classes/rest-api/class-transcoding.php:338
+#: inc/classes/rest-api/class-transcoding.php:317
msgid "API key not configured."
msgstr ""
-#. translators: %s is the storage usage percentage.
-#: inc/classes/rest-api/class-transcoding.php:369
-msgid "Storage limit exceeded (%s%%). Retranscoding is currently blocked. Please upgrade your plan to continue."
-msgstr ""
-
-#: inc/classes/rest-api/class-transcoding.php:506
+#: inc/classes/rest-api/class-transcoding.php:398
msgid "Attachment ID not provided"
msgstr ""
#. translators: 1: Attachment title, 2: Attachment ID.
-#: inc/classes/rest-api/class-transcoding.php:518
+#: inc/classes/rest-api/class-transcoding.php:410
+#, php-format
msgid "%1$s (ID %2$d) transcoding request failed. Transcoding requests are not allowed in the localhost environment."
msgstr ""
#. translators: 1: Attachment title, 2: Attachment ID.
-#: inc/classes/rest-api/class-transcoding.php:538
-msgid "%1$s (ID %2$d) is virtual media from GoDAM Central. Please retranscode this media on GoDAM Central."
+#: inc/classes/rest-api/class-transcoding.php:430
+#, php-format
+msgid "%1$s (ID %2$d) is virtual media from GoDAM Central. Please retranscode this video on GoDAM Central."
msgstr ""
#. translators: 1: Attachment title, 2: Attachment ID.
-#: inc/classes/rest-api/class-transcoding.php:558
+#: inc/classes/rest-api/class-transcoding.php:450
+#, php-format
msgid "%1$s (ID %2$d) is migrated Vimeo video. Please retranscode this video on GoDAM Central."
msgstr ""
-#. translators: 1: Attachment title, 2: Attachment ID, 3: storage usage percent.
-#: inc/classes/rest-api/class-transcoding.php:581
-msgid "%1$s (ID %2$d) cannot be retranscoded. Storage limit exceeded (%3$s%%). Please upgrade your plan to continue transcoding."
-msgstr ""
-
#. translators: 1: Attachment title, 2: Attachment ID.
-#: inc/classes/rest-api/class-transcoding.php:623
+#: inc/classes/rest-api/class-transcoding.php:485
+#, php-format
msgid "%1$s (ID %2$d) transcoding request failed. Unknown error"
msgstr ""
#. translators: 1: Attachment title, 2: Attachment ID.
-#: inc/classes/rest-api/class-transcoding.php:639
+#: inc/classes/rest-api/class-transcoding.php:501
+#, php-format
msgid "%1$s (ID %2$d) transcoding request was sent successfully"
msgstr ""
@@ -2328,6 +2399,7 @@ msgstr ""
#. translators: %1$d is the number of posts processed, %2$d is the total number of posts to process and %3$d is the migration name
#: inc/classes/rest-api/class-video-migration.php:119
+#, php-format
msgid "Processed %1$d of %2$d posts. %3$s aborted."
msgstr ""
@@ -2353,6 +2425,7 @@ msgstr ""
#. translators: %d is the number of batches scheduled for processing
#: inc/classes/rest-api/class-video-migration.php:410
+#, php-format
msgid "Scheduled %d batches for processing"
msgstr ""
@@ -2362,16 +2435,19 @@ msgstr ""
#. translators: %1$d is the number of posts processed, %2$d is the total number of posts, %3$d is the progress percentage
#: inc/classes/rest-api/class-video-migration.php:537
+#, php-format
msgid "Processed %1$d/%2$d posts (%3$d%% complete)"
msgstr ""
#. translators: 1: total posts processed, 2: migrated Vimeo embeds, 3: total Vimeo embeds found
#: inc/classes/rest-api/class-video-migration.php:550
+#, php-format
msgid "Migration completed! Processed %1$d posts. Migrated %2$d out of %3$d Vimeo Embed Blocks found."
msgstr ""
#. translators: %d is the total number of posts processed
#: inc/classes/rest-api/class-video-migration.php:558
+#, php-format
msgid "Migration completed! Processed %d posts."
msgstr ""
@@ -2385,6 +2461,7 @@ msgstr ""
#. translators: %s: error message
#: inc/classes/rest-api/class-video-migration.php:1149
+#, php-format
msgid "Error fetching video info: %s"
msgstr ""
@@ -2405,13 +2482,13 @@ msgstr ""
msgid "WPForms plugin is not active."
msgstr ""
-#: inc/classes/shortcodes/class-godam-video-gallery.php:372
+#: inc/classes/shortcodes/class-godam-video-gallery.php:325
#: pages/media-library/components/folder-tree/FolderTree.jsx:430
#: pages/media-library/components/search-bar/SearchBar.jsx:213
msgid "Load More"
msgstr ""
-#: inc/classes/shortcodes/class-godam-video-gallery.php:396
+#: inc/classes/shortcodes/class-godam-video-gallery.php:347
#: pages/dashboard/Dashboard.js:409
msgid "No videos found."
msgstr ""
@@ -2488,38 +2565,39 @@ msgstr ""
#. translators: %s : Maximum file upload size in human readable format.
#: inc/classes/wpforms/class-wpforms-field-godam-video.php:254
+#, php-format
msgid "Maximum allowed on this server: %s "
msgstr ""
-#: inc/classes/wpforms/class-wpforms-field-godam-video.php:502
+#: inc/classes/wpforms/class-wpforms-field-godam-video.php:500
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: inc/classes/wpforms/class-wpforms-field-godam-video.php:503
+#: inc/classes/wpforms/class-wpforms-field-godam-video.php:501
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: inc/classes/wpforms/class-wpforms-field-godam-video.php:504
+#: inc/classes/wpforms/class-wpforms-field-godam-video.php:502
msgid "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"
msgstr ""
-#: inc/classes/wpforms/class-wpforms-field-godam-video.php:505
+#: inc/classes/wpforms/class-wpforms-field-godam-video.php:503
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: inc/classes/wpforms/class-wpforms-field-godam-video.php:506
+#: inc/classes/wpforms/class-wpforms-field-godam-video.php:504
msgid "No file was uploaded"
msgstr ""
-#: inc/classes/wpforms/class-wpforms-field-godam-video.php:507
+#: inc/classes/wpforms/class-wpforms-field-godam-video.php:505
msgid "Missing a temporary folder"
msgstr ""
-#: inc/classes/wpforms/class-wpforms-field-godam-video.php:508
+#: inc/classes/wpforms/class-wpforms-field-godam-video.php:506
msgid "Failed to write file to disk."
msgstr ""
-#: inc/classes/wpforms/class-wpforms-field-godam-video.php:509
+#: inc/classes/wpforms/class-wpforms-field-godam-video.php:507
msgid "A PHP extension stopped the file upload."
msgstr ""
@@ -2528,101 +2606,73 @@ msgstr ""
msgid "Untitled Form"
msgstr ""
-#: inc/classes/wpforms/wpforms-field-godam-record-entry-view.php:29
+#: inc/classes/wpforms/wpforms-field-godam-record-entry-view.php:25
msgid "URL: "
msgstr ""
-#: inc/classes/wpforms/wpforms-field-godam-record-entry-view.php:41
+#: inc/classes/wpforms/wpforms-field-godam-record-entry-view.php:37
msgid "Video transcoding process has not started."
msgstr ""
-#: inc/classes/wpforms/wpforms-field-godam-record-entry-view.php:45
+#: inc/classes/wpforms/wpforms-field-godam-record-entry-view.php:41
msgid "Video transcoding process is in-progress."
msgstr ""
-#: inc/helpers/custom-functions.php:191
-#: pages/video-editor/components/layers/CTALayer.js:128
-msgid "No Image"
-msgstr ""
-
-#. translators: %s: storage usage percentage
-#: inc/helpers/custom-functions.php:274
-msgid "Storage limit exceeded (%s%%). Please upgrade your plan to continue."
-msgstr ""
-
-#. translators: %s: bandwidth usage percentage
-#: inc/helpers/custom-functions.php:283
-msgid "Bandwidth limit exceeded (%s%%). Please upgrade your plan to continue."
-msgstr ""
-
-#: inc/helpers/custom-functions.php:288
+#: inc/helpers/custom-functions.php:258
msgid "Oops! It looks like your API key is incorrect or has expired. Please update it and try again."
msgstr ""
-#: inc/helpers/custom-functions.php:345
+#: inc/helpers/custom-functions.php:315
msgid "API key not found ( try refreshing the page )"
msgstr ""
-#: inc/helpers/custom-functions.php:379
+#: inc/helpers/custom-functions.php:349
msgid "Error fetching data for storage and bandwidth ( remove and add again the API key to get usage analytics )"
msgstr ""
-#: inc/helpers/custom-functions.php:451
-msgid "Form transcoding has been disabled by the site administrator."
-msgstr ""
-
#. translators: %s: Entry ID for which transcoding failed
-#: inc/helpers/custom-functions.php:585
+#: inc/helpers/custom-functions.php:533
+#, php-format
msgid "Transcoding failed | entry Id: %s"
msgstr ""
-#: inc/helpers/custom-functions.php:621
+#: inc/helpers/custom-functions.php:569
msgid "s"
msgstr ""
-#: inc/helpers/custom-functions.php:655
-#: assets/src/js/godam-player/engagement.js:899
-#: assets/src/js/godam-player/engagement.js:906
+#: inc/helpers/custom-functions.php:603
+#: assets/src/js/godam-player/engagement.js:887
+#: assets/src/js/godam-player/engagement.js:894
msgid "Anonymous"
msgstr ""
#. translators: %s: video ID.
-#: inc/helpers/custom-functions.php:861
+#: inc/helpers/custom-functions.php:809
#: inc/templates/video-preview.php:20
msgid "Video Preview"
msgstr ""
-#: inc/helpers/custom-functions.php:862
+#: inc/helpers/custom-functions.php:810
msgid "Oops! We could not locate your video"
msgstr ""
-#: inc/helpers/custom-functions.php:870
+#: inc/helpers/custom-functions.php:818
msgid "Video Preview: "
msgstr ""
-#: inc/helpers/custom-functions.php:877
+#: inc/helpers/custom-functions.php:825
msgid "Note: This is a simple video preview. The video player may display differently when added to a page based on theme styles."
msgstr ""
-#: inc/helpers/custom-functions.php:949
-msgid "Video not found"
-msgstr ""
-
-#. translators: %s: video ID.
-#: inc/templates/video-embed.php:24
-msgid "Video Embed"
-msgstr ""
-
-#. translators: %s: video ID.
-#: inc/templates/video-embed.php:24
-msgid "Video Embed: Attachment(%s)"
-msgstr ""
-
#. translators: %s: video ID.
#: inc/templates/video-preview.php:20
+#, php-format
msgid "Video Preview: Attachment(%s)"
msgstr ""
+#: assets/build/blocks/godam-audio/index.js:1
+#: assets/build/blocks/godam-pdf/index.js:1
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-audio/caption.js:46
#: assets/src/blocks/godam-audio/caption.js:52
#: assets/src/blocks/godam-pdf/caption.js:44
@@ -2632,112 +2682,238 @@ msgstr ""
msgid "Add caption"
msgstr ""
+#: assets/build/blocks/godam-audio/index.js:1
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-audio/caption.js:47
#: assets/src/blocks/godam-player/caption.js:51
msgid "Caption text"
msgstr ""
+#: assets/build/blocks/godam-audio/index.js:1
+#: assets/build/blocks/godam-pdf/index.js:1
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-audio/caption.js:53
#: assets/src/blocks/godam-pdf/caption.js:49
#: assets/src/blocks/godam-player/caption.js:57
msgid "Remove caption"
msgstr ""
+#: assets/build/blocks/godam-audio/index.js:1
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-audio/edit.js:74
#: assets/src/blocks/godam-player/edit-common-settings.js:35
msgid "Autoplay may cause usability issues for some users."
msgstr ""
-#: assets/src/blocks/godam-audio/edit.js:125
-msgid "GoDAM Audio"
-msgstr ""
-
+#: assets/build/blocks/godam-audio/index.js:1
#: assets/src/blocks/godam-audio/edit.js:164
msgctxt "noun; Audio block parameter"
msgid "Preload"
msgstr ""
+#: assets/build/blocks/godam-audio/index.js:1
#: assets/src/blocks/godam-audio/edit.js:199
msgid "Audio caption text"
msgstr ""
+#: assets/build/blocks/godam-audio/index.js:1
+#: assets/src/blocks/godam-audio/edit.js:125
+msgid "GoDAM Audio"
+msgstr ""
+
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:184
msgid "Start date cannot be later than end date"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:188
msgid "End date cannot be earlier than start date"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:220
#: assets/src/blocks/godam-player/edit-common-settings.js:133
msgid "Enable Likes & Comments"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
+#: assets/build/blocks/godam-player/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:223
#: assets/src/blocks/godam-player/edit-common-settings.js:136
msgid "Engagement will only be visible for transcoded videos"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:230
msgid "Open Video To New Page"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:233
msgid "If enabled, clicking a video will open it in a new page"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:269
msgid "Order by"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:301
msgid "Tag"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:313
msgid "Media Folder"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:316
msgid "All Folders"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:328
msgid "All Authors"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:367
msgid "Select Start Date"
msgstr ""
+#: assets/build/blocks/godam-gallery/index.js:1
#: assets/src/blocks/godam-gallery/edit.js:394
msgid "Select End Date"
msgstr ""
-#: assets/src/blocks/godam-pdf/edit.js:112
-msgid "GoDAM PDF"
-msgstr ""
-
+#: assets/build/blocks/godam-pdf/index.js:1
#: assets/src/blocks/godam-pdf/edit.js:137
msgid "Height (px)"
msgstr ""
+#: assets/build/blocks/godam-pdf/index.js:1
#: assets/src/blocks/godam-pdf/edit.js:169
msgid "PDF caption text"
msgstr ""
+#: assets/build/blocks/godam-pdf/index.js:1
+#: assets/src/blocks/godam-pdf/edit.js:112
+msgid "GoDAM PDF"
+msgstr ""
+
+#: assets/build/blocks/godam-pdf/view.js:1
#: assets/src/blocks/godam-pdf/view.js:142
msgid "Unable to load PDF. All sources are unavailable."
msgstr ""
+#: assets/build/blocks/godam-player/index.js:1
+#: assets/src/blocks/godam-player/edit-common-settings.js:44
+msgid "Muted because of Autoplay."
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:1
+#: assets/src/blocks/godam-player/edit-common-settings.js:111
+msgid "Share Button"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:1
+#: assets/src/blocks/godam-player/edit-common-settings.js:114
+msgid "Adds a share button on the video player for transcoded videos"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:1
+#: assets/src/blocks/godam-player/track-uploader.js:39
+msgid "Video Captions"
+msgstr ""
+
+#. translators: %s: video caption label.
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:53
+#, js-format
+msgctxt "video caption"
+msgid "Edit %s"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:57
+#: assets/src/js/godam-player/engagement.js:934
+msgid "Edit"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:71
+msgid "Edit track"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:73
+msgid "File"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:84
+msgid "Source language"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:104
+msgid "Remove track"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:111
+msgid "English"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:123
+msgid "Apply"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:154
+msgid "Manage Video Captions"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:179
+msgid "No captions added yet"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:181
+msgid "You can upload subtitle or caption files (.vtt) to improve accessibility."
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:194
+msgid "Add new track"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:205
+msgid "Open Media Library"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
+#: assets/src/blocks/godam-player/track-uploader.js:228
+msgctxt "verb"
+msgid "Upload"
+msgstr ""
+
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/components/VideoSEOModal.js:149
msgid "URL of the video thumbnail. Example: https://www.example.com/thumbnail.jpg"
msgstr ""
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/components/VideoSEOModal.js:161
#: assets/src/js/deactivation-feedback.js:36
-#: assets/src/js/godam-player/engagement.js:744
+#: assets/src/js/godam-player/engagement.js:732
#: pages/media-library/App.js:178
#: pages/media-library/components/modal/DeleteModal.jsx:121
#: pages/media-library/components/modal/FolderCreationModal.jsx:131
@@ -2747,376 +2923,375 @@ msgstr ""
msgid "Cancel"
msgstr ""
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/components/VideoSEOModal.js:164
-#: assets/src/js/godam-player/engagement.js:1115
+#: assets/src/js/godam-player/engagement.js:1103
#: pages/godam/components/tabs/AdsSettings/AdsSettings.jsx:129
#: pages/godam/components/tabs/GeneralSettings/GeneralSettings.jsx:123
#: pages/godam/components/tabs/VideoPlayer/VideoPlayer.jsx:505
-#: pages/godam/components/tabs/VideoSettings/VideoSettings.jsx:146
+#: pages/godam/components/tabs/VideoSettings/VideoSettings.jsx:142
#: pages/video-editor/VideoEditor.js:373
msgid "Save"
msgstr ""
-#: assets/src/blocks/godam-player/edit-common-settings.js:44
-msgid "Muted because of Autoplay."
-msgstr ""
-
-#: assets/src/blocks/godam-player/edit-common-settings.js:111
-msgid "Share Button"
-msgstr ""
-
-#: assets/src/blocks/godam-player/edit-common-settings.js:114
-msgid "Adds a share button on the video player for transcoded videos"
-msgstr ""
-
+#: assets/build/blocks/godam-player/index.js:4
#: assets/src/blocks/godam-player/edit.js:79
msgid "Add a heading…"
msgstr ""
#. translators: %d: Label of the video text track e.g: "French subtitles".
-#: assets/src/blocks/godam-player/edit.js:289
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:269
+#, js-format
msgctxt "video caption"
msgid "Failed to load video data with id: %d"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:574
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:554
msgid "GoDAM video"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:575
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:555
msgid "Drag and drop a video, upload, or choose from your library."
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:585
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:565
msgid "Select Video"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:673
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:653
msgid "Hover Option"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:674
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:654
msgid "Choose the action to perform on video hover."
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:679
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:659
msgid "None"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:680
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:660
msgid "Show Player Controls"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:681
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:661
msgid "Start Preview"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:682
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:662
msgid "Shadow Overlay"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:696
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:676
msgid "Select Video Thumbnail"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:707
-msgid "Select"
-msgstr ""
-
-#: assets/src/blocks/godam-player/edit.js:707
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:687
#: pages/godam/components/tabs/GeneralSettings/BrandImageSelector.jsx:99
#: pages/video-editor/components/appearance/Appearance.js:442
#: pages/video-editor/components/appearance/Appearance.js:520
msgid "Replace"
msgstr ""
+#: assets/build/blocks/godam-player/index.js:5
+#: assets/src/blocks/godam-player/edit.js:687
+msgid "Select"
+msgstr ""
+
#. translators: %s: poster image URL.
-#: assets/src/blocks/godam-player/edit.js:715
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:695
+#, js-format
msgid "The current poster image url is %s"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:718
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:698
msgid "There is no poster image currently selected"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:735
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:715
msgid "Preload Video Thumbnail"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:736
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:716
msgid "Enable to show the video thumbnail faster when the page loads. Recommended for videos placed near the top of your page."
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:744
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:724
msgid "Customise Video"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:753
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:733
msgid "Customise"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:761
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:741
msgid "Configure SEO metadata for this video. Note: SEO data will be cleared when replacing the video."
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:777
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:757
msgid "Aspect Ratio"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:783
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:763
msgid "16:9 (Standard)"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:784
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:764
msgid "Responsive"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:787
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:767
msgid "Choose the aspect ratio for the video player."
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:793
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:773
msgid "Subtitles & Captions"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:810
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:790
msgid "Overlay Blocks"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:812
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:792
msgid "Show overlay blocks"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:815
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:795
msgid "Display blocks on top of the video player."
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:821
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:801
msgid "Vertical alignment"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:824
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:804
msgid "Top"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:825
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:805
msgid "Center"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:826
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:806
msgid "Bottom"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:829
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:809
msgid "Choose where to position the overlay blocks vertically."
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:833
+#: assets/build/blocks/godam-player/index.js:6
+#: assets/src/blocks/godam-player/edit.js:813
msgid "Time range"
msgstr ""
#. translators: %s: formatted time
-#: assets/src/blocks/godam-player/edit.js:841
+#: assets/build/blocks/godam-player/index.js:7
+#: assets/src/blocks/godam-player/edit.js:821
+#, js-format
msgid "Overlay will be visible for %s from the start of the video."
msgstr ""
#. translators: %s: formatted time
-#: assets/src/blocks/godam-player/edit.js:850
+#: assets/build/blocks/godam-player/index.js:8
+#: assets/src/blocks/godam-player/edit.js:830
+#, js-format
msgid "Video duration: %s"
msgstr ""
-#: assets/src/blocks/godam-player/edit.js:904
+#: assets/build/blocks/godam-player/index.js:8
+#: assets/src/blocks/godam-player/edit.js:884
msgid "Video caption text"
msgstr ""
-#: assets/src/blocks/godam-player/track-uploader.js:39
-msgid "Video Captions"
-msgstr ""
-
-#. translators: %s: video caption label.
-#: assets/src/blocks/godam-player/track-uploader.js:53
-msgctxt "video caption"
-msgid "Edit %s"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:57
-#: assets/src/js/godam-player/engagement.js:946
-msgid "Edit"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:71
-msgid "Edit track"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:73
-msgid "File"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:84
-msgid "Source language"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:104
-msgid "Remove track"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:111
-msgid "English"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:123
-msgid "Apply"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:154
-msgid "Manage Video Captions"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:179
-msgid "No captions added yet"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:181
-msgid "You can upload subtitle or caption files (.vtt) to improve accessibility."
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:194
-msgid "Add new track"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:205
-msgid "Open Media Library"
-msgstr ""
-
-#: assets/src/blocks/godam-player/track-uploader.js:228
-msgctxt "verb"
-msgid "Upload"
-msgstr ""
-
+#: assets/build/blocks/godam-video-duration/index.js:1
#: assets/src/blocks/godam-video-duration/edit.js:33
msgid "Default (HH:MM:SS)"
msgstr ""
+#: assets/build/blocks/godam-video-duration/index.js:1
#: assets/src/blocks/godam-video-duration/edit.js:34
#: assets/src/blocks/godam-video-duration/edit.js:63
msgid "00:00:00"
msgstr ""
+#: assets/build/blocks/godam-video-duration/index.js:1
#: assets/src/blocks/godam-video-duration/edit.js:38
msgid "Minutes only (MM:SS)"
msgstr ""
+#: assets/build/blocks/godam-video-duration/index.js:1
#: assets/src/blocks/godam-video-duration/edit.js:39
msgid "00:00"
msgstr ""
+#: assets/build/blocks/godam-video-duration/index.js:1
#: assets/src/blocks/godam-video-duration/edit.js:43
msgid "Total Seconds"
msgstr ""
+#: assets/build/blocks/godam-video-duration/index.js:1
#: assets/src/blocks/godam-video-duration/edit.js:44
msgid "0s"
msgstr ""
+#: assets/build/blocks/godam-video-duration/index.js:1
#: assets/src/blocks/godam-video-duration/edit.js:51
msgid "Duration Settings"
msgstr ""
+#: assets/build/blocks/godam-video-duration/index.js:1
#: assets/src/blocks/godam-video-duration/edit.js:53
msgid "Duration Format"
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/index.js:1
#: assets/src/blocks/godam-video-thumbnail/edit.js:39
msgid "Thumbnail Settings"
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/index.js:1
#: assets/src/blocks/godam-video-thumbnail/edit.js:41
msgid "Show play button overlay"
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/index.js:1
#: assets/src/blocks/godam-video-thumbnail/edit.js:45
msgid "Play button will be displayed."
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/index.js:1
#: assets/src/blocks/godam-video-thumbnail/edit.js:46
msgid "No play button will be displayed."
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/index.js:1
#: assets/src/blocks/godam-video-thumbnail/edit.js:50
msgid "Link to post"
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/index.js:1
#: assets/src/blocks/godam-video-thumbnail/edit.js:54
msgid "Thumbnail will link to the video page."
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/index.js:1
#: assets/src/blocks/godam-video-thumbnail/edit.js:55
msgid "Thumbnail will not be linked."
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/index.js:1
#: assets/src/blocks/godam-video-thumbnail/edit.js:60
msgid "Open in new tab"
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/index.js:1
#: assets/src/blocks/godam-video-thumbnail/edit.js:64
msgid "Link will open in a new tab."
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/index.js:1
#: assets/src/blocks/godam-video-thumbnail/edit.js:65
msgid "Link will open in the same tab."
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/index.js:1
#: assets/src/blocks/godam-video-thumbnail/edit.js:76
msgid "GoDAM Video Thumbnail"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:165
msgid "Enter label"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:168
msgid "Enter label for the field"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:180
msgid "Enter description"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:183
msgid "Enter description for the field"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:237
msgid "100 MB"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:1
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:238
msgid "Maximum file size (in MB)"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:4
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:259
msgid "Is recorder field required?"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:4
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:268
msgid "Enter error message"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:4
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:272
msgid "Enter the required error message"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:4
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:287
msgid "Field settings"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:4
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:294
#: pages/analytics/charts.js:261
msgid "Untitled"
msgstr ""
#. Translators: %s will be replaced with the maximum file upload size allowed on the server (e.g., "300MB").
+#: assets/build/blocks/sureforms/blocks/recorder/index.js:7
#: assets/src/blocks/sureforms/blocks/recorder/edit.js:336
+#, js-format
msgid "Maximum allowed size: %s MB"
msgstr ""
@@ -3154,6 +3329,7 @@ msgstr ""
#. translators: %d: Maximum allowed file size in MB.
#: assets/src/js/everestforms/index.js:61
+#, js-format
msgid "File size exceeds the maximum limit of %d MB."
msgstr ""
@@ -3163,75 +3339,75 @@ msgstr ""
msgid "File upload in progress…"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:725
+#: assets/src/js/godam-player/engagement.js:713
msgid "Add timestamp"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:731
+#: assets/src/js/godam-player/engagement.js:719
msgid "Add emoji"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:739
-#: assets/src/js/godam-player/engagement.js:928
-#: assets/src/js/godam-player/engagement.js:968
+#: assets/src/js/godam-player/engagement.js:727
+#: assets/src/js/godam-player/engagement.js:916
+#: assets/src/js/godam-player/engagement.js:956
msgid "Reply"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:739
+#: assets/src/js/godam-player/engagement.js:727
msgid "Comment"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:915
+#: assets/src/js/godam-player/engagement.js:903
msgid "This comment has been deleted"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:938
+#: assets/src/js/godam-player/engagement.js:926
#: pages/media-library/components/context-menu/ContextMenu.jsx:465
#: pages/media-library/components/modal/DeleteModal.jsx:114
msgid "Delete"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:968
+#: assets/src/js/godam-player/engagement.js:956
msgid "Replies"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:1020
+#: assets/src/js/godam-player/engagement.js:1008
msgid "No comments yet. Be the first to comment!"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:1081
+#: assets/src/js/godam-player/engagement.js:1069
msgid "Register"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:1081
+#: assets/src/js/godam-player/engagement.js:1069
msgid "Login"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:1081
+#: assets/src/js/godam-player/engagement.js:1069
msgid "to comment"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:1088
+#: assets/src/js/godam-player/engagement.js:1076
msgid "Email"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:1092
+#: assets/src/js/godam-player/engagement.js:1080
msgid "Enter your email"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:1105
+#: assets/src/js/godam-player/engagement.js:1093
msgid "Back"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:1115
+#: assets/src/js/godam-player/engagement.js:1103
msgid "Continue as Guest"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:1262
+#: assets/src/js/godam-player/engagement.js:1216
msgid "Comments"
msgstr ""
-#: assets/src/js/godam-player/engagement.js:1267
+#: assets/src/js/godam-player/engagement.js:1221
msgid "Hide Comments"
msgstr ""
@@ -3243,19 +3419,19 @@ msgstr ""
msgid "Custom Fullscreen"
msgstr ""
-#: assets/src/js/godam-player/managers/controlsManager.js:165
+#: assets/src/js/godam-player/managers/controlsManager.js:137
msgid "Exit Fullscreen"
msgstr ""
-#: assets/src/js/godam-player/managers/controlsManager.js:377
+#: assets/src/js/godam-player/managers/controlsManager.js:288
#: pages/video-editor/components/appearance/Appearance.js:216
#: pages/video-editor/components/appearance/Appearance.js:513
#: pages/video-editor/VideoJSPlayer.js:284
msgid "Custom Play Button"
msgstr ""
-#: assets/src/js/godam-player/managers/controlsManager.js:420
-#: assets/src/js/godam-player/managers/controlsManager.js:437
+#: assets/src/js/godam-player/managers/controlsManager.js:331
+#: assets/src/js/godam-player/managers/controlsManager.js:348
msgid "Branding"
msgstr ""
@@ -3275,7 +3451,7 @@ msgstr ""
#: pages/video-editor/components/forms/NinjaForm.js:120
#: pages/video-editor/components/forms/Sureform.js:107
#: pages/video-editor/components/forms/WPForm.js:107
-#: pages/video-editor/components/layers/CTALayer.js:249
+#: pages/video-editor/components/layers/CTALayer.js:250
#: pages/video-editor/components/layers/PollLayer.js:119
msgid "Skip"
msgstr ""
@@ -3284,16 +3460,16 @@ msgstr ""
msgid "Skip Poll"
msgstr ""
-#: assets/src/js/godam-player/managers/layers/formLayerManager.js:141
-#: assets/src/js/godam-player/managers/layers/formLayerManager.js:144
+#: assets/src/js/godam-player/managers/layers/formLayerManager.js:123
msgid "Continue"
msgstr ""
#. translators: %d: hotspot number
#. translators: %d is the hotspot index
-#: assets/src/js/godam-player/managers/layers/hotspotLayerManager.js:320
-#: assets/src/js/godam-player/managers/layers/hotspotLayerManager.js:327
-#: pages/video-editor/components/layers/HotspotLayer.js:274
+#: assets/src/js/godam-player/managers/layers/hotspotLayerManager.js:226
+#: assets/src/js/godam-player/managers/layers/hotspotLayerManager.js:233
+#: pages/video-editor/components/layers/HotspotLayer.js:180
+#, js-format
msgid "Hotspot %d"
msgstr ""
@@ -3301,6 +3477,7 @@ msgstr ""
#. translators: %d: number of seconds to seek forward
#: assets/src/js/godam-player/managers/playerManager.js:362
#: assets/src/js/godam-player/managers/playerManager.js:377
+#, js-format
msgid "%ds"
msgstr ""
@@ -3357,7 +3534,7 @@ msgid "Transcoding…"
msgstr ""
#: assets/src/js/media-library/utility.js:73
-#: pages/godam/components/GoDAMHeader.jsx:90
+#: pages/godam/components/GoDAMHeader.jsx:85
msgid "Manage Media"
msgstr ""
@@ -3406,14 +3583,6 @@ msgstr ""
msgid "Video Thumbnails"
msgstr ""
-#: assets/src/js/media-library/views/attachment-details.js:145
-msgid "oEmbed Video URL"
-msgstr ""
-
-#: assets/src/js/media-library/views/attachment-details.js:147
-msgid "The oEmbed URL can be used to embed the video in other platforms that support oEmbed."
-msgstr ""
-
#: assets/src/js/ninja-forms/index.js:280
msgid "Upload failed. Please try again."
msgstr ""
@@ -3434,80 +3603,84 @@ msgstr ""
msgid "Use this Video"
msgstr ""
-#: pages/analytics/Analytics.js:349
+#: pages/analytics/Analytics.js:352
msgid "This media doesn't exist."
msgstr ""
-#: pages/analytics/Analytics.js:351
+#: pages/analytics/Analytics.js:354
msgid "Go to Dashboard"
msgstr ""
-#: pages/analytics/Analytics.js:375
+#: pages/analytics/Analytics.js:378
#: pages/dashboard/Dashboard.js:220
msgid "Upgrade to unlock the media performance report."
msgstr ""
-#: pages/analytics/Analytics.js:382
+#: pages/analytics/Analytics.js:385
#: pages/dashboard/Dashboard.js:227
msgid "If you already have a premium plan, connect your"
msgstr ""
-#: pages/analytics/Analytics.js:385
+#: pages/analytics/Analytics.js:388
#: pages/dashboard/Dashboard.js:230
msgid "API in the settings"
msgstr ""
-#: pages/analytics/Analytics.js:389
+#: pages/analytics/Analytics.js:392
#: pages/dashboard/Dashboard.js:234
msgid "Buy Plan"
msgstr ""
-#: pages/analytics/Analytics.js:393
+#: pages/analytics/Analytics.js:396
#: pages/dashboard/Dashboard.js:239
msgid "An unknown error occurred. Please check your plugin settings."
msgstr ""
-#: pages/analytics/Analytics.js:399
+#: pages/analytics/Analytics.js:402
#: pages/dashboard/Dashboard.js:245
msgid "Go to plugin settings"
msgstr ""
#: pages/analytics/Analytics.js:411
+msgid "You need to use desktop to access this feature."
+msgstr ""
+
+#: pages/analytics/Analytics.js:420
msgid "Analytics report of"
msgstr ""
-#: pages/analytics/Analytics.js:414
+#: pages/analytics/Analytics.js:423
msgid "Analytics report"
msgstr ""
-#: pages/analytics/Analytics.js:416
+#: pages/analytics/Analytics.js:425
msgid "Back to Video Editor"
msgstr ""
-#: pages/analytics/Analytics.js:430
-#: pages/analytics/Analytics.js:677
+#: pages/analytics/Analytics.js:439
+#: pages/analytics/Analytics.js:686
#: pages/dashboard/Dashboard.js:340
msgid "Average Engagement"
msgstr ""
-#: pages/analytics/Analytics.js:431
+#: pages/analytics/Analytics.js:440
msgid "Video engagement rate is the percentage of video watched. Average Engagement = Total time played / (Total plays x Video length)"
msgstr ""
-#: pages/analytics/Analytics.js:441
-#: pages/analytics/Analytics.js:682
+#: pages/analytics/Analytics.js:450
+#: pages/analytics/Analytics.js:691
#: pages/dashboard/Dashboard.js:273
#: pages/dashboard/Dashboard.js:338
msgid "Total Plays"
msgstr ""
-#: pages/analytics/Analytics.js:442
+#: pages/analytics/Analytics.js:451
#: pages/dashboard/Dashboard.js:274
msgid "Plays represent the total number of times the video has been viewed"
msgstr ""
-#: pages/analytics/Analytics.js:452
-#: pages/analytics/Analytics.js:689
+#: pages/analytics/Analytics.js:461
+#: pages/analytics/Analytics.js:698
#: pages/analytics/helper.js:104
#: pages/analytics/PlaybackPerformance.js:403
#: pages/analytics/PlaybackPerformance.js:542
@@ -3516,77 +3689,77 @@ msgstr ""
msgid "Play Rate"
msgstr ""
-#: pages/analytics/Analytics.js:453
+#: pages/analytics/Analytics.js:462
#: pages/dashboard/Dashboard.js:286
msgid "Play rate is the percentage of page visitors who clicked play. Play Rate = Total plays / Page loads"
msgstr ""
-#: pages/analytics/Analytics.js:463
+#: pages/analytics/Analytics.js:472
#: pages/analytics/helper.js:110
#: pages/dashboard/Dashboard.js:297
msgid "Watch Time"
msgstr ""
-#: pages/analytics/Analytics.js:464
+#: pages/analytics/Analytics.js:473
#: pages/dashboard/Dashboard.js:298
msgid "Total time the video has been watched, aggregated across all plays"
msgstr ""
-#: pages/analytics/Analytics.js:509
+#: pages/analytics/Analytics.js:518
msgid "Views by Post Source"
msgstr ""
-#: pages/analytics/Analytics.js:520
+#: pages/analytics/Analytics.js:529
msgid "Performance Comparison"
msgstr ""
-#: pages/analytics/Analytics.js:531
+#: pages/analytics/Analytics.js:540
msgid "In Progress"
msgstr ""
-#: pages/analytics/Analytics.js:536
+#: pages/analytics/Analytics.js:545
msgid "Initiate the test comparison to generate analytical insights."
msgstr ""
-#: pages/analytics/Analytics.js:541
+#: pages/analytics/Analytics.js:550
msgid "The test is complete! Review results to identify the best-performing video."
msgstr ""
-#: pages/analytics/Analytics.js:553
+#: pages/analytics/Analytics.js:562
msgid "Start Test"
msgstr ""
-#: pages/analytics/Analytics.js:584
+#: pages/analytics/Analytics.js:593
msgid "Test this video against others to see which performs better."
msgstr ""
-#: pages/analytics/Analytics.js:593
+#: pages/analytics/Analytics.js:602
#: pages/video-editor/components/cta/ImageCTA.js:208
msgid "Upload or Replace CTA Image"
msgstr ""
-#: pages/analytics/Analytics.js:598
+#: pages/analytics/Analytics.js:607
msgid "Choose"
msgstr ""
-#: pages/analytics/Analytics.js:667
+#: pages/analytics/Analytics.js:676
msgid "Views"
msgstr ""
-#: pages/analytics/Analytics.js:699
+#: pages/analytics/Analytics.js:708
msgid "Page Loads"
msgstr ""
-#: pages/analytics/Analytics.js:709
+#: pages/analytics/Analytics.js:718
msgid "Play Time"
msgstr ""
-#: pages/analytics/Analytics.js:717
+#: pages/analytics/Analytics.js:726
msgid "Video Length"
msgstr ""
#: pages/analytics/charts.js:94
-#: pages/analytics/helper.js:711
+#: pages/analytics/helper.js:705
msgid "View"
msgstr ""
@@ -3608,20 +3781,20 @@ msgstr ""
msgid "No data available."
msgstr ""
-#: pages/analytics/index.js:37
+#: pages/analytics/index.js:35
msgid "Select video"
msgstr ""
-#: pages/analytics/index.js:39
+#: pages/analytics/index.js:37
#: pages/video-editor/components/media-grid/MediaItem.jsx:131
msgid "View analytics"
msgstr ""
-#: pages/analytics/index.js:79
+#: pages/analytics/index.js:77
msgid "No video is selected"
msgstr ""
-#: pages/analytics/index.js:89
+#: pages/analytics/index.js:87
msgid "Select Video to Edit"
msgstr ""
@@ -3701,6 +3874,7 @@ msgstr ""
#. translators: %1$d is the current page number, %2$d is the total number of pages
#: pages/dashboard/Dashboard.js:421
+#, js-format
msgid "Page %1$d of %2$d"
msgstr ""
@@ -3714,12 +3888,12 @@ msgstr ""
#: pages/godam/App.js:32
#: pages/godam/components/tabs/GeneralSettings/GeneralSettings.jsx:92
-#: pages/help/App.js:55
+#: pages/help/App.js:23
msgid "General Settings"
msgstr ""
#: pages/godam/App.js:38
-#: pages/help/App.js:59
+#: pages/help/App.js:27
msgid "Video Settings"
msgstr ""
@@ -3775,27 +3949,27 @@ msgstr ""
msgid "Made with ♥ by the GoDAM Team"
msgstr ""
-#: pages/godam/components/GoDAMHeader.jsx:72
+#: pages/godam/components/GoDAMHeader.jsx:67
msgid "Need help?"
msgstr ""
-#: pages/godam/components/GoDAMHeader.jsx:80
+#: pages/godam/components/GoDAMHeader.jsx:75
msgid "Install GoDAM Screen Recorder"
msgstr ""
-#: pages/godam/components/GoDAMHeader.jsx:102
+#: pages/godam/components/GoDAMHeader.jsx:97
msgid "Premium feature"
msgstr ""
-#: pages/godam/components/GoDAMHeader.jsx:102
+#: pages/godam/components/GoDAMHeader.jsx:97
msgid "GoDAM Central"
msgstr ""
-#: pages/godam/components/GoDAMHeader.jsx:116
+#: pages/godam/components/GoDAMHeader.jsx:111
msgid "Upgrade plan"
msgstr ""
-#: pages/godam/components/GoDAMHeader.jsx:129
+#: pages/godam/components/GoDAMHeader.jsx:124
msgid "Get GoDAM"
msgstr ""
@@ -3855,7 +4029,7 @@ msgstr ""
#: pages/godam/components/tabs/GeneralSettings/GeneralSettings.jsx:123
#: pages/godam/components/tabs/VideoPlayer/VideoPlayer.jsx:505
#: pages/godam/components/tabs/VideoSettings/APISettings.jsx:99
-#: pages/godam/components/tabs/VideoSettings/VideoSettings.jsx:146
+#: pages/godam/components/tabs/VideoSettings/VideoSettings.jsx:142
#: pages/video-editor/VideoEditor.js:373
msgid "Saving…"
msgstr ""
@@ -3972,52 +4146,52 @@ msgid "Remove API Key"
msgstr ""
#: pages/godam/components/tabs/VideoSettings/components/PasswordFieldWIthToggle/index.jsx:37
-msgid "Your API key is required to access the features. You can get your active API key from your"
+msgid "Your API key is required to access the features. You can get your active API key from your "
msgstr ""
-#: pages/godam/components/tabs/VideoSettings/components/PasswordFieldWIthToggle/index.jsx:40
+#: pages/godam/components/tabs/VideoSettings/components/PasswordFieldWIthToggle/index.jsx:39
msgid "Account"
msgstr ""
-#: pages/godam/components/tabs/VideoSettings/components/PasswordFieldWIthToggle/index.jsx:56
+#: pages/godam/components/tabs/VideoSettings/components/PasswordFieldWIthToggle/index.jsx:55
msgid "API Key"
msgstr ""
-#: pages/godam/components/tabs/VideoSettings/components/PasswordFieldWIthToggle/index.jsx:60
+#: pages/godam/components/tabs/VideoSettings/components/PasswordFieldWIthToggle/index.jsx:59
msgid "Enter your API key here"
msgstr ""
-#: pages/godam/components/tabs/VideoSettings/components/PasswordFieldWIthToggle/index.jsx:80
+#: pages/godam/components/tabs/VideoSettings/components/PasswordFieldWIthToggle/index.jsx:79
msgid "Hide password"
msgstr ""
-#: pages/godam/components/tabs/VideoSettings/components/PasswordFieldWIthToggle/index.jsx:80
+#: pages/godam/components/tabs/VideoSettings/components/PasswordFieldWIthToggle/index.jsx:79
msgid "Show password"
msgstr ""
-#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:47
+#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:54
msgid "BANDWIDTH"
msgstr ""
-#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:48
-#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:65
-msgid "Available:"
+#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:55
+#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:72
+msgid "Available: "
msgstr ""
-#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:48
-#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:50
-#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:65
-#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:67
+#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:55
+#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:57
+#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:72
+#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:74
msgctxt "gigabyte"
msgid "GB"
msgstr ""
-#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:50
-#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:67
-msgid "Used:"
+#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:57
+#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:74
+msgid "Used: "
msgstr ""
-#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:64
+#: pages/godam/components/tabs/VideoSettings/UsageData.jsx:71
msgid "STORAGE"
msgstr ""
@@ -4082,10 +4256,6 @@ msgstr ""
msgid "Choose GoDAM plan"
msgstr ""
-#: pages/godam/components/tabs/VideoSettings/VideoSettings.jsx:120
-msgid "Start with GoDAM Free for 60 days, or plans starting from $9/mo."
-msgstr ""
-
#: pages/godam/components/tabs/VideoSettings/VideoThumbnails.jsx:32
msgid "Number of video thumbnails generated"
msgstr ""
@@ -4162,64 +4332,56 @@ msgstr ""
msgid "Specify the watermark text that will be added to transcoded videos"
msgstr ""
-#: pages/help/App.js:63
+#: pages/help/App.js:31
msgid "Configuring the Video Block"
msgstr ""
-#: pages/help/App.js:73
+#: pages/help/App.js:41
msgid "Appearance Customisation"
msgstr ""
-#: pages/help/App.js:77
+#: pages/help/App.js:45
msgid "Call To Actions"
msgstr ""
-#: pages/help/App.js:81
+#: pages/help/App.js:49
msgid "Hotspots"
msgstr ""
-#: pages/help/App.js:85
+#: pages/help/App.js:53
#: pages/video-editor/components/SidebarLayers.js:45
msgid "Forms"
msgstr ""
-#: pages/help/App.js:89
+#: pages/help/App.js:57
msgid "ADs"
msgstr ""
-#: pages/help/App.js:99
+#: pages/help/App.js:67
msgid "Interface"
msgstr ""
-#: pages/help/App.js:103
+#: pages/help/App.js:71
msgid "How Tos"
msgstr ""
-#: pages/help/App.js:131
+#: pages/help/App.js:99
msgid "Hi, How can we help?"
msgstr ""
-#: pages/help/App.js:132
+#: pages/help/App.js:100
msgid "Welcome to the GoDAM Help Center!"
msgstr ""
-#: pages/help/App.js:134
+#: pages/help/App.js:102
msgid "Click on the documentation links below to find step-by-step guides, FAQs, and troubleshooting tips for the features you need help with."
msgstr ""
-#: pages/help/App.js:148
-#: pages/help/App.js:150
+#: pages/help/App.js:116
+#: pages/help/App.js:118
msgid "Search using keywords"
msgstr ""
-#: pages/help/App.js:214
-msgid "Help us improve GoDAM"
-msgstr ""
-
-#: pages/help/App.js:217
-msgid "Allows the GoDAM plugin to track anonymous events for analytics purposes. This helps us improve the product experience."
-msgstr ""
-
#: pages/media-library/App.js:167
msgid "New Folder"
msgstr ""
@@ -4364,12 +4526,13 @@ msgstr ""
#: pages/media-library/components/folder-tree/FolderTree.jsx:387
#: pages/media-library/components/folder-tree/FolderTree.jsx:430
-#: pages/video-editor/components/media-grid/MediaGrid.jsx:141
+#: pages/video-editor/components/media-grid/MediaGrid.jsx:139
msgid "Loading…"
msgstr ""
#. translators: %s is the error message
#: pages/media-library/components/folder-tree/FolderTree.jsx:392
+#, js-format
msgid "Error: %s"
msgstr ""
@@ -4580,132 +4743,113 @@ msgstr ""
msgid "Migration is in progress. Please wait…"
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:65
+#: pages/tools/components/tabs/RetranscodeTab.jsx:55
msgid "The requested operation is not allowed. The nonce provided in the URL is invalid or expired."
msgstr ""
-#. translators: %d is the number of selected media files to be transcoded.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:95
-#: pages/tools/components/tabs/RetranscodeTab.jsx:120
-msgid "%d selected media file(s) will be transcoded."
-msgstr ""
-
-#. translators: %d is the number of selected media files to be retranscoded.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:105
-msgid "%d selected media file(s) will be retranscoded."
+#. translators: %d is the number of selected media files.
+#: pages/tools/components/tabs/RetranscodeTab.jsx:67
+#, js-format
+msgid "You are retranscoding %d selected media file(s) from the Media Library."
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:153
+#: pages/tools/components/tabs/RetranscodeTab.jsx:97
msgid "No media files found for retranscoding. Please ensure you have media files that require retranscoding."
msgstr ""
#. translators: %s is the error message.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:160
+#: pages/tools/components/tabs/RetranscodeTab.jsx:104
+#, js-format
msgid "Failed to fetch media for retranscoding: %s"
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:177
+#: pages/tools/components/tabs/RetranscodeTab.jsx:121
msgid "Aborting operation to send media for retranscoding."
msgstr ""
#. translators: %d is the number of virtual media files found.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:286
+#: pages/tools/components/tabs/RetranscodeTab.jsx:230
+#, js-format
msgid "%d virtual media file(s) found, which need to be retranscoded on GoDAM Central."
msgstr ""
#. translators: %d is the number of media files retranscoded.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:295
+#: pages/tools/components/tabs/RetranscodeTab.jsx:239
+#, js-format
msgid "Successfully sent %d media file(s) for retranscoding."
msgstr ""
#. translators: %d is the number of media files that failed to retranscode.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:310
+#: pages/tools/components/tabs/RetranscodeTab.jsx:254
+#, js-format
msgid "Failed to send %d media file(s) for retranscoding."
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:323
+#: pages/tools/components/tabs/RetranscodeTab.jsx:267
msgid "Operation completed without any media files to retranscode."
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:356
-msgid "This tool allows you to retranscode your media files. You can either retranscode specific files selected from the Media Library, or those that are not yet transcoded."
+#: pages/tools/components/tabs/RetranscodeTab.jsx:300
+msgid "This tool allows you to retranscode your media files. You can either retranscode specific files selected from the Media Library, or only those that are not yet transcoded."
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:363
+#: pages/tools/components/tabs/RetranscodeTab.jsx:307
msgid "Checking the \"Force retranscode\" option will retranscode all media files regardless of their current state."
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:368
-msgid "Note: Transcoding and retranscoding will use your bandwidth allowance. Use the force retranscode option carefully."
-msgstr ""
-
-#: pages/tools/components/tabs/RetranscodeTab.jsx:379
-msgid "Storage Limit Exceeded:"
+#: pages/tools/components/tabs/RetranscodeTab.jsx:312
+msgid "Note: Retranscoding will use your bandwidth allowance. Use the force retranscode option carefully."
msgstr ""
-#. translators: %s is the storage usage percentage.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:382
-msgid "Your storage usage has exceeded your plan limit (%s%%). Retranscoding is currently blocked. Please upgrade your plan to continue."
-msgstr ""
-
-#: pages/tools/components/tabs/RetranscodeTab.jsx:403
+#: pages/tools/components/tabs/RetranscodeTab.jsx:332
msgid "Force retranscode (even if already transcoded)"
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:419
+#: pages/tools/components/tabs/RetranscodeTab.jsx:348
msgid "Fetching media that require retranscoding…"
msgstr ""
-#. translators: %d is the number of untranscoded media files.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:438
-msgid "%d untranscoded media file(s) selected"
-msgstr ""
-
-#. translators: %d is the number of transcoded media files.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:447
-msgid "%d transcoded media file(s) selected"
+#. translators: %d is the number of selected media files.
+#: pages/tools/components/tabs/RetranscodeTab.jsx:359
+#, js-format
+msgid "%d selected media file(s) will be retranscoded."
msgstr ""
-#. translators: 1: number of media files that require retranscoding, 2: total number of media files.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:460
+#. translators: %d is the number of media files that require retranscoding.
+#: pages/tools/components/tabs/RetranscodeTab.jsx:363
+#, js-format
msgid "%1$d/%2$d media file(s) require retranscoding."
msgstr ""
-#. translators: 1: number of media files that will be retranscoded regardless of their current state, 2: total number of media files.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:466
-msgid "%1$d/%2$d media file(s) will be retranscoded regardless of their current state."
+#. translators: %d is the number of media files that will be retranscoded.
+#: pages/tools/components/tabs/RetranscodeTab.jsx:369
+#, js-format
+msgid "%1$d/%1$d media file(s) will be retranscoded regardless of their current state."
msgstr ""
-#. translators: 1: number of media files sent for retranscoding, 2: total number of media files selected.
-#: pages/tools/components/tabs/RetranscodeTab.jsx:479
+#. translators: %d is the number of media files sent for retranscoding.
+#: pages/tools/components/tabs/RetranscodeTab.jsx:382
+#, js-format
msgid "%1$d/%2$d media files sent for retranscoding…"
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:518
+#: pages/tools/components/tabs/RetranscodeTab.jsx:421
msgid "Fetch Media"
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:522
-msgid "Start Transcoding"
-msgstr ""
-
-#: pages/tools/components/tabs/RetranscodeTab.jsx:524
+#: pages/tools/components/tabs/RetranscodeTab.jsx:423
msgid "Start Retranscoding"
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:528
-msgid "Restart Transcoding"
-msgstr ""
-
-#: pages/tools/components/tabs/RetranscodeTab.jsx:530
+#: pages/tools/components/tabs/RetranscodeTab.jsx:425
msgid "Restart Retranscoding"
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:544
+#: pages/tools/components/tabs/RetranscodeTab.jsx:439
msgid "Abort Operation"
msgstr ""
-#: pages/tools/components/tabs/RetranscodeTab.jsx:556
+#: pages/tools/components/tabs/RetranscodeTab.jsx:451
#: pages/video-editor/components/hotspot/FontAwesomeIconPicker.js:154
msgid "Reset"
msgstr ""
@@ -4740,7 +4884,7 @@ msgstr ""
#: pages/video-editor/components/forms/Sureform.js:85
#: pages/video-editor/components/forms/WPForm.js:85
#: pages/video-editor/components/layers/FormLayer.js:145
-#: pages/video-editor/components/layers/HotspotLayer.js:224
+#: pages/video-editor/components/layers/HotspotLayer.js:130
msgid "This features is available in premium version"
msgstr ""
@@ -5105,25 +5249,25 @@ msgstr ""
msgid "Image"
msgstr ""
-#: pages/video-editor/components/layers/CTALayer.js:183
+#: pages/video-editor/components/layers/CTALayer.js:184
msgid "Call to Action"
msgstr ""
-#: pages/video-editor/components/layers/CTALayer.js:187
+#: pages/video-editor/components/layers/CTALayer.js:188
msgid "Select type"
msgstr ""
-#: pages/video-editor/components/layers/CTALayer.js:199
+#: pages/video-editor/components/layers/CTALayer.js:200
msgid "Advanced"
msgstr ""
-#: pages/video-editor/components/layers/CTALayer.js:203
+#: pages/video-editor/components/layers/CTALayer.js:204
#: pages/video-editor/components/layers/FormLayer.js:172
#: pages/video-editor/components/layers/PollLayer.js:74
msgid "Color"
msgstr ""
-#: pages/video-editor/components/layers/CTALayer.js:207
+#: pages/video-editor/components/layers/CTALayer.js:208
#: pages/video-editor/components/layers/FormLayer.js:176
#: pages/video-editor/components/layers/PollLayer.js:79
msgid "Layer background color"
@@ -5144,64 +5288,65 @@ msgstr ""
msgid "Advance"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:94
+#: pages/video-editor/components/layers/HotspotLayer.js:67
msgid "New Hotspot"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:231
+#: pages/video-editor/components/layers/HotspotLayer.js:137
msgid "Layer Duration (seconds)"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:240
+#: pages/video-editor/components/layers/HotspotLayer.js:146
msgid "Duration (in seconds) this layer will stay visible"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:249
+#: pages/video-editor/components/layers/HotspotLayer.js:155
msgid "Pause video on hover"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:255
+#: pages/video-editor/components/layers/HotspotLayer.js:161
msgid "Player will pause the video while the layer is displayed and users hover over the hotspots."
msgstr ""
#. translators: %d is the hotspot index
-#: pages/video-editor/components/layers/HotspotLayer.js:281
+#: pages/video-editor/components/layers/HotspotLayer.js:187
+#, js-format
msgid "Options for Hotspot %d"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:304
+#: pages/video-editor/components/layers/HotspotLayer.js:210
msgid "Show Style"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:323
+#: pages/video-editor/components/layers/HotspotLayer.js:229
msgid "Show Icon"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:330
+#: pages/video-editor/components/layers/HotspotLayer.js:236
msgid "Delete Hotspot"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:341
+#: pages/video-editor/components/layers/HotspotLayer.js:247
msgid "Tooltip Text"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:342
+#: pages/video-editor/components/layers/HotspotLayer.js:248
msgid "Click Me!"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:355
+#: pages/video-editor/components/layers/HotspotLayer.js:261
msgid "Link"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:370
+#: pages/video-editor/components/layers/HotspotLayer.js:276
msgid "Invalid origin: must use either http or https as the scheme."
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:389
+#: pages/video-editor/components/layers/HotspotLayer.js:295
msgid "BACKGROUND COLOR"
msgstr ""
-#: pages/video-editor/components/layers/HotspotLayer.js:426
+#: pages/video-editor/components/layers/HotspotLayer.js:332
msgid "Add Hotspot"
msgstr ""
@@ -5412,15 +5557,15 @@ msgid "No video found"
msgstr ""
#: pages/video-editor/components/media-grid/MediaGrid.jsx:109
-msgid "Upload videos from WordPress"
+msgid "Upload videos from WordPress "
msgstr ""
-#: pages/video-editor/components/media-grid/MediaGrid.jsx:117
-msgid "Media Library"
+#: pages/video-editor/components/media-grid/MediaGrid.jsx:116
+msgid "media library"
msgstr ""
-#: pages/video-editor/components/media-grid/MediaGrid.jsx:120
-msgid "to use them in GoDAM."
+#: pages/video-editor/components/media-grid/MediaGrid.jsx:118
+msgid " to use them in Godam."
msgstr ""
#: pages/video-editor/components/media-grid/MediaItem.jsx:41
@@ -5501,20 +5646,23 @@ msgstr ""
msgid "This feature is available in the premium version"
msgstr ""
-#: pages/video-editor/components/SidebarLayers.js:331
+#: pages/video-editor/components/SidebarLayers.js:226
+msgid "Click me!"
+msgstr ""
+
+#: pages/video-editor/components/SidebarLayers.js:344
msgid "No layers added"
msgstr ""
-#. translators: %s is the current time in seconds.
-#: pages/video-editor/components/SidebarLayers.js:365
-msgid "Add layer at %ss"
+#: pages/video-editor/components/SidebarLayers.js:375
+msgid "Add layer at "
msgstr ""
-#: pages/video-editor/components/SidebarLayers.js:370
+#: pages/video-editor/components/SidebarLayers.js:379
msgid "There is already a layer at this timestamp. Please choose a different timestamp."
msgstr ""
-#: pages/video-editor/components/SidebarLayers.js:376
+#: pages/video-editor/components/SidebarLayers.js:385
msgid "Play video to add layer."
msgstr ""
@@ -5548,46 +5696,57 @@ msgstr ""
msgid "Preview"
msgstr ""
+#: assets/build/blocks/godam-audio/block.json
#: assets/src/blocks/godam-audio/block.json
msgctxt "block title"
msgid "GoDAM Audio"
msgstr ""
+#: assets/build/blocks/godam-audio/block.json
#: assets/src/blocks/godam-audio/block.json
msgctxt "block description"
msgid "Embed a GoDAM audio player."
msgstr ""
+#: assets/build/blocks/godam-audio/block.json
#: assets/src/blocks/godam-audio/block.json
msgctxt "block keyword"
msgid "music"
msgstr ""
+#: assets/build/blocks/godam-audio/block.json
#: assets/src/blocks/godam-audio/block.json
msgctxt "block keyword"
msgid "sound"
msgstr ""
+#: assets/build/blocks/godam-audio/block.json
#: assets/src/blocks/godam-audio/block.json
msgctxt "block keyword"
msgid "podcast"
msgstr ""
+#: assets/build/blocks/godam-audio/block.json
#: assets/src/blocks/godam-audio/block.json
msgctxt "block keyword"
msgid "recording"
msgstr ""
+#: assets/build/blocks/godam-gallery/block.json
#: assets/src/blocks/godam-gallery/block.json
msgctxt "block title"
msgid "GoDAM Video Gallery"
msgstr ""
+#: assets/build/blocks/godam-gallery/block.json
#: assets/src/blocks/godam-gallery/block.json
msgctxt "block description"
msgid "Display a grid of GoDAM videos."
msgstr ""
+#: assets/build/blocks/godam-gallery/block.json
+#: assets/build/blocks/godam-video-duration/block.json
+#: assets/build/blocks/godam-video-thumbnail/block.json
#: assets/src/blocks/godam-gallery/block.json
#: assets/src/blocks/godam-video-duration/block.json
#: assets/src/blocks/godam-video-thumbnail/block.json
@@ -5595,6 +5754,9 @@ msgctxt "block keyword"
msgid "video"
msgstr ""
+#: assets/build/blocks/godam-gallery/block.json
+#: assets/build/blocks/godam-video-duration/block.json
+#: assets/build/blocks/godam-video-thumbnail/block.json
#: assets/src/blocks/godam-gallery/block.json
#: assets/src/blocks/godam-video-duration/block.json
#: assets/src/blocks/godam-video-thumbnail/block.json
@@ -5602,6 +5764,9 @@ msgctxt "block keyword"
msgid "gallery"
msgstr ""
+#: assets/build/blocks/godam-gallery/block.json
+#: assets/build/blocks/godam-video-duration/block.json
+#: assets/build/blocks/godam-video-thumbnail/block.json
#: assets/src/blocks/godam-gallery/block.json
#: assets/src/blocks/godam-video-duration/block.json
#: assets/src/blocks/godam-video-thumbnail/block.json
@@ -5609,6 +5774,9 @@ msgctxt "block keyword"
msgid "grid"
msgstr ""
+#: assets/build/blocks/godam-gallery/block.json
+#: assets/build/blocks/godam-video-duration/block.json
+#: assets/build/blocks/godam-video-thumbnail/block.json
#: assets/src/blocks/godam-gallery/block.json
#: assets/src/blocks/godam-video-duration/block.json
#: assets/src/blocks/godam-video-thumbnail/block.json
@@ -5616,81 +5784,97 @@ msgctxt "block keyword"
msgid "videos"
msgstr ""
+#: assets/build/blocks/godam-pdf/block.json
#: assets/src/blocks/godam-pdf/block.json
msgctxt "block title"
msgid "GoDAM PDF"
msgstr ""
+#: assets/build/blocks/godam-pdf/block.json
#: assets/src/blocks/godam-pdf/block.json
msgctxt "block description"
msgid "Embed a PDF file with preview."
msgstr ""
+#: assets/build/blocks/godam-pdf/block.json
#: assets/src/blocks/godam-pdf/block.json
msgctxt "block keyword"
msgid "document"
msgstr ""
+#: assets/build/blocks/godam-pdf/block.json
#: assets/src/blocks/godam-pdf/block.json
msgctxt "block keyword"
msgid "pdf"
msgstr ""
+#: assets/build/blocks/godam-pdf/block.json
#: assets/src/blocks/godam-pdf/block.json
msgctxt "block keyword"
msgid "file"
msgstr ""
+#: assets/build/blocks/godam-pdf/block.json
#: assets/src/blocks/godam-pdf/block.json
msgctxt "block keyword"
msgid "preview"
msgstr ""
+#: assets/build/blocks/godam-video-duration/block.json
#: assets/src/blocks/godam-video-duration/block.json
msgctxt "block title"
msgid "GoDAM Video Duration"
msgstr ""
+#: assets/build/blocks/godam-video-duration/block.json
#: assets/src/blocks/godam-video-duration/block.json
msgctxt "block description"
msgid "Display GoDAM video's duration"
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/block.json
#: assets/src/blocks/godam-video-thumbnail/block.json
msgctxt "block title"
msgid "GoDAM Video Thumbnail"
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/block.json
#: assets/src/blocks/godam-video-thumbnail/block.json
msgctxt "block description"
msgid "Display GoDAM video thumbnail"
msgstr ""
+#: assets/build/blocks/godam-video-thumbnail/block.json
#: assets/src/blocks/godam-video-thumbnail/block.json
msgctxt "block keyword"
msgid "thumbnail"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/block.json
#: assets/src/blocks/sureforms/blocks/recorder/block.json
msgctxt "block title"
msgid "GoDAM Recorder"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/block.json
#: assets/src/blocks/sureforms/blocks/recorder/block.json
msgctxt "block description"
msgid "Enable video submissions inside forms using the GoDAM Recorder field that supports webcam and screencast"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/block.json
#: assets/src/blocks/sureforms/blocks/recorder/block.json
msgctxt "block keyword"
msgid "sureforms"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/block.json
#: assets/src/blocks/sureforms/blocks/recorder/block.json
msgctxt "block keyword"
msgid "godam"
msgstr ""
+#: assets/build/blocks/sureforms/blocks/recorder/block.json
#: assets/src/blocks/sureforms/blocks/recorder/block.json
msgctxt "block keyword"
msgid "recorder"
diff --git a/package-lock.json b/package-lock.json
index 41b2310d4..6bbdbe113 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "godam",
- "version": "1.5.0",
+ "version": "1.4.9",
"lockfileVersion": 3,
"requires": true,
"packages": {
@@ -16,7 +16,6 @@
"@fortawesome/free-solid-svg-icons": "^7.0.0",
"@fortawesome/react-fontawesome": "^0.2.3",
"@monaco-editor/react": "^4.7.0",
- "@posthog/react": "^1.3.0",
"@reduxjs/toolkit": "2.8.2",
"@uppy/audio": "3.0.0",
"@uppy/core": "5.0.1",
@@ -29,7 +28,6 @@
"clsx": "^2.1.1",
"flv.js": "^1.6.2",
"isomorphic-dompurify": "^2.26.0",
- "posthog-js": "^1.282.0",
"quill": "^2.0.3",
"react": "^18.0.0",
"react-bootstrap-icons": "^1.11.6",
@@ -39,7 +37,7 @@
"tailwind-merge": "^3.0.1",
"tailwindcss-animate": "^1.0.7",
"uuid": "^11.1.0",
- "video.js": "8.19.0",
+ "video.js": "^8.23.3",
"videojs-contrib-ads": "^7.5.2",
"videojs-contrib-quality-levels": "4.1.0",
"videojs-contrib-quality-menu": "1.0.4",
@@ -6204,28 +6202,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@posthog/core": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.5.0.tgz",
- "integrity": "sha512-oxfV20QMNwH30jKybUyqi3yGuMghULQz1zkJgQG3rjpHDxhD2vDN6E7UpmaqgphMIvGG3Q+DgfU10zfSPA7w7w==",
- "license": "MIT"
- },
- "node_modules/@posthog/react": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@posthog/react/-/react-1.3.0.tgz",
- "integrity": "sha512-c7Fe8+1KcMS7+njSipSyUMQZWQbSSw0UWiTw7m9IWdAXMhhFin9YgD6wBw9Xy+GlpEjgqrDABwmw+fz7BBwe7g==",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": ">=16.8.0",
- "posthog-js": ">=1.257.2",
- "react": ">=16.8.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@prisma/instrumentation": {
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.11.1.tgz",
@@ -13956,6 +13932,7 @@
"version": "3.46.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.46.0.tgz",
"integrity": "sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==",
+ "dev": true,
"hasInstallScript": true,
"license": "MIT",
"funding": {
@@ -18250,12 +18227,6 @@
"pend": "~1.2.0"
}
},
- "node_modules/fflate": {
- "version": "0.4.8",
- "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz",
- "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==",
- "license": "MIT"
- },
"node_modules/file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -28562,19 +28533,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/posthog-js": {
- "version": "1.284.0",
- "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.284.0.tgz",
- "integrity": "sha512-GmycRGKWdTO6gUSMn8qzzoVTryQhxVwjK2y1Mn0eV7kldLS+tZhr/wM+Z8fXBkbrRwWUjofKFgB83gd1WzbJrA==",
- "license": "SEE LICENSE IN LICENSE",
- "dependencies": {
- "@posthog/core": "1.5.0",
- "core-js": "^3.38.1",
- "fflate": "^0.4.8",
- "preact": "^10.19.3",
- "web-vitals": "^4.2.4"
- }
- },
"node_modules/preact": {
"version": "10.27.2",
"resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz",
@@ -33833,19 +33791,19 @@
}
},
"node_modules/video.js": {
- "version": "8.19.0",
- "resolved": "https://registry.npmjs.org/video.js/-/video.js-8.19.0.tgz",
- "integrity": "sha512-Tjl7ZqAXmHmFEFGhFyiWV8koiNSUiZVq75t1kIPxJ5ZU1V0cakQBjKj8u8yjxY/6JzIajsKOGmOyfmva77RuMw==",
+ "version": "8.23.4",
+ "resolved": "https://registry.npmjs.org/video.js/-/video.js-8.23.4.tgz",
+ "integrity": "sha512-qI0VTlYmKzEqRsz1Nppdfcaww4RSxZAq77z2oNSl3cNg2h6do5C8Ffl0KqWQ1OpD8desWXsCrde7tKJ9gGTEyQ==",
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime": "^7.12.5",
- "@videojs/http-streaming": "^3.14.2",
+ "@videojs/http-streaming": "^3.17.2",
"@videojs/vhs-utils": "^4.1.1",
"@videojs/xhr": "2.7.0",
"aes-decrypter": "^4.0.2",
"global": "4.4.0",
"m3u8-parser": "^7.2.0",
- "mpd-parser": "^1.2.2",
+ "mpd-parser": "^1.3.1",
"mux.js": "^7.0.1",
"videojs-contrib-quality-levels": "4.1.0",
"videojs-font": "4.2.0",
@@ -34015,6 +33973,7 @@
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz",
"integrity": "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==",
+ "dev": true,
"license": "Apache-2.0"
},
"node_modules/webdriver-bidi-protocol": {
diff --git a/package.json b/package.json
index fba561488..dbd37c0e9 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "godam",
- "version": "1.5.0",
+ "version": "1.4.9",
"description": "A WordPress plugin to manage digital assets",
"private": true,
"author": "rtCamp",
@@ -30,7 +30,6 @@
"@fortawesome/free-solid-svg-icons": "^7.0.0",
"@fortawesome/react-fontawesome": "^0.2.3",
"@monaco-editor/react": "^4.7.0",
- "@posthog/react": "^1.3.0",
"@reduxjs/toolkit": "2.8.2",
"@uppy/audio": "3.0.0",
"@uppy/core": "5.0.1",
@@ -43,7 +42,6 @@
"clsx": "^2.1.1",
"flv.js": "^1.6.2",
"isomorphic-dompurify": "^2.26.0",
- "posthog-js": "^1.282.0",
"quill": "^2.0.3",
"react": "^18.0.0",
"react-bootstrap-icons": "^1.11.6",
@@ -53,7 +51,7 @@
"tailwind-merge": "^3.0.1",
"tailwindcss-animate": "^1.0.7",
"uuid": "^11.1.0",
- "video.js": "8.19.0",
+ "video.js": "^8.23.3",
"videojs-contrib-ads": "^7.5.2",
"videojs-contrib-quality-levels": "4.1.0",
"videojs-contrib-quality-menu": "1.0.4",
diff --git a/pages/analytics/Analytics.js b/pages/analytics/Analytics.js
index 462e5ac77..bdaa39e0b 100644
--- a/pages/analytics/Analytics.js
+++ b/pages/analytics/Analytics.js
@@ -310,12 +310,15 @@ const Analytics = ( { attachmentID } ) => {
useEffect( () => {
const handleResize = () => {
const smallSize = window.innerWidth <= 1024;
+ const responsiveOverlay = document.getElementById( 'screen-size-overlay' );
const analyticsContainer = document.getElementById( 'root-video-analytics' );
- if ( analyticsContainer ) {
+ if ( responsiveOverlay && analyticsContainer ) {
if ( smallSize ) {
+ responsiveOverlay.classList.remove( 'hidden' );
analyticsContainer.style.overflow = 'hidden';
} else {
+ responsiveOverlay.classList.add( 'hidden' );
analyticsContainer.style.overflow = 'auto';
}
}
@@ -403,17 +406,23 @@ const Analytics = ( { attachmentID } ) => {
+
+
+
{ __( 'You need to use desktop to access this feature.', 'godam' ) }
+
+
+
{ attachmentData && ! mediaNotFound && (
-
+
{ attachmentData?.title?.rendered
- ?
{ __( 'Analytics report of', 'godam' ) }{ ' ' }
+ ?
{ __( 'Analytics report of', 'godam' ) }
:
{ __( 'Analytics report', 'godam' ) }
}
-
window.location.href = 'admin.php?page=rtgodam_video_editor' }>{ __( 'Back to Video Editor', 'godam' ) }
+
window.location.href = 'admin.php?page=rtgodam_video_editor' }>{ __( 'Back to Video Editor', 'godam' ) }
@@ -422,9 +431,9 @@ const Analytics = ( { attachmentID } ) => {
className="video-analytics-container hidden"
>
-
+
-
-
+
diff --git a/pages/analytics/index.js b/pages/analytics/index.js
index 16aba14a2..16f5abd2f 100644
--- a/pages/analytics/index.js
+++ b/pages/analytics/index.js
@@ -9,14 +9,12 @@ import { edit, media } from '@wordpress/icons';
import { useEffect, useState } from 'react';
import { __ } from '@wordpress/i18n';
import { Provider } from 'react-redux';
-import { PostHogProvider } from '@posthog/react';
import ReactDOM from 'react-dom/client';
/**
* Internal dependencies
*/
import store from './redux/store';
import Analytics from './Analytics';
-import posthog from '../utils/posthog';
import './index.scss';
const Frontpage = () => {
@@ -96,11 +94,9 @@ const Frontpage = () => {
return (
<>
-
-
-
-
-
+
+
+
>
);
};
diff --git a/pages/analytics/index.scss b/pages/analytics/index.scss
index 22055689c..d3fd0dea1 100644
--- a/pages/analytics/index.scss
+++ b/pages/analytics/index.scss
@@ -17,6 +17,13 @@
transition: opacity 0.2s ease-in-out;
}
+#root-video-analytics {
+
+ .godam-settings-header-content {
+ padding: 0 2.5rem;
+ }
+}
+
#root-video-analytics, #root-video-dashboard {
background-color: #fff;
@@ -29,23 +36,8 @@
// Video JS styles
.video-analytics-container {
-
- @apply flex bg-white justify-between py-6 md:px-10 pt-8;
-
- .analytics-info-container {
- .analytics-info {
-
- width: calc(50% - 8px);
-
- @media screen and (min-width: 1535px) {
- width: 350px;
- }
-
- @media screen and (max-width: 640px) {
- width: 100%;
- }
- }
- }
+
+ @apply flex bg-white justify-between py-6 overflow-auto md:px-10 pt-8;
}
.country-heatmap-container {
@@ -132,24 +124,13 @@
// Video Chart styles
.video-container {
position: relative;
+ width: 100%;
width: 830px;
-
- @media screen and (max-width: 1024px) {
- width: 100%;
- }
}
.video-chart-container {
position: absolute;
bottom: 0;
- left: 0;
- width: 100%;
- height: 75%;
- pointer-events: none;
-
- #chart-container {
- pointer-events: auto;
- }
}
.comparison-video-container {
@@ -166,16 +147,10 @@
#chart-container, #original-chart-container, #comparison-chart-container {
width: 100%;
- height: 100%;
- position: relative;
- display: flex;
- flex-direction: column;
- justify-content: flex-end;
svg {
- width: 100%;
- height: 100%;
- display: block;
+ position: relative;
+ top: 4px;
}
.line {
@@ -201,7 +176,6 @@
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
text-align: center;
opacity: 0;
- transform: translateX(-50%);
}
.line-chart-tooltip::after, .performance-line-chart-tooltip::after {
@@ -438,15 +412,11 @@
.subheading-container {
display: flex;
align-items: center;
+ justify-content: space-between;
position: relative;
- justify-content: start;
border-bottom: 1px solid #ddd;
margin: 0 40px;
- padding-bottom: 0;
-
- @media screen and (min-width: 768px) {
- justify-content: space-between;
- }
+ padding-bottom: 8px;
}
.subheading {
@@ -454,8 +424,16 @@
cursor: pointer;
position: relative;
font-weight: 500;
- border-bottom: 2px solid #AB3A6C;
- padding: 8px 0;
+
+ &::after {
+ content: "";
+ position: absolute;
+ left: 0;
+ bottom: -17px;
+ width: 100%;
+ height: 2px;
+ background-color: #AB3A6C;
+ }
}
.ab-testing-table {
diff --git a/pages/dashboard/index.js b/pages/dashboard/index.js
index 8eca15660..781a2e33a 100644
--- a/pages/dashboard/index.js
+++ b/pages/dashboard/index.js
@@ -4,7 +4,6 @@
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
-import { PostHogProvider } from '@posthog/react';
/**
* Internal dependencies
*/
@@ -13,15 +12,12 @@ import './index.scss';
import '../analytics/index.scss';
import './components/ChartsDashboard.js';
import App from './App.js';
-import posthog from '../utils/posthog';
const Index = () => {
return (
-
-
-
-
-
+
+
+
);
};
diff --git a/pages/dashboard/index.scss b/pages/dashboard/index.scss
index 5354042c9..3e3847e91 100644
--- a/pages/dashboard/index.scss
+++ b/pages/dashboard/index.scss
@@ -7,9 +7,6 @@
.godam-dashboard-container {
background-color: #fff;
- overflow-x: hidden;
- width: 100%;
- max-width: 100vw;
}
.dashboard-container {
diff --git a/pages/godam/components/GoDAMHeader.jsx b/pages/godam/components/GoDAMHeader.jsx
index ae0797322..7d55be4f8 100644
--- a/pages/godam/components/GoDAMHeader.jsx
+++ b/pages/godam/components/GoDAMHeader.jsx
@@ -52,10 +52,10 @@ const GodamHeader = () => {
-
+
-
{ `v${ window?.pluginInfo?.version }` }
+
{ `v${ window?.pluginInfo?.version }` }
{
window?.userData?.userApiData?.active_plan &&
{ window?.userData?.userApiData?.active_plan }
diff --git a/pages/godam/components/tabs/VideoPlayer/VideoPlayer.jsx b/pages/godam/components/tabs/VideoPlayer/VideoPlayer.jsx
index e04c1a09a..fbf5b9931 100644
--- a/pages/godam/components/tabs/VideoPlayer/VideoPlayer.jsx
+++ b/pages/godam/components/tabs/VideoPlayer/VideoPlayer.jsx
@@ -195,7 +195,7 @@ const VideoPlayer = () => {
const ButtonBase = videojs.getComponent( 'Button' );
const ShareButtonImg = () => {
- switch ( playerSkin ) {
+ switch ( mediaSettings?.video_player?.player_skin ) {
case 'Minimal':
return ShareVariationOne;
case 'Pills':
diff --git a/pages/godam/index.js b/pages/godam/index.js
index dabd63dd5..d5edf40bd 100644
--- a/pages/godam/index.js
+++ b/pages/godam/index.js
@@ -4,24 +4,20 @@
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
-import { PostHogProvider } from '@posthog/react';
/**
* Internal dependencies
*/
import store from './redux/store';
import App from './App';
-import posthog from '../utils/posthog';
import './index.scss';
const Index = () => {
return (
-
-
-
-
-
+
+
+
);
};
diff --git a/pages/godam/redux/slice/media-settings.js b/pages/godam/redux/slice/media-settings.js
index c95066778..5d18cfc16 100644
--- a/pages/godam/redux/slice/media-settings.js
+++ b/pages/godam/redux/slice/media-settings.js
@@ -30,8 +30,6 @@ const initialState = {
general: {
enable_folder_organization: true,
enable_gtm_tracking: false,
- enable_posthog_tracking: false,
- posthog_initialized: false,
},
video_player: {
brand_image: '',
diff --git a/pages/help/App.js b/pages/help/App.js
index d04b141a2..18d783da1 100644
--- a/pages/help/App.js
+++ b/pages/help/App.js
@@ -1,16 +1,8 @@
-/**
- * External dependencies
- */
-import { useSelector, useDispatch } from 'react-redux';
-
/**
* WordPress dependencies
*/
import { useState } from '@wordpress/element';
import { __ } from '@wordpress/i18n';
-import { Icon, ToggleControl } from '@wordpress/components';
-import { chevronRight } from '@wordpress/icons';
-
/**
* Internal dependencies
*/
@@ -18,35 +10,11 @@ import Customize from '../../assets/src/images/customize.png';
import Folder from '../../assets/src/images/folder.png';
import WebDesign from '../../assets/src/images/web-design.png';
import GodamHeader from '../godam/components/GoDAMHeader.jsx';
+import { Icon } from '@wordpress/components';
+import { chevronRight } from '@wordpress/icons';
import GoDAMFooter from '../godam/components/GoDAMFooter.jsx';
-import { useSaveMediaSettingsMutation, useGetMediaSettingsQuery } from '../godam/redux/api/media-settings.js';
-import { updateMediaSetting } from '../godam/redux/slice/media-settings.js';
const App = () => {
- const dispatch = useDispatch();
- const { mediaSettings } = useSelector( ( state ) => ( {
- mediaSettings: state.mediaSettings,
- } ) );
-
- const { isLoading: isSettingsLoading } = useGetMediaSettingsQuery();
- const [ saveMediaSettings ] = useSaveMediaSettingsMutation();
-
- const handlePostHogToggle = async ( value ) => {
- dispatch( updateMediaSetting( { category: 'general', key: 'enable_posthog_tracking', value } ) );
- dispatch( updateMediaSetting( { category: 'general', key: 'posthog_initialized', value: true } ) );
-
- // Save immediately since it's a single toggle in help page
- const updatedSettings = {
- ...mediaSettings,
- general: {
- ...mediaSettings.general,
- enable_posthog_tracking: value,
- posthog_initialized: true,
- },
- };
- await saveMediaSettings( { settings: updatedSettings } );
- };
-
const content = [
{
section_name: 'Settings and configuration',
@@ -172,7 +140,7 @@ const App = () => {
- { content && content.map( ( section, index ) => (
+ { content.map( ( section, index ) => (
{
{ section.section_name }
- { section.articles_list && section.articles_list.map( ( article ) => (
-
+ { section.articles_list.map( ( article ) => (
+
{
) ) }
-
-
-
-
- { __( 'Help us improve GoDAM', 'godam' ) }
-
-
- { __( 'Allows the GoDAM plugin to track anonymous events for analytics purposes. This helps us improve the product experience.', 'godam' ) }
-
-
-
-
-
-
);
diff --git a/pages/help/index.js b/pages/help/index.js
index 2582bdfa8..9e8d35402 100644
--- a/pages/help/index.js
+++ b/pages/help/index.js
@@ -3,25 +3,14 @@
*/
import React from 'react';
import ReactDOM from 'react-dom';
-import { Provider } from 'react-redux';
-import { PostHogProvider } from '@posthog/react';
-
/**
* Internal dependencies
*/
-import store from '../godam/redux/store';
import './index.scss';
import App from './App';
-import posthog from '../utils/posthog';
const Index = () => {
- return (
-
-
-
-
-
- );
+ return
;
};
const rootElement = document.getElementById( 'root-video-help' );
diff --git a/pages/help/index.scss b/pages/help/index.scss
index b6de11df1..c9ecad734 100644
--- a/pages/help/index.scss
+++ b/pages/help/index.scss
@@ -189,12 +189,4 @@
#wpcontent {
padding-left: 0 !important;
}
-}
-
-.godam-toggle-small {
-
- .components-form-toggle {
- transform: scale(0.8);
- margin-right: 0;
- }
-}
+}
\ No newline at end of file
diff --git a/pages/media-library/index.js b/pages/media-library/index.js
index 9530692ba..95862e466 100644
--- a/pages/media-library/index.js
+++ b/pages/media-library/index.js
@@ -4,7 +4,6 @@
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
-import { PostHogProvider } from '@posthog/react';
/**
* Internal dependencies
@@ -13,7 +12,6 @@ import store from './redux/store';
import { resetUIState } from './redux/slice/folders';
import { triggerFilterChange } from './data/media-grid.js';
import App from './App';
-import posthog from '../utils/posthog';
import './index.scss';
/**
@@ -38,11 +36,9 @@ import './index.scss';
const Index = () => {
return (
-
-
-
-
-
+
+
+
);
};
diff --git a/pages/tools/components/tabs/RetranscodeTab.jsx b/pages/tools/components/tabs/RetranscodeTab.jsx
index 25faf04df..c1b5c921b 100644
--- a/pages/tools/components/tabs/RetranscodeTab.jsx
+++ b/pages/tools/components/tabs/RetranscodeTab.jsx
@@ -34,8 +34,6 @@ const RetranscodeTab = () => {
const [ failureCount, setFailureCount ] = useState( 0 );
const [ virtualMediaCount, setVirtualMediaCount ] = useState( 0 );
const [ totalMediaCount, setTotalMediaCount ] = useState( 0 );
- const [ selectedTranscodeCount, setSelectedTranscodeCount ] = useState( 0 );
- const [ selectedRetranscodeCount, setSelectedRetranscodeCount ] = useState( 0 );
const [ notice, setNotice ] = useState( { message: '', status: 'success', isVisible: false } );
// Calculate storage exceeded status reactively
@@ -67,62 +65,18 @@ const RetranscodeTab = () => {
}
}, [] );
- // Whenever selectedIds are provided, set forceRetranscode to false and check transcoding status
+ // Whenever selectedIds are provided, set forceRetranscode to false
useEffect( () => {
if ( selectedIds && selectedIds.length > 0 ) {
setForceRetranscode( false );
-
- // Check status of selected IDs
- axios.get(
- `${ window.godamRestRoute?.url }godam/v1/transcoding/check-transcoded-status?ids=${ selectedIds.join( ',' ) }`,
- {
- headers: {
- 'Content-Type': 'application/json',
- 'X-WP-Nonce': window.godamRestRoute?.nonce,
- },
- } )
- .then( ( response ) => {
- const transcodeCount = response.data?.transcode_count || 0;
- const retranscodeCount = response.data?.retranscode_count || 0;
- setSelectedTranscodeCount( transcodeCount );
- setSelectedRetranscodeCount( retranscodeCount );
-
- // Create detailed message
- let message = '';
- if ( transcodeCount > 0 ) {
- message += sprintf(
- // translators: %d is the number of selected media files to be transcoded.
- __( '%d selected media file(s) will be transcoded.', 'godam' ),
- transcodeCount,
- );
- }
- if ( retranscodeCount > 0 ) {
- if ( message ) {
- message += ' ';
- }
- message += sprintf(
- // translators: %d is the number of selected media files to be retranscoded.
- __( '%d selected media file(s) will be retranscoded.', 'godam' ),
- retranscodeCount,
- );
- }
-
- showNotice( message, 'warning' );
- } )
- .catch( () => {
- // Fallback if check fails - assume all need transcoding
- setSelectedTranscodeCount( selectedIds.length );
- setSelectedRetranscodeCount( 0 );
-
- showNotice(
- sprintf(
- // translators: %d is the number of selected media files to be transcoded.
- __( '%d selected media file(s) will be transcoded.', 'godam' ),
- selectedIds.length,
- ),
- 'warning',
- );
- } );
+ showNotice(
+ sprintf(
+ // translators: %d is the number of selected media files.
+ __( 'You are retranscoding %d selected media file(s) from the Media Library.', 'godam' ),
+ selectedIds.length,
+ ),
+ 'warning',
+ );
}
}, [ selectedIds ] );
@@ -354,7 +308,7 @@ const RetranscodeTab = () => {
{ __(
- 'This tool allows you to retranscode your media files. You can either retranscode specific files selected from the Media Library, or those that are not yet transcoded.',
+ 'This tool allows you to retranscode your media files. You can either retranscode specific files selected from the Media Library, or only those that are not yet transcoded.',
'godam',
) }
@@ -366,7 +320,7 @@ const RetranscodeTab = () => {
{ __(
- 'Note: Transcoding and retranscoding will use your bandwidth allowance. Use the force retranscode option carefully.',
+ 'Note: Retranscoding will use your bandwidth allowance. Use the force retranscode option carefully.',
'godam',
) }
@@ -426,34 +380,8 @@ const RetranscodeTab = () => {
! aborted &&
{ selectedIds && selectedIds.length > 0 && (
-
- { ( selectedTranscodeCount > 0 || selectedRetranscodeCount > 0 ) && (
-
- { ( () => {
- const parts = [];
- if ( selectedTranscodeCount > 0 ) {
- parts.push(
- sprintf(
- // translators: %d is the number of untranscoded media files.
- __( '%d untranscoded media file(s) selected', 'godam' ),
- selectedTranscodeCount,
- ),
- );
- }
- if ( selectedRetranscodeCount > 0 ) {
- parts.push(
- sprintf(
- // translators: %d is the number of transcoded media files.
- __( '%d transcoded media file(s) selected', 'godam' ),
- selectedRetranscodeCount,
- ),
- );
- }
- return parts.join( ', ' );
- } )() }
-
- ) }
-
+ // translators: %d is the number of selected media files.
+ sprintf( __( '%d selected media file(s) will be retranscoded.', 'godam' ), selectedIds.length )
) }
{ ! selectedIds && ! forceRetranscode && sprintf(
// translators: 1: number of media files that require retranscoding, 2: total number of media files.
@@ -517,16 +445,8 @@ const RetranscodeTab = () => {
if ( attachments.length === 0 ) {
return __( 'Fetch Media', 'godam' );
} else if ( ! done && ! aborted ) {
- // If we have selected media and all are untranscoded, show "Start Transcoding"
- if ( selectedIds && selectedRetranscodeCount === 0 && selectedTranscodeCount > 0 ) {
- return __( 'Start Transcoding', 'godam' );
- }
return __( 'Start Retranscoding', 'godam' );
}
- // If we have selected media and all are untranscoded, show "Restart Transcoding"
- if ( selectedIds && selectedRetranscodeCount === 0 && selectedTranscodeCount > 0 ) {
- return __( 'Restart Transcoding', 'godam' );
- }
return __( 'Restart Retranscoding', 'godam' );
} )() }
diff --git a/pages/tools/index.js b/pages/tools/index.js
index c7a7371b1..d69f362d0 100644
--- a/pages/tools/index.js
+++ b/pages/tools/index.js
@@ -1,23 +1,18 @@
/**
* External dependencies
*/
-import React from 'react';
import ReactDOM from 'react-dom';
-import { PostHogProvider } from '@posthog/react';
/**
* Internal dependencies
*/
import App from './App';
-import posthog from '../utils/posthog';
import './index.scss';
const Index = () => {
return (
-
-
-
+
);
};
diff --git a/pages/utils/posthog.js b/pages/utils/posthog.js
deleted file mode 100644
index 69651d7be..000000000
--- a/pages/utils/posthog.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * External dependencies
- */
-import posthog from 'posthog-js';
-
-/**
- * Initialize PostHog analytics
- *
- * @return {Object} PostHog instance
- */
-const initPostHog = () => {
- const posthogConfig = window.posthogConfig || {};
-
- const posthogKey = posthogConfig.key || '';
- const posthogHost = posthogConfig.host || '';
- const posthogEnabled = posthogConfig.enabled !== '0'; // Enable by default, disable on 0, "0", or false
-
- if ( ! posthogEnabled ) {
- return posthog;
- }
-
- if ( ! posthogKey || ! posthogHost ) {
- return posthog;
- }
-
- posthog.init( posthogKey, {
- api_host: posthogHost,
- defaults: '2025-05-24',
- } );
-
- if ( posthogConfig.properties ) {
- posthog.register( posthogConfig.properties );
- }
-
- return posthog;
-};
-
-const posthogInstance = initPostHog();
-
-export default posthogInstance;
diff --git a/pages/video-editor/components/SidebarLayers.js b/pages/video-editor/components/SidebarLayers.js
index abc733845..c56de1f48 100644
--- a/pages/video-editor/components/SidebarLayers.js
+++ b/pages/video-editor/components/SidebarLayers.js
@@ -22,7 +22,7 @@ import MetformIcon from '../assets/layers/MetFormIcon.png';
/**
* WordPress dependencies
*/
-import { __, sprintf } from '@wordpress/i18n';
+import { __ } from '@wordpress/i18n';
import { Button, Icon, Tooltip } from '@wordpress/components';
import { plus, preformatted, customLink, arrowRight, video, customPostType, thumbsUp, error } from '@wordpress/icons';
import { useState } from '@wordpress/element';
@@ -220,8 +220,21 @@ const SidebarLayers = ( { currentTime, onSelectLayer, onPauseVideo, duration } )
type,
duration: 5,
pauseOnHover: false,
- hotspots: [],
- isNew: true,
+ hotspots: [
+ {
+ id: uuidv4(),
+ tooltipText: __( 'Click me!', 'godam' ),
+ position: { x: 50, y: 50 },
+ size: { diameter: 48 },
+ oSize: { diameter: 48 },
+ oPosition: { x: 50, y: 50 },
+ link: '',
+ backgroundColor: '#0c80dfa6',
+ showStyle: false,
+ showIcon: false,
+ icon: '',
+ },
+ ],
} ),
);
break;
@@ -359,11 +372,7 @@ const SidebarLayers = ( { currentTime, onSelectLayer, onPauseVideo, duration } )
iconPosition="left"
onClick={ openModal }
disabled={ ! currentTime || layers.find( ( l ) => ( l.displayTime ) === ( currentTime ) ) }
- >
- {
- // translators: %s is the current time in seconds.
- sprintf( __( 'Add layer at %ss', 'godam' ), currentTime )
- }
+ >{ __( 'Add layer at ', 'godam' ) } { currentTime }s
{ layers.find( ( l ) => l.displayTime === currentTime ) && (
diff --git a/pages/video-editor/components/cta/ImageCTA.js b/pages/video-editor/components/cta/ImageCTA.js
index 351146900..d7bd59880 100644
--- a/pages/video-editor/components/cta/ImageCTA.js
+++ b/pages/video-editor/components/cta/ImageCTA.js
@@ -155,8 +155,8 @@ const ImageCTA = ( { layerID } ) => {
.then( ( media ) => {
setSelectedImageUrl( media.source_url );
} )
- .catch( () => {
- removeCTAImage();
+ .catch( ( ) => {
+ setSelectedImageUrl( '' );
} );
},
[ restURL, layer?.imageUrlExt ] );
diff --git a/pages/video-editor/components/layers/CTALayer.js b/pages/video-editor/components/layers/CTALayer.js
index 2e237e4cb..ee29eb572 100644
--- a/pages/video-editor/components/layers/CTALayer.js
+++ b/pages/video-editor/components/layers/CTALayer.js
@@ -106,7 +106,7 @@ const CTALayer = ( { layerID, goBack, duration } ) => {
.then( ( media ) => {
setImageCtaUrl( media.source_url ); // URL of the media file
} )
- .catch( () => {
+ .catch( ( ) => {
setImageCtaUrl( '' );
} );
};
@@ -125,26 +125,27 @@ const CTALayer = ( { layerID, goBack, duration } ) => {
};
const imageCtaHtml = () => {
- let imageBox = `
${ __( 'No Image', 'godam' ) }
`;
-
- if ( imageCtaUrl ) {
- imageBox = `
`;
+ // Don't generate HTML if there's no image URL
+ if ( ! imageCtaUrl ) {
+ return '';
}
- return `${ imageBox }
+ return `
+
`;
+
+
`;
};
useEffect( () => {
@@ -171,7 +172,7 @@ const CTALayer = ( { layerID, goBack, duration } ) => {
// Update the HTML only after imageCtaUrl is updated
useEffect( () => {
if ( 'image' === layer?.cta_type ) {
- setFormHTML( imageCtaHtml() );
+ setFormHTML( imageCtaUrl ? imageCtaHtml() : '' );
}
}, [ imageCtaUrl, layer ] );
diff --git a/pages/video-editor/components/layers/HotspotLayer.js b/pages/video-editor/components/layers/HotspotLayer.js
index b12c7e2dd..71a2947e2 100644
--- a/pages/video-editor/components/layers/HotspotLayer.js
+++ b/pages/video-editor/components/layers/HotspotLayer.js
@@ -25,7 +25,7 @@ import {
check,
} from '@wordpress/icons';
import { __, sprintf } from '@wordpress/i18n';
-import { useState, useRef, useEffect, useCallback } from '@wordpress/element';
+import { useState, useRef, useEffect } from '@wordpress/element';
/**
* Internal dependencies
@@ -36,7 +36,6 @@ import LayerControls from '../LayerControls';
import FontAwesomeIconPicker from '../hotspot/FontAwesomeIconPicker';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import LayersHeader from './LayersHeader';
-import { HOTSPOT_CONSTANTS } from '../../../../assets/src/js/godam-player/utils/constants';
const HotspotLayer = ( { layerID, goBack, duration } ) => {
const dispatch = useDispatch();
@@ -49,68 +48,33 @@ const HotspotLayer = ( { layerID, goBack, duration } ) => {
const [ expandedHotspotIndex, setExpandedHotspotIndex ] = useState( null );
const containerRef = useRef( null );
- const videoRef = useRef( null );
- const [ contentRect, setContentRect ] = useState( null );
+ // ratio { x, y } for px <-> ratio
+ const [ ratio, setRatio ] = useState( { x: 1, y: 1 } );
// Helper to dispatch updates
- const updateField = useCallback( ( field, value ) => {
+ const updateField = ( field, value ) => {
dispatch( updateLayerField( { id: layer.id, field, value } ) );
- }, [ dispatch, layer?.id ] );
-
- const percentToPx = useCallback( ( percent, dimension ) => {
- if ( ! contentRect ) {
- return 0;
- }
- const size = dimension === 'x' ? contentRect.width : contentRect.height;
- return ( percent / 100 ) * size;
- }, [ contentRect ] );
-
- const pxToPercent = useCallback( ( px, dimension ) => {
- if ( ! contentRect ) {
- return 0;
- }
- const size = dimension === 'x' ? contentRect.width : contentRect.height;
- return ( px / size ) * 100;
- }, [ contentRect ] );
-
- const getDefaultDiameter = useCallback( ( unit ) => {
- if ( unit !== 'percent' ) {
- return HOTSPOT_CONSTANTS.DEFAULT_DIAMETER_PX;
- }
+ };
- return contentRect?.width
- ? pxToPercent( HOTSPOT_CONSTANTS.DEFAULT_DIAMETER_PX, 'x' )
- : HOTSPOT_CONSTANTS.DEFAULT_DIAMETER_PERCENT;
- }, [ contentRect?.width, pxToPercent ] );
+ const pxToRatio = ( px, dimension ) => px * ratio[ dimension ];
+ const ratioToPx = ( val, dimension ) => val / ratio[ dimension ];
// Add a new hotspot
- const handleAddHotspot = useCallback( () => {
- // Calculate percentage dynamically to maintain a consistent physical size (approx 48px)
- const diameterPercent = getDefaultDiameter( 'percent' );
-
+ const handleAddHotspot = () => {
const newHotspot = {
id: uuidv4(),
tooltipText: __( 'New Hotspot', 'godam' ),
link: '',
position: { x: 50, y: 50 },
- size: { diameter: diameterPercent },
- oSize: { diameter: diameterPercent },
+ size: { diameter: 48 },
+ oSize: { diameter: 48 },
oPosition: { x: 50, y: 50 },
backgroundColor: '#0c80dfa6',
icon: '',
- unit: 'percent',
};
updateField( 'hotspots', [ ...hotspots, newHotspot ] );
- }, [ getDefaultDiameter, hotspots, updateField ] );
-
- // Auto-add the first hotspot if none exist and it's a new layer
- useEffect( () => {
- if ( layer?.isNew && hotspots.length === 0 && contentRect?.width ) {
- handleAddHotspot();
- updateField( 'isNew', false ); // Mark as not new anymore
- }
- }, [ layer?.isNew, hotspots.length, contentRect?.width, handleAddHotspot, updateField ] );
+ };
const handleDeleteHotspot = ( index ) => {
updateField(
@@ -124,81 +88,23 @@ const HotspotLayer = ( { layerID, goBack, duration } ) => {
setExpandedHotspotIndex( expandedHotspotIndex === index ? null : index );
};
- const computeContentRect = () => {
- const videoEl = document.querySelector( 'video' );
- const containerEl = document.getElementById( 'easydam-video-player' );
+ const recalcRatio = () => {
+ if ( containerRef.current ) {
+ const { offsetWidth, offsetHeight } = containerRef.current;
+ const baseWidth = 800;
+ const baseHeight = 600;
- if ( ! videoEl || ! containerEl ) {
- setContentRect( null );
- return;
- }
-
- const nativeW = videoEl.videoWidth || 0;
- const nativeH = videoEl.videoHeight || 0;
-
- const elW = containerEl.offsetWidth;
- const elH = containerEl.offsetHeight;
-
- // If video dimensions aren't loaded yet, use full container
- if ( ! nativeW || ! nativeH ) {
- setContentRect( {
- left: 0,
- top: 0,
- width: elW,
- height: elH,
+ setRatio( {
+ x: baseWidth / offsetWidth,
+ y: baseHeight / offsetHeight,
} );
- return;
- }
-
- const videoAspectRatio = nativeW / nativeH;
- const containerAspectRatio = elW / elH;
-
- let contentW, contentH, offsetX, offsetY;
-
- if ( containerAspectRatio > videoAspectRatio ) {
- // Pillarboxed (black bars on left/right)
- contentH = elH;
- contentW = elH * videoAspectRatio;
- offsetX = ( elW - contentW ) / 2;
- offsetY = 0;
- } else {
- // Letterboxed (black bars on top/bottom)
- contentW = elW;
- contentH = elW / videoAspectRatio;
- offsetX = 0;
- offsetY = ( elH - contentH ) / 2;
}
-
- const newRect = {
- left: Math.round( offsetX ),
- top: Math.round( offsetY ),
- width: Math.round( contentW ),
- height: Math.round( contentH ),
- };
-
- setContentRect( newRect );
};
useEffect( () => {
- computeContentRect();
- window.addEventListener( 'resize', computeContentRect );
- document.addEventListener( 'fullscreenchange', computeContentRect );
-
- // Also listen for video metadata loaded
- const videoEl = document.querySelector( 'video' );
- videoRef.current = videoEl;
-
- if ( videoEl ) {
- videoEl.addEventListener( 'loadedmetadata', computeContentRect );
- }
-
- return () => {
- window.removeEventListener( 'resize', computeContentRect );
- document.removeEventListener( 'fullscreenchange', computeContentRect );
- if ( videoRef.current ) {
- videoRef.current.removeEventListener( 'loadedmetadata', computeContentRect );
- }
- };
+ recalcRatio();
+ window.addEventListener( 'resize', recalcRatio );
+ return () => window.removeEventListener( 'resize', recalcRatio );
}, [] );
// If we want to disable the premium layers the we can use this code
@@ -427,92 +333,51 @@ const HotspotLayer = ( { layerID, goBack, duration } ) => {
+ { /* The actual layer content */ }
+
{ hotspots.map( ( hotspot, index ) => {
- const posX = hotspot.oPosition?.x ?? hotspot.position?.x ?? 50;
- const posY = hotspot.oPosition?.y ?? hotspot.position?.y ?? 50;
- const diameter = hotspot.oSize?.diameter ?? hotspot.size?.diameter ?? getDefaultDiameter( hotspot.unit );
-
- let pixelX, pixelY, pixelDiameter;
-
- if ( hotspot.unit === 'percent' ) {
- // Calculate pixel values for rendering
- pixelX = percentToPx( posX, 'x' );
- pixelY = percentToPx( posY, 'y' );
- pixelDiameter = percentToPx( diameter, 'x' );
- } else {
- // Legacy handling in editor (relative to base dimensions)
- const baseWidth = HOTSPOT_CONSTANTS.BASE_WIDTH;
- const baseHeight = HOTSPOT_CONSTANTS.BASE_HEIGHT;
- pixelX = ( posX / baseWidth ) * ( contentRect?.width || HOTSPOT_CONSTANTS.BASE_WIDTH );
- pixelY = ( posY / baseHeight ) * ( contentRect?.height || HOTSPOT_CONSTANTS.BASE_HEIGHT );
- pixelDiameter = ( diameter / baseWidth ) * ( contentRect?.width || HOTSPOT_CONSTANTS.BASE_WIDTH );
- }
+ const fallbackPosX = hotspot.oPosition?.x ?? hotspot.position.x;
+ const fallbackPosY = hotspot.oPosition?.y ?? hotspot.position.y;
return (
{
- if ( ! contentRect ) {
- return;
- }
-
- // d.x and d.y are relative to the parent (contentRect div)
- const relativeX = d.x;
- const relativeY = d.y;
-
const newHotspots = hotspots.map( ( h2, j ) => {
if ( j === index ) {
- const newX = pxToPercent( relativeX, 'x' );
- const newY = pxToPercent( relativeY, 'y' );
-
- // If converting from legacy, also convert diameter to percentage
- let newDiameter = h2.oSize?.diameter ?? h2.size?.diameter ?? getDefaultDiameter( h2.unit );
- if ( h2.unit !== 'percent' ) {
- // Ensure it's at least 10px equivalent in percentage
- const minPercent = contentRect ? ( HOTSPOT_CONSTANTS.MIN_PX / contentRect.width ) * 100 : HOTSPOT_CONSTANTS.MIN_PERCENT_FALLBACK;
- newDiameter = Math.max( minPercent, ( newDiameter / HOTSPOT_CONSTANTS.BASE_WIDTH ) * 100 );
- }
-
return {
...h2,
- unit: 'percent',
- size: { diameter: newDiameter },
- oSize: { diameter: newDiameter },
oPosition: {
- x: newX,
- y: newY,
- },
- position: {
- x: newX,
- y: newY,
+ x: pxToRatio( d.x, 'x' ),
+ y: pxToRatio( d.y, 'y' ),
},
};
}
@@ -520,45 +385,14 @@ const HotspotLayer = ( { layerID, goBack, duration } ) => {
} );
updateField( 'hotspots', newHotspots );
} }
- onResizeStop={ ( e, direction, ref, delta, position ) => {
- if ( ! contentRect ) {
- return;
- }
-
- let newDiameterPx = ref.offsetWidth;
- let relativeX = position.x;
- let relativeY = position.y;
-
- // Clamp position to ensure it stays within contentRect
- relativeX = Math.max( 0, Math.min( relativeX, contentRect.width - newDiameterPx ) );
- relativeY = Math.max( 0, Math.min( relativeY, contentRect.height - newDiameterPx ) );
-
- // Clamp diameter to ensure it doesn't exceed the remaining space from the current position
- const maxAllowedDiameter = Math.min( contentRect.width - relativeX, contentRect.height - relativeY );
- newDiameterPx = Math.min( newDiameterPx, maxAllowedDiameter );
-
- const newDiameterPercent = pxToPercent( newDiameterPx, 'x' );
- const newX = pxToPercent( relativeX, 'x' );
- const newY = pxToPercent( relativeY, 'y' );
-
+ onResizeStop={ ( e, direction, ref ) => {
+ const newDiameterPx = ref.offsetWidth;
const newHotspots = hotspots.map( ( h2, j ) => {
if ( j === index ) {
return {
...h2,
- unit: 'percent',
oSize: {
- diameter: newDiameterPercent,
- },
- size: {
- diameter: newDiameterPercent,
- },
- oPosition: {
- x: newX,
- y: newY,
- },
- position: {
- x: newX,
- y: newY,
+ diameter: pxToRatio( newDiameterPx, 'x' ),
},
};
}
diff --git a/pages/video-editor/components/media-grid/MediaGrid.jsx b/pages/video-editor/components/media-grid/MediaGrid.jsx
index 52dc4dc04..41ee3d32e 100644
--- a/pages/video-editor/components/media-grid/MediaGrid.jsx
+++ b/pages/video-editor/components/media-grid/MediaGrid.jsx
@@ -106,18 +106,16 @@ const MediaGrid = ( { search, page, handleAttachmentClick, setPage, attachments,
{ __( 'No video found', 'godam' ) }
- { __( 'Upload videos from WordPress', 'godam' ) }
- { ' ' }
+ { __( 'Upload videos from WordPress ', 'godam' ) }
- { __( 'Media Library', 'godam' ) }
+ { __( 'media library', 'godam' ) }
- { ' ' }
- { __( 'to use them in GoDAM.', 'godam' ) }
+ { __( ' to use them in Godam.', 'godam' ) }
);
diff --git a/pages/video-editor/index.js b/pages/video-editor/index.js
index 8d78ac788..ca767f5ca 100644
--- a/pages/video-editor/index.js
+++ b/pages/video-editor/index.js
@@ -4,22 +4,18 @@
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
-import { PostHogProvider } from '@posthog/react';
/**
* Internal dependencies
*/
import store from './redux/store';
import App from './App';
-import posthog from '../utils/posthog';
const Index = () => {
return (
-
-
-
-
-
+
+
+
);
};
diff --git a/pages/video-editor/style.scss b/pages/video-editor/style.scss
index 34771ae04..89c7444ac 100644
--- a/pages/video-editor/style.scss
+++ b/pages/video-editor/style.scss
@@ -46,7 +46,6 @@
.vjs-control-bar {
display: var(--is-controls-visible, flex);
- z-index: 8;
}
}
diff --git a/pages/video-editor/utils/index.js b/pages/video-editor/utils/index.js
index cd59d98a2..a91f13ce0 100644
--- a/pages/video-editor/utils/index.js
+++ b/pages/video-editor/utils/index.js
@@ -30,7 +30,7 @@ function createGoDAMVideoBlockMarkup( attrs ) {
function createVideoAttributes( attachmentId, mediaData ) {
const baseAttrs = {
id: Number( attachmentId ),
- aspectRatio: '16:9',
+ aspectRatio: '16/9',
};
if ( ! mediaData ) {
diff --git a/pages/video-editor/video-control.css b/pages/video-editor/video-control.css
index 7c9d47f4f..6eae8d0f4 100644
--- a/pages/video-editor/video-control.css
+++ b/pages/video-editor/video-control.css
@@ -84,7 +84,7 @@
border-radius: 0 20px 20px 0;
display: flex;
flex-direction: column;
- gap: 0;
+ gap: 20px;
align-content: center;
justify-content: center;
padding-left: 0;
@@ -112,7 +112,7 @@
.vertical-image-cta-container {
flex-direction: column;
- width: 250px;
+ width: 300px;
border-radius: 36px;
padding-top: 20px;
diff --git a/pages/whats-new/index.js b/pages/whats-new/index.js
index dec831e6e..75d45d8a3 100644
--- a/pages/whats-new/index.js
+++ b/pages/whats-new/index.js
@@ -3,20 +3,14 @@
*/
import React from 'react';
import ReactDOM from 'react-dom';
-import { PostHogProvider } from '@posthog/react';
/**
* Internal dependencies
*/
import './index.scss';
import App from './App';
-import posthog from '../utils/posthog';
const Index = () => {
- return (
-
-
-
- );
+ return ;
};
const rootElement = document.getElementById( 'root-whats-new' );
diff --git a/readme.txt b/readme.txt
index 6667b332e..98782f5f9 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,10 +1,10 @@
=== GoDAM - Organize WordPress Media Library & File Manager with Unlimited Folders for Images, Videos & more ===
-Contributors: rtcamp, elifvish, subodhrajpopat, kuldipchaudhary, prachigarg19, juzar, geekofshire, nazmulhassann20, abhinavbelhekar03, gautam23, mukulsingh27, hbhalodia, kishu7270, opurockey, utsavladani, whiteshadow01, ahmarzaidi
+Contributors: rtcamp, elifvish, subodhrajpopat, kuldipchaudhary, prachigarg19, juzar, geekofshire, nazmulhassann20, abhinavbelhekar03, gautam23, mukulsingh27, hbhalodia
Tags: transcoder, video, media library, folders, file manager
Requires at least: 6.5
Tested up to: 6.9
Requires PHP: 7.4
-Stable tag: 1.5.0
+Stable tag: 1.4.9
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -246,24 +246,6 @@ A. Yes, GoDAM provides robust analytics tools to track video engagement, includi
== Changelog ==
-= v1.5.0 (January 20, 2026) =
-
-- Feat: Implemented GoDAM virtual attachment support for Image, Audio, and PDF media. This allows users to import a wide range of media directly from GoDAM Central.
-- Feat: Added support for the video quality menu on the Desktop Safari browser.
-- Tweak: Made the Dashboard and Analytics pages mobile-responsive.
-- Tweak: Improved the video player mobile view for different player skins, including Default, Classic, Minimal, Pills, and Bubble.
-- Tweak: Improved layer styles for mobile device sizes.
-- Tweak: Improved keyboard forward and backward shortcuts for the video player.
-- Fix: Resolved interactive form and poll layer submission issues in the GoDAM Gallery block.
-- Fix: Constrained hotspot layer points within the video canvas to ensure consistency across devices.
-- Fix: Skipped poll label updates on poll submission to improve user experience.
-- Fix: Displayed media item metadata (such as transcoded and embed URLs) in the GoDAM tab.
-- Fix: Improved real-time aspect ratio updates for the GoDAM Block.
-- Fix: Resolved an issue where input was not possible when a form was used in fullscreen mode on Safari with GoDAM Video.
-- Fix: Made the video preview page work correctly for all layers.
-- Fix: Fixed overlap issues between the GoDAM Video block UI and the engagement modal on mobile screens.
-- Fix: Resolved GoDAM block rendering issues when used as a child block of Row, Columns, or Grid blocks.
-
= v1.4.9 (December 19, 2025) =
- Feat: Added Free Plan for GoDAM
@@ -284,6 +266,15 @@ A. Yes, GoDAM provides robust analytics tools to track video engagement, includi
- Fix: Player skin overlap issues
- Fix: Media metadata display on Central
+= v1.4.7 (November 26, 2025) =
+
+- Tweak: Improved GoDAM Video block performance with preload poster functionality
+- Fix: Control and scroll on iOS fullscreen
+- Fix: GoDAM media tab for WP core blocks
+- Fix: Virtual media player and preview template
+- Fix: Error handling for Ads layer
+- Fix: PHP naming conventions as per WP PCP
+
[CHECK THE FULL CHANGELOG](https://github.com/rtCamp/godam/blob/main/CHANGELOG.md)
== External Services ==
diff --git a/webpack.config.js b/webpack.config.js
index 3eb6b62f2..0b820c9a8 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -135,13 +135,6 @@ const godamGallery = {
},
};
-const godamVideoEmbed = {
- ...sharedConfig,
- entry: {
- 'godam-video-embed': path.resolve( process.cwd(), 'assets', 'src', 'js', 'godam-video-embed.js' ),
- },
-};
-
const gfGodamRecorderEditorJS = {
...sharedConfig,
entry: {
@@ -230,20 +223,6 @@ const ninjaForms = {
},
};
-const ninjaFormsSubmissionsList = {
- ...sharedConfig,
- entry: {
- 'ninja-forms-submissions-list': path.resolve( process.cwd(), 'assets', 'src', 'js', 'ninja-forms', 'ninja-forms-submissions-list.js' ),
- },
-};
-
-const blockExtensions = {
- ...sharedConfig,
- entry: {
- 'block-extensions': path.resolve( process.cwd(), 'assets', 'src', 'block-extensions', 'index.js' ),
- },
-};
-
// Define the `pages` directory
const pagesDir = path.resolve( __dirname, './pages' );
@@ -318,7 +297,6 @@ module.exports = [
godamPlayerAnalytics,
deactivationJS,
godamGallery,
- godamVideoEmbed,
gfGodamRecorderEditorJS,
wpFormsGodamRecorderEditorJS,
jetpackFormJS,
@@ -333,6 +311,4 @@ module.exports = [
lifterLMSBlock,
lifterLMSEmbed,
ninjaForms,
- ninjaFormsSubmissionsList,
- blockExtensions,
];