Extension CSS/JavaScript pour moderniser l'interface de Kraland Interactif côté client.
- Node.js (version 20 ou supérieure)
- npm
npm installLe script principal kraland-userscript-main.js est généré automatiquement à partir du template et du CSS :
npm run buildCette commande :
- Lit le fichier CSS (
kraland-theme.css) - Injecte le CSS dans le template JavaScript (
kraland-userscript-template.js) - Génère le fichier final (
kraland-userscript-main.js) - Met à jour le numéro de version avec un timestamp
kraland-userscript-main.js directement. Modifiez plutôt :
kraland-userscript-template.jspour les changements JavaScriptkraland-theme.csspour les changements CSS
Puis exécutez npm run build pour régénérer le fichier principal.
Pour le développement avec rechargement automatique :
- Démarrer le serveur local :
npm run serve-
Utiliser le script de développement
kraland-userscript-dev.user.jsqui charge dynamiquement les fichiers depuis localhost:4848 -
Pour le watch automatique des changements :
npm run watchnpm run lint # Vérifie CSS et JS
npm run lint:fix # Corrige automatiquement les problèmes- Installer l'extension Tampermonkey dans votre navigateur :
-
Copier l'URL du fichier raw (exemple :
https://raw.githubusercontent.com/username/repo/main/kraland-userscript-main.js) -
Dans Tampermonkey : Utilitaires > Installer depuis une URL
-
Coller l'URL et cliquer sur Installer
-
Tampermonkey vérifiera automatiquement les mises à jour selon l'intervalle configuré
-
Ouvrir Tampermonkey > Tableau de bord
-
Aller dans l'onglet Paramètres (icône d'engrenage)
-
Trouver la section "Mise à jour des scripts" :
- Vérifier les mises à jour : ✓ Activer
- Intervalle de vérification : Sélectionner "Tous les 2 jours" (48h)
- Mettre à jour automatiquement : ✓ Activer (installe automatiquement les nouvelles versions)
-
Sauvegarder
Tampermonkey vérifiera désormais toutes les 48h si une nouvelle version est disponible et l'installera automatiquement.
À tout moment, vous pouvez forcer la vérification :
- Clic droit sur l'icône Tampermonkey > "Rechercher les mises à jour des scripts utilisateur"
-
Connectez-vous sur www.kraland.org
-
Naviguez vers Profil > Interface (
/profil/interface) -
Descendez jusqu'à la section "Thème de base" du site officiel
-
Juste au-dessus, vous trouverez une nouvelle section "Thème Tampermonkey" avec un formulaire de sélection
Le script propose 9 variantes de thème basées sur les différentes nations de Kraland :
| Thème |
|---|
| République de Kraland |
| Empire Brun |
| Paladium Corporation |
| Théocratie Seelienne |
| Paradigme Vert |
| Khanat Elmérien |
| Confédération Libre |
| Royaume de Ruthvénie |
| Désactiver |
Les préférences sont sauvegardées automatiquement dans le localStorage du navigateur et restent actives entre les sessions.
Voici quelques captures d'écran des variantes de thème (fichiers dans screenshots/) :
Le userscript kraland-userscript-main.js est une version autonome qui contient :
- CSS inline
- Logique JavaScript
// Le CSS est stocké dans une constante
const BUNDLED_CSS = `/* 1050+ lignes de CSS optimisé */`;
// Au chargement de la page
function applyThemeInline(cssText) {
let style = document.getElementById('kraland-theme-style');
if (!style) {
style = document.createElement('style');
style.id = 'kraland-theme-style';
document.head.appendChild(style);
}
style.textContent = cssText;
}Points clés :
- Le CSS est injecté via un élément
<style>dynamique dans le<head> - L'ID de l'élément est
kraland-theme-style - Le CSS utilise des variables CSS (
--kr-primary,--kr-highlight, etc.) pour faciliter les variantes
Chaque variante modifie simplement quelques variables CSS :
/* Variables par défaut */
:root {
--kr-primary: #8b0f0e;
--kr-highlight: #c41e3a;
--kr-gold: #C69100;
}
/* Variante Empire Brun */
html.kr-theme-variant-empire-brun {
--kr-primary: #5E3B2D;
--kr-highlight: #C69100;
}Le script JavaScript ajoute dynamiquement la classe correspondante à l'élément <html> :
document.documentElement.classList.add('kr-theme-variant-empire-brun');Le script ne fait pas que du CSS, il améliore aussi le HTML :
function replaceNavbarBrand() {
const brand = document.querySelector('.navbar-brand');
const variant = localStorage.getItem('kr-theme-variant') || 'kraland';
const logoIndex = getLogoIndexForVariant(variant); // 1-8 selon la variante
const img = document.createElement('img');
img.src = `http://img7.kraland.org/2/world/logo${logoIndex}.gif`;
brand.innerHTML = '';
brand.appendChild(img);
}function ensureFooterSticky() {
const footer = document.querySelector('footer');
// Place le bouton "Remonter" dans le footer
const backToTop = document.querySelector('a[href="#top"]');
if (backToTop) footer.appendChild(backToTop);
// Ajoute du padding au body pour éviter le chevauchement
document.body.style.paddingBottom = '60px';
}function relocateKramailToLeft() {
// Déplace "Membres actifs", "Personnages actifs", "Personnes en ligne"
// de la colonne droite (#col-t) vers la colonne gauche (#col-left)
const stats = document.querySelectorAll('.ds_users, .ds_characters, .ds_online');
const leftColumn = document.getElementById('col-left');
stats.forEach(stat => leftColumn.appendChild(stat));
}- Remplacement des images
<img>par des symboles Unicode dans des<span>avecaria-hidden - Conversion des images de sexe (♂/♀) en texte stylé
- Ajout de labels ARIA sur les boutons
Le script surveille les modifications du DOM et les navigations :
// MutationObserver pour surveiller la suppression du style
const observer = new MutationObserver(() => {
if (!document.getElementById('kraland-theme-style')) {
applyThemeInline(BUNDLED_CSS); // Réinjecter
}
});
observer.observe(document.documentElement, { childList: true, subtree: true });
// Intercepter les navigations SPA (pushState/popstate)
const originalPushState = history.pushState;
history.pushState = function() {
originalPushState.apply(this, arguments);
setTimeout(() => ensureTheme(), 250);
};L'interface est insérée dynamiquement sur /profil/interface :
function insertTampermonkeyThemeUI() {
// Trouve le titre "Thème de base"
const heading = Array.from(document.querySelectorAll('h4'))
.find(h => h.textContent.includes('Thème de base'));
// Insère un formulaire radio avant cette section
const form = document.createElement('form');
form.innerHTML = `
<div class="radio">
<label>
<input type="radio" name="kr-theme" value="kraland">
République de Kraland
</label>
</div>
<!-- ... autres options ... -->
`;
// Écouter les changements
form.addEventListener('change', (e) => {
const variant = e.target.value;
applyThemeVariant(variant);
});
}Ce script est un projet personnel non affilié à Kraland. Pour toute question :
- Ouvrir une issue sur le repository GitHub
Usage personnel pour Kraland Interactif.








