-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
114 lines (97 loc) · 3.93 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
document.addEventListener('DOMContentLoaded', function() {
const textInput = document.getElementById('text-input');
const slugOutput = document.getElementById('slug-output');
const copyButton = document.getElementById('copy-button');
const options = {
lowercase: document.getElementById('lowercase'),
removeAccents: document.getElementById('remove-accents'),
removeSpecial: document.getElementById('remove-special'),
trimSpaces: document.getElementById('trim-spaces'),
removeNumbers: document.getElementById('remove-numbers'),
maxLength: document.getElementById('max-length'),
maxLengthValue: document.getElementById('max-length-value')
};
function createSlug(text, options) {
let slug = text;
// Convertir en minuscules si l'option est activée
if (options.lowercase) {
slug = slug.toLowerCase();
}
// Supprimer les espaces au début et à la fin
if (options.trimSpaces) {
slug = slug.trim();
}
// Remplacer les accents si l'option est activée
if (options.removeAccents) {
slug = slug.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
}
// Supprimer les chiffres si l'option est activée
if (options.removeNumbers) {
slug = slug.replace(/[0-9]/g, '');
}
// Remplacer les caractères spéciaux si l'option est activée
if (options.removeSpecial) {
slug = slug.replace(/[^a-zA-Z0-9\s-]/g, '');
}
// Remplacer les espaces par des tirets
slug = slug.replace(/\s+/g, '-');
// Nettoyer les tirets multiples
slug = slug.replace(/-+/g, '-');
// Limiter la longueur si l'option est activée
if (options.maxLength > 0 && slug.length > options.maxLength) {
slug = slug.substring(0, options.maxLength);
const lastSeparator = slug.lastIndexOf('-');
if (lastSeparator !== -1) {
slug = slug.substring(0, lastSeparator);
}
}
// Supprimer les tirets au début et à la fin
slug = slug.replace(/^-+|-+$/g, '');
return slug;
}
function generateSlugs(text) {
const currentOptions = {
lowercase: options.lowercase.checked,
removeAccents: options.removeAccents.checked,
removeSpecial: options.removeSpecial.checked,
trimSpaces: options.trimSpaces.checked,
removeNumbers: options.removeNumbers.checked,
maxLength: options.maxLength.checked ? parseInt(options.maxLengthValue.value) : 0
};
// Traiter chaque ligne séparément
const lines = text.split('\n');
const slugs = lines
.filter(line => line.trim())
.map(line => createSlug(line, currentOptions));
slugOutput.value = slugs.join('\n');
}
// Événements pour la génération des slugs
textInput.addEventListener('input', () => {
if (textInput.value.trim()) {
generateSlugs(textInput.value);
} else {
slugOutput.value = '';
}
});
// Événements pour les options
Object.values(options).forEach(option => {
option.addEventListener('change', () => {
if (textInput.value.trim()) {
generateSlugs(textInput.value);
}
});
});
// Fonction de copie
copyButton.addEventListener('click', async () => {
try {
await navigator.clipboard.writeText(slugOutput.value);
const originalText = copyButton.textContent;
copyButton.textContent = '✓';
setTimeout(() => {
copyButton.textContent = originalText;
}, 1000);
} catch (err) {
console.error('Erreur de copie:', err.message);
}
});
});