InscriptionConnexion
Le bien connu Forum de discussions libre et anonyme 3.3-Nastasya © 2018 - 2026
Anciennement, "Votre espace de LIBERTÉS"
:camisole_zoom:


Bref... Le logo NUIT...
Image
Vous en thinkez whatent ?!

Perso il me déprime, il me ramène aux insomnies et je bloque dessus comme un débile jusqu'au petit matin!
:ss_qlf:
:jmlp-onche:
Cum My Fanatics
:pascal_nrv:
il y a un jour
Image
:jmlp-onche:
Cum My Fanatics
:pascal_nrv:
il y a un jour
Le bien connu Forum de discussions libre et anonyme 3.3-Nastasya © 2018 - 2026
Anciennement, "Votre espace de LIBERTÉS"
:camisole_zoom:


Bref... Le logo NUIT...
Image
Vous en thinkez whatent ?!

Perso il me déprime, il me ramène aux insomnies et je bloque dessus comme un débile jusqu'au petit matin!
:ss_qlf:
C'est sensé être à une certaine heure de la journée nuit ?
:Reflechis:
:marrant_champagne:
il y a un jour
C'est sensé être à une certaine heure de la journée nuit ?
:Reflechis:
Ca dépend du userscript
:SoralLunettes:

Ca peut être l'heure, ou l'état de tes yeux si on pousse un peu
:le_p:
:jmlp-onche:
Cum My Fanatics
:pascal_nrv:
il y a un jour
Le bien connu Forum de discussions libre et anonyme 3.3-Nastasya © 2018 - 2026
Anciennement, "Votre espace de LIBERTÉS"
:camisole_zoom:


Bref... Le logo NUIT...
Image
Vous en thinkez whatent ?!

Perso il me déprime, il me ramène aux insomnies et je bloque dessus comme un débile jusqu'au petit matin!
:ss_qlf:
Le logo apparait en pleine nuit?
il y a un jour
à 9h11 ça se transforme en COHEN pendant une minute , puis chaque individus qui en parle ou qui screenshot se voit shadow ban
:Lunettesrisitas:
il y a un jour
le fond des yeux blanc on dirait qu'il pleure de loin, le bonhomme onche n'a pas de blanc des yeux en plus
:Saitama_detendu_chouf_les_donzelle:

mais ça serait marrant
:poussindef:
il y a un jour
Le logo apparait en pleine nuit?
@Saitamalin

Vous voulez un userscript qui détecte la nuit pour passer onche en thème sombre avec le changement du logo ?
:AAYYAAAA:


Et @Foutreglacial , ça peut se faire pour cohen aussi
:jesus-costume:
:jmlp-onche:
Cum My Fanatics
:pascal_nrv:
il y a un jour
@Saitamalin

Vous voulez un userscript qui détecte la nuit pour passer onche en thème sombre avec le changement du logo ?
:AAYYAAAA:


Et @Foutreglacial , ça peut se faire pour cohen aussi
:jesus-costume:
je suis tout le temps en thème sombre
:chat_fdv:
il y a un jour
Ca dépend du userscript
:SoralLunettes:

Ca peut être l'heure, ou l'état de tes yeux si on pousse un peu
:le_p:
Si basée pour apparaître chaque jour +100mn après l'heure précise du crépuscule, je vote pour.
il y a un jour
@Saitamalin

Vous voulez un userscript qui détecte la nuit pour passer onche en thème sombre avec le changement du logo ?
:AAYYAAAA:


Et @Foutreglacial , ça peut se faire pour cohen aussi
:jesus-costume:
Non mais genre je pensais que tu voulais dire que maintenant genre à partir de 00H00 ou 02H00 du matin comme tu veux, HOP le logo passe en mode nuit
:Evoli_clapclap:
il y a un jour
Si basée pour apparaître chaque jour +100mn après l'heure précise du crépuscule, je vote pour.
Ca marche on peut partir sur ça, mais il faudra spécifier ses coordonnées GPS dans la source.
Le crépuscule n'est pas à la même heure à Strasbourg ou à Brest.

