Changeset 3451677
- Timestamp:
- 02/02/2026 03:56:48 AM (3 weeks ago)
- Location:
- smartparallax/trunk
- Files:
-
- 6 edited
-
assets/css/shared/all.min.css (modified) (1 diff)
-
assets/js/shared/all.min.js (modified) (1 diff)
-
assets/js/shared/parallax.js (modified) (1 diff)
-
includes/admin/settings.php (modified) (5 diffs)
-
readme.txt (modified) (2 diffs)
-
smartparallax.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
smartparallax/trunk/assets/css/shared/all.min.css
r3442755 r3451677 1 1 /*! 2 * SmartParallax Styles v1.0. 62 * SmartParallax Styles v1.0.7 3 3 * (c) 2025 SmartParallax — https://smartparallax.com/ 4 4 * Licensed under GPL-2.0-or-later -
smartparallax/trunk/assets/js/shared/all.min.js
r3442755 r3451677 1 1 /*! 2 * SmartParallax Scripts v1.0. 62 * SmartParallax Scripts v1.0.7 3 3 * (c) 2025 SmartParallax — https://smartparallax.com/ 4 4 * Licensed under GPL-2.0-or-later 5 5 */ 6 (function(){'use strict'; if(!window.SPF){window.SPF=(()=>{const DEFAULT_BG_SPEED=0.0;const DEFAULT_HEAD_SPEED=0.0;const MOVE_CLAMP=10.0;const CENTER_OFFSET=0.0;const wraps=[...document.querySelectorAll(".parallax-image,.parallax-container")];if(!wraps.length)return true;const clamp=(v,a,b)=> Math.max(a,Math.min(b,v));for(const w of wraps){if(!w.classList.contains("parallax-image"))continue;const cs=getComputedStyle(w);const bg=cs.backgroundImage;if(bg && bg !=="none" && !w.querySelector(".shp-parallax-bg")){const l=document.createElement("div");l.className="shp-parallax-bg";if(w.classList.contains("parallax-top"))l.classList.add("parallax-top");Object.assign(l.style,{position:"absolute",left:0,right:0,top:0,bottom:0,backgroundImage:bg,backgroundSize:cs.backgroundSize,backgroundPosition:cs.backgroundPosition,backgroundRepeat:cs.backgroundRepeat,transform:"translateZ(0)",backfaceVisibility:"hidden"});const m=w.className.match(/parallax-(-?\d{1,2})/);const sAbs=Math.abs(parseInt(m?.[1] || 0,10)/10);const reserve=Math.round(sAbs*100);if(w.classList.contains("parallax-x")){Object.assign(l.style,{height:"100%",left:`-${reserve}vw`,right:`-${reserve}vw`,width:`calc(100%+${reserve*2}vw)`});}else{Object.assign(l.style,{width:"100%",top:`-${reserve}vh`,bottom:`-${reserve}vh`,height:`calc(100%+${reserve*2}vh)`});}w.appendChild(l);w.style.backgroundImage="none";w.style.position="relative";w.style.overflow="hidden";}}const relFactorViewport=el=>{const r=el.getBoundingClientRect(),vh=window.innerHeight;return(((r.top+r.height/2)-vh/2)/(vh+r.height))*2+CENTER_OFFSET;};const speedFromClass=(el,fallback)=>{for(const c of el.classList){const m=c.match(/^parallax-(-?\d{1,2})(-[s])?$/);if(m)return{speed:parseInt(m[1],10)/10,stop:m[2]==="-s"};}return{speed:fallback,stop:false};};const adjustedSpeed=(w,rect,s)=> w.classList.contains("parallax-x")? s.speed*rect.width/rect.height:s.speed;const applyTransform=(el,tx,ty)=>{el.style.transform=`translate3d(${tx.toFixed(3)}px,${ty.toFixed(3)}px,0)`;};function update(){const vh=window.innerHeight;wraps.forEach(w=>{const rect=w.getBoundingClientRect();if(rect.bottom < 0 || rect.top > vh)return;const baseR=relFactorViewport(w);const sSpec=speedFromClass(w,DEFAULT_BG_SPEED);const layer=w.classList.contains("parallax-container")? w:(w.querySelector(".shp-parallax-bg")|| w.querySelector("video"));if(!layer)return;let rel=baseR;if(sSpec.stop && baseR < 0)rel=0;const m=adjustedSpeed(w,rect,sSpec);let tx=0,ty=0;if(m !==0){const move=clamp(-rel*rect.height*m,-rect.height*MOVE_CLAMP,rect.height*MOVE_CLAMP);if(w.classList.contains("parallax-x"))tx=move;else ty=move;}applyTransform(layer,tx,ty);});}function loop(){update();requestAnimationFrame(loop);}document.addEventListener("DOMContentLoaded",()=>{update();loop();window.addEventListener("resize",update,{passive:true});});return true;})();};})();6 (function(){'use strict';(function(){'use strict';if(!window.SPF){window.SPF=(function(){const DEFAULT_BG_SPEED=0.0;const DEFAULT_HEAD_SPEED=0.0;const MOVE_CLAMP=10.0;const CENTER_OFFSET=0.0;const wraps=[].slice.call(document.querySelectorAll(".parallax-image,.parallax-container"));if(!wraps.length)return true;const clamp=function(v,a,b){return Math.max(a,Math.min(b,v));};for(var i=0;i < wraps.length;i++){var w=wraps[i];if(!w.classList.contains("parallax-image"))continue;var cs=getComputedStyle(w);var bg=cs.backgroundImage;if(bg && bg !=="none" && !w.querySelector(".shp-parallax-bg")){var l=document.createElement("div");l.className="shp-parallax-bg";if(w.classList.contains("parallax-top")){l.classList.add("parallax-top");}Object.assign(l.style,{position:"absolute",left:0,right:0,top:0,bottom:0,backgroundImage:bg,backgroundSize:cs.backgroundSize,backgroundPosition:cs.backgroundPosition,backgroundRepeat:cs.backgroundRepeat,transform:"translateZ(0)",backfaceVisibility:"hidden"});var m=w.className.match(/parallax-(-?\d{1,2})/);var speedVal=(m && m[1])? m[1]:0;var sAbs=Math.abs(parseInt(speedVal,10)/10);var reserve=Math.round(sAbs*100);if(w.classList.contains("parallax-x")){Object.assign(l.style,{height:"100%",left:"-"+reserve+"vw",right:"-"+reserve+"vw",width:"calc(100%+"+(reserve*2)+"vw)"});}else{Object.assign(l.style,{width:"100%",top:"-"+reserve+"vh",bottom:"-"+reserve+"vh",height:"calc(100%+"+(reserve*2)+"vh)"});}w.appendChild(l);w.style.backgroundImage="none";w.style.position="relative";w.style.overflow="hidden";}}const relFactorViewport=function(el){var r=el.getBoundingClientRect();var vh=window.innerHeight;return(((r.top+r.height/2)-vh/2)/(vh+r.height))*2+CENTER_OFFSET;};const speedFromClass=function(el,fallback){for(var i=0;i < el.classList.length;i++){var c=el.classList[i];var m=c.match(/^parallax-(-?\d{1,2})(-[s])?$/);if(m){return{speed:parseInt(m[1],10)/10,stop:m[2]==="-s"};}}return{speed:fallback,stop:false};};const adjustedSpeed=function(w,rect,s){return w.classList.contains("parallax-x")? s.speed*rect.width/rect.height:s.speed;};const applyTransform=function(el,tx,ty){el.style.transform="translate3d("+tx.toFixed(3)+"px,"+ty.toFixed(3)+"px,0)";};function update(){var vh=window.innerHeight;wraps.forEach(function(w){var rect=w.getBoundingClientRect();if(rect.bottom < 0 || rect.top > vh)return;var baseR=relFactorViewport(w);var sSpec=speedFromClass(w,DEFAULT_BG_SPEED);var layer=w.classList.contains("parallax-container")? w:(w.querySelector(".shp-parallax-bg")|| w.querySelector("video"));if(!layer)return;var rel=baseR;if(sSpec.stop && baseR < 0)rel=0;var m=adjustedSpeed(w,rect,sSpec);var tx=0,ty=0;if(m !==0){var move=clamp(-rel*rect.height*m,-rect.height*MOVE_CLAMP,rect.height*MOVE_CLAMP);if(w.classList.contains("parallax-x"))tx=move;else ty=move;}applyTransform(layer,tx,ty);});}function loop(){update();requestAnimationFrame(loop);}document.addEventListener("DOMContentLoaded",function(){update();loop();window.addEventListener("resize",update,{passive:true});});return true;})();}})();})(); -
smartparallax/trunk/assets/js/shared/parallax.js
r3442755 r3451677 1 1 /*! 2 * SmartParallax Free v1.0.02 * SmartParallax Scripts v1.0.6 3 3 * (c) 2025 SmartParallax — https://smartparallax.com/ 4 * License: GPL-2.0-or-later 5 * 6 * Basisfunktionen: 7 * - parallax-image / parallax-container 8 * - Bewegung über Klassen: parallax-[-10…10], parallax--[-10…10] 9 * - parallax-x für horizontale Bewegung 10 * - -s stoppt Bewegung in eine Richtung 11 * - automatische Layer-Größenanpassung 4 * Licensed under GPL-2.0-or-later 12 5 */ 6 (function () { 7 'use strict'; 13 8 14 if (!window.SPF) {15 window.SPF = (() =>{9 if (!window.SPF) { 10 window.SPF = (function () { 16 11 17 const DEFAULT_BG_SPEED = 0.0;18 const DEFAULT_HEAD_SPEED = 0.0;19 const MOVE_CLAMP = 10.0;20 const CENTER_OFFSET = 0.0;12 const DEFAULT_BG_SPEED = 0.0; 13 const DEFAULT_HEAD_SPEED = 0.0; 14 const MOVE_CLAMP = 10.0; 15 const CENTER_OFFSET = 0.0; 21 16 22 const wraps = [...document.querySelectorAll(".parallax-image, .parallax-container")]; 23 if (!wraps.length) return true; 17 const wraps = [].slice.call( 18 document.querySelectorAll(".parallax-image,.parallax-container") 19 ); 20 if (!wraps.length) return true; 24 21 25 const clamp = (v, a, b) => Math.max(a, Math.min(b, v)); 22 const clamp = function (v, a, b) { 23 return Math.max(a, Math.min(b, v)); 24 }; 26 25 27 /* ---------- Hintergrund-Layer erzeugen & skalieren ---------- */ 28 for (const w of wraps) { 29 if (!w.classList.contains("parallax-image")) continue; 30 const cs = getComputedStyle(w); 31 const bg = cs.backgroundImage; 26 /* ---------- Hintergrund-Layer ---------- */ 27 for (var i = 0; i < wraps.length; i++) { 28 var w = wraps[i]; 29 if (!w.classList.contains("parallax-image")) continue; 32 30 33 if (bg && bg !== "none" && !w.querySelector(".shp-parallax-bg")) { 34 const l = document.createElement("div"); 35 l.className = "shp-parallax-bg"; 36 if (w.classList.contains("parallax-top")) l.classList.add("parallax-top"); 31 var cs = getComputedStyle(w); 32 var bg = cs.backgroundImage; 37 33 38 Object.assign(l.style, { 39 position: "absolute", 40 left: 0, right: 0, top: 0, bottom: 0, 41 backgroundImage: bg, 42 backgroundSize: cs.backgroundSize, 43 backgroundPosition: cs.backgroundPosition, 44 backgroundRepeat: cs.backgroundRepeat, 45 transform: "translateZ(0)", 46 backfaceVisibility: "hidden" 47 }); 34 if (bg && bg !== "none" && !w.querySelector(".shp-parallax-bg")) { 35 var l = document.createElement("div"); 36 l.className = "shp-parallax-bg"; 48 37 49 const m = w.className.match(/parallax-(-?\d{1,2})/);50 const sAbs = Math.abs(parseInt(m?.[1] || 0, 10) / 10);51 const reserve = Math.round(sAbs * 100);38 if (w.classList.contains("parallax-top")) { 39 l.classList.add("parallax-top"); 40 } 52 41 53 if (w.classList.contains("parallax-x")) { 54 Object.assign(l.style, { 55 height: "100%", 56 left: `-${reserve}vw`, 57 right: `-${reserve}vw`, 58 width: `calc(100% + ${reserve * 2}vw)` 42 Object.assign(l.style, { 43 position: "absolute", 44 left: 0, 45 right: 0, 46 top: 0, 47 bottom: 0, 48 backgroundImage: bg, 49 backgroundSize: cs.backgroundSize, 50 backgroundPosition: cs.backgroundPosition, 51 backgroundRepeat: cs.backgroundRepeat, 52 transform: "translateZ(0)", 53 backfaceVisibility: "hidden" 54 }); 55 56 var m = w.className.match(/parallax-(-?\d{1,2})/); 57 58 /* 🔒 Safari-safe Ersatz für m?.[1] */ 59 var speedVal = (m && m[1]) ? m[1] : 0; 60 var sAbs = Math.abs(parseInt(speedVal, 10) / 10); 61 62 var reserve = Math.round(sAbs * 100); 63 64 if (w.classList.contains("parallax-x")) { 65 Object.assign(l.style, { 66 height: "100%", 67 left: "-" + reserve + "vw", 68 right: "-" + reserve + "vw", 69 width: "calc(100%+" + (reserve * 2) + "vw)" 70 }); 71 } else { 72 Object.assign(l.style, { 73 width: "100%", 74 top: "-" + reserve + "vh", 75 bottom: "-" + reserve + "vh", 76 height: "calc(100%+" + (reserve * 2) + "vh)" 77 }); 78 } 79 80 w.appendChild(l); 81 w.style.backgroundImage = "none"; 82 w.style.position = "relative"; 83 w.style.overflow = "hidden"; 84 } 85 } 86 87 /* ---------- Viewport Faktor ---------- */ 88 const relFactorViewport = function (el) { 89 var r = el.getBoundingClientRect(); 90 var vh = window.innerHeight; 91 return (((r.top + r.height / 2) - vh / 2) / (vh + r.height)) * 2 + CENTER_OFFSET; 92 }; 93 94 /* ---------- Speed Parser ---------- */ 95 const speedFromClass = function (el, fallback) { 96 for (var i = 0; i < el.classList.length; i++) { 97 var c = el.classList[i]; 98 var m = c.match(/^parallax-(-?\d{1,2})(-[s])?$/); 99 if (m) { 100 return { 101 speed: parseInt(m[1], 10) / 10, 102 stop: m[2] === "-s" 103 }; 104 } 105 } 106 return { 107 speed: fallback, 108 stop: false 109 }; 110 }; 111 112 const adjustedSpeed = function (w, rect, s) { 113 return w.classList.contains("parallax-x") 114 ? s.speed * rect.width / rect.height 115 : s.speed; 116 }; 117 118 const applyTransform = function (el, tx, ty) { 119 el.style.transform = 120 "translate3d(" + 121 tx.toFixed(3) + "px," + 122 ty.toFixed(3) + "px,0)"; 123 }; 124 125 /* ---------- Update ---------- */ 126 function update() { 127 var vh = window.innerHeight; 128 129 wraps.forEach(function (w) { 130 var rect = w.getBoundingClientRect(); 131 if (rect.bottom < 0 || rect.top > vh) return; 132 133 var baseR = relFactorViewport(w); 134 var sSpec = speedFromClass(w, DEFAULT_BG_SPEED); 135 136 var layer = w.classList.contains("parallax-container") 137 ? w 138 : (w.querySelector(".shp-parallax-bg") || w.querySelector("video")); 139 140 if (!layer) return; 141 142 var rel = baseR; 143 if (sSpec.stop && baseR < 0) rel = 0; 144 145 var m = adjustedSpeed(w, rect, sSpec); 146 var tx = 0, ty = 0; 147 148 if (m !== 0) { 149 var move = clamp( 150 -rel * rect.height * m, 151 -rect.height * MOVE_CLAMP, 152 rect.height * MOVE_CLAMP 153 ); 154 if (w.classList.contains("parallax-x")) tx = move; 155 else ty = move; 156 } 157 158 applyTransform(layer, tx, ty); 159 }); 160 } 161 162 /* ---------- Loop ---------- */ 163 function loop() { 164 update(); 165 requestAnimationFrame(loop); 166 } 167 168 document.addEventListener("DOMContentLoaded", function () { 169 update(); 170 loop(); 171 window.addEventListener("resize", update, { passive: true }); 59 172 }); 60 } else {61 Object.assign(l.style, {62 width: "100%",63 top: `-${reserve}vh`,64 bottom: `-${reserve}vh`,65 height: `calc(100% + ${reserve * 2}vh)`66 });67 }68 173 69 w.appendChild(l); 70 w.style.backgroundImage = "none"; 71 w.style.position = "relative"; 72 w.style.overflow = "hidden"; 73 } 74 } 75 76 /* ---------- Mathe & Parser ---------- */ 77 const relFactorViewport = el => { 78 const r = el.getBoundingClientRect(), vh = window.innerHeight; 79 return (((r.top + r.height / 2) - vh / 2) / (vh + r.height)) * 2 + CENTER_OFFSET; 80 }; 81 82 const speedFromClass = (el, fallback) => { 83 for (const c of el.classList) { 84 const m = c.match(/^parallax-(-?\d{1,2})(-[s])?$/); 85 if (m) return { speed: parseInt(m[1], 10) / 10, stop: m[2] === "-s" }; 86 } 87 return { speed: fallback, stop: false }; 88 }; 89 90 const adjustedSpeed = (w, rect, s) => 91 w.classList.contains("parallax-x") 92 ? s.speed * rect.width / rect.height 93 : s.speed; 94 95 const applyTransform = (el, tx, ty) => { 96 el.style.transform = `translate3d(${tx.toFixed(3)}px, ${ty.toFixed(3)}px, 0)`; 97 }; 98 99 /* ---------- Core Update ---------- */ 100 function update() { 101 const vh = window.innerHeight; 102 103 wraps.forEach(w => { 104 const rect = w.getBoundingClientRect(); 105 if (rect.bottom < 0 || rect.top > vh) return; 106 107 const baseR = relFactorViewport(w); 108 const sSpec = speedFromClass(w, DEFAULT_BG_SPEED); 109 const layer = w.classList.contains("parallax-container") 110 ? w 111 : (w.querySelector(".shp-parallax-bg") || w.querySelector("video")); 112 113 if (!layer) return; 114 115 let rel = baseR; 116 if (sSpec.stop && baseR < 0) rel = 0; 117 118 const m = adjustedSpeed(w, rect, sSpec); 119 let tx = 0, ty = 0; 120 121 if (m !== 0) { 122 const move = clamp( 123 -rel * rect.height * m, 124 -rect.height * MOVE_CLAMP, 125 rect.height * MOVE_CLAMP 126 ); 127 if (w.classList.contains("parallax-x")) tx = move; 128 else ty = move; 129 } 130 131 applyTransform(layer, tx, ty); 132 }); 133 } 134 135 /* ---------- Loop ---------- */ 136 function loop() { 137 update(); 138 requestAnimationFrame(loop); 139 } 140 141 document.addEventListener("DOMContentLoaded", () => { 142 update(); 143 loop(); 144 window.addEventListener("resize", update, { passive: true }); 145 }); 146 147 return true; 148 })(); 149 } 174 return true; 175 })(); 176 } 177 })(); -
smartparallax/trunk/includes/admin/settings.php
r3401572 r3451677 13 13 14 14 add_action($__hook_id, function() use ($plugin_slug) { 15 15 16 $option_key = $plugin_slug . '_menu_type'; 16 17 18 // ERLAUBTE MENÜ-POSITIONEN 17 19 $menu_positions = [ 18 'main' => 'Eigenes Hauptmenü (Standard)', 19 'options' => 'Unter „Einstellungen“', 20 'tools' => 'Unter „Werkzeuge“', 21 'theme' => 'Unter „Design“', 22 'plugins' => 'Unter „Plugins“', 23 'users' => 'Unter „Benutzer“', 24 'profile' => 'Unter „Profil“', 25 'media' => 'Unter „Medien“', 26 'posts' => 'Unter „Beiträge“', 27 'pages' => 'Unter „Seiten“', 28 'comments' => 'Unter „Kommentare“', 29 'dashboard' => 'Unter „Dashboard“' 20 'main' => 'Eigenes Hauptmenü (Standard)', 21 'options' => 'Unter „Einstellungen“', 22 'tools' => 'Unter „Werkzeuge“', 30 23 ]; 31 24 32 25 $current = get_option($option_key, 'main'); 33 26 $saved = false; 27 $old = $current; 28 $new = $current; 34 29 35 30 // Formularverarbeitung 36 if (!empty($_POST['sp_menu_type']) && check_admin_referer('sp_save_menu_type', 'sp_nonce')) { 31 if ( 32 isset($_POST['sp_menu_type']) && 33 check_admin_referer('sp_save_menu_type', 'sp_nonce') 34 ) { 37 35 $new_value = sanitize_key($_POST['sp_menu_type']); 38 36 if (isset($menu_positions[$new_value])) { 39 37 update_option($option_key, $new_value); 38 $new = $new_value; 40 39 $saved = true; 41 40 } … … 43 42 ?> 44 43 <div class="wrap"> 45 <h1> SmartParallax – Einstellungen</h1>44 <h1><?php echo esc_html__('Plugin – Einstellungen', $plugin_slug); ?></h1> 46 45 47 <form method="post" action=""> 46 <?php if ($saved && $old === $new): ?> 47 <div class="notice notice-success is-dismissible"> 48 <p><?php echo esc_html__('Einstellungen gespeichert.', $plugin_slug); ?></p> 49 </div> 50 <?php endif; ?> 51 52 <form method="post"> 48 53 <?php wp_nonce_field('sp_save_menu_type', 'sp_nonce'); ?> 49 54 … … 51 56 <tr> 52 57 <th scope="row"> 53 <label for="sp_menu_type">Menü-Position</label> 58 <label for="sp_menu_type"> 59 <?php echo esc_html__('Menü-Position', $plugin_slug); ?> 60 </label> 54 61 </th> 55 62 <td> … … 62 69 </select> 63 70 <p class="description"> 64 Wähle, wo SmartParallax im Admin-Menü erscheinen soll.<br> 65 Nach dem Speichern wird WordPress vollständig neu geladen. 71 <?php echo esc_html__('Wähle, wo das Plugin im Admin-Menü erscheinen soll.', $plugin_slug); ?> 66 72 </p> 67 73 </td> … … 69 75 </table> 70 76 71 <?php submit_button( 'Einstellungen speichern'); ?>77 <?php submit_button(esc_html__('Einstellungen speichern', $plugin_slug)); ?> 72 78 </form> 73 79 74 80 <hr style="margin:30px 0;"> 75 81 76 <h2>Hinweis</h2>77 82 <p> 78 Nach der Änderung des Menüorts muss WordPress komplett neu geladen werden,<br> 79 um das neue Menü korrekt zu registrieren. 83 <?php echo esc_html__( 84 'Nach einer Änderung der Menü-Position wird das Admin-Menü neu aufgebaut.', 85 $plugin_slug 86 ); ?> 80 87 </p> 81 88 </div> 82 89 <?php 83 90 84 // --------------------------------------------------------- 85 // WP-KONFORMES INLINE-SCRIPT (anstelle des <script>-Tags) 86 // --------------------------------------------------------- 87 if ($saved) { 91 // JS-Redirect NUR bei Menü-Änderung 92 if ($saved && $old !== $new) { 88 93 89 // Dummy-Handle registrieren (notwendig für wp_add_inline_script) 90 $handle = $plugin_slug . '-settings-inline-reload'; 94 if ($new === 'main') { 95 $target = admin_url('admin.php?page=' . $plugin_slug . '_settings'); 96 } elseif ($new === 'options') { 97 $target = admin_url('options-general.php?page=' . $plugin_slug . '_page&tab=settings'); 98 } else { // tools 99 $target = admin_url('tools.php?page=' . $plugin_slug . '_page&tab=settings'); 100 } 101 102 $handle = $plugin_slug . '-menu-relocate'; 91 103 wp_register_script($handle, false, [], false, true); 92 93 // Inline-JS anhängen94 104 wp_add_inline_script( 95 105 $handle, 96 "setTimeout(function(){ window.location.href = window.location.origin + '/wp-admin/'; }, 500);"106 "setTimeout(function(){ window.location.href = " . wp_json_encode($target) . "; }, 300);" 97 107 ); 98 99 // Skript in die Queue schicken100 108 wp_enqueue_script($handle); 101 109 } -
smartparallax/trunk/readme.txt
r3446431 r3451677 6 6 Requires at least: 6.0 7 7 Tested up to: 6.9 8 Stable tag: 1.0. 68 Stable tag: 1.0.7 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 87 87 == Changelog == 88 88 89 = 1.0.7 = 90 * Improved Safari compatibility for edge-case JavaScript parsing. 91 89 92 = 1.0.6 = 90 93 * Improved readme clarity and focus on ease of use and performance. -
smartparallax/trunk/smartparallax.php
r3442755 r3451677 4 4 * Plugin URI: https://smartparallax.com/documentation/ 5 5 * Description: Lightweight GPU-accelerated scroll-linked animation system for parallax effects in WordPress. 6 * Version: 1.0. 66 * Version: 1.0.7 7 7 * Author: Achim Schmid 8 8 * Author URI: https://smartparallax.com/
Note: See TracChangeset
for help on using the changeset viewer.