Skip to main content

PartDB

Itemy dodajemy, gdy tylko ma to sens, sztuka po sztuce jako pojedyncze Zapasy.

Etykiety mi — na rastrowe paskowe labelarki

userscript do strony itema, pokazujący się po refreshu, dodający przycisk Copy do każdego Lotu
// ==UserScript==
// @name        Knyfyrtel PartDB Lot Formatter
// @namespace   Violentmonkey Scripts
// @match       https://partdb.knyfyrtel.pl/pl/part/*
// @grant       GM_setClipboard
// @version     1.2
// @description Prepare lot string to clipboard from PartDB rows
// ==/UserScript==

(function () {
  'use strict';

  window.addEventListener('load', () => {
    const table = document.querySelector('table');
    if (!table) return;

    table.querySelectorAll('tbody tr').forEach(tr => {
      const btnCell = document.createElement('td');
      const btn = document.createElement('button');
      btn.textContent = '📋 Copy';
      btn.className = 'lot-copy-btn';
      btn.style.padding = '2px 6px';
      btnCell.appendChild(btn);
      tr.appendChild(btnCell);
    });

    table.addEventListener('click', e => {
      if (!e.target.matches('.lot-copy-btn')) return;
      const tr = e.target.closest('tr');
      try {
        const lotUrl = window.location.href;

        const partName = document.querySelector('[data-bs-original-title="Nazwa"]')?.textContent.trim() || 'NO NAME ??';

        const storageLinks = tr.querySelectorAll('ul.structural_link a');
        const storage = Array.from(storageLinks).map(a => a.textContent.trim()).reverse().join(' < ') || "NO LOCATION";

        const comment = tr.querySelector('td:first-child')?.textContent.trim();

        const lotIdSpan = Array.from(tr.querySelectorAll('.dropdown-menu span')).find(span =>
          span.textContent.includes('ID:')
        );
        const lotId = lotIdSpan ? lotIdSpan.textContent.match(/ID:\s*(\d+)/)?.[1] : 'N/A??';

        const partId = window.location.pathname.match(/part\/(\d+)/)?.[1] || 'N/A??';

        // const hasMi = Array.from(tr.querySelectorAll('.tag, .badge, .label')).some(el =>
          // el.textContent.toLowerCase().includes('property of mi')
        // );

        //const mi = hasMi ? ' !mi) ' : '';
        const commentSpan = comment ? ` :: ${comment}` : '';
        const lines = [
          `https://partdb.knyfyrtel.pl/scan/lot/${lotId}`,
          `${partName}${commentSpan}`,
          `@ ${storage}`,
          `part/${partId} lot/${lotId}`
        ];

        const text = lines.join('\n');
        GM_setClipboard(text);
        alert(`Copied:\n${text}`);
      } catch (err) {
        console.error(err);
        alert('Failed to copy lot info. See console for details.');
      }
    });
  });
})();

 

Na Brother P-Touch D410 mi drukuje to tak (po dostosowaniu udev i w nix shell nixpkgs#ptouch-print:

TEMP=`mktemp` && wl-paste > $TEMP && cat $TEMP && head -1 $TEMP |
        qrtool encode -s 2 -m 1 --symbol-version 4 |
        ptouch-print --image - --text "`tail -n +2 $TEMP`"