Mavidart commited on
Commit
9bd490f
·
verified ·
1 Parent(s): d3038ff

no funcionan ni los botones de idiomas, ni los botones del blog (mitologìa, lectura, música, etimología, idiomas). ¿Puedes arreglarlo?

Browse files
Files changed (4) hide show
  1. components/header.js +29 -15
  2. index.html +2 -2
  3. script.js +22 -27
  4. style.css +11 -1
components/header.js CHANGED
@@ -241,34 +241,48 @@ class CustomHeader extends HTMLElement {
241
  </button>
242
  </div>
243
  </header>
244
-
245
  <script>
246
- document.addEventListener('DOMContentLoaded', function() {
247
- const languageToggle = this.shadowRoot.getElementById('languageToggle');
248
- const languageDropdown = this.shadowRoot.getElementById('languageDropdown');
 
249
 
250
- languageToggle.addEventListener('click', function() {
 
 
251
  languageDropdown.classList.toggle('show');
252
  });
253
 
254
- // Close dropdown when clicking outside
255
- document.addEventListener('click', function(event) {
256
- if (!event.target.closest('.language-selector')) {
 
 
 
 
257
  languageDropdown.classList.remove('show');
258
- }
 
 
 
 
 
259
  });
260
 
261
  // Mobile menu toggle
262
- const mobileMenuToggle = this.shadowRoot.getElementById('mobileMenuToggle');
263
- const mainNav = this.shadowRoot.querySelector('.main-nav');
264
 
265
- mobileMenuToggle.addEventListener('click', function() {
266
- mainNav.style.display = mainNav.style.display === 'none' ? 'block' : 'none';
267
- languageDropdown.style.display = languageDropdown.style.display === 'none' ? 'block' : 'none';
 
268
  });
 
 
269
  });
270
  </script>
271
- `;
272
  }
273
  }
274
 
 
241
  </button>
242
  </div>
243
  </header>
 
244
  <script>
245
+ document.addEventListener('DOMContentLoaded', () => {
246
+ const shadowRoot = this.shadowRoot;
247
+ const languageToggle = shadowRoot.getElementById('languageToggle');
248
+ const languageDropdown = shadowRoot.getElementById('languageDropdown');
249
 
250
+ // Language toggle
251
+ languageToggle.addEventListener('click', (e) => {
252
+ e.stopPropagation();
253
  languageDropdown.classList.toggle('show');
254
  });
255
 
256
+ // Language selection
257
+ shadowRoot.querySelectorAll('.lang-option').forEach(option => {
258
+ option.addEventListener('click', (e) => {
259
+ e.preventDefault();
260
+ const lang = option.getAttribute('data-lang');
261
+ localStorage.setItem('language', lang);
262
+ document.dispatchEvent(new CustomEvent('languageChange', { detail: lang }));
263
  languageDropdown.classList.remove('show');
264
+ });
265
+ });
266
+
267
+ // Close dropdown when clicking outside
268
+ document.addEventListener('click', () => {
269
+ languageDropdown.classList.remove('show');
270
  });
271
 
272
  // Mobile menu toggle
273
+ const mobileMenuToggle = shadowRoot.getElementById('mobileMenuToggle');
274
+ const mainNav = shadowRoot.querySelector('.main-nav');
275
 
276
+ mobileMenuToggle.addEventListener('click', () => {
277
+ const isHidden = mainNav.style.display === 'none';
278
+ mainNav.style.display = isHidden ? 'block' : 'none';
279
+ feather.replace();
280
  });
281
+
282
+ feather.replace();
283
  });
284
  </script>
285
+ `;
286
  }
287
  }
288
 
index.html CHANGED
@@ -82,8 +82,8 @@
82
  </div>
83
  </section>
84
  <!-- Blog Section -->
85
- <section id="pasiones" class="py-20 bg-gradient-to-b from-amber-50 to-white">
86
- <div class="container mx-auto px-4">
87
  <h2 class="text-4xl md:text-5xl font-playfair font-bold text-center mb-4 text-gray-900" data-i18n="blog_title">
88
  Más Allá de las Palabras
89
  </h2>
 
82
  </div>
83
  </section>
84
  <!-- Blog Section -->
85
+ <section id="blog" class="py-20 bg-gradient-to-b from-amber-50 to-white">
86
+ <div class="container mx-auto px-4">
87
  <h2 class="text-4xl md:text-5xl font-playfair font-bold text-center mb-4 text-gray-900" data-i18n="blog_title">
88
  Más Allá de las Palabras
89
  </h2>
script.js CHANGED
@@ -1,47 +1,42 @@
 
