ROOMY ENOUGH FOR YOUR TOOLS YET PROFESSIONAL FOR THE JOBSITE

The Virginia Abrasives canvas tool bag is constructed of sturdy material and attached to a heavy plastic base to keep your tools dry and safe on the job site. Whether you're using the bag for your Primatech nailer or just to protect another of your expensive power tools, this is a great bag to do exactly what you need it to do. 

Embroidered with the Virginia Abrasives logo, your bag won't be confused with anyone else's bag. 

Add this to your collection today and step up your tool bag game!

Virginia Abrasives Canvas Tool Bag

Part Number:
432-00100
OEM Number:
809916070950
Abrasive Material:
Accessories
Activity / Use:
Hardwood Floor Nailing
Price:
$234.40/EA
In Stock and Ready to Ship! In Stock and Ready to Ship! Register to see Discount

Is your company Real, Rugged, and Ready like Virginia Abrasives? Brag about it with our great new logo cap!


• This heavyweight 100% brushed-cotton cap features a pre-curved visor with contrasting trim.

• Hand-sewn detail on the eyelets and button matches the visor trim color.

• Durable six-panel construction and adjustable self-material strap with hook-and-loop closure.


/** * Product Page Enhancement Script * * This script: * 1. Moves content from a specified heading to underneath the gallery (vanilla JS) * 2. Manages product browsing history (jQuery) */ // ===== PART 1: Content Mover (Vanilla JS) ===== (() => { // Function to move content from a heading to below the gallery const moveContentBelowGallery = (headingSelector, gallerySelector) => { // Find the target heading const heading = document.querySelector(headingSelector); if (!heading) return; // Exit if heading not found // Find the gallery element const gallery = document.querySelector(gallerySelector); if (!gallery) return; // Exit if gallery not found // Create a container for the content to be moved const movedContentContainer = document.createElement('div'); movedContentContainer.className = 'moved-content-container'; // Collect the heading and all its following siblings const contentToMove = [heading]; let currentElement = heading.nextElementSibling; while (currentElement) { contentToMove.push(currentElement); currentElement = currentElement.nextElementSibling; } // Add all content to the new container contentToMove.forEach(element => { // Clone the element to avoid reference issues const clonedElement = element.cloneNode(true); movedContentContainer.appendChild(clonedElement); // Remove the original element element.parentNode.removeChild(element); }); // Insert the new container after the gallery gallery.insertAdjacentElement('afterend', movedContentContainer); return movedContentContainer; }; // Add a custom contains selector for case-insensitive text matching if (!Element.prototype.matches) { Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; } // Override the querySelector method to support :contains() const originalQuerySelector = Document.prototype.querySelector; Document.prototype.querySelector = function(selector) { if (selector.includes(':contains(')) { // Extract the text content from the selector const match = selector.match(/:contains\("([^"]+)"\)/); if (match) { const textToFind = match[1]; const baseSelector = selector.replace(/:contains\("([^"]+)"\)/, ''); // Find all elements that match the base selector const elements = document.querySelectorAll(baseSelector); // Return the first one that contains the text for (const element of elements) { if (element.textContent.includes(textToFind)) { return element; } } return null; } } // Fall back to the original method for standard selectors return originalQuerySelector.call(this, selector); }; // Make the function globally available if needed window.moveContentBelowGallery = moveContentBelowGallery; // Execute the function when DOM is fully loaded document.addEventListener('DOMContentLoaded', () => { // Call with specific selectors for this page moveContentBelowGallery('h2:contains("See the BOSS 4-in-1 Ultra Floor System in Action:")', '.gallery'); }); })(); // ===== PART 2: Product History Management (jQuery) ===== $(function() { // Check and clear redirect flag if it exists if (sessionStorage['has-redirect']) { sessionStorage.removeItem('has-redirect'); } // Product History jQuery plugin $.fn.productHistory = function(historyItem) { if (historyItem != null) add(historyItem); var history = getHistory(historyItem); if (history.length > 0) { $(this).append(`
Recently Viewed Products
`); const historyContainer = $('
'); history.forEach(item => { var template = ``; historyContainer.append(template); }); $(this).append(historyContainer); } }; // Add an item to history function add(historyItem) { var history = getHistory(historyItem); history.splice(0, 0, historyItem); history = history.slice(0, 5); setHistory(history); }; // Get product history from cookies function getHistory(historyItem) { var history = decodeURIComponent(document.cookie?.split('; ')?.find(x => x?.startsWith('productHistory'))?.substring(15)); if (history === 'null' || history === 'undefined' || !history) return []; try { history = JSON.parse(history); var filteredHistory = $.grep(history, function(h) { return h.url != historyItem.url; }); return filteredHistory; } catch (e) { console.error("Error parsing product history:", e); return []; } } // Save product history to cookies function setHistory(productHistoryCollection) { let history = encodeURIComponent(JSON.stringify(productHistoryCollection)); const d = new Date(); d.setTime(d.getTime() + (24 * 60 * 60 * 1000)); //24 hour expire let expires = "expires=" + d.toUTCString(); document.cookie = "productHistory=" + history + ";" + expires + ";path=/"; } // Setup product history tracking var historyItem = { url: window.location.href, image: $('#product-rail .gallery .primary img').attr('src'), description: $('#product-inner h1,#product-main h1').first().text().trim() }; if ($('#product-history-container').length < 1) { $('#related-product-sets').after(''); } if ($('#product-history-container').text().trim().length < 1) { $('#product-history-container').productHistory(historyItem); } }); // Move in-stock labels on window load $(window).on('load', function() { if (document.querySelector('.mono-item-product')) { $('span[class*="stock"]').appendTo('#product-items .product-item .purchase'); } });