Update app.py
Browse files
app.py
CHANGED
@@ -132,6 +132,28 @@ def index():
|
|
132 |
#formDataPreview { max-height: 200px; overflow-y: auto; margin-bottom: 10px; }
|
133 |
.code-block { background-color: #f8f8f8; padding: 10px; border-radius: 4px; border-left: 3px solid #4CAF50; }
|
134 |
.comment { color: #666; font-style: italic; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
135 |
</style>
|
136 |
</head>
|
137 |
<body>
|
@@ -157,8 +179,9 @@ def index():
|
|
157 |
<label for="scale">Rescaling factor:</label>
|
158 |
<input type="number" id="scale" name="scale" value="2" step="0.1" min="1" max="4" required>
|
159 |
</div>
|
160 |
-
<button type="submit">Process Image</button>
|
161 |
</form>
|
|
|
162 |
<div id="result">
|
163 |
<h3>Result:</h3>
|
164 |
<div id="outputContainer" style="display: none;">
|
@@ -246,6 +269,13 @@ fetch('${apiUrl}', {
|
|
246 |
document.getElementById('uploadForm').addEventListener('submit', function(e) {
|
247 |
e.preventDefault();
|
248 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
const formData = new FormData();
|
250 |
formData.append('file', document.getElementById('file').files[0]);
|
251 |
formData.append('version', document.getElementById('version').value);
|
@@ -278,13 +308,16 @@ fetch('${apiUrl}', {
|
|
278 |
})
|
279 |
.catch(error => {
|
280 |
alert('Error: ' + error.message);
|
|
|
|
|
|
|
|
|
|
|
281 |
});
|
282 |
});
|
283 |
</script>
|
284 |
</body>
|
285 |
</html>
|
286 |
-
|
287 |
-
|
288 |
"""
|
289 |
|
290 |
if __name__ == '__main__':
|
|
|
132 |
#formDataPreview { max-height: 200px; overflow-y: auto; margin-bottom: 10px; }
|
133 |
.code-block { background-color: #f8f8f8; padding: 10px; border-radius: 4px; border-left: 3px solid #4CAF50; }
|
134 |
.comment { color: #666; font-style: italic; }
|
135 |
+
|
136 |
+
.loader {
|
137 |
+
width: 48px;
|
138 |
+
height: 48px;
|
139 |
+
border: 5px solid #4CAF50;
|
140 |
+
border-bottom-color: transparent;
|
141 |
+
border-radius: 50%;
|
142 |
+
display: inline-block;
|
143 |
+
box-sizing: border-box;
|
144 |
+
animation: rotation 1s linear infinite;
|
145 |
+
margin: 20px auto;
|
146 |
+
display: none; /* 初期状態では非表示 */
|
147 |
+
}
|
148 |
+
|
149 |
+
@keyframes rotation {
|
150 |
+
0% {
|
151 |
+
transform: rotate(0deg);
|
152 |
+
}
|
153 |
+
100% {
|
154 |
+
transform: rotate(360deg);
|
155 |
+
}
|
156 |
+
}
|
157 |
</style>
|
158 |
</head>
|
159 |
<body>
|
|
|
179 |
<label for="scale">Rescaling factor:</label>
|
180 |
<input type="number" id="scale" name="scale" value="2" step="0.1" min="1" max="4" required>
|
181 |
</div>
|
182 |
+
<button type="submit" id="submitButton">Process Image</button>
|
183 |
</form>
|
184 |
+
<div id="loading" class="loader"></div>
|
185 |
<div id="result">
|
186 |
<h3>Result:</h3>
|
187 |
<div id="outputContainer" style="display: none;">
|
|
|
269 |
document.getElementById('uploadForm').addEventListener('submit', function(e) {
|
270 |
e.preventDefault();
|
271 |
|
272 |
+
// ボタンを無効化し、ローディングを表示
|
273 |
+
const submitButton = document.getElementById('submitButton');
|
274 |
+
const loadingElement = document.getElementById('loading');
|
275 |
+
|
276 |
+
submitButton.disabled = true;
|
277 |
+
loadingElement.style.display = 'block';
|
278 |
+
|
279 |
const formData = new FormData();
|
280 |
formData.append('file', document.getElementById('file').files[0]);
|
281 |
formData.append('version', document.getElementById('version').value);
|
|
|
308 |
})
|
309 |
.catch(error => {
|
310 |
alert('Error: ' + error.message);
|
311 |
+
})
|
312 |
+
.finally(() => {
|
313 |
+
// 処理が終わったらローディングを非表示にし、ボタンを再有効化
|
314 |
+
loadingElement.style.display = 'none';
|
315 |
+
submitButton.disabled = false;
|
316 |
});
|
317 |
});
|
318 |
</script>
|
319 |
</body>
|
320 |
</html>
|
|
|
|
|
321 |
"""
|
322 |
|
323 |
if __name__ == '__main__':
|