Plugin Directory

Changeset 3451677


Ignore:
Timestamp:
02/02/2026 03:56:48 AM (3 weeks ago)
Author:
smartparallax
Message:

Release 1.0.7 – Improved Safari compatibility

Location:
smartparallax/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • smartparallax/trunk/assets/css/shared/all.min.css

    r3442755 r3451677  
    11/*!
    2  * SmartParallax Styles v1.0.6
     2 * SmartParallax Styles v1.0.7
    33 * (c) 2025 SmartParallax — https://smartparallax.com/
    44 * Licensed under GPL-2.0-or-later
  • smartparallax/trunk/assets/js/shared/all.min.js

    r3442755 r3451677  
    11/*!
    2  * SmartParallax Scripts v1.0.6
     2 * SmartParallax Scripts v1.0.7
    33 * (c) 2025 SmartParallax — https://smartparallax.com/
    44 * Licensed under GPL-2.0-or-later
    55 */
    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  
    11/*!
    2  * SmartParallax Free v1.0.0
     2 * SmartParallax Scripts v1.0.6
    33 * (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
    125 */
     6(function () {
     7  'use strict';
    138
    14 if (!window.SPF) {
    15   window.SPF = (() => {
     9  if (!window.SPF) {
     10      window.SPF = (function () {
    1611
    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;
    2116
    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;
    2421
    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          };
    2625
    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;
    3230
    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;
    3733
    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";
    4837
    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                  }
    5241
    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 });
    59172          });
    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         }
    68173
    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  
    1313
    1414    add_action($__hook_id, function() use ($plugin_slug) {
     15
    1516        $option_key = $plugin_slug . '_menu_type';
    1617
     18        // ERLAUBTE MENÜ-POSITIONEN
    1719        $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“',
    3023        ];
    3124
    3225        $current = get_option($option_key, 'main');
    3326        $saved   = false;
     27        $old     = $current;
     28        $new     = $current;
    3429
    3530        // 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        ) {
    3735            $new_value = sanitize_key($_POST['sp_menu_type']);
    3836            if (isset($menu_positions[$new_value])) {
    3937                update_option($option_key, $new_value);
     38                $new   = $new_value;
    4039                $saved = true;
    4140            }
     
    4342        ?>
    4443        <div class="wrap">
    45             <h1>SmartParallax – Einstellungen</h1>
     44            <h1><?php echo esc_html__('Plugin – Einstellungen', $plugin_slug); ?></h1>
    4645
    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">
    4853                <?php wp_nonce_field('sp_save_menu_type', 'sp_nonce'); ?>
    4954
     
    5156                    <tr>
    5257                        <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>
    5461                        </th>
    5562                        <td>
     
    6269                            </select>
    6370                            <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); ?>
    6672                            </p>
    6773                        </td>
     
    6975                </table>
    7076
    71                 <?php submit_button('Einstellungen speichern'); ?>
     77                <?php submit_button(esc_html__('Einstellungen speichern', $plugin_slug)); ?>
    7278            </form>
    7379
    7480            <hr style="margin:30px 0;">
    7581
    76             <h2>Hinweis</h2>
    7782            <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                ); ?>
    8087            </p>
    8188        </div>
    8289        <?php
    8390
    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) {
    8893
    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';
    91103            wp_register_script($handle, false, [], false, true);
    92 
    93             // Inline-JS anhängen
    94104            wp_add_inline_script(
    95105                $handle,
    96                 "setTimeout(function(){ window.location.href = window.location.origin + '/wp-admin/'; }, 500);"
     106                "setTimeout(function(){ window.location.href = " . wp_json_encode($target) . "; }, 300);"
    97107            );
    98 
    99             // Skript in die Queue schicken
    100108            wp_enqueue_script($handle);
    101109        }
  • smartparallax/trunk/readme.txt

    r3446431 r3451677  
    66Requires at least: 6.0
    77Tested up to: 6.9
    8 Stable tag: 1.0.6
     8Stable tag: 1.0.7
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    8787== Changelog ==
    8888
     89= 1.0.7 =
     90* Improved Safari compatibility for edge-case JavaScript parsing.
     91
    8992= 1.0.6 =
    9093* Improved readme clarity and focus on ease of use and performance.
  • smartparallax/trunk/smartparallax.php

    r3442755 r3451677  
    44 * Plugin URI:  https://smartparallax.com/documentation/
    55 * Description: Lightweight GPU-accelerated scroll-linked animation system for parallax effects in WordPress.
    6  * Version:     1.0.6
     6 * Version:     1.0.7
    77 * Author:      Achim Schmid
    88 * Author URI:  https://smartparallax.com/
Note: See TracChangeset for help on using the changeset viewer.