Categories
blog Uncategorized VIDEO

for sumnima

Categories
blog wordpress

Protected: tiktok + fluent-community

This content is password protected. To view it please enter your password below:

Categories
blog ecommerce WooCommerce

Protected: wc-vendors-marketplace – Fix vendor edit + update – redirect to vendor

This content is password protected. To view it please enter your password below:

Categories
blog refresh

Code. Break. Refresh. Repeat — Lazness.

jQuery(document).ready(function($) {
    var rightClickCount = 0;
    var timeout;
    $(document).on('contextmenu', function(e) {
        e.preventDefault(); // prevent context menu
        rightClickCount++;
        if (rightClickCount === 2) {
            // Hard refresh by adding cache-busting query string
            var currentUrl = window.location.href.split('?')[0]; 
            var newUrl = currentUrl + '?cachebust=' + new Date().getTime();
            window.location.href = newUrl;
            rightClickCount = 0; // reset counter
        }
        // Reset counter if second click doesn't happen within 1 second
        clearTimeout(timeout);
        timeout = setTimeout(function() {
            rightClickCount = 0;
        }, 1000); // 1000ms = 1 second
    });
});
Categories
blog Design Dharan.city wordpress

dharan.city – Day 3

set a new target for my free time!

Screenshot 2025 10 12 at 18.24.16
Categories
blog haiku

idiots

Boom—
X, Y, Z—ugh.
Someone call the idiots

#genz #haiku

Categories
blog scss

🌈 Happy Grid — Happy Me


 #product-listing-container,#tab-related {
	 display: flex;
	 flex-wrap: wrap;
	 padding: 0;
	 margin: 0;
	 list-style: none;
	 align-items: stretch;
	 justify-content: flex-start;
	 width: 100%;
}
 ul.productGrid, ul.product-list {
	 width: 100%;
	 display: flex;
	 flex-wrap: wrap;
	 li {
		 flex: 0 0 50%;
		 display: flex;
		 padding: 0px !important;
		 @include breakpoint("medium") {
			 flex: 0 0 25%; 
		}
		 .card {
			 display: flex;
			 flex-direction: column;
			 flex: 1;
			 box-sizing: border-box;
			 height: 100%;
			 margin-bottom: 1rem;
			 .call-button {
				 margin-top: auto;
				 .button {
					 background: stencilColor('button--primary-backgroundColor');
					 color: stencilColor('button--primary-color');
					 
					 &:hover {
						 
						 background: stencilColor('button--primary-backgroundColorHover');
						  color: stencilColor('button--primary-colorHover');
						  
						  span {
							   &::after {
									content: '';
									position: absolute;
									width: 100%;
									transform: scaleX(0);
									height: 1px;
									bottom: 0;
									left: 0;
									background-color:  stencilColor('button--primary-colorHover');
									transform-origin: bottom right;
									transition: transform 0.25s ease-out;
									transform: scaleX(1);
									 transform-origin: bottom left;
								} 
								 
						   }
					 }
					 
					 
				}
			}
		}
	}
}

Categories
blog Deepseek extesion firefox

GrabFox – firefox extension

It all began with a simple need: to download AliExpress images for sample products for BigCommerce demo store for themes.

Trying to download high-quality images from a product page? Good luck.

That perfect shot is always locked in a lightbox slider. Right-click is disabled.

I tried existing image downloaders and grabbers, but they all fell short. So I built GrabFox – a simple tool that actually works for grabbing product images quickly and reliably.

#Deepseek

Categories
bash blog

image format – terminal command

setopt nullglob
mkdir -p jpg_output; for ext in png jpg jpeg heic tiff webp  gif avif; do
  for img in *."$ext"; do
    [ -f "$img" ] && magick "$img" "jpg_output/${img%.*}.png" 
  done
done
Categories
blog wordpress

