PageSourceSearch

https://www.rapiddirect.com/wp-content/plugins/rd-drag-drop-uploader/script.js?v1.0

js rapiddirect.com collected 2026-10-02 16:17:23 UTC 3,764 bytes, 102 lines download raw bytes

1const uploaderResults = {};
2document.querySelectorAll('.uploader-rd').forEach(container => {
3    const name = container.dataset.name;
4    uploaderResults[name] = [];
5    const dropZone = container.querySelector('.drop-zone');
6    const fileInput = container.querySelector('.file-input');
7    const uploadBtn = container.querySelector('.upload-btn-uploader');
8    const fileList = container.querySelector('.file-list');
9
10    uploadBtn.addEventListener('click', () => fileInput.click());
11    fileInput.addEventListener('change', () => handleFiles(fileInput.files));
12
13    dropZone.addEventListener('dragover', (e) => {
14        e.preventDefault();
15        dropZone.classList.add('dragover');
16    });
17
18    dropZone.addEventListener('dragleave', () => {
19        dropZone.classList.remove('dragover');
20    });
21
22    dropZone.addEventListener('drop', (e) => {
23        e.preventDefault();
24        dropZone.classList.remove('dragover');
25        handleFiles(e.dataTransfer.files);
26    });
27
28    function handleFiles(files) {
29        const allowedExtensions = ['stp', 'step', 'stl', 'igs', 'iges', 'prt', 'sldprt', 'sat', 'x_t', 'jpg', 'jpeg', 'png', 'pdf', 'zip', 'rar'];
30        const maxSizeMB = 50;
31
32        Array.from(files).forEach(file => {
33            const ext = file.name.split('.').pop().toLowerCase();
34            const sizeMB = file.size / (1024 * 1024);
35
36            if (!allowedExtensions.includes(ext)) {
37                alert(`File "${file.name}" has an unsupported format.`);
38                return;
39            }
40
41            if (sizeMB > maxSizeMB) {
42                alert(`File "${file.name}" exceeds the "${maxSizeMB}"MB limit.`);
43                return;
44            }
45
46            const fileElement = document.createElement('div');
47            fileElement.className = 'file-item';
48
49            const fileName = document.createElement('div');
50            fileName.className = 'file-name';
51            fileName.textContent = file.name;
52
53            const progressContainer = document.createElement('div');
54            progressContainer.className = 'progress-container';
55
56            const progressBar = document.createElement('div');
57            progressBar.className = 'progress-bar';
58
59            progressContainer.appendChild(progressBar);
60            fileElement.appendChild(fileName);
61            fileElement.appendChild(progressContainer);
62            fileList.appendChild(fileElement);
63
64            simulateProgress(progressBar, async () => {
65                try {
66                    const result = await fileUpload(file);
67                    uploaderResults[name].push(result.data);
68                    progressBar.style.background = '#ea543f';
69                    console.log(`Uploaded ${file.name} to ${name}:`, result);
70                } catch (err) {
71                    progressBar.style.background = 'red';
72                    console.error(`Error uploading ${file.name} to ${name}:`, err);
73                }
74            });
75        });
76    }
77
78    function simulateProgress(bar, callback) {
79        let percent = 0;
80        const interval = setInterval(() => {
81            percent += Math.random() * 15;
82            bar.style.width = `${Math.min(percent, 95)}%`;
83            if (percent >= 95) {
84                clearInterval(interval);
85                callback().then(() => {
86                    bar.style.width = '100%';
87                });
88            }
89        }, 200);
90    }
91});
92async function fileUpload(file) {
93    const form = new FormData();
94    form.append('type', 'file');
95    form.append('file', file);
96    const response = await fetch('https://app.rapiddirect.com/api/5d15ed1791c1c/', {
97        method: 'POST',
98        body: form
99    });
100    if (!response.ok) throw new Error('Upload failed');
101    return await response.json();
102}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.