PageSourceSearch

https://www.webrtc-experiment.com/FileSelector.js

js webrtc-experiment.com collected 2026-10-01 12:18:14 UTC 3,490 bytes, 133 lines download raw bytes

1function FileSelector() {
2    var selector = this;
3
4    var noFileSelectedCallback = function() {};
5
6    selector.selectSingleFile = function(callback, failure) {
7        if (failure) {
8            noFileSelectedCallback = failure;
9        }
10
11        selectFile(callback);
12    };
13    selector.selectMultipleFiles = function(callback, failure) {
14        if (failure) {
15            noFileSelectedCallback = failure;
16        }
17
18        selectFile(callback, true);
19    };
20    selector.selectDirectory = function(callback, failure) {
21        if (failure) {
22            noFileSelectedCallback = failure;
23        }
24
25        selectFile(callback, true, true);
26    };
27
28    selector.accept = '*.*';
29
30    function selectFile(callback, multiple, directory) {
31        callback = callback || function() {};
32
33        var file = document.createElement('input');
34        file.type = 'file';
35
36        if (multiple) {
37            file.multiple = true;
38        }
39
40        if (directory) {
41            file.webkitdirectory = true;
42        }
43
44        file.accept = selector.accept;
45
46        file.onclick = function() {
47            file.clickStarted = true;
48        };
49
50        document.body.onfocus = function() {
51            setTimeout(function() {
52                if (!file.clickStarted) return;
53                file.clickStarted = false;
54
55                if (!file.value) {
56                    noFileSelectedCallback();
57                }
58            }, 500);
59        };
60
61        file.onchange = function() {
62            if (multiple) {
63                if (!file.files.length) {
64                    console.error('No file selected.');
65                    return;
66                }
67
68                var arr = [];
69                Array.from(file.files).forEach(function(file) {
70                    file.url = file.webkitRelativePath;
71                    arr.push(file);
72                });
73                callback(arr);
74                return;
75            }
76
77            if (!file.files[0]) {
78                console.error('No file selected.');
79                return;
80            }
81
82            callback(file.files[0]);
83
84            file.parentNode.removeChild(file);
85        };
86        file.style.display = 'none';
87        (document.body || document.documentElement).appendChild(file);
88        fireClickEvent(file);
89    }
90
91    function getValidFileName(fileName) {
92        if (!fileName) {
93            fileName = 'file' + (new Date).toISOString().replace(/:|\.|-/g, '')
94        }
95
96        var a = fileName;
97        a = a.replace(/^.*[\\\/]([^\\\/]*)$/i, "$1");
98        a = a.replace(/\s/g, "_");
99        a = a.replace(/,/g, '');
100        a = a.toLowerCase();
101        return a;
102    }
103
104    function fireClickEvent(element) {
105        if (typeof element.click === 'function') {
106            element.click();
107            return;
108        }
109
110        if (typeof element.change === 'function') {
111            element.change();
112            return;
113        }
114
115        if (typeof document.createEvent('Event') !== 'undefined') {
116            var event = document.createEvent('Event');
117
118            if (typeof event.initEvent === 'function' && typeof element.dispatchEvent === 'function') {
119                event.initEvent('click', true, true);
120                element.dispatchEvent(event);
121                return;
122            }
123        }
124
125        var event = new MouseEvent('click', {
126            view: window,
127            bubbles: true,
128            cancelable: true
129        });
130
131        element.dispatchEvent(event);
132    }
133}

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.