blockquote – copy and code style

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {

  function setupCodeBlock(block, lang = '') {
    block.style.position = 'relative';

    // Collect all child lines
    let codeEls = Array.from(block.querySelectorAll('div, p, span'));
    if (codeEls.length === 0) codeEls = [block];

    // Generate raw code text with indentation
    let rawCode = '';
    let indentLevel = 0;
    codeEls.forEach(el => {
      let text = el.textContent.trim();
      if (text.includes('}')) indentLevel = Math.max(indentLevel - 1, 0);
      rawCode += '    '.repeat(indentLevel) + text + '\n'; // 4 spaces per indent
      if (text.includes('{')) indentLevel++;
    });

    // Create <pre><code> for Highlight.js
    const pre = document.createElement('pre');
    const code = document.createElement('code');
    code.className = lang + ' hljs';
    code.textContent = rawCode.replace(/[“”]/g,'"').replace(/[‘’]/g,"'");
    pre.appendChild(code);

    // Clear old content and append new
    while (block.firstChild) block.removeChild(block.firstChild);
    block.appendChild(pre);

    // Highlight.js
    hljs.highlightElement(code);

    // Create copy button
    const copyBtn = document.createElement('button');
    copyBtn.className = 'copy-btn';
    copyBtn.innerText = 'Copy';
    block.appendChild(copyBtn);

    // Copy button event
    copyBtn.addEventListener('click', () => {
      navigator.clipboard.writeText(code.textContent).then(() => {
        copyBtn.innerText = 'Copied!';
        setTimeout(() => copyBtn.innerText = 'Copy', 1500);
      });
    });
  }

  // Apply to all spoiler-body
  document.querySelectorAll('.spoiler-body').forEach(block => {
    const langSpan = block.closest('.spoiler').querySelector('.spoiler-head span');
    const lang = langSpan ? langSpan.textContent.toLowerCase() : '';
    setupCodeBlock(block, lang);
  });

});
</script>


<style>

.hljs { 
background: transparent;
}
.post-message blockquote,
.spoiler-body {
  background: #0d1117;
  color: #c9d1d9;
  padding: 14px;
  border-radius: 6px;
  line-height: 18px;
  overflow-x: auto;
  tab-size: 4;
  font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace;
  font-size: 14px;
  white-space: pre; /* preserve tabs and spaces */
  margin: 1em 0;
  position: relative;
}

 

.post-message blockquote div,
.post-message blockquote p,
.post-message blockquote span,
.spoiler-body div,
.spoiler-body p,
.spoiler-body span {
  margin: 0;
}
#af-wrapper .spoiler .spoiler-body { 
margin: 0px;
}
.copy-btn {
  position: absolute;
  top: 8px;
  right: 8px;
  background: #161b22;
  border: 1px solid #30363d;
  color: #c9d1d9;
  padding: 4px 10px;
  font-size: 12px;
  border-radius: 6px;
  cursor: pointer;
  opacity: 0;
  transition: opacity 0.2s ease-in-out, background 0.2s;
}

.post-message blockquote:hover .copy-btn,
.spoiler-body:hover .copy-btn,
.copy-btn:hover {
  opacity: 1;
}

.copy-btn:hover {
  background: #21262d;
}




 

.copy-btn {
  position: absolute;
  top: 8px;
  right: 8px;
  background: #161b22;
  border: 1px solid #30363d;
  color: #c9d1d9;
  padding: 4px 10px;
  font-size: 12px;
  border-radius: 6px;
  cursor: pointer;
  opacity: 0;
  transition: opacity 0.2s ease-in-out, background 0.2s;
}

.spoiler-body:hover .copy-btn,
.copy-btn:hover {
  opacity: 1;
}

.copy-btn:hover {
  background: #21262d;
}

</style>
Categories
blog javascript locomotiveScroll

locomotiveScroll – overflow div

 locomotiveScroll.lenisInstance.options.content.addEventListener('wheel', (event) => {
   const paths = event.composedPath();
 
   const stopPropagationIfMatch = (selector) =>
     paths.some(el => el instanceof HTMLElement && el.matches(selector) && event.stopPropagation());
 
   stopPropagationIfMatch('.productView-images'); 
   stopPropagationIfMatch('.navPage-subMenu');
   stopPropagationIfMatch('.gallery-grid');
   stopPropagationIfMatch('.halfGrid');
   stopPropagationIfMatch('.productOptions-list');
   stopPropagationIfMatch('.quickSearchResults');
 });