Changeset 3496620
- Timestamp:
- 04/01/2026 01:19:07 PM (14 hours ago)
- Location:
- sdaweb-social-galleri-feed/trunk
- Files:
-
- 5 edited
-
assets/css/gallery-styles.css (modified) (8 diffs)
-
assets/js/gallery-script.js (modified) (10 diffs)
-
blocks/gallery/block.json (modified) (1 diff)
-
readme.txt (modified) (2 diffs)
-
sdaweb-social-galleri-feed.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
sdaweb-social-galleri-feed/trunk/assets/css/gallery-styles.css
r3496509 r3496620 377 377 border-radius: 4px; 378 378 transition: transform 0.2s ease; 379 will-change: transform; 379 380 } 380 381 381 382 .sdawsoga-item:hover { 382 transform: scale(1.0 2);383 transform: scale(1.03); 383 384 } 384 385 … … 388 389 object-fit: cover; 389 390 display: block; 390 transition: transform 0.3s ease; 391 transition: transform 0.3s ease, opacity 0.3s ease; 392 opacity: 0; 393 } 394 395 .sdawsoga-item img.sdawsoga-loaded { 396 opacity: 1; 391 397 } 392 398 … … 410 416 ); 411 417 opacity: 0; 412 transition: opacity 0.3s ease; 418 transform: translateY(4px); 419 transition: opacity 0.25s cubic-bezier(0.16, 1, 0.3, 1), transform 0.25s cubic-bezier(0.16, 1, 0.3, 1); 413 420 display: flex; 414 421 flex-direction: column; … … 421 428 .sdawsoga-item:hover .sdawsoga-hover-overlay { 422 429 opacity: 1; 430 transform: translateY(0); 423 431 } 424 432 … … 523 531 position: fixed; 524 532 inset: 0; 525 background: rgba(0, 0, 0, 0.92);533 background: #000; 526 534 z-index: 999999; 527 535 justify-content: center; … … 1047 1055 .sdawsoga-close-btn:hover { 1048 1056 background: rgba(0, 0, 0, 0.8); 1049 transform: rotate(90deg);1057 transform: scale(1.1); 1050 1058 } 1051 1059 … … 1479 1487 .sdawsoga-swipe-hint { 1480 1488 position: fixed; 1481 bottom: 40px;1489 bottom: 120px; 1482 1490 left: 50%; 1483 1491 transform: translateX(-50%); … … 1508 1516 1509 1517 /* ===== ACCESSIBILITY ===== */ 1510 .sdawsoga-item:focus ,1511 .sdawsoga-red-btn:focus ,1512 .sdawsoga-follow-btn:focus ,1513 .sdawsoga-close-btn:focus ,1514 .sdawsoga-nav-btn:focus {1515 outline: 2px solid #b12839;1516 outline-offset: 2px;1518 .sdawsoga-item:focus-visible, 1519 .sdawsoga-red-btn:focus-visible, 1520 .sdawsoga-follow-btn:focus-visible, 1521 .sdawsoga-close-btn:focus-visible, 1522 .sdawsoga-nav-btn:focus-visible { 1523 outline: 3px solid #0095f6; 1524 outline-offset: 3px; 1517 1525 } 1518 1526 -
sdaweb-social-galleri-feed/trunk/assets/js/gallery-script.js
r3483261 r3496620 107 107 const closeBtn = el('close-btn'); 108 108 if (closeBtn) { 109 closeBtn.addEventListener('click', closeModal );109 closeBtn.addEventListener('click', closeModalWithAnimation); 110 110 } 111 111 … … 114 114 if (modal) { 115 115 modal.addEventListener('click', function(e) { 116 if (e.target === modal) closeModal ();116 if (e.target === modal) closeModalWithAnimation(); 117 117 }); 118 118 } … … 484 484 } 485 485 486 // Image 486 // Image with fade-in on load 487 487 var img = document.createElement('img'); 488 img.src = thumbnail;489 488 img.alt = altText; 490 489 img.loading = 'lazy'; 491 490 img.decoding = 'async'; 491 img.onload = function() { this.classList.add('sdawsoga-loaded'); }; 492 img.src = thumbnail; 492 493 div.appendChild(img); 493 494 … … 631 632 showSwipeHint(); 632 633 } 634 635 preloadAdjacentMedia(); 633 636 } 634 637 } … … 967 970 968 971 renderModalContent(); 969 } 970 972 preloadAdjacentMedia(); 973 } 974 971 975 /** 972 976 * Navigate between posts (mobile — always changes posts, not slides) … … 981 985 state.currentSlideIndex = 0; 982 986 renderModalContent(); 983 } 984 987 preloadAdjacentMedia(); 988 } 989 990 /** 991 * Preload adjacent images so next/prev swipe is instant 992 */ 993 function preloadAdjacentMedia() { 994 var maxPost = Math.min(state.visibleCount, state.feed.length); 995 if (maxPost < 2) return; 996 var indices = [ 997 (state.currentPostIndex + 1) % maxPost, 998 (state.currentPostIndex - 1 + maxPost) % maxPost 999 ]; 1000 for (var i = 0; i < indices.length; i++) { 1001 var post = state.feed[indices[i]]; 1002 if (!post) continue; 1003 var url = post.media_url || (post.children && post.children.data && post.children.data[0] ? post.children.data[0].media_url : null); 1004 if (url && post.media_type !== 'VIDEO') { 1005 var preload = new Image(); 1006 preload.src = url; 1007 } 1008 } 1009 } 1010 985 1011 /** 986 1012 * Load more posts … … 997 1023 state.touchStartX = e.touches[0].clientX; 998 1024 state.touchStartY = e.touches[0].clientY; 1025 state.touchStartTime = e.timeStamp; 999 1026 } 1000 1027 … … 1017 1044 1018 1045 // Horizontal swipe → navigate between slides/posts 1019 if (Math.abs(diffX) > 50 && Math.abs(diffX) > Math.abs(diffY)) { 1046 var elapsed = Math.max(1, e.timeStamp - (state.touchStartTime || 0)); 1047 var velocityX = Math.abs(diffX) / elapsed; // px per ms 1048 var isHorizontal = Math.abs(diffX) > Math.abs(diffY); 1049 if (isHorizontal && (Math.abs(diffX) > 35 || velocityX > 0.4)) { 1020 1050 navigate(diffX > 0 ? 'next' : 'prev'); 1021 1051 hideSwipeHint(); 1022 1052 return; 1023 1053 } 1024 1054 1025 1055 // Vertical swipe UP → close modal (on touch devices) 1026 if (diffY > 80 && Math.abs(diffY) > Math.abs(diffX) * 1.5) { 1056 var velocityY = Math.abs(diffY) / elapsed; 1057 if ((diffY > 60 || velocityY > 0.5) && Math.abs(diffY) > Math.abs(diffX) * 1.5) { 1027 1058 closeModalWithAnimation(); 1028 1059 return; … … 1040 1071 case 'ArrowRight': navigate('next'); break; 1041 1072 case 'ArrowLeft': navigate('prev'); break; 1042 case 'Escape': closeModal (); break;1073 case 'Escape': closeModalWithAnimation(); break; 1043 1074 } 1044 1075 } … … 1052 1083 hint.classList.add('show'); 1053 1084 clearTimeout(state.swipeHintTimeout); 1054 state.swipeHintTimeout = setTimeout(function() { hideSwipeHint(); }, 3000);1085 state.swipeHintTimeout = setTimeout(function() { hideSwipeHint(); }, 1500); 1055 1086 } 1056 1087 -
sdaweb-social-galleri-feed/trunk/blocks/gallery/block.json
r3496586 r3496620 3 3 "apiVersion": 3, 4 4 "name": "sdawsoga/gallery", 5 "version": "4.1 1.0",5 "version": "4.12.0", 6 6 "title": "Social Galleri Feed", 7 7 "category": "embed", -
sdaweb-social-galleri-feed/trunk/readme.txt
r3496586 r3496620 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 4.1 1.07 Stable tag: 4.12.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 125 125 126 126 == Changelog == 127 128 = 4.12.0 = 129 * Improved: Lightbox backdrop changed to solid black for full immersion. 130 * Improved: Grid item hover effect upgraded — snappier scale (1.03), GPU-accelerated with will-change. 131 * Improved: Hover overlay now slides up with cubic-bezier easing for a premium feel. 132 * Improved: Grid images fade in smoothly on load instead of popping in. 133 * Improved: Close button hover uses scale instead of rotate for a modern look. 134 * Improved: All modal close paths (button, backdrop click, Escape, swipe) now animate consistently. 135 * Improved: Swipe detection uses velocity + lower threshold (35px) for more responsive touch navigation. 136 * Improved: Swipe-up-to-close also uses velocity detection for natural feel. 137 * Improved: Swipe hint shows for 1.5s (was 3s) and repositioned above mobile nav buttons. 138 * Improved: Focus rings use :focus-visible with Instagram blue (#0095f6) for better keyboard accessibility. 139 * Improved: Next/previous post images preloaded in lightbox for instant navigation. 127 140 128 141 = 4.11.0 = -
sdaweb-social-galleri-feed/trunk/sdaweb-social-galleri-feed.php
r3496586 r3496620 3 3 * Plugin Name: SDAweb Social Galleri Feed 4 4 * Description: Display your Instagram feed as a responsive gallery with lightbox, instant loading, and full admin control. 5 * Version: 4.1 1.05 * Version: 4.12.0 6 6 * Requires at least: 5.8 7 7 * Requires PHP: 7.4 … … 21 21 22 22 // Define plugin constants (guarded against conflicts) 23 if (!defined('SDAWSOGA_VERSION')) define('SDAWSOGA_VERSION', '4.1 1.0');23 if (!defined('SDAWSOGA_VERSION')) define('SDAWSOGA_VERSION', '4.12.0'); 24 24 if (!defined('SDAWSOGA_PLUGIN_FILE')) define('SDAWSOGA_PLUGIN_FILE', __FILE__); 25 25 if (!defined('SDAWSOGA_PLUGIN_DIR')) define('SDAWSOGA_PLUGIN_DIR', plugin_dir_path(__FILE__));
Note: See TracChangeset
for help on using the changeset viewer.