Préparer un gala de danse : mes astuces pour un jour J sans stress Chaque année, le gala de danse est un moment très attendu. Entre l’effervescence des répétitions, la magie des costumes et l’adrénaline du jour J, c’est un concentré d'émotions… mais aussi de logistique ! Voici toutes mes astuces, testées et approuvées, pour préparer un gala dans la sérénité et profiter à fond de cette belle expérience. Répétitions : préparer son corps (et sa tête) Les dernières semaines avant
bottom of page
(function(){
if (window.__cnJeuxScoreHudV1) return;
window.__cnJeuxScoreHudV1 = true;
var state = { score: 'Score: 0', best: 'Best: ' + (localStorage.getItem('carrementnous_dodge_ball_best_score') || localStorage.getItem('bestScore') || '0') };
function isJeuxPage(){
return //jeux(?:$|[?#/])/.test(window.location.pathname + window.location.search + window.location.hash);
}
function gameIframe(){
return document.querySelector('iframe[title="GAME DODGE BALL"]');
}
function ensureHud(){
var hud = document.getElementById('cn-game-score-hud');
if (!hud) {
hud = document.createElement('div');
hud.id = 'cn-game-score-hud';
hud.innerHTML = '';
document.body.appendChild(hud);
var s = hud.style;
s.position = 'fixed';
s.zIndex = '999999';
s.display = 'none';
s.alignItems = 'center';
s.justifyContent = 'space-between';
s.gap = '8px';
s.boxSizing = 'border-box';
s.pointerEvents = 'none';
s.color = '#fff';
s.background = 'rgba(0,0,0,.78)';
s.border = '1px solid rgba(255,255,255,.55)';
s.borderRadius = '4px';
s.padding = '3px 6px';
s.fontFamily = 'monospace';
s.fontWeight = '800';
s.lineHeight = '1.1';
s.textShadow = '0 1px 2px #000';
}
var left = hud.querySelector('.cn-score-left');
var right = hud.querySelector('.cn-score-right');
if (left) left.textContent = state.score.replace('Score:', 'Score :');
if (right) right.textContent = state.best.replace('Best:', 'Best :');
return hud;
}
function positionHud(){
var hud = ensureHud();
if (!isJeuxPage()) {
hud.style.display = 'none';
return;
}
var iframe = gameIframe();
if (!iframe) {
hud.style.display = 'none';
return;
}
var canvasRect = null;
var frameWidth = 0;
try {
var doc = iframe.contentDocument;
var canvas = doc && doc.getElementById('game');
if (canvas) {
var cr = canvas.getBoundingClientRect();
canvasRect = { x: cr.x, y: cr.y, width: cr.width, height: cr.height };
frameWidth = iframe.contentWindow.innerWidth || 0;
}
} catch (e) {}
if (!canvasRect || !frameWidth) {
hud.style.display = 'none';
return;
}
var ir = iframe.getBoundingClientRect();
var scale = ir.width / frameWidth;
var leftPos = ir.left + canvasRect.x * scale;
var topPos = ir.top + canvasRect.y * scale + 3;
var width = canvasRect.width * scale;
hud.style.display = 'flex';
hud.style.left = Math.round(leftPos) + 'px';
hud.style.top = Math.round(topPos) + 'px';
hud.style.width = Math.round(width) + 'px';
hud.style.height = Math.max(18, Math.round(24 * Math.min(1, Math.max(.78, scale + .28)))) + 'px';
hud.style.fontSize = Math.max(10, Math.min(13, Math.round(width / 16))) + 'px';
}
function injectScoreBridge(){
if (!isJeuxPage()) return false;
var iframe = gameIframe();
if (!iframe) return false;
try {
var win = iframe.contentWindow;
if (!win || win.__cnScorePostPatchV1) return true;
if (!win.CanvasRenderingContext2D) return false;
win.__cnScorePostPatchV1 = true;
var proto = win.CanvasRenderingContext2D.prototype;
var originalFillText = proto.fillText;
proto.fillText = function(text, x, y, maxWidth){
try {
var txt = String(text || '');
if (/^Score:/i.test(txt)) win.parent.postMessage({ type: 'cnDodgeScoreHud', score: txt }, '*');
if (/^Best:/i.test(txt)) win.parent.postMessage({ type: 'cnDodgeScoreHud', best: txt }, '*');
} catch (e) {}
return originalFillText.apply(this, arguments);
};
return true;
} catch (e) {
return false;
}
}
window.addEventListener('message', function(e){
if (!e.data || e.data.type !== 'cnDodgeScoreHud') return;
if (e.data.score) state.score = e.data.score;
if (e.data.best) state.best = e.data.best;
positionHud();
});
function tick(){
injectScoreBridge();
positionHud();
}
window.addEventListener('resize', positionHud, { passive: true });
window.addEventListener('scroll', positionHud, { passive: true });
setInterval(tick, 500);
setTimeout(tick, 250);
setTimeout(tick, 1000);
setTimeout(tick, 2500);
})();