TDN-M commited on
Commit
ee0dfb1
·
verified ·
1 Parent(s): 2c67ad6

Update script.js

Browse files
Files changed (1) hide show
  1. script.js +27 -153
script.js CHANGED
@@ -1,159 +1,33 @@
1
- const PRODUCTS = [
2
- "C1012 Glacier White", "C1026 Polar", "C3269 Ash Grey", "C3168 Silver Wave", "C1005 Milky White",
3
- "C2103 Onyx Carrara", "C2104 Massa", "C3105 Casla Cloudy", "C3146 Casla Nova", "C2240 Marquin",
4
- "C2262 Concrete (Honed)", "C3311 Calacatta Sky", "C3346 Massimo", "C4143 Mario", "C4145 Marina",
5
- "C4202 Calacatta Gold", "C1205 Casla Everest", "C4211 Calacatta Supreme", "C4204 Calacatta Classic",
6
- "C1102 Super White", "C4246 Casla Mystery", "C4345 Oro", "C4346 Luxe", "C4342 Casla Eternal",
7
- "C4221 Athena", "C4255 Calacatta Extra"
8
- ];
9
-
10
- function switchTab(tab) {
11
- document.querySelectorAll('.section').forEach(el => el.style.display = 'none');
12
- document.querySelectorAll('.tab-button').forEach(el => el.classList.remove('active'));
13
- document.getElementById(tab).style.display = 'block';
14
- document.querySelector(`button[onclick="switchTab('${tab}')"]`).classList.add('active');
15
- resetOutput();
16
- }
17
-
18
- function renderProducts(containerId) {
19
- const container = document.getElementById(containerId);
20
- PRODUCTS.forEach(product => {
21
- const button = document.createElement('button');
22
- button.type = 'button';
23
- button.className = 'product-button';
24
- button.textContent = product;
25
- button.onclick = () => button.classList.toggle('selected');
26
- container.appendChild(button);
27
- });
28
- }
29
-
30
- function resetOutput() {
31
- document.getElementById('loading').style.display = 'none';
32
- document.getElementById('error').style.display = 'none';
33
- document.getElementById('generated-image').style.display = 'none';
34
- document.getElementById('download-link').style.display = 'none';
35
- }
36
-
37
- async function generateText2Img(event) {
38
- event.preventDefault();
39
- const prompt = document.getElementById('prompt').value;
40
- const size = document.getElementById('size').value;
41
- const customSize = document.getElementById('custom-size').value;
42
- const selectedProducts = Array.from(document.querySelectorAll('#text2img-products .product-button.selected')).map(btn => btn.textContent);
43
-
44
- if (!prompt || !selectedProducts.length) {
45
- showError('Vui lòng nhập mô tả và chọn ít nhất một sản phẩm.');
46
- return;
47
- }
48
-
49
- showLoading(true);
50
- try {
51
- const response = await fetch('https://YOUR_USERNAME-caslaquartz-backend.hf.space/api/text2img', {
52
- method: 'POST',
53
- headers: { 'Content-Type': 'application/json' },
54
- body: JSON.stringify({
55
- prompt,
56
- size,
57
- custom_size: size === 'Custom size' ? customSize : null,
58
- product_codes: selectedProducts
59
- })
60
  });
61
- const data = await response.json();
62
- if (data.error) throw new Error(data.error);
63
- showImage(data.image_url);
64
- } catch (err) {
65
- showError(err.message);
66
- } finally {
67
- showLoading(false);
68
- }
69
- }
70
-
71
- async function generateImg2Img(event) {
72
- event.preventDefault();
73
- const fileInput = document.getElementById('image-upload');
74
- const position = document.getElementById('position').value;
75
- const size = document.getElementById('size-img2img').value;
76
- const customSize = document.getElementById('custom-size-img2img').value;
77
- const selectedProducts = Array.from(document.querySelectorAll('#img2img-products .product-button.selected')).map(btn => btn.textContent);
78
-
79
- if (!fileInput.files[0] || !selectedProducts.length) {
80
- showError('Vui lòng tải ảnh và chọn ít nhất một sản phẩm.');
81
- return;
82
- }
83
-
84
- showLoading(true);
85
- const formData = new FormData();
86
- formData.append('file', fileInput.files[0]);
87
- formData.append('position', position);
88
- formData.append('size', size);
89
- if (size === 'Custom size') formData.append('custom_size', customSize);
90
- selectedProducts.forEach(code => formData.append('product_codes', code));
91
 
92
- try {
93
- const response = await fetch('https://YOUR_USERNAME-caslaquartz-backend.hf.space/api/img2img', {
94
- method: 'POST',
95
- body: formData
 
 
 
 
96
  });
97
- const data = await response.json();
98
- if (data.error) throw new Error(data.error);
99
- showImage(data.image_url);
100
- } catch (err) {
101
- showError(err.message);
102
- } finally {
103
- showLoading(false);
104
- }
105
- }
106
-
107
- function showLoading(show) {
108
- document.getElementById('loading').style.display = show ? 'block' : 'none';
109
- }
110
-
111
- function showError(message) {
112
- const error = document.getElementById('error');
113
- error.textContent = message;
114
- error.style.display = 'block';
115
- setTimeout(() => error.style.display = 'none', 5000);
116
- }
117
-
118
- function showImage(url) {
119
- const img = document.getElementById('generated-image');
120
- const link = document.getElementById('download-link');
121
- img.src = url;
122
- img.style.display = 'block';
123
- link.href = url;
124
- link.style.display = 'inline-block';
125
- }
126
-
127
- // Dropzone handlers
128
- function dropHandler(event) {
129
- event.preventDefault();
130
- const file = event.dataTransfer.files[0];
131
- if (file) {
132
- document.getElementById('image-upload').files = event.dataTransfer.files;
133
- previewImage(file);
134
- }
135
- }
136
 