Par ex:
info
Voici les horaires précis (pour le crépuscule civil, c'est-à-dire le moment où le centre du Soleil passe à 6° sous l'horizon et où la luminosité commence à baisser significativement) :

Strasbourg : Fin du crépuscule à 22:12

Brest : Fin du crépuscule à 22:59


Sinon il faut faire une extension, enfin je vais voir...

Je vais déjà récupérer les URL des deux images, bon, ça ne sera pas du SVG mais ça devrait pouvoir faire l'affaire, ensuite je testerai les modif Image
Image
:jmlp-onche:
Cum My Fanatics
:pascal_nrv:
il y a un jour
Le bien connu Forum de discussions libre et anonyme 3.3-Nastasya © 2018 - 2026
Anciennement, "Votre espace de LIBERTÉS"
:camisole_zoom:


Bref... Le logo NUIT...
Image
Vous en thinkez whatent ?!

Perso il me déprime, il me ramène aux insomnies et je bloque dessus comme un débile jusqu'au petit matin!
:ss_qlf:
Comme sur Dofus
:deg:
il y a un jour
Non mais genre je pensais que tu voulais dire que maintenant genre à partir de 00H00 ou 02H00 du matin comme tu veux, HOP le logo passe en mode nuit
:Evoli_clapclap:
Ca serait bien, mais c'était plus l'expression des mes propres insomnies
:risin-shape:
:jmlp-onche:
Cum My Fanatics
:pascal_nrv:
il y a un jour
Ca marche on peut partir sur ça, mais il faudra spécifier ses coordonnées GPS dans la source.
Le crépuscule n'est pas à la même heure à Strasbourg ou à Brest.

Par ex:
info
Voici les horaires précis (pour le crépuscule civil, c'est-à-dire le moment où le centre du Soleil passe à 6° sous l'horizon et où la luminosité commence à baisser significativement) :

Strasbourg : Fin du crépuscule à 22:12

Brest : Fin du crépuscule à 22:59


Sinon il faut faire une extension, enfin je vais voir...

Je vais déjà récupérer les URL des deux images, bon, ça ne sera pas du SVG mais ça devrait pouvoir faire l'affaire, ensuite je testerai les modif Image
Image
Prenons l'heure moyenne entre ces deux extrémités
il y a un jour
Prenons l'heure moyenne entre ces deux extrémités
J'ai une première version qui permet de rentrer des coordonnées GPS dans le code ou d'autoriser la détection de position. Faut que je la teste
:le_p:
:jmlp-onche:
Cum My Fanatics
:pascal_nrv:
il y a un jour
J'ai une première version qui permet de rentrer des coordonnées GPS dans le code ou d'autoriser la détection de position. Faut que je la teste
:le_p:
Je trouve ça assez cool
il y a un jour
de quelle heure à quelle heure? c'est une bonne idée ça va me rappeler qu'il faut que je dorme au lieu de boucler ici
:chat_lait_:
Ceux qui n'aiment pas sucer des chibres féminins sont tous PD
il y a un jour
de quelle heure à quelle heure? c'est une bonne idée ça va me rappeler qu'il faut que je dorme au lieu de boucler ici
:chat_lait_:
Le premier test est passé avec les heures fixes.

@Carabidouille @Pokemon @Foutreglacial

On peut définir les heures en éditant dans les premières lignes:
const FIXED_TIME = {
start: '21:30',
end: '07:00',
};

