Plugin Directory

Changeset 3780354


Ignore:
Timestamp:
11/02/2026 05:08:07 PM (21 hours ago)
Author:
misticuantum
Message:

2.0.2

This update lets visitors resize floating pop-up windows by dragging a corner.

Location:
misticease
Files:
295 added
27 edited

Legend:

Unmodified
Added
Removed
  • misticease/trunk/inc/app/css/misticease.css

    r3773174 r3780354  
    210210  right: 0;
    211211  transform: translate(50%, -50%);
    212   width: 26px;
    213   height: 26px;
     212  width: 30px;
     213  height: 30px;
    214214  display: flex;
    215215  align-items: center;
    … …  
    266266  right: 0;
    267267  transform: translate(50%, -50%);
    268   width: 26px;
    269   height: 26px;
     268  width: 30px;
     269  height: 30px;
    270270  display: flex;
    271271  align-items: center;
    … …  
    326326  top: 50%;
    327327  transform: translateY(-50%);
    328   background: rgba(0,0,0,0.5);
    329   color: #fff; font-size: 20px;
     328  background: #000 center / 16px no-repeat;
     329  box-shadow: 0 0 4px rgba(0,0,0,0.3);
     330  color: #fff; font-size: 0;
    330331  width: 30px; height: 30px;
    331332  border: 2px solid #fff; border-radius: 50%;
    … …  
    338339.misticease-image-popup-prev { left: 50px; }
    339340.misticease-image-popup-next { right: 50px; }
     341.misticease-image-popup-nav.misticease-image-popup-prev,
     342.misticease-image-popup-nav-portal.misticease-image-popup-prev {
     343  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10.75 2.5 5.25 8l5.5 5.5'/%3E%3C/svg%3E");
     344}
     345.misticease-image-popup-nav.misticease-image-popup-next,
     346.misticease-image-popup-nav-portal.misticease-image-popup-next {
     347  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5.25 2.5 10.75 8l-5.5 5.5'/%3E%3C/svg%3E");
     348}
    340349
    341350.misticease-hit {
    … …  
    361370
    362371.misticease-image-popup-box.kbd-nav:focus-within .misticease-image-popup-nav {
    363   opacity: .6;
     372  opacity: 1;
    364373  pointer-events: auto;
    365374}
    … …  
    375384@media (max-width: 480px) {
    376385  .misticease-image-popup-box { padding: 10px; max-width: 98vw; max-height: 85vh; }
    377   .misticease-image-popup-nav { width: 25px; height: 25px; font-size: 16px; }
    378386}
    379387
    … …  
    392400  top: 50%;
    393401  transform: translateY(-50%);
    394   background: rgba(0,0,0,0.5);
     402  background: #000 center / 16px no-repeat;
     403  box-shadow: 0 0 4px rgba(0,0,0,0.3);
    395404  color: #fff;
    396   font-size: 20px;
     405  font-size: 0;
    397406  width: 30px;
    398407  height: 30px;
    … …  
    406415  pointer-events: none;
    407416  transition: opacity .18s ease;
    408   z-index: 2147483646;
     417  z-index: 999990;
    409418}
    410419
    411420.misticease-image-popup-nav-portal.misticease-image-popup-prev { left: var(--me-image-nav-edge, 3vw); right: auto; }
    412421.misticease-image-popup-nav-portal.misticease-image-popup-next { right: var(--me-image-nav-edge, 3vw); left: auto; }
    413 
    414 @media (max-width: 480px) {
    415   .misticease-image-popup-nav-portal {
    416     width: 25px;
    417     height: 25px;
    418     font-size: 16px;
    419   }
    420 }
    421422
    422423@media (prefers-reduced-motion: reduce) {
    … …  
    478479  border: 2px solid #fff;
    479480  border-radius: 50%;
    480   background: rgba(0,0,0,0.93);
     481  background: #000;
    481482  box-shadow: 0 0 4px rgba(0,0,0,0.3);
    482483  cursor: pointer;
    … …  
    490491  right: 0;
    491492  bottom: 0;
    492   transform: translate(50%, 50%);
     493  transform: translate(50%, calc(100% - 8px));
    493494}
    494495
    … …  
    496497  left: 0;
    497498  top: 0;
    498   transform: translate(-50%, -50%);
     499  transform: translate(-50%, calc(-100% + 8px));
    499500}
    500501
    … …  
    563564}
    564565
     566.misticease-window.misticease-floating-controls-enabled .misticease-corner-grab {
     567  position: absolute;
     568  display: none;
     569  width: 30px;
     570  height: 30px;
     571  box-sizing: border-box;
     572  border: 2px solid #fff;
     573  border-radius: 50%;
     574  background: #000 center / 60% no-repeat;
     575  box-shadow: 0 0 4px rgba(0,0,0,0.3);
     576  z-index: 1000001;
     577  pointer-events: auto;
     578  touch-action: none;
     579}
     580.misticease-window.misticease-floating-controls-enabled .misticease-corner-nw {
     581  left: 35px;
     582  top: 0;
     583  transform: translate(-50%, calc(-100% + 8px));
     584  cursor: nwse-resize;
     585  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 8V3h5M13 8v5H8M3 3l10 10'/%3E%3C/svg%3E");
     586}
     587.misticease-window.misticease-floating-controls-enabled .misticease-corner-ne {
     588  right: 35px;
     589  top: 0;
     590  transform: translate(50%, calc(-100% + 8px));
     591  cursor: nesw-resize;
     592  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 3h5v5M8 13H3V8M13 3L3 13'/%3E%3C/svg%3E");
     593}
     594.misticease-window.misticease-floating-controls-enabled .misticease-corner-se {
     595  right: 35px;
     596  bottom: 0;
     597  transform: translate(50%, calc(100% - 8px));
     598  cursor: nwse-resize;
     599  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 8V3h5M13 8v5H8M3 3l10 10'/%3E%3C/svg%3E");
     600}
     601.misticease-window.misticease-floating-controls-enabled .misticease-corner-sw {
     602  left: 0;
     603  bottom: 0;
     604  transform: translate(-50%, calc(100% - 8px));
     605  cursor: nesw-resize;
     606  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23fff' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 3h5v5M8 13H3V8M13 3L3 13'/%3E%3C/svg%3E");
     607}
     608@media (hover:hover) and (pointer:fine) {
     609  .misticease-window.misticease-floating-controls-enabled:hover .misticease-corner-grab,
     610  .misticease-window.misticease-floating-controls-enabled.misticease-resizing .misticease-corner-grab {
     611    display: block;
     612  }
     613  .misticease-window.misticease-resizing {
     614    user-select: none;
     615    -webkit-user-select: none;
     616  }
     617}
     618
     619/**
     620 * Resized window
     621 */
     622.misticease-window.misticease-resized {
     623  width: var(--misticease-resize-width) !important;
     624  height: var(--misticease-resize-height) !important;
     625  max-width: none !important;
     626  max-height: none !important;
     627}
     628.misticease-popup-content.misticease-resized > iframe {
     629  flex: 1 1 0;
     630  min-height: 0;
     631  height: auto !important;
     632  aspect-ratio: auto;
     633}
     634.misticease-image-popup-box.misticease-resized > img {
     635  width: 100% !important;
     636  height: 100% !important;
     637  max-width: 100% !important;
     638  max-height: 100% !important;
     639  object-fit: contain;
     640}
     641
    565642.misticease-window.misticease-floating-controls-enabled .misticease-drag-handle img,
    566643.misticease-window.misticease-floating-controls-enabled .misticease-pin-btn img {
    … …  
    577654.misticease-window.misticease-floating-controls-enabled .misticease-drag-handle:hover,
    578655.misticease-window.misticease-floating-controls-enabled .misticease-pin-btn:hover {
    579   background: rgba(0,0,0,0.85);
     656  background: #222;
    580657}
    581658
    … …  
    588665  display: block !important;
    589666}
     667.misticease-window.misticease-tablet.misticease-floating-controls-enabled:not(.misticease-mouse-input) .misticease-corner-sw {
     668  display: block !important;
     669}
     670.misticease-window.misticease-tablet.misticease-floating-controls-enabled:not(.misticease-mouse-input) .misticease-corner-nw,
     671.misticease-window.misticease-tablet.misticease-floating-controls-enabled:not(.misticease-mouse-input) .misticease-corner-ne,
     672.misticease-window.misticease-tablet.misticease-floating-controls-enabled:not(.misticease-mouse-input) .misticease-corner-se {
     673  display: none !important;
     674}
     675.misticease-window.misticease-tablet.misticease-floating-controls-enabled.misticease-mouse-input:hover .misticease-corner-grab,
     676.misticease-window.misticease-tablet.misticease-floating-controls-enabled.misticease-mouse-input.misticease-resizing .misticease-corner-grab {
     677  display: block;
     678}
    590679
    591680.misticease-window.misticease-phone.misticease-floating-controls-enabled .misticease-drag-handle,
    592681.misticease-window.misticease-phone.misticease-floating-controls-enabled .misticease-pin-btn,
    593 .misticease-window.misticease-phone.misticease-floating-controls-enabled .misticease-edge-grab {
     682.misticease-window.misticease-phone.misticease-floating-controls-enabled .misticease-edge-grab,
     683.misticease-window.misticease-phone.misticease-floating-controls-enabled .misticease-corner-grab {
    594684  display: none !important;
    595685}
    … …  
    635725}
    636726
    637 .misticease-popup-content .misticease-close img,
    638 .misticease-image-close img {
    639   width: 84%;
    640   height: 84%;
    641   object-fit: contain;
    642   display: block;
    643   margin: auto;
    644 }
    645 
    646 .misticease-window .misticease-drag-handle img {
    647   width: 64%;
    648   height: 64%;
     727.misticease-window:not(.misticease-phone) .misticease-close,
     728.misticease-window:not(.misticease-phone) .misticease-image-close {
     729  transform: translate(50%, calc(-100% + 8px));
    649730}
    650731.misticease-popup-caption {
  • misticease/trunk/inc/app/js/misticease-window-manager.js

    r3777500 r3780354  
    2525    return Math.max(min, Math.min(max, v));
    2626  }
     27
     28  var RESIZE_MIN = 240;
    2729
    2830  function viewport() {
    … …  
    312314        }
    313315
     316        this.applyResize(win);
     317
    314318        if (win.mode !== 'floating') continue;
    315319
    … …  
    321325
    322326        var minL = Math.max(8, (vp.left || 0) + 8);
    323         var minT = Math.max(8, (vp.top || 0) + 8);
     327        var minT = Math.max(30, (vp.top || 0) + 30);
    324328        var maxL = Math.max(minL, (vp.left || 0) + vp.w - w - 8);
    325         var maxT = Math.max(minT, (vp.top || 0) + vp.h - h - 8);
     329        var maxT = Math.max(minT, (vp.top || 0) + vp.h - h - 30);
    326330        var newL = clamp(left, minL, maxL);
    327331        var newT = clamp(top, minT, maxT);
    … …  
    440444      if (typeof win._misticeaseCancelDrag === 'function') win._misticeaseCancelDrag();
    441445      win.mode = 'modal';
     446      win._misticeaseResizeScale = 0;
     447      win.el.classList.remove('misticease-resized');
    442448      win.el.classList.remove('misticease-floating');
    443449      win.el.classList.add('misticease-modal');
    … …  
    445451      win.el.style.top = '50%';
    446452      win.el.style.transform = 'translate(-50%, -50%)';
     453      if (!isPhoneViewport()) this.applyResize(win);
    447454    },
    448455
    … …  
    458465    },
    459466
     467    naturalSize: function (win) {
     468      var resized = win.el.classList.contains('misticease-resized');
     469      if (resized) win.el.classList.remove('misticease-resized');
     470      var r = win.el.getBoundingClientRect();
     471      if (resized) win.el.classList.add('misticease-resized');
     472      return { w: r.width || 0, h: r.height || 0 };
     473    },
     474
     475    setResizedSize: function (win, width, height) {
     476      win.el.style.setProperty('--misticease-resize-width', Math.round(width) + 'px');
     477      win.el.style.setProperty('--misticease-resize-height', Math.round(height) + 'px');
     478      win.el.classList.add('misticease-resized');
     479    },
     480
     481    applyResize: function (win) {
     482      var nat = this.naturalSize(win);
     483      if (!nat.w || !nat.h) return;
     484      var vp = viewport();
     485      var fit = Math.min((vp.w - 16) / nat.w, (vp.h - 60) / nat.h);
     486      var scale = win._misticeaseResizeScale;
     487      if (scale) {
     488        var minScale = Math.min(1, Math.max(RESIZE_MIN / nat.w, RESIZE_MIN / nat.h));
     489        scale = Math.min(Math.max(scale, minScale), fit);
     490      } else if (fit < 1) {
     491        scale = fit;
     492      } else {
     493        win.el.classList.remove('misticease-resized');
     494        return;
     495      }
     496      this.setResizedSize(win, nat.w * scale, nat.h * scale);
     497    },
     498
    460499    attachFloatingControls: function (win) {
    461500      if (!win || !win.el) return;
    … …  
    515554      }
    516555
     556      var corners = ['nw', 'ne', 'se', 'sw'];
     557      for (var ci = 0; ci < corners.length; ci++) {
     558        var co = document.createElement('div');
     559        co.className = 'misticease-corner-grab misticease-corner-' + corners[ci];
     560        co.setAttribute('aria-hidden', 'true');
     561        win.el.appendChild(co);
     562      }
     563
    517564      var self = this;
    518565      var dragging = false;
    … …  
    528575      }
    529576
     577      function isOtherPointer(ev, ptrId) {
     578        return !!ev && ev.pointerId !== undefined && ptrId !== null && ev.pointerId !== ptrId;
     579      }
     580
    530581      function onMove(ev) {
    531         if (!dragging) return;
     582        if (!dragging || isOtherPointer(ev, __misticeasePtrId)) return;
    532583        try { ev.preventDefault(); } catch (_e) {}
    533584        var vp = viewport();
    … …  
    539590
    540591        var minL = Math.max(8, (vp.left || 0) + 8);
    541         var minT = Math.max(8, (vp.top || 0) + 8);
     592        var minT = Math.max(30, (vp.top || 0) + 30);
    542593        var maxL = Math.max(minL, (vp.left || 0) + vp.w - w - 8);
    543         var maxT = Math.max(minT, (vp.top || 0) + vp.h - h - 8);
     594        var maxT = Math.max(minT, (vp.top || 0) + vp.h - h - 30);
    544595        left = clamp(left, minL, maxL);
    545596        top = clamp(top, minT, maxT);
    … …  
    549600      }
    550601
    551       function onUp() {
    552         if (!dragging) return;
     602      function onUp(ev) {
     603        if (!dragging || isOtherPointer(ev, __misticeasePtrId)) return;
    553604        dragging = false;
    554605        try { win.el.classList.remove('misticease-dragging'); } catch (_e) {}
    … …  
    562613        if (!isTabletViewport() && !isPhoneViewport()) win.el.classList.add('misticease-show-pin');
    563614      }
    564       win._misticeaseCancelDrag = onUp;
    565615
    566616      function startDrag(ev, captureEl) {
    567         if (dragging || isPhoneViewport()) return;
     617        if (dragging || resizing || isPhoneViewport()) return;
    568618        if (ev.button !== undefined && ev.button !== 0) return;
    569619        ev.preventDefault();
    … …  
    613663        })(edgeEls[i]);
    614664      }
     665
     666      /**
     667       * Corner resize
     668       */
     669      var resizing = null;
     670
     671      function onResizeMove(ev) {
     672        if (!resizing || isOtherPointer(ev, resizing.ptrId)) return;
     673        try { ev.preventDefault(); } catch (_e) {}
     674        var rs = resizing;
     675        var vp = viewport();
     676        var nw = rs.nw;
     677        var nh = rs.nh;
     678        var dx = ev.clientX - rs.x0;
     679        var dy = ev.clientY - rs.y0;
     680        var scale = ((rs.w0 + rs.sx * dx) * nw + (rs.h0 + rs.sy * dy) * nh) / (nw * nw + nh * nh);
     681
     682        var minL = Math.max(8, (vp.left || 0) + 8);
     683        var minT = Math.max(30, (vp.top || 0) + 30);
     684        var maxR = (vp.left || 0) + vp.w - 8;
     685        var maxB = (vp.top || 0) + vp.h - 30;
     686        var availW = rs.sx > 0 ? (maxR - rs.ax) : (rs.ax - minL);
     687        var availH = rs.sy > 0 ? (maxB - rs.ay) : (rs.ay - minT);
     688        var maxScale = Math.max(0, Math.min(availW / nw, availH / nh));
     689        var minScale = Math.min(1, Math.max(RESIZE_MIN / nw, RESIZE_MIN / nh), maxScale);
     690        scale = clamp(scale, minScale, maxScale);
     691
     692        var w = Math.round(nw * scale);
     693        var h = Math.round(nh * scale);
     694        win._misticeaseResizeScale = scale;
     695        self.setResizedSize(win, w, h);
     696        win.el.style.left = (rs.sx > 0 ? rs.ax : rs.ax - w) + 'px';
     697        win.el.style.top = (rs.sy > 0 ? rs.ay : rs.ay - h) + 'px';
     698      }
     699
     700      function onResizeUp(ev) {
     701        if (!resizing || isOtherPointer(ev, resizing.ptrId)) return;
     702        var rs = resizing;
     703        resizing = null;
     704        try { win.el.classList.remove('misticease-resizing'); } catch (_e) {}
     705        document.removeEventListener('pointermove', onResizeMove);
     706        document.removeEventListener('pointerup', onResizeUp);
     707        document.removeEventListener('pointercancel', onResizeUp);
     708        window.removeEventListener('blur', onResizeUp);
     709        try { rs.el.removeEventListener('lostpointercapture', onResizeUp); } catch (_e) {}
     710        try { if (rs.el.releasePointerCapture) rs.el.releasePointerCapture(rs.ptrId); } catch (_e) {}
     711        embeddedPointer(true);
     712      }
     713
     714      function startResize(ev, cornerEl, sx, sy) {
     715        if (resizing || dragging || isPhoneViewport()) return;
     716        if (ev.button !== undefined && ev.button !== 0) return;
     717        ev.preventDefault();
     718        ev.stopPropagation();
     719        if (ev.stopImmediatePropagation) ev.stopImmediatePropagation();
     720
     721        var ptrId = (ev.pointerId !== undefined) ? ev.pointerId : null;
     722        try { if (ptrId !== null && cornerEl.setPointerCapture) cornerEl.setPointerCapture(ptrId); } catch (_e) {}
     723
     724        self.bringToFront(win);
     725
     726        if (win.mode !== 'floating') {
     727          self.normalizeFloating(win);
     728        }
     729
     730        var r = win.el.getBoundingClientRect();
     731        var nat = self.naturalSize(win);
     732        if (!r.width || !r.height || !nat.w || !nat.h) return;
     733
     734        resizing = {
     735          el: cornerEl,
     736          ptrId: ptrId,
     737          sx: sx,
     738          sy: sy,
     739          x0: ev.clientX,
     740          y0: ev.clientY,
     741          w0: r.width,
     742          h0: r.height,
     743          nw: nat.w,
     744          nh: nat.h,
     745          ax: sx > 0 ? r.left : r.right,
     746          ay: sy > 0 ? r.top : r.bottom
     747        };
     748
     749        try { win.el.classList.add('misticease-resizing'); } catch (_e) {}
     750        embeddedPointer(false);
     751        self.updateOverlay();
     752
     753        document.addEventListener('pointermove', onResizeMove);
     754        document.addEventListener('pointerup', onResizeUp);
     755        document.addEventListener('pointercancel', onResizeUp);
     756        window.addEventListener('blur', onResizeUp);
     757        cornerEl.addEventListener('lostpointercapture', onResizeUp);
     758      }
     759
     760      var cornerEls = win.el.querySelectorAll('.misticease-corner-grab');
     761      for (var cj = 0; cj < cornerEls.length; cj++) {
     762        (function (el) {
     763          var sx = /-(ne|se)$/.test(el.className) ? 1 : -1;
     764          var sy = /-(se|sw)$/.test(el.className) ? 1 : -1;
     765          el.addEventListener('pointerdown', function (ev) {
     766            startResize(ev, el, sx, sy);
     767          });
     768        })(cornerEls[cj]);
     769      }
     770
     771      function syncInputType(ev) {
     772        if (ev.pointerType === 'mouse') win.el.classList.add('misticease-mouse-input');
     773        else win.el.classList.remove('misticease-mouse-input');
     774      }
     775
     776      win.el.addEventListener('pointerover', syncInputType);
     777      win.el.addEventListener('pointerdown', syncInputType, true);
     778
     779      win._misticeaseCancelDrag = function () {
     780        onUp();
     781        onResizeUp();
     782      };
    615783
    616784      win.el.addEventListener('mouseleave', function () {
  • misticease/trunk/inc/app/js/misticease.js

    r3777500 r3780354  
    416416  }
    417417
     418  var independentImageId = 0;
     419
     420  function isIndependentImage(anchor) {
     421    return anchor.getAttribute('data-misticease-ng') === '1';
     422  }
     423
     424  function imageGroupKey(anchor) {
     425    if (!isIndependentImage(anchor)) return String(imageGroupId(anchor));
     426    if (!anchor.__misticeaseIndependentId) anchor.__misticeaseIndependentId = ++independentImageId;
     427    return 'ng' + anchor.__misticeaseIndependentId;
     428  }
     429
    418430  function collectGroup(active) {
    419431    var activeGroup = imageGroupId(active);
     432    var single = isIndependentImage(active);
    420433    var anchors = document.getElementsByTagName('a');
    421434    var group = [];
    … …  
    425438
    426439      if (!a.classList || !a.classList.contains('misticease-img-popup') || imageGroupId(a) !== activeGroup) {
     440        continue;
     441      }
     442
     443      if (a !== active && (single || isIndependentImage(a))) {
    427444        continue;
    428445      }
    … …  
    689706    }
    690707
    691     function reveal(side) {
    692       try {
    693         box.className = box.className.replace(/\breveal-left\b|\breveal-right\b/g, '');
    694         box.className += (side === 'left' ? ' reveal-left' : ' reveal-right');
    695       } catch (_e) {}
    696       scheduleNavIdleHide();
    697 
    698       if (hintTimer) {
    699         clearTimeout(hintTimer);
    700         hintTimer = null;
    701       }
    702 
    703       hintTimer = setTimeout(function () {
    704         try {
    705           box.className = box.className
    706             .replace(/\breveal-left\b|\breveal-right\b/g, '')
    707             .replace(/\s{2,}/g, ' ')
    708             .trim();
    709         } catch (_e) {}
    710         hintTimer = null;
    711       }, 1200);
    712     }
    713 
    714708    function showHint(ms) {
    715709      try {
    … …  
    828822        } catch (_e) {}
    829823        clearHoverOff();
    830         reveal('left');
    831824        goPrev();
    832         scheduleHoverOff(1200);
     825        showHint(2500);
    833826      }, false);
    834827
    … …  
    845838        } catch (_e) {}
    846839        clearHoverOff();
    847         reveal('right');
    848840        goNext();
    849         scheduleHoverOff(1200);
     841        showHint(2500);
    850842      }, false);
    851843
    … …  
    950942      box.appendChild(hitL);
    951943      box.appendChild(hitR);
    952       box.addEventListener('mousemove', scheduleNavIdleHide, false);
    953       portalPrev.addEventListener('mousemove', scheduleNavIdleHide, false);
    954       portalNext.addEventListener('mousemove', scheduleNavIdleHide, false);
     944      box.addEventListener('mouseenter', function () { showHint(2500); }, false);
     945      box.addEventListener('mousemove', function () { showHint(2500); }, false);
     946      portalPrev.addEventListener('mousemove', function () { showHint(2500); }, false);
     947      portalNext.addEventListener('mousemove', function () { showHint(2500); }, false);
    955948
    956949      showHint(2500);
    … …  
    14721465      }
    14731466
    1474       openImagePopup(idx, group, imageGroupId(a));
     1467      openImagePopup(idx, group, imageGroupKey(a));
    14751468    }, true);
    14761469  }
  • misticease/trunk/inc/app/misticease-admin.php

    r3777500 r3780354  
    594594                                echo wp_kses(
    595595                                        sprintf(
    596                                                 /* translators: 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. */
    597                                                 __( '%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group.', 'misticease' ),
     596                                                /* translators: 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. 4: Independent image prefix ng/. */
     597                                                __( '%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, use %4$s, or assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group.', 'misticease' ),
    598598                                                '<code>g1/</code>',
    599599                                                '<code>g0/</code>',
    600                                                 '<code>np/</code>'
     600                                                '<code>np/</code>',
     601                                                '<code>ng/</code>'
    601602                                        ),
    602603                                        $inline_code_allowed_html
    … …  
    624625                                                '<code>np/</code>',
    625626                                                '<code>t.../</code>'
     627                                        ),
     628                                        $inline_code_allowed_html
     629                                );
     630                                ?>
     631                        </li>
     632                        <li>
     633                                <?php
     634                                echo wp_kses(
     635                                        sprintf(
     636                                                /* translators: %s: Independent image prefix ng/. */
     637                                                __( '%s keeps an image out of every gallery group, so it opens on its own without previous/next navigation. It takes priority over a group prefix.', 'misticease' ),
     638                                                '<code>ng/</code>'
    626639                                        ),
    627640                                        $inline_code_allowed_html
  • misticease/trunk/inc/app/misticease-render.php

    r3777500 r3780354  
    415415                // Remove only image Slash Markup; leave existing video anchor processing unchanged.
    416416                $image_pattern = '/(?:<!--.*?-->|<!\[CDATA\[.*?\]\]>|<(?P<skip_tag>pre|code|script|style|textarea|kbd|samp|var)\b[^>]*>.*?<\/(?P=skip_tag)\s*>)|(?P<prefix>
    417                         (?:(?<![^\s\x{00A0}\x{3000}>])\/[^\/<>"\'\n\r]+\/(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|n)\/)*)
    418                         |(?:(?<![A-Za-z0-9_])(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|n)\/)+)
     417                        (?:(?<![^\s\x{00A0}\x{3000}>])\/[^\/<>"\'\n\r]+\/(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|ng|n)\/)*)
     418                        |(?:(?<![A-Za-z0-9_])(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|ng|n)\/)+)
    419419                )?<a\b[^>]*\bhref=(?P<quote>["\'])(?P<href>[^"\']+)(?P=quote)[^>]*>(?P<text>.*?)<\/a>/isux';
    420420
    … …  
    466466
    467467        $pattern = '/(?:<!--.*?-->|<!\[CDATA\[.*?\]\]>|<(?P<skip_tag>pre|code|script|style|textarea|kbd|samp|var)\b[^>]*>.*?<\/(?P=skip_tag)\s*>)|(?P<prefix>
    468                 (?:(?<![^\s\x{00A0}\x{3000}])\/[^\/<>"\'\n\r]+\/(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|n)\/)*)
    469                 |(?:(?<![A-Za-z0-9_])(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|n)\/)+)
     468                (?:(?<![^\s\x{00A0}\x{3000}])\/[^\/<>"\'\n\r]+\/(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|ng|n)\/)*)
     469                |(?:(?<![A-Za-z0-9_])(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|ng|n)\/)+)
    470470        )?<a\b[^>]*\bhref=(?P<quote>["\'])(?P<href>[^"\']+)(?P=quote)[^>]*>(?P<text>.*?)<\/a>/isux';
    471471
    … …  
    625625                'text_link'    => false,
    626626                'no_popup'     => false,
     627                'no_gallery'   => false,
    627628                'has_markup'   => false,
    628629        );
    … …  
    680681                if ( preg_match( '/^np\//i', $remaining, $m ) ) {
    681682                        $spec['no_popup']   = true;
     683                        $spec['has_markup'] = true;
     684                        $remaining          = substr( $remaining, strlen( $m[0] ) );
     685                        continue;
     686                }
     687
     688                if ( preg_match( '/^ng\//i', $remaining, $m ) ) {
     689                        $spec['no_gallery'] = true;
    682690                        $spec['has_markup'] = true;
    683691                        $remaining          = substr( $remaining, strlen( $m[0] ) );
    … …  
    14081416function misticease_direct_image_url_pattern(): string {
    14091417        return '/(?<!["\'=])
    1410                    (?P<prefix>(?:(?<![^\s\x{00A0}\x{3000}])\/[^\/<>"\'\n\r]+\/)?(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|n)\/)*)?
     1418                   (?P<prefix>(?:(?<![^\s\x{00A0}\x{3000}])\/[^\/<>"\'\n\r]+\/)?(?:(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|ng|n)\/)*)?
    14111419                   (?P<url>https?:\/\/(?:(?!\/{3})[^\s<>"\' ])+?\.(?:jpe?g|png|gif|webp|avif)(?:[?#](?:(?!\/{3})[^\s<>"\' ])*)?(?:\/{3}|(?=[\s<>"\' ]|$)))
    14121420                   /ixu';
    … …  
    15181526        }
    15191527
    1520         $group_class = ! empty( $spec['group_id'] ) ? ' misticease-g' . (int) $spec['group_id'] : '';
     1528        $group_class = ! empty( $spec['group_id'] ) && empty( $spec['no_gallery'] ) ? ' misticease-g' . (int) $spec['group_id'] : '';
    15211529        $attrs       = ' role="button" tabindex="0"';
    1522         $aria_label  = sprintf(
     1530        if ( ! empty( $spec['no_gallery'] ) ) {
     1531                $attrs .= ' data-misticease-ng="1"';
     1532        }
     1533        $aria_label = sprintf(
    15231534                /* translators: %s: image label or generic image thumbnail text. */
    15241535                __( 'Open image in a pop-up window: %s', 'misticease' ),
    … …  
    17391750function misticease_slash_markup_suffix( string $text ): array {
    17401751        $text    = html_entity_decode( $text, ENT_QUOTES | ENT_HTML5, 'UTF-8' );
    1741         $control = '(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|n)\/';
     1752        $control = '(?:ttl[ \x{3000}][^\/<>"\'\n\r]+|t\d{1,4}|p\d{1,4}|r\d{1,4}|g\d{1,4}|np|ng|n)\/';
    17421753        $pattern = '/(?:(?:^|[\s\x{00A0}\x{3000}])\K\/[^\/<>"\'\n\r]+\/(?:' . $control . ')*|(?<![A-Za-z0-9_])(?:' . $control . ')+)[\s\x{00A0}\x{3000}]*$/iu';
    17431754        if ( ! preg_match( $pattern, $text, $match, PREG_OFFSET_CAPTURE ) ) {
    … …  
    18031814                $tags->set_attribute( 'data-misticease-title', $spec['title'] );
    18041815        }
    1805         if ( $spec['group_id'] > 0 ) {
     1816        if ( $spec['group_id'] > 0 || ! empty( $spec['no_gallery'] ) ) {
    18061817                foreach ( preg_split( '/\s+/', (string) $tags->get_attribute( 'class' ) ) as $class ) {
    18071818                        if ( preg_match( '/^misticease-g\d+$/', $class ) ) {
    … …  
    18091820                        }
    18101821                }
    1811                 $tags->add_class( 'misticease-g' . $spec['group_id'] );
     1822                if ( ! empty( $spec['no_gallery'] ) ) {
     1823                        $tags->set_attribute( 'data-misticease-ng', '1' );
     1824                } else {
     1825                        $tags->add_class( 'misticease-g' . $spec['group_id'] );
     1826                }
    18121827        }
    18131828        if ( ! empty( $spec['text_link'] ) && '' !== $spec['label'] ) {
  • misticease/trunk/inc/bootstrap.php

    r3777500 r3780354  
    1515
    1616if ( ! defined( 'MISTICEASE_VER' ) ) {
    17         define( 'MISTICEASE_VER', defined( 'MISTICEASE_VERSION' ) ? MISTICEASE_VERSION : '2.0.1' );
     17        define( 'MISTICEASE_VER', defined( 'MISTICEASE_VERSION' ) ? MISTICEASE_VERSION : '2.0.2' );
    1818}
    1919
  • misticease/trunk/languages/misticease-de_DE.po

    r3777500 r3780354  
    886886msgstr "Wenn Bild-Pop-ups deaktiviert sind, steuert MisticEase weder die Bilddarstellung noch das Verhalten beim Anklicken. Slash Markup an Bild-URLs wird lediglich entfernt, ohne die Einstellungen anzuwenden. Bild-URLs ohne Slash Markup bleiben unverändert."
    887887
    888 #. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/.
    889 #: inc/app/misticease-admin.php:511
     888#. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. 4: Independent image prefix ng/.
     889#: inc/app/misticease-admin.php:597
    890890#, php-format
    891 msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
    892 msgstr "Mit %1$s kannst du Bilder in separate Galerien gruppieren. Die Vorheriges-/Nächstes-Navigation bleibt auf die jeweilige nummerierte Gruppe beschränkt. Um ein einzelnes Bild getrennt zu halten, weise ihm eine Gruppennummer zu, die kein anderes Bild auf der Seite verwendet. Bilder, die sich in Pop-up-Fenstern öffnen und kein Gruppenpräfix oder %2$s verwenden, gehören zu Gruppe 0. Kombiniere Gruppenpräfixe in beliebiger Reihenfolge mit anderen Slash Markup-Optionen. %3$s deaktiviert jedoch das Pop-up-Fenster. In Kombination mit einem Gruppenpräfix wird das Bild direkt auf der Seite ohne Pop-up-Fenster angezeigt und gehört keiner Galeriegruppe an."
     891msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, use %4$s, or assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
     892msgstr "Mit %1$s kannst du Bilder in separate Galerien gruppieren. Die Vorheriges-/Nächstes-Navigation bleibt auf die jeweilige nummerierte Gruppe beschränkt. Um ein einzelnes Bild getrennt zu halten, verwende %4$s oder weise ihm eine Gruppennummer zu, die kein anderes Bild auf der Seite verwendet. Bilder, die sich in Pop-up-Fenstern öffnen und kein Gruppenpräfix oder %2$s verwenden, gehören zu Gruppe 0. Kombiniere Gruppenpräfixe in beliebiger Reihenfolge mit anderen Slash Markup-Optionen. %3$s deaktiviert jedoch das Pop-up-Fenster. In Kombination mit einem Gruppenpräfix wird das Bild direkt auf der Seite ohne Pop-up-Fenster angezeigt und gehört keiner Galeriegruppe an."
     893
     894#. %s: Independent image prefix ng/.
     895#: inc/app/misticease-admin.php:637
     896#, php-format
     897msgid "%s keeps an image out of every gallery group, so it opens on its own without previous/next navigation. It takes priority over a group prefix."
     898msgstr "%s hält ein Bild aus allen Galeriegruppen heraus, sodass es sich ohne Vorheriges-/Nächstes-Navigation einzeln öffnet. Es hat Vorrang vor einem Gruppenpräfix."
    893899
    894900
  • misticease/trunk/languages/misticease-de_DE_formal.po

    r3777500 r3780354  
    886886msgstr "Wenn Bild-Pop-ups deaktiviert sind, steuert MisticEase weder die Bilddarstellung noch das Verhalten beim Anklicken. Slash Markup an Bild-URLs wird lediglich entfernt, ohne die Einstellungen anzuwenden. Bild-URLs ohne Slash Markup bleiben unverändert."
    887887
    888 #. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/.
    889 #: inc/app/misticease-admin.php:511
     888#. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. 4: Independent image prefix ng/.
     889#: inc/app/misticease-admin.php:597
    890890#, php-format
    891 msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
    892 msgstr "Mit %1$s können Sie Bilder in separate Galerien gruppieren. Die Vorheriges-/Nächstes-Navigation bleibt auf die jeweilige nummerierte Gruppe beschränkt. Um ein einzelnes Bild getrennt zu halten, weisen Sie ihm eine Gruppennummer zu, die kein anderes Bild auf der Seite verwendet. Bilder, die sich in Pop-up-Fenstern öffnen und kein Gruppenpräfix oder %2$s verwenden, gehören zu Gruppe 0. Kombinieren Sie Gruppenpräfixe in beliebiger Reihenfolge mit anderen Slash Markup-Optionen. %3$s deaktiviert jedoch das Pop-up-Fenster. In Kombination mit einem Gruppenpräfix wird das Bild direkt auf der Seite ohne Pop-up-Fenster angezeigt und gehört keiner Galeriegruppe an."
     891msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, use %4$s, or assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
     892msgstr "Mit %1$s können Sie Bilder in separate Galerien gruppieren. Die Vorheriges-/Nächstes-Navigation bleibt auf die jeweilige nummerierte Gruppe beschränkt. Um ein einzelnes Bild getrennt zu halten, verwenden Sie %4$s oder weisen Sie ihm eine Gruppennummer zu, die kein anderes Bild auf der Seite verwendet. Bilder, die sich in Pop-up-Fenstern öffnen und kein Gruppenpräfix oder %2$s verwenden, gehören zu Gruppe 0. Kombinieren Sie Gruppenpräfixe in beliebiger Reihenfolge mit anderen Slash Markup-Optionen. %3$s deaktiviert jedoch das Pop-up-Fenster. In Kombination mit einem Gruppenpräfix wird das Bild direkt auf der Seite ohne Pop-up-Fenster angezeigt und gehört keiner Galeriegruppe an."
     893
     894#. %s: Independent image prefix ng/.
     895#: inc/app/misticease-admin.php:637
     896#, php-format
     897msgid "%s keeps an image out of every gallery group, so it opens on its own without previous/next navigation. It takes priority over a group prefix."
     898msgstr "%s hält ein Bild aus allen Galeriegruppen heraus, sodass es sich ohne Vorheriges-/Nächstes-Navigation einzeln öffnet. Es hat Vorrang vor einem Gruppenpräfix."
    893899
    894900
  • misticease/trunk/languages/misticease-es_ES.po

    r3777500 r3780354  
    885885msgstr "Cuando las ventanas emergentes de imágenes están desactivadas, MisticEase no controla cómo se muestran las imágenes ni qué ocurre al hacer clic en ellas. Solo elimina Slash Markup de las URL de imágenes sin aplicar sus ajustes. Las URL de imágenes sin Slash Markup no se modifican."
    886886
    887 #. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/.
    888 #: inc/app/misticease-admin.php:511
     887#. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. 4: Independent image prefix ng/.
     888#: inc/app/misticease-admin.php:597
    889889#, php-format
    890 msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
    891 msgstr "%1$s te permite organizar las imágenes en galerías separadas. La navegación anterior/siguiente permanece dentro de cada grupo numerado. Para mantener una imagen independiente, asígnale un número de grupo que no utilice ninguna otra imagen de la página. Las imágenes que se abren en ventanas emergentes y no tienen prefijo de grupo, o usan %2$s, pertenecen al grupo 0. Combina los prefijos de grupo con otras opciones de Slash Markup en cualquier orden. Sin embargo, %3$s desactiva la ventana emergente. Al combinarlo con un prefijo de grupo, la imagen aparece integrada en la página, sin ventana emergente, y no participa en ningún grupo de galería."
     890msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, use %4$s, or assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
     891msgstr "%1$s te permite organizar las imágenes en galerías separadas. La navegación anterior/siguiente permanece dentro de cada grupo numerado. Para mantener una imagen independiente, usa %4$s o asígnale un número de grupo que no utilice ninguna otra imagen de la página. Las imágenes que se abren en ventanas emergentes y no tienen prefijo de grupo, o usan %2$s, pertenecen al grupo 0. Combina los prefijos de grupo con otras opciones de Slash Markup en cualquier orden. Sin embargo, %3$s desactiva la ventana emergente. Al combinarlo con un prefijo de grupo, la imagen aparece integrada en la página, sin ventana emergente, y no participa en ningún grupo de galería."
     892
     893#. %s: Independent image prefix ng/.
     894#: inc/app/misticease-admin.php:637
     895#, php-format
     896msgid "%s keeps an image out of every gallery group, so it opens on its own without previous/next navigation. It takes priority over a group prefix."
     897msgstr "%s excluye una imagen de todos los grupos de galería, de modo que se abre sola, sin navegación anterior/siguiente. Tiene prioridad sobre un prefijo de grupo."
    892898
    893899
  • misticease/trunk/languages/misticease-fr_FR.po

    r3777500 r3780354  
    861861msgstr "Lorsque les fenêtres surgissantes d’images sont désactivées, MisticEase ne contrôle ni l’affichage des images ni leur comportement au clic. Il supprime uniquement le Slash Markup des URL d’images, sans appliquer ses réglages. Les URL d’images sans Slash Markup restent inchangées."
    862862
    863 #. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/.
    864 #: inc/app/misticease-admin.php:511
     863#. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. 4: Independent image prefix ng/.
     864#: inc/app/misticease-admin.php:597
    865865#, php-format
    866 msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
    867 msgstr "%1$s vous permet de répartir les images entre plusieurs galeries. La navigation précédente/suivante reste limitée à chaque groupe numéroté. Pour isoler une seule image, attribuez-lui un numéro de groupe qui n’est utilisé par aucune autre image de la page. Les images qui s’ouvrent dans des fenêtres surgissantes et qui n’ont pas de préfixe de groupe, ou qui utilisent %2$s, appartiennent au groupe 0. Combinez les préfixes de groupe avec les autres options de Slash Markup dans n’importe quel ordre. Toutefois, %3$s désactive la fenêtre surgissante. Associée à un préfixe de groupe, cette option affiche l’image directement dans la page, sans fenêtre surgissante, et l’exclut de tout groupe de galerie."
     866msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, use %4$s, or assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
     867msgstr "%1$s vous permet de répartir les images entre plusieurs galeries. La navigation précédente/suivante reste limitée à chaque groupe numéroté. Pour isoler une seule image, utilisez %4$s ou attribuez-lui un numéro de groupe qui n’est utilisé par aucune autre image de la page. Les images qui s’ouvrent dans des fenêtres surgissantes et qui n’ont pas de préfixe de groupe, ou qui utilisent %2$s, appartiennent au groupe 0. Combinez les préfixes de groupe avec les autres options de Slash Markup dans n’importe quel ordre. Toutefois, %3$s désactive la fenêtre surgissante. Associée à un préfixe de groupe, cette option affiche l’image directement dans la page, sans fenêtre surgissante, et l’exclut de tout groupe de galerie."
     868
     869#. %s: Independent image prefix ng/.
     870#: inc/app/misticease-admin.php:637
     871#, php-format
     872msgid "%s keeps an image out of every gallery group, so it opens on its own without previous/next navigation. It takes priority over a group prefix."
     873msgstr "%s exclut une image de tous les groupes de galerie : elle s’ouvre seule, sans navigation précédente/suivante. Cette option est prioritaire sur un préfixe de groupe."
    868874
    869875
  • misticease/trunk/languages/misticease-it_IT.po

    r3777500 r3780354  
    880880msgstr "Quando i pop-up delle immagini sono disattivati, MisticEase non controlla la visualizzazione delle immagini né il comportamento al clic. Rimuove soltanto lo Slash Markup dagli URL delle immagini senza applicarne le impostazioni. Gli URL delle immagini senza Slash Markup rimangono invariati."
    881881
    882 #. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/.
    883 #: inc/app/misticease-admin.php:511
     882#. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. 4: Independent image prefix ng/.
     883#: inc/app/misticease-admin.php:597
    884884#, php-format
    885 msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
    886 msgstr "%1$s ti permette di raggruppare le immagini in gallerie separate. La navigazione precedente/successiva rimane all’interno di ciascun gruppo numerato. Per mantenere separata una singola immagine, assegnale un numero di gruppo non utilizzato da nessun’altra immagine nella pagina. Le immagini che si aprono in finestre pop-up e non hanno un prefisso di gruppo, o usano %2$s, appartengono al gruppo 0. Combina i prefissi di gruppo con le altre opzioni di Slash Markup in qualsiasi ordine. Tuttavia, %3$s disattiva il pop-up. Se abbinato a un prefisso di gruppo, mostra l’immagine direttamente nella pagina, senza pop-up, e non la include in alcun gruppo della galleria."
     885msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, use %4$s, or assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
     886msgstr "%1$s ti permette di raggruppare le immagini in gallerie separate. La navigazione precedente/successiva rimane all’interno di ciascun gruppo numerato. Per mantenere separata una singola immagine, usa %4$s oppure assegnale un numero di gruppo non utilizzato da nessun’altra immagine nella pagina. Le immagini che si aprono in finestre pop-up e non hanno un prefisso di gruppo, o usano %2$s, appartengono al gruppo 0. Combina i prefissi di gruppo con le altre opzioni di Slash Markup in qualsiasi ordine. Tuttavia, %3$s disattiva il pop-up. Se abbinato a un prefisso di gruppo, mostra l’immagine direttamente nella pagina, senza pop-up, e non la include in alcun gruppo della galleria."
     887
     888#. %s: Independent image prefix ng/.
     889#: inc/app/misticease-admin.php:637
     890#, php-format
     891msgid "%s keeps an image out of every gallery group, so it opens on its own without previous/next navigation. It takes priority over a group prefix."
     892msgstr "%s esclude un’immagine da tutti i gruppi della galleria, quindi si apre da sola senza navigazione precedente/successiva. Ha la priorità su un prefisso di gruppo."
    887893
    888894
  • misticease/trunk/languages/misticease-ja.po

    r3777500 r3780354  
    823823msgstr "画像ポップアップを無効にすると、MisticEase は画像の表示方法やクリック時の動作を制御しません。画像 URL に付けられた Slash Markup は設定を適用せずに除去するだけです。Slash Markup のない画像 URL は変更しません。"
    824824
    825 #. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/.
    826 #: inc/app/misticease-admin.php:511
     825#. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. 4: Independent image prefix ng/.
     826#: inc/app/misticease-admin.php:597
    827827#, php-format
    828 msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
    829 msgstr "%1$s を使うと、画像を別々のギャラリーにグループ分けできます。前後の画像への移動は、同じ番号のグループ内に限定されます。1枚の画像を独立させるには、そのページの他の画像で使われていないグループ番号を割り当てます。ポップアップで開く画像のうち、グループ指定がないものと %2$s を指定したものはグループ0に属します。グループ指定は、他の Slash Markup の指定子と任意の順序で組み合わせられます。ただし、%3$s を指定するとポップアップは無効になります。グループ指定と組み合わせた場合、その画像はポップアップを開かずにページ内に表示され、どのギャラリーグループにも属しません。"
     828msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, use %4$s, or assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
     829msgstr "%1$s を使うと、画像を別々のギャラリーにグループ分けできます。前後の画像への移動は、同じ番号のグループ内に限定されます。1枚の画像を独立させるには、%4$s を使うか、そのページの他の画像で使われていないグループ番号を割り当てます。ポップアップで開く画像のうち、グループ指定がないものと %2$s を指定したものはグループ0に属します。グループ指定は、他の Slash Markup の指定子と任意の順序で組み合わせられます。ただし、%3$s を指定するとポップアップは無効になります。グループ指定と組み合わせた場合、その画像はポップアップを開かずにページ内に表示され、どのギャラリーグループにも属しません。"
     830
     831#. %s: Independent image prefix ng/.
     832#: inc/app/misticease-admin.php:637
     833#, php-format
     834msgid "%s keeps an image out of every gallery group, so it opens on its own without previous/next navigation. It takes priority over a group prefix."
     835msgstr "%s を指定した画像はどのギャラリーグループにも属さず、前後の画像への移動なしに単独で開きます。グループ指定よりも優先されます。"
    830836
    831837
  • misticease/trunk/languages/misticease-nl_NL.po

    r3777500 r3780354  
    872872msgstr "Wanneer afbeeldingspop-ups zijn uitgeschakeld, bepaalt MisticEase niet hoe afbeeldingen worden weergegeven of wat er gebeurt wanneer erop wordt geklikt. Slash Markup bij afbeeldings-URL’s wordt alleen verwijderd; de instellingen worden niet toegepast. Afbeeldings-URL’s zonder Slash Markup blijven ongewijzigd."
    873873
    874 #. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/.
    875 #: inc/app/misticease-admin.php:511
     874#. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. 4: Independent image prefix ng/.
     875#: inc/app/misticease-admin.php:597
    876876#, php-format
    877 msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
    878 msgstr "Met %1$s kun je afbeeldingen in afzonderlijke galerijen groeperen. De navigatie voor vorige/volgende blijft binnen elke genummerde groep. Om één afbeelding apart te houden, geef je die een groepsnummer dat geen andere afbeelding op de pagina gebruikt. Afbeeldingen die in pop-upvensters worden geopend en geen groepsprefix hebben of %2$s gebruiken, behoren tot groep 0. Combineer groepsprefixen in elke volgorde met andere Slash Markup-opties. %3$s schakelt het pop-upvenster echter uit. In combinatie met een groepsprefix wordt de afbeelding rechtstreeks op de pagina getoond, zonder pop-upvenster, en maakt deze geen deel uit van een galerijgroep."
     877msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, use %4$s, or assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
     878msgstr "Met %1$s kun je afbeeldingen in afzonderlijke galerijen groeperen. De navigatie voor vorige/volgende blijft binnen elke genummerde groep. Om één afbeelding apart te houden, gebruik je %4$s of geef je die een groepsnummer dat geen andere afbeelding op de pagina gebruikt. Afbeeldingen die in pop-upvensters worden geopend en geen groepsprefix hebben of %2$s gebruiken, behoren tot groep 0. Combineer groepsprefixen in elke volgorde met andere Slash Markup-opties. %3$s schakelt het pop-upvenster echter uit. In combinatie met een groepsprefix wordt de afbeelding rechtstreeks op de pagina getoond, zonder pop-upvenster, en maakt deze geen deel uit van een galerijgroep."
     879
     880#. %s: Independent image prefix ng/.
     881#: inc/app/misticease-admin.php:637
     882#, php-format
     883msgid "%s keeps an image out of every gallery group, so it opens on its own without previous/next navigation. It takes priority over a group prefix."
     884msgstr "%s houdt een afbeelding buiten elke galerijgroep, zodat deze los wordt geopend zonder navigatie voor vorige/volgende. Dit heeft voorrang op een groepsprefix."
    879885
    880886
  • misticease/trunk/languages/misticease-pt_BR.po

    r3777500 r3780354  
    882882msgstr "Quando os pop-ups de imagens estão desativados, o MisticEase não controla a exibição das imagens nem o comportamento ao clicar nelas. Ele apenas remove o Slash Markup dos URLs de imagens, sem aplicar suas configurações. Os URLs de imagens sem Slash Markup permanecem inalterados."
    883883
    884 #. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/.
    885 #: inc/app/misticease-admin.php:511
     884#. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. 4: Independent image prefix ng/.
     885#: inc/app/misticease-admin.php:597
    886886#, php-format
    887 msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
    888 msgstr "%1$s permite organizar imagens em galerias separadas. A navegação anterior/próxima permanece dentro de cada grupo numerado. Para manter uma única imagem separada, atribua a ela um número de grupo que nenhuma outra imagem da página use. As imagens que abrem em janelas pop-up e não possuem prefixo de grupo, ou usam %2$s, pertencem ao grupo 0. Combine os prefixos de grupo com outras opções de Slash Markup em qualquer ordem. No entanto, %3$s desativa a janela pop-up. Quando combinado com um prefixo de grupo, a imagem aparece diretamente na página, sem janela pop-up, e não participa de nenhum grupo de galeria."
     887msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, use %4$s, or assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
     888msgstr "%1$s permite organizar imagens em galerias separadas. A navegação anterior/próxima permanece dentro de cada grupo numerado. Para manter uma única imagem separada, use %4$s ou atribua a ela um número de grupo que nenhuma outra imagem da página use. As imagens que abrem em janelas pop-up e não possuem prefixo de grupo, ou usam %2$s, pertencem ao grupo 0. Combine os prefixos de grupo com outras opções de Slash Markup em qualquer ordem. No entanto, %3$s desativa a janela pop-up. Quando combinado com um prefixo de grupo, a imagem aparece diretamente na página, sem janela pop-up, e não participa de nenhum grupo de galeria."
     889
     890#. %s: Independent image prefix ng/.
     891#: inc/app/misticease-admin.php:637
     892#, php-format
     893msgid "%s keeps an image out of every gallery group, so it opens on its own without previous/next navigation. It takes priority over a group prefix."
     894msgstr "%s mantém uma imagem fora de todos os grupos de galeria, para que ela abra sozinha, sem navegação anterior/próxima. Tem prioridade sobre um prefixo de grupo."
    889895
    890896
  • misticease/trunk/languages/misticease-pt_PT.po

    r3777500 r3780354  
    884884msgstr "Quando as janelas pop-up de imagens estão desactivadas, o MisticEase não controla a apresentação das imagens nem o comportamento ao clicar nelas. Apenas remove o Slash Markup dos URL das imagens, sem aplicar as respectivas definições. Os URL das imagens sem Slash Markup permanecem inalterados."
    885885
    886 #. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/.
    887 #: inc/app/misticease-admin.php:511
     886#. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. 4: Independent image prefix ng/.
     887#: inc/app/misticease-admin.php:597
    888888#, php-format
    889 msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
    890 msgstr "%1$s permite agrupar imagens em galerias separadas. A navegação anterior/seguinte permanece dentro de cada grupo numerado. Para manter uma única imagem separada, atribua-lhe um número de grupo que não seja utilizado por qualquer outra imagem da página. As imagens que abrem em janelas pop-up e não tenham prefixo de grupo, ou que utilizem %2$s, pertencem ao grupo 0. Combine os prefixos de grupo com outras opções de Slash Markup por qualquer ordem. No entanto, %3$s desactiva a janela pop-up. Quando combinado com um prefixo de grupo, a imagem é apresentada directamente na página, sem janela pop-up, e não participa em nenhum grupo de galeria."
     889msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, use %4$s, or assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
     890msgstr "%1$s permite agrupar imagens em galerias separadas. A navegação anterior/seguinte permanece dentro de cada grupo numerado. Para manter uma única imagem separada, utilize %4$s ou atribua-lhe um número de grupo que não seja utilizado por qualquer outra imagem da página. As imagens que abrem em janelas pop-up e não tenham prefixo de grupo, ou que utilizem %2$s, pertencem ao grupo 0. Combine os prefixos de grupo com outras opções de Slash Markup por qualquer ordem. No entanto, %3$s desactiva a janela pop-up. Quando combinado com um prefixo de grupo, a imagem é apresentada directamente na página, sem janela pop-up, e não participa em nenhum grupo de galeria."
     891
     892#. %s: Independent image prefix ng/.
     893#: inc/app/misticease-admin.php:637
     894#, php-format
     895msgid "%s keeps an image out of every gallery group, so it opens on its own without previous/next navigation. It takes priority over a group prefix."
     896msgstr "%s mantém uma imagem fora de todos os grupos de galeria, para que abra sozinha, sem navegação anterior/seguinte. Tem prioridade sobre um prefixo de grupo."
    891897
    892898
  • misticease/trunk/languages/misticease.pot

    r3777500 r3780354  
    22msgid ""
    33msgstr ""
    4 "Project-Id-Version: MisticEase – Floating Video & Image Popups 2.0.1\n"
     4"Project-Id-Version: MisticEase – Floating Video & Image Popups 2.0.2\n"
    55"Report-Msgid-Bugs-To: \n"
    66"POT-Creation-Date: 2026-10-27 10:52+0000\n"
    … …  
    787787msgstr ""
    788788
    789 #. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/.
    790 #: inc/app/misticease-admin.php:511
    791 #, php-format
    792 msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
     789#. 1: Image gallery group prefix g1/. 2: Default group prefix g0/. 3: No-popup prefix np/. 4: Independent image prefix ng/.
     790#: inc/app/misticease-admin.php:597
     791#, php-format
     792msgid "%1$s lets you group images into separate galleries. Previous/next navigation stays within each numbered group. To keep a single image separate, use %4$s, or assign it a group number not used by any other image on the page. Images that open in pop-up windows and have no group prefix, or have %2$s, belong to group 0. Combine group prefixes with other Slash Markup options in any order. However, %3$s turns off the pop-up window. When combined with a group prefix, the image appears inline without a pop-up window and does not participate in any gallery group."
     793msgstr ""
     794
     795#. %s: Independent image prefix ng/.
     796#: inc/app/misticease-admin.php:637
     797#, php-format
     798msgid "%s keeps an image out of every gallery group, so it opens on its own without previous/next navigation. It takes priority over a group prefix."
    793799msgstr ""
    794800
  • misticease/trunk/misticease.php

    r3777500 r3780354  
    44 * Plugin URI:  https://mitum.me/misticease
    55 * Description: Turns YouTube and Vimeo video URLs into thumbnails. Videos and linked Media Library images open in draggable pop-up windows.
    6  * Version:     2.0.1
     6 * Version:     2.0.2
    77 * Author:      MistiCuantum
    88 * Author URI:  https://mitum.me
    … …  
    151151        }
    152152        if ( ! defined( 'MISTICEASE_VERSION' ) ) {
    153                 define( 'MISTICEASE_VERSION', '2.0.1' );
     153                define( 'MISTICEASE_VERSION', '2.0.2' );
    154154        }
    155155        if ( ! defined( 'MISTICEASE_PACKAGE_SLUG' ) ) {
  • misticease/trunk/readme.txt

    r3777500 r3780354  
    55Tested up to: 7.1
    66Requires PHP: 7.4
    7 Stable tag: 2.0.1
     7Stable tag: 2.0.2
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    142142== Upgrade Notice ==
    143143
    144 = 2.0.1 =
    145 This update focuses on improving performance and resolving potential issues identified during ongoing use.
     144= 2.0.2 =
     145This update lets visitors resize floating pop-up windows by dragging a corner.
    146146
    147147== Changelog ==
     148
     149= 2.0.2 =
     150* Floating pop-up windows can now be resized by dragging any corner, keeping their aspect ratio.
     151* Added Slash Markup `ng/`, which opens an image on its own outside any gallery group.
     152* Pop-up window buttons now sit just outside the window edge, so they no longer cover the content.
     153* Pop-up window buttons and gallery arrows now share the same size and style, and are no longer translucent.
     154* Gallery arrows now appear on both sides when hovering or switching images, and stay behind the active window.
     155* Windows that are too tall for the screen are scaled down so their buttons stay visible.
     156* Dragging or resizing a window is no longer affected by a second finger or the mouse.
    148157
    149158= 2.0.1 =
Note: See TracChangeset for help on using the changeset viewer.