137
- function dragOverHandler(event) {
138
- event.preventDefault();
139
- }
140
-
141
- document.getElementById('image-upload').addEventListener('change', (e) => {
142
- if (e.target.files[0]) previewImage(e.target.files[0]);
143
  });
144
 
145
- function previewImage(file) {
146
- const preview = document.getElementById('preview-image');
147
- preview.src = URL.createObjectURL(file);
148
- preview.style.display = 'block';
149
- }
150
-
151
- // Khởi tạo
152
- document.getElementById('size').addEventListener('change', (e) => {
153
- document.getElementById('custom-size').style.display = e.target.value === 'Custom size' ? 'block' : 'none';
154
- });
155
- document.getElementById('size-img2img').addEventListener('change', (e) => {
156
- document.getElementById('custom-size-img2img').style.display = e.target.value === 'Custom size' ? 'block' : 'none';
157
- });
158
- renderProducts('text2img-products');
159
- renderProducts('img2img-products');
 
1
+ // Hiệu ứng cuộn mượt mà khi nhấp vào liên kết (nếu thêm nav sau này)
2
+ document.querySelectorAll('a[href^="#"]').forEach(anchor => {
3
+ anchor.addEventListener('click', function(e) {
4
+ e.preventDefault();
5
+ document.querySelector(this.getAttribute('href')).scrollIntoView({
6
+ behavior: 'smooth'
7
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  });
9
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
+ // Hiệu ứng xuất hiện khi cuộn
12
+ const sections = document.querySelectorAll('section');
13
+ const observer = new IntersectionObserver((entries, observer) => {
14
+ entries.forEach(entry => {
15
+ if (entry.isIntersecting) {
16
+ entry.target.classList.add('visible');
17
+ observer.unobserve(entry.target);
18
+ }
19
  });
20
+ }, { threshold: 0.1 });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
 
22
+ sections.forEach(section => {
23
+ section.classList.add('hidden');
24
+ observer.observe(section);
 
 
 
25
  });
26
 
27
+ // Thêm CSS động qua JS
28
+ const style = document.createElement('style');
29
+ style.textContent = `
30
+ .hidden { opacity: 0; transform: translateY(20px); transition: all 0.5s; }
31
+ .visible { opacity: 1; transform: translateY(0); }
32
+ `;
33
+ document.head.appendChild(style);