Je vais tester le reste (c'est vibe-codé)
userscript

// ==UserScript==
// @name Onche - Logo NOCHE nuit
// @namespace onche.org https://onche.org/
// @version 1.0.0
// @description Remplace le logo ONCHE par NOCHE la nuit
// @match onche.org https://onche.org/*
// @match www.onche.org https://www.onche.org/*
// @run-at document-start
// @grant GM_addStyle
// ==/UserScript==

(() => {
'use strict';

/*
* Choisir UNE option :
*
* "fixed" => heures fixes
* "manual-gps" => coordonnées GPS définies ici
* "browser-gps" => demande la position au navigateur
*
* Le site ne demandera PAS la position si MODE !== "browser-gps".
*/
const MODE = 'fixed';

const LOGOS = {
full: 'cloud.onche.org https://cloud.onche.org/f[...]8-de1016900364!N41NKClnyQ',
reduced: 'cloud.onche.org https://cloud.onche.org/e[...]7-d0186a8adc24!K3NiAFzcy0',
};

const FIXED_TIME = {
start: '21:30',
end: '07:00',
};

const MANUAL_GPS = {
latitude: null, // Exemple : 48.8566
longitude: null, // Exemple : 2.3522
offsetMinutesAfterSunset: 30,
};

const BROWSER_GPS = {
offsetMinutesAfterSunset: 30,
cacheHours: 24,
timeoutMs: 8000,
};

const NIGHT_CLASS = 'noche-logo-night';

addStyle(`
html.${NIGHT_CLASS} header .logo .image {
background-image: url("${LOGOS.full}") !important;
background-position: center !important;
background-repeat: no-repeat !important;
background-size: contain !important;
}

@media (max-width: 880px) {
html.${NIGHT_CLASS} header .logo .image {
background-image: url("${LOGOS.reduced}") !important;
background-position: center !important;
background-repeat: no-repeat !important;
background-size: auto 28px !important;
}
}
`);

function addStyle(css) {
if (typeof GM_addStyle === 'function') {
GM_addStyle(css);
return;
}

const style = document.createElement('style');
style.textContent = css;

const append = () => {
(document.head || document.documentElement).appendChild(style);
};

if (document.head) append();
else document.addEventListener('DOMContentLoaded', append, { once: true });
}

function setNightLogo(enabled) {
document.documentElement.classList.toggle(NIGHT_CLASS, enabled);
}

function parseTimeToMinutes(value) {
const [hours, minutes] = value.split(':').map(Number);
return hours * 60 + minutes;
}

function isNightFixed(now = new Date()) {
const current = now.getHours() * 60 + now.getMinutes();
const start = parseTimeToMinutes(FIXED_TIME.start);
const end = parseTimeToMinutes(FIXED_TIME.end);

if (start < end) {
return current >= start && current < end;
}

return current >= start || current < end;
}

function dayOfYear(date) {
const start = new Date(date.getFullYear(), 0, 0);
const diff = date - start;
return Math.floor(diff / 86400000);
}

function normalizeDegrees(value) {
return ((value % 360) + 360) % 360;
}

function degToRad(value) {
return value * Math.PI / 180;
}

function radToDeg(value) {
return value * 180 / Math.PI;
}

function calculateSunTime(date, latitude, longitude, isSunrise) {
const zenith = 90.833;
const n = dayOfYear(date);
const lngHour = longitude / 15;
const approxTime = n + ((isSunrise ? 6 : 18) - lngHour) / 24;

const meanAnomaly = (0.9856 * approxTime) - 3.289;

let trueLongitude =
meanAnomaly +
(1.916 * Math.sin(degToRad(meanAnomaly))) +
(0.020 * Math.sin(degToRad(2 * meanAnomaly))) +
282.634;

trueLongitude = normalizeDegrees(trueLongitude);

let rightAscension = radToDeg(Math.atan(0.91764 * Math.tan(degToRad(trueLongitude))));
rightAscension = normalizeDegrees(rightAscension);

const lQuadrant = Math.floor(trueLongitude / 90) * 90;
const raQuadrant = Math.floor(rightAscension / 90) * 90;
rightAscension = (rightAscension + lQuadrant - raQuadrant) / 15;

const sinDec = 0.39782 * Math.sin(degToRad(trueLongitude));
const cosDec = Math.cos(Math.asin(sinDec));

const cosHour =
(Math.cos(degToRad(zenith)) - (sinDec * Math.sin(degToRad(latitude)))) /
(cosDec * Math.cos(degToRad(latitude)));

if (cosHour > 1 || cosHour < -1) {
return null;
}

let hourAngle;

if (isSunrise) {
hourAngle = 360 - radToDeg(Math.acos(cosHour));
} else {
hourAngle = radToDeg(Math.acos(cosHour));
}

hourAngle /= 15;

const localMeanTime =
hourAngle +
rightAscension -
(0.06571 * approxTime) -
6.622;

const utcHour = ((localMeanTime - lngHour) % 24 + 24) % 24;

const result = new Date(Date.UTC(
date.getFullYear(),
date.getMonth(),
date.getDate(),
0,
0,
0,
0
));

const hours = Math.floor(utcHour);
const minutes = Math.floor((utcHour - hours) * 60);
const seconds = Math.floor((((utcHour - hours) * 60) - minutes) * 60);

result.setUTCHours(hours, minutes, seconds, 0);

return result;
}

function isNightBySun(latitude, longitude, offsetMinutesAfterSunset, now = new Date()) {
const sunrise = calculateSunTime(now, latitude, longitude, true);
const sunset = calculateSunTime(now, latitude, longitude, false);

if (!sunrise || !sunset) {
console.warn('[NOCHE] Impossible de calculer lever/coucher du soleil pour ces coordonnées.');
return false;
}

const nightStart = new Date(sunset.getTime() + offsetMinutesAfterSunset * 60000);

return now >= nightStart || now < sunrise;
}

function readCachedPosition() {
try {
const raw = localStorage.getItem('noche-logo-position');
if (!raw) return null;

const cached = JSON.parse(raw);
const maxAgeMs = BROWSER_GPS.cacheHours * 60 * 60 * 1000;

if (Date.now() - cached.savedAt > maxAgeMs) {
return null;
}

if (
typeof cached.latitude !== 'number' ||
typeof cached.longitude !== 'number'
) {
return null;
}

return cached;
} catch {
return null;
}
}

function saveCachedPosition(latitude, longitude) {
try {
localStorage.setItem('noche-logo-position', JSON.stringify({
latitude,
longitude,
savedAt: Date.now(),
}));
} catch {
// Pas grave.
}
}

function getBrowserPosition() {
return new Promise((resolve, reject) => {
const cached = readCachedPosition();

if (cached) {
resolve(cached);
return;
}

if (!navigator.geolocation) {
reject(new Error('Géolocalisation non disponible.'));
return;
}

navigator.geolocation.getCurrentPosition(
position => {
const coords = {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
};

saveCachedPosition(coords.latitude, coords.longitude);
resolve(coords);
},
reject,
{
enableHighAccuracy: false,
timeout: BROWSER_GPS.timeoutMs,
maximumAge: BROWSER_GPS.cacheHours * 60 * 60 * 1000,
}
);
});
}

async function computeNight() {
if (MODE === 'fixed') {
return isNightFixed();
}

if (MODE === 'manual-gps') {
if (
typeof MANUAL_GPS.latitude !== 'number' ||
typeof MANUAL_GPS.longitude !== 'number'
) {
console.warn('[NOCHE] MODE manual-gps choisi, mais latitude/longitude non définies.');
return false;
}

return isNightBySun(
MANUAL_GPS.latitude,
MANUAL_GPS.longitude,
MANUAL_GPS.offsetMinutesAfterSunset
);
}

if (MODE === 'browser-gps') {
const position = await getBrowserPosition();

return isNightBySun(
position.latitude,
position.longitude,
BROWSER_GPS.offsetMinutesAfterSunset
);
}

console.warn(`[NOCHE] MODE inconnu : ${MODE}`);
return false;
}

async function refreshLogo() {
try {
const night = await computeNight();
setNightLogo(night);
} catch (error) {
console.warn('[NOCHE] Erreur:', error);
setNightLogo(false);
}
}

refreshLogo();

setInterval(refreshLogo, 60 * 1000);
})();
:jmlp-onche:
Cum My Fanatics
:pascal_nrv:
il y a un jour
J'aime bien
🛌
il y a un jour