{"id":10273,"date":"2023-11-27T05:29:54","date_gmt":"2023-11-27T05:29:54","guid":{"rendered":"https:\/\/www.expertpeople.fr\/?page_id=10273"},"modified":"2023-11-27T05:36:20","modified_gmt":"2023-11-27T05:36:20","slug":"punit-test","status":"publish","type":"page","link":"https:\/\/www.expertpeople.fr\/en\/punit-test\/","title":{"rendered":"Punit-Test"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"10273\" class=\"elementor elementor-10273\" data-elementor-settings=\"{&quot;ha_cmc_init_switcher&quot;:&quot;no&quot;}\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-587f992 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"587f992\" data-element_type=\"section\" data-settings=\"{&quot;_ha_eqh_enable&quot;:false}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-71b73ca\" data-id=\"71b73ca\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c36db3d elementor-widget elementor-widget-shortcode\" data-id=\"c36db3d\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\r\n    <div id=\"bubble-container\"><\/div>\r\n\r\n    <script>\r\n        jQuery(document).ready(function() {\r\n            var bubbleCount = 6;\r\n            var bubbleSizeRange = [140, 180];\r\n            var boxWidth = 450;\r\n            var boxHeight = 500;\r\n            var pictures = [];\r\n            var animationPaused = false;\r\n\r\n            jQuery.ajax({\r\n                url: window.EP_BUBBLES_DATA.ajax_url,\r\n                type: 'POST',\r\n                dataType: 'json',\r\n                data: {\r\n                    action: 'get_bubble_images',\r\n                    security: window.EP_BUBBLES_DATA.security,\r\n                    post_id: window.EP_BUBBLES_DATA.post_id\r\n                },\r\n                success: function(response) {\r\n                    if (response && response.success && response.data && Array.isArray(response.data.pictures)) {\r\n                        pictures = response.data.pictures;\r\n                    } else if (Array.isArray(response)) {\r\n                        pictures = response;\r\n                    } else {\r\n                        console.error('Bubble images response invalid', response);\r\n                    }\r\n                },\r\n                error: function(error) {\r\n                    console.error('Error fetching images:', error);\r\n                }\r\n            });\r\n\r\n            function getRandomSize(min, max) {\r\n                return Math.floor(Math.random() * (max - min + 1)) + min;\r\n            }\r\n\r\n            function getRandomImage() {\r\n                if (!pictures.length) return null;\r\n                return pictures[Math.floor(Math.random() * pictures.length)];\r\n            }\r\n\r\n            function getRandomColor() {\r\n                var colors = ['#003366', '#FF9900', '#87CEEB', '#B0C4DE', '#FFA500', '#B0E0E6', '#66B2FF'];\r\n                return colors[Math.floor(Math.random() * colors.length)];\r\n            }\r\n\r\n            var cellSize = Math.max.apply(null, bubbleSizeRange) * 1.5;\r\n            var grid = [];\r\n\r\n            function createGrid() {\r\n                var cols = Math.ceil(boxWidth \/ cellSize);\r\n                var rows = Math.ceil(boxHeight \/ cellSize);\r\n\r\n                for (var i = 0; i < cols; i++) {\r\n                    grid[i] = [];\r\n                    for (var j = 0; j < rows; j++) {\r\n                        grid[i][j] = null;\r\n                    }\r\n                }\r\n            }\r\n\r\n            function placeBubbleInGrid(bubble) {\r\n                var col = Math.floor(bubble.x \/ cellSize);\r\n                var row = Math.floor(bubble.y \/ cellSize);\r\n\r\n                if (!grid[col]) grid[col] = [];\r\n                grid[col][row] = bubble;\r\n            }\r\n\r\n            function checkCollisionWithGrid(bubble) {\r\n                var col = Math.floor(bubble.x \/ cellSize);\r\n                var row = Math.floor(bubble.y \/ cellSize);\r\n\r\n                if (!grid[col]) return false;\r\n\r\n                for (var i = Math.max(0, col - 1); i <= Math.min(grid.length - 1, col + 1); i++) {\r\n                    for (var j = Math.max(0, row - 1); j <= Math.min(grid[i].length - 1, row + 1); j++) {\r\n                        if (grid[i][j] && grid[i][j] !== bubble) {\r\n                            var dx = bubble.x - grid[i][j].x;\r\n                            var dy = bubble.y - grid[i][j].y;\r\n                            var distance = Math.sqrt(dx * dx + dy * dy);\r\n\r\n                            if (distance < (bubble.size + grid[i][j].size) \/ 2) {\r\n                                return true;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                return false;\r\n            }\r\n\r\n            function generateNonOverlappingPosition(size) {\r\n                var maxAttempts = 100;\r\n\r\n                for (var attempt = 0; attempt < maxAttempts; attempt++) {\r\n                    var x = Math.random() * (boxWidth - size);\r\n                    var y = Math.random() * (boxHeight - size);\r\n\r\n                    var tempBubble = { x: x, y: y, size: size };\r\n                    if (!checkCollisionWithGrid(tempBubble)) {\r\n                        placeBubbleInGrid(tempBubble);\r\n                        return { x: x, y: y, size: size };\r\n                    }\r\n                }\r\n                return null;\r\n            }\r\n\r\n            function animateBubble(bubble, colorBubble) {\r\n                if (animationPaused) return;\r\n\r\n                var size = getRandomSize(bubbleSizeRange[0], bubbleSizeRange[1]);\r\n                var position = generateNonOverlappingPosition(size);\r\n\r\n                if (position) {\r\n                    var randomX = position.x;\r\n                    var randomY = position.y;\r\n                    var randomDirectionX = Math.random() > 0.5 ? 1 : -1;\r\n                    var randomDirectionY = Math.random() > 0.5 ? 1 : -1;\r\n                    var imageUrl = getRandomImage();\r\n                    var bubbleColor = getRandomColor();\r\n\r\n                    bubble.css({\r\n                        width: size + 'px',\r\n                        height: size + 'px',\r\n                        left: randomX + 'px',\r\n                        top: randomY + 'px',\r\n                        display: 'none',\r\n                        background: imageUrl ? 'url(' + imageUrl + ')' : bubbleColor,\r\n                        backgroundSize: 'cover'\r\n                    });\r\n\r\n                    colorBubble.css({\r\n                        width: 50 + 'px',\r\n                        height: 50 + 'px',\r\n                        left: randomX + 'px',\r\n                        top: randomY + 'px',\r\n                        background: bubbleColor,\r\n                        display: 'none'\r\n                    });\r\n\r\n                    var animationPropertiesX = {\r\n                        left: (randomX + randomDirectionX * Math.random() * boxWidth) + 'px',\r\n                        opacity: 0\r\n                    };\r\n\r\n                    var animationPropertiesY = {\r\n                        top: (randomY + randomDirectionY * Math.random() * boxHeight) + 'px',\r\n                        opacity: 0\r\n                    };\r\n\r\n                    colorBubble.fadeIn(1000).animate(animationPropertiesY, 3000, function() {\r\n                        colorBubble.remove();\r\n                    });\r\n\r\n                    setTimeout(function() {\r\n                        bubble.fadeIn(500).animate(animationPropertiesX, 5000, function() {\r\n                            bubble.remove();\r\n                        });\r\n                    }, 1000);\r\n\r\n                    setTimeout(function() {\r\n                        createAndAnimateBubble();\r\n                    }, 1500);\r\n                } else {\r\n                    bubble.remove();\r\n                    createAndAnimateBubble();\r\n                }\r\n            }\r\n\r\n            var colorBubble = jQuery('<div class=\"bubble\"><\/div>');\r\n\r\n            function createAndAnimateBubble() {\r\n                var bubble = jQuery('<div class=\"bubble\"><\/div>');\r\n                var colorBubbleClone = colorBubble.clone();\r\n                jQuery('#bubble-container').append(bubble, colorBubbleClone);\r\n                animateBubble(bubble, colorBubbleClone);\r\n            }\r\n\r\n            createGrid();\r\n\r\n            document.addEventListener('visibilitychange', function() {\r\n                if (document.hidden) {\r\n                    animationPaused = true;\r\n                } else {\r\n                    animationPaused = false;\r\n                    createAndAnimateBubble();\r\n                }\r\n            });\r\n\r\n            createAndAnimateBubble();\r\n        });\r\n    <\/script>\r\n\r\n    <style>\r\n        .bubble {\r\n            position: absolute;\r\n        }\r\n    <\/style>\r\n\r\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_kad_post_transparent":"","_kad_post_title":"hide","_kad_post_layout":"fullwidth","_kad_post_sidebar_id":"","_kad_post_content_style":"unboxed","_kad_post_vertical_padding":"hide","_kad_post_feature":"hide","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"class_list":["post-10273","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.expertpeople.fr\/en\/wp-json\/wp\/v2\/pages\/10273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.expertpeople.fr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.expertpeople.fr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.expertpeople.fr\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.expertpeople.fr\/en\/wp-json\/wp\/v2\/comments?post=10273"}],"version-history":[{"count":0,"href":"https:\/\/www.expertpeople.fr\/en\/wp-json\/wp\/v2\/pages\/10273\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.expertpeople.fr\/en\/wp-json\/wp\/v2\/media?parent=10273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}