Remove use of jQuery in conservancy.js
This is the first step towards removing jQuery from the site.
This commit is contained in:
		
							parent
							
								
									7b1ffebcfb
								
							
						
					
					
						commit
						0d25e1a87d
					
				
					 1 changed files with 53 additions and 39 deletions
				
			
		|  | @ -5,48 +5,62 @@ | |||
| **  Find a copy of GPL at https://sfconservancy.org/GPLv3
 | ||||
| */ | ||||
| 
 | ||||
| "use strict"; | ||||
| 'use strict'; | ||||
| 
 | ||||
| function qs (selector) { | ||||
| function qs (selector, parent) { | ||||
|   return document.querySelector(selector); | ||||
| } | ||||
| 
 | ||||
| function init () { | ||||
|     /* When the browser doesn't support any video source, replace it | ||||
|        with the HTML inside the <video> element. */ | ||||
|     var showVideoInnerHTML = function(event) { | ||||
|         var video = event.target.parentNode; | ||||
|         var div = document.createElement('div'); | ||||
|         div.classList = video.classList; | ||||
|         div.innerHTML = video.innerHTML; | ||||
|         video.parentNode.replaceChild(div, video); | ||||
|     } | ||||
|     $('video').each(function(index, video) { | ||||
|         $('source', video).last().on('error', showVideoInnerHTML); | ||||
|     }); | ||||
| 
 | ||||
|     $('input[name=on0]:radio').on('change', function(event, duration) { | ||||
|         var input = $(this); | ||||
|         var wantShirt = input.val() == "wantGiftYes"; | ||||
|         var form = input.parents('form').last(); | ||||
|         var tShirtSelector = $('.t-shirt-size-selector', form); | ||||
|         $('input', tShirtSelector).prop('disabled', wantShirt); | ||||
|         $('input[name=no_shipping]', form).val(wantShirt ? '2' : '0'); | ||||
|         if (wantShirt) { | ||||
|             tShirtSelector.slideDown(duration); | ||||
|         } else { | ||||
|             tShirtSelector.slideUp(duration); | ||||
|         } | ||||
|     }).filter(':checked').trigger('change', 0); | ||||
| 
 | ||||
|     // Open mobile/search menu.
 | ||||
|     qs('#menu-icon').addEventListener('click', function(event) { | ||||
|       qs('#navbar').classList.toggle('mobile'); | ||||
|     }); | ||||
|     qs('#search-icon').addEventListener('click', function(event) { | ||||
|       qs('#navbar').classList.toggle('mobile'); | ||||
|       qs('#search-query').focus(); | ||||
|     }); | ||||
| function qsa (selector, parent) { | ||||
|   return document.querySelectorAll(selector); | ||||
| } | ||||
| 
 | ||||
| init(); | ||||
| function hide(el) { | ||||
|     el.style.display = 'none'; | ||||
| } | ||||
| 
 | ||||
| function show(el) { | ||||
|     el.style.display = ''; | ||||
| } | ||||
| 
 | ||||
| function showVideoInnerHTML (event) { | ||||
|     let video = event.target.parentNode; | ||||
|     let div = document.createElement('div'); | ||||
|     div.classList = video.classList; | ||||
|     div.innerHTML = video.innerHTML; | ||||
|     video.parentNode.replaceChild(div, video); | ||||
| } | ||||
| 
 | ||||
| function toggleShirtSize (form) { | ||||
|     let wantShirt = form.elements['on0'].value === 'wantGiftYes'; | ||||
|     let shirtSizeSelector = form.elements['os0']; | ||||
|     shirtSizeSelector.disabled = !wantShirt; | ||||
|     form.elements['no_shipping'].value = wantShirt ? '2' : '0'; | ||||
|     if (wantShirt) { | ||||
|         show(shirtSizeSelector); | ||||
|     } else { | ||||
|         hide(shirtSizeSelector); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| /* When the browser doesn't support any video source, replace it | ||||
| with the HTML inside the <video> element. */ | ||||
| qsa('video').forEach(function(video, _index) { | ||||
|     let last_source = Array.from(qsa('source', video)).at(-1); | ||||
|     last_source.addEventListener('error', showVideoInnerHTML); | ||||
| }); | ||||
| 
 | ||||
| /* Hide the T-shirt size selector when not needed. */ | ||||
| qsa('.supporter-form').forEach(function(form) { | ||||
|     toggleShirtSize(form);  // set initial state
 | ||||
|     form.addEventListener('change', () => toggleShirtSize(form)); | ||||
| }); | ||||
| 
 | ||||
| // Open mobile/search menu.
 | ||||
| qs('#menu-icon').addEventListener('click', function(event) { | ||||
|     qs('#navbar').classList.toggle('mobile'); | ||||
| }); | ||||
| qs('#search-icon').addEventListener('click', function(event) { | ||||
|     qs('#navbar').classList.toggle('mobile'); | ||||
|     qs('#search-query').focus(); | ||||
| }); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue