PageSourceSearch

https://www.flexdigital.com/wp-content/themes/FlexDigital/js/FileUpload.js?v=1687316318

js flexdigital.com collected 2026-10-07 13:59:12 UTC 2,748 bytes, 120 lines download raw bytes

1'use strict';
2
3(function() {
4	function FileUpload(o) {
5		var element;
6		var $element;
7		var wrapper;
8		var $wrapper;
9		var remove;
10		var label;
11		
12		var self = this;
13		
14		function __construct(o) {
15			element = o.element || document.getElementById(o.id);
16			if(!element) { throw 'FileUpload: invalid element'; }
17			
18			create_control();
19			
20			init_observer();
21			
22			element.addEventListener('change', element_change, false);
23			remove.addEventListener('click', remove_click, false);
24		}
25		
26		function create_control() {
27			var id = element.id;
28			
29			if('' === id) {
30				id = 'file_' + uuidv4();
31				element.id = id;
32			}
33			
34			var class_name = '' === element.className ? '' : ' ' + element.className;
35			var style_attr = element.attributes['style'];
36			var style = !style_attr ? '' : style_attr.value;
37			
38			element.removeAttribute('style');
39			element.removeAttribute['class'];
40			$element = $(element);
41			
42			wrapper = create_unselectable_element('label');
43			wrapper.className = 'file' + class_name;
44			wrapper.setAttribute('style', style);
45			wrapper.for = id;
46			
47			$wrapper = $(wrapper);
48			
49			remove = create_unselectable_element('a');
50			remove.className = 'remove';
51			wrapper.appendChild(remove);
52			
53			label = create_unselectable_element('span');
54			label.title = 'Select...';
55			label.innerHTML = 'Select....';
56			wrapper.appendChild(label);
57			
58			element.parentNode.insertBefore(wrapper, element.nextSibling);
59			wrapper.insertBefore(element, wrapper.childNodes[1]);
60		}
61		
62		function element_change(e) {
63			var arr = ('' + element.value).replace(/\\/g, '/').split('/');
64			var file = arr[arr.length - 1].trim();
65			if('' === file) {
66				$wrapper.removeClass('on');
67				file = 'Select...';
68			} else {
69				$wrapper.addClass('on');
70			}
71			
72			label.innerHTML = file;
73			label.title = file;
74		}
75		
76		function remove_click(e) {
77			e.preventDefault();
78			
79			element.value = '';
80			$wrapper.removeClass('on');
81			label.innerHTML = 'Select...';
82			label.title = 'Select...';
83			
84			return false;
85		}
86		
87		function init_observer() {
88			if(!window.MutationObserver) {
89				setInterval(update_attributes, 100);
90			} else {
91				var o = new MutationObserver(function(m_arr, o) {
92					for(var i = 0, m; m = m_arr[i]; ++i) {
93						if(element !== m.target) { continue; }
94						
95						if('attributes' === m.type) {
96							update_attributes();
97						}
98					}
99				});
100				
101				o.observe(element, { attributes: true });
102			}
103		}
104		
105		function update_attributes() {
106			$wrapper.toggleClass('input-field-invalid', $element.hasClass('input-field-invalid'));
107		}
108		
109		__construct(o);
110	}
111	
112	HTMLInputElement.prototype.file_upload = function(o) {
113		o = o || { };
114		o.element = this;
115		
116		new FileUpload(o);
117	}
118
119	window.FileUpload = FileUpload;
120})();

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.