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: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`"