Update main.py
Browse files
main.py
CHANGED
|
@@ -136,6 +136,81 @@ def proxy(path):
|
|
| 136 |
button['style'] = 'display: inline-block; margin: 5px; padding: 5px 10px; background-color: #f0f0f0; border: 1px solid #ccc; border-radius: 3px; text-decoration: none; color: #333;'
|
| 137 |
img.insert_after(button)
|
| 138 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 139 |
# Add CSS styles to improve design
|
| 140 |
style_tag = soup.new_tag('style')
|
| 141 |
style_tag.string = '''
|
|
@@ -284,6 +359,55 @@ def proxy(path):
|
|
| 284 |
background: linear-gradient(to right, transparent, rgba(44, 62, 80, 0.2), transparent);
|
| 285 |
margin: 30px 0;
|
| 286 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 287 |
@media (max-width: 768px) {
|
| 288 |
body { padding: 15px; }
|
| 289 |
.breadcrumb {
|
|
@@ -301,6 +425,14 @@ def proxy(path):
|
|
| 301 |
width: 100%;
|
| 302 |
text-align: center;
|
| 303 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 304 |
}
|
| 305 |
'''
|
| 306 |
# Check if head exists, if not create it
|
|
|
|
| 136 |
button['style'] = 'display: inline-block; margin: 5px; padding: 5px 10px; background-color: #f0f0f0; border: 1px solid #ccc; border-radius: 3px; text-decoration: none; color: #333;'
|
| 137 |
img.insert_after(button)
|
| 138 |
|
| 139 |
+
# Add modal container for fullscreen image view
|
| 140 |
+
modal_div = soup.new_tag('div')
|
| 141 |
+
modal_div['id'] = 'imageModal'
|
| 142 |
+
modal_div['class'] = 'modal'
|
| 143 |
+
modal_div['style'] = 'display: none;'
|
| 144 |
+
|
| 145 |
+
modal_img = soup.new_tag('img')
|
| 146 |
+
modal_img['id'] = 'modalImage'
|
| 147 |
+
modal_img['src'] = ''
|
| 148 |
+
modal_img['alt'] = 'Fullscreen Image'
|
| 149 |
+
|
| 150 |
+
close_btn = soup.new_tag('span')
|
| 151 |
+
close_btn['class'] = 'close'
|
| 152 |
+
close_btn.string = '×'
|
| 153 |
+
|
| 154 |
+
modal_div.append(close_btn)
|
| 155 |
+
modal_div.append(modal_img)
|
| 156 |
+
|
| 157 |
+
if soup.body:
|
| 158 |
+
soup.body.append(modal_div)
|
| 159 |
+
else:
|
| 160 |
+
body_tag = soup.new_tag('body')
|
| 161 |
+
body_tag.append(modal_div)
|
| 162 |
+
if soup.html:
|
| 163 |
+
soup.html.append(body_tag)
|
| 164 |
+
else:
|
| 165 |
+
html_tag = soup.new_tag('html')
|
| 166 |
+
html_tag.append(body_tag)
|
| 167 |
+
soup.append(html_tag)
|
| 168 |
+
|
| 169 |
+
# Add JavaScript for modal functionality
|
| 170 |
+
script_tag = soup.new_tag('script')
|
| 171 |
+
script_tag.string = '''
|
| 172 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 173 |
+
var modal = document.getElementById('imageModal');
|
| 174 |
+
var modalImg = document.getElementById('modalImage');
|
| 175 |
+
var closeBtn = document.getElementsByClassName('close')[0];
|
| 176 |
+
|
| 177 |
+
// Add click event to all images
|
| 178 |
+
document.querySelectorAll('img:not(#modalImage)').forEach(function(img) {
|
| 179 |
+
img.style.cursor = 'pointer';
|
| 180 |
+
img.addEventListener('click', function() {
|
| 181 |
+
modal.style.display = 'flex';
|
| 182 |
+
modalImg.src = this.src;
|
| 183 |
+
document.body.style.overflow = 'hidden';
|
| 184 |
+
setTimeout(function() {
|
| 185 |
+
modal.classList.add('show');
|
| 186 |
+
}, 10);
|
| 187 |
+
});
|
| 188 |
+
});
|
| 189 |
+
|
| 190 |
+
// Close modal on click
|
| 191 |
+
function closeModal() {
|
| 192 |
+
modal.classList.remove('show');
|
| 193 |
+
setTimeout(function() {
|
| 194 |
+
modal.style.display = 'none';
|
| 195 |
+
document.body.style.overflow = 'auto';
|
| 196 |
+
}, 300);
|
| 197 |
+
}
|
| 198 |
+
|
| 199 |
+
closeBtn.onclick = closeModal;
|
| 200 |
+
modal.onclick = function(e) {
|
| 201 |
+
if (e.target === modal) closeModal();
|
| 202 |
+
};
|
| 203 |
+
|
| 204 |
+
// Close on escape key
|
| 205 |
+
document.addEventListener('keydown', function(e) {
|
| 206 |
+
if (e.key === 'Escape') closeModal();
|
| 207 |
+
});
|
| 208 |
+
});
|
| 209 |
+
'''
|
| 210 |
+
|
| 211 |
+
if soup.body:
|
| 212 |
+
soup.body.append(script_tag)
|
| 213 |
+
|
| 214 |
# Add CSS styles to improve design
|
| 215 |
style_tag = soup.new_tag('style')
|
| 216 |
style_tag.string = '''
|
|
|
|
| 359 |
background: linear-gradient(to right, transparent, rgba(44, 62, 80, 0.2), transparent);
|
| 360 |
margin: 30px 0;
|
| 361 |
}
|
| 362 |
+
.modal {
|
| 363 |
+
display: none;
|
| 364 |
+
position: fixed;
|
| 365 |
+
top: 0;
|
| 366 |
+
left: 0;
|
| 367 |
+
width: 100%;
|
| 368 |
+
height: 100%;
|
| 369 |
+
background: rgba(0, 0, 0, 0.9);
|
| 370 |
+
z-index: 1000;
|
| 371 |
+
justify-content: center;
|
| 372 |
+
align-items: center;
|
| 373 |
+
opacity: 0;
|
| 374 |
+
transition: opacity 0.3s ease;
|
| 375 |
+
}
|
| 376 |
+
|
| 377 |
+
.modal.show {
|
| 378 |
+
opacity: 1;
|
| 379 |
+
}
|
| 380 |
+
|
| 381 |
+
.modal img {
|
| 382 |
+
max-width: 90%;
|
| 383 |
+
max-height: 90vh;
|
| 384 |
+
margin: auto;
|
| 385 |
+
display: block;
|
| 386 |
+
box-shadow: 0 0 30px rgba(0, 0, 0, 0.5);
|
| 387 |
+
transform: scale(0.9);
|
| 388 |
+
transition: transform 0.3s ease;
|
| 389 |
+
}
|
| 390 |
+
|
| 391 |
+
.modal.show img {
|
| 392 |
+
transform: scale(1);
|
| 393 |
+
}
|
| 394 |
+
|
| 395 |
+
.close {
|
| 396 |
+
position: absolute;
|
| 397 |
+
top: 15px;
|
| 398 |
+
right: 25px;
|
| 399 |
+
color: #f1f1f1;
|
| 400 |
+
font-size: 40px;
|
| 401 |
+
font-weight: bold;
|
| 402 |
+
cursor: pointer;
|
| 403 |
+
z-index: 1001;
|
| 404 |
+
transition: color 0.3s ease;
|
| 405 |
+
}
|
| 406 |
+
|
| 407 |
+
.close:hover {
|
| 408 |
+
color: #3498db;
|
| 409 |
+
}
|
| 410 |
+
|
| 411 |
@media (max-width: 768px) {
|
| 412 |
body { padding: 15px; }
|
| 413 |
.breadcrumb {
|
|
|
|
| 425 |
width: 100%;
|
| 426 |
text-align: center;
|
| 427 |
}
|
| 428 |
+
.modal img {
|
| 429 |
+
max-width: 95%;
|
| 430 |
+
max-height: 95vh;
|
| 431 |
+
}
|
| 432 |
+
.close {
|
| 433 |
+
top: 10px;
|
| 434 |
+
right: 15px;
|
| 435 |
+
}
|
| 436 |
}
|
| 437 |
'''
|
| 438 |
# Check if head exists, if not create it
|