1
  document.addEventListener('DOMContentLoaded', function() {
2
  // Initialize language
3
  const defaultLanguage = 'es';
4
  let currentLanguage = localStorage.getItem('language') || defaultLanguage;
5
  updateLanguage(currentLanguage);
6
 
7
- // Language selector functionality
8
- const languageSelectors = document.querySelectorAll('.language-option');
9
- languageSelectors.forEach(selector => {
10
- selector.addEventListener('click', function() {
11
- const selectedLanguage = this.getAttribute('data-lang');
12
- currentLanguage = selectedLanguage;
13
- localStorage.setItem('language', selectedLanguage);
14
- updateLanguage(selectedLanguage);
15
- });
16
  });
17
- // Blog filter functionality
18
- const blogFilterButtons = document.querySelectorAll('[data-category]');
19
- const blogCategoryContents = document.querySelectorAll('[data-category-content]');
20
-
21
- blogFilterButtons.forEach(button => {
22
- button.addEventListener('click', function() {
23
- const category = this.getAttribute('data-category');
24
 
25
- // Update button states
26
- blogFilterButtons.forEach(btn => {
27
  btn.classList.remove('bg-amber-700', 'text-white');
28
  btn.classList.add('bg-white', 'text-gray-700');
29
  });
30
- this.classList.remove('bg-white', 'text-gray-700');
31
- this.classList.add('bg-amber-700', 'text-white');
32
 
33
- // Show/hide category contents
34
- blogCategoryContents.forEach(content => {
35
- if(content.getAttribute('data-category-content') === category) {
 
 
 
 
 
36
  content.classList.remove('hidden');
37
- } else {
38
- content.classList.add('hidden');
39
  }
40
  });
41
 
42
- // Replace feather icons
43
  feather.replace();
44
- });
45
  });
46
  // Form submission handling
47
  const contactForm = document.getElementById('contact-form');
 
1
+
2
  document.addEventListener('DOMContentLoaded', function() {
3
  // Initialize language
4
  const defaultLanguage = 'es';
5
  let currentLanguage = localStorage.getItem('language') || defaultLanguage;
6
  updateLanguage(currentLanguage);
7
 
8
+ // Handle language change from any component
9
+ document.addEventListener('languageChange', (e) => {
10
+ updateLanguage(e.detail);
 
 
 
 
 
 
11
  });
12
+
13
+ // Blog filter functionality with event delegation
14
+ document.addEventListener('click', function(e) {
15
+ // Handle blog category buttons
16
+ if (e.target.closest('[data-category]')) {
17
+ const button = e.target.closest('[data-category]');
18
+ const category = button.getAttribute('data-category');
19
 
20
+ // Update all buttons in the document
21
+ document.querySelectorAll('[data-category]').forEach(btn => {
22
  btn.classList.remove('bg-amber-700', 'text-white');
23
  btn.classList.add('bg-white', 'text-gray-700');
24
  });
 
 
25
 
26
+ // Update clicked button
27
+ button.classList.remove('bg-white', 'text-gray-700');
28
+ button.classList.add('bg-amber-700', 'text-white');
29
+
30
+ // Update category contents
31
+ document.querySelectorAll('[data-category-content]').forEach(content => {
32
+ content.classList.add('hidden');
33
+ if (content.getAttribute('data-category-content') === category) {
34
  content.classList.remove('hidden');
 
 
35
  }
36
  });
37
 
 
38
  feather.replace();
39
+ }
40
  });
41
  // Form submission handling
42
  const contactForm = document.getElementById('contact-form');
style.css CHANGED
@@ -83,9 +83,19 @@ body {
83
  box-shadow: 0 0 0 3px rgba(180, 83, 9, 0.3);
84
  }
85
  /* Blog Section */
86
- #pasiones {
87
  scroll-margin-top: 100px;
88
  }
 
 
 
 
 
 
 
 
 
 
89
  /* Blog Cards */
90
  #pasiones .bg-white:hover {
91
  transform: translateY(-5px);
 
83
  box-shadow: 0 0 0 3px rgba(180, 83, 9, 0.3);
84
  }
85
  /* Blog Section */
86
+ #blog {
87
  scroll-margin-top: 100px;
88
  }
89
+
90
+ /* Ensure blog buttons are clickable */
91
+ [data-category] {
92
+ cursor: pointer;
93
+ user-select: none;
94
+ }
95
+
96
+ [data-category-content] {
97
+ transition: opacity 0.3s ease;
98
+ }
99
  /* Blog Cards */
100
  #pasiones .bg-white:hover {
101
  transform: translateY(-5px);