1export function create(element, hxDropdownDotnetObjectReference, options, subscribeToHideEvent) { 2 if (!element) { 3 return; 4 } 5 element.hxDropdownDotnetObjectReference = hxDropdownDotnetObjectReference; 6 if (subscribeToHideEvent) { 7 element.addEventListener('hide.bs.dropdown', handleDropdownHide); 8 } 9 element.addEventListener('shown.bs.dropdown', handleDropdownShown); 10 element.addEventListener('hidden.bs.dropdown', handleDropdownHidden); 11 12 if (options) { 13 prepareOptions(options); 14 const d = new bootstrap.Dropdown(element, options); 15 } 16 else { 17 const d = new bootstrap.Dropdown(element); 18 } 19} 20 21function prepareOptions(options) { 22 if (options.reference !== undefined) { 23 if (options.reference === null) { 24 options.reference = "toggle"; // default Bootstrap value 25 } 26 else if (options.reference.startsWith("#")) { 27 options.reference = document.querySelector(options.reference); 28 } 29 } 30} 31 32export function update(element, options) { 33 if (!element) { 34 return; 35 } 36 37 const dOld = bootstrap.Dropdown.getInstance(element); 38 if (dOld) { 39 dOld.dispose(); 40 } 41 42 if (options) { 43 prepareOptions(options); 44 const d = new bootstrap.Dropdown(element, options); 45 } 46 else { 47 const d = new bootstrap.Dropdown(element); 48 } 49} 50 51export function show(element) { 52 const d = bootstrap.Dropdown.getInstance(element); 53 if (d) { 54 d.show(); 55 } 56} 57 58export function hide(element) { 59 const d = bootstrap.Dropdown.getInstance(element); 60 if (d) { 61 d.hide(); 62 } 63} 64 65function handleDropdownShown(event) { 66 event.target.hxDropdownDotnetObjectReference.invokeMethodAsync('HxDropdown_HandleJsShown'); 67}; 68 69async function handleDropdownHide(event) { 70 const d = bootstrap.Dropdown.getInstance(event.target); 71 72 if (d.hidePreventionDisabled) { 73 d.hidePreventionDisabled = false; 74 return; 75 } 76 77 event.preventDefault(); 78 79 const cancel = await event.target.hxDropdownDotnetObjectReference.invokeMethodAsync('HxDropdown_HandleJsHide'); 80 if (!cancel) { 81 d.hidePreventionDisabled = true; 82 d.hide(); 83 } 84}; 85 86function handleDropdownHidden(event) { 87 event.target.hxDropdownDotnetObjectReference.invokeMethodAsync('HxDropdown_HandleJsHidden'); 88}; 89 90export function dispose(element) { 91 if (!element) { 92 return; 93 } 94 element.removeEventListener('shown.bs.dropdown', handleDropdownShown); 95 element.removeEventListener('hidden.bs.dropdown', handleDropdownHidden); 96 element.hxDropdownDotnetObjectReference = null; 97 const d = bootstrap.Dropdown.getInstance(element); 98 if (d) { 99 d.dispose(); 100 } 101}
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.