Readd the ability to find a nonprofit on the p2p campaign page
This commit is contained in:
		
							parent
							
								
									1bb26cebbf
								
							
						
					
					
						commit
						eec6744ac0
					
				
					 1 changed files with 112 additions and 0 deletions
				
			
		|  | @ -1,3 +1,115 @@ | ||||||
| // License: LGPL-3.0-or-later
 | // License: LGPL-3.0-or-later
 | ||||||
| require('../new/peer_to_peer_wizard') | require('../new/peer_to_peer_wizard') | ||||||
| require('../../common/image_uploader') | require('../../common/image_uploader') | ||||||
|  | 
 | ||||||
|  | var request = require("../../common/client") | ||||||
|  | 
 | ||||||
|  | // setting up some default values
 | ||||||
|  | appl.def('is_signing_up', true) | ||||||
|  |   .def('selected_result_index', -1) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | appl.def('search_nonprofits', function(value){ | ||||||
|  |   // keyCode 13 is the return key.
 | ||||||
|  |   // this conditional just clears the dropdown
 | ||||||
|  |   if(event.keyCode === 13) { | ||||||
|  |     appl.def('search_results', []) | ||||||
|  |     return | ||||||
|  |   } | ||||||
|  |   // when the user starts typing,
 | ||||||
|  |   // it sets the selected_results key to false
 | ||||||
|  |   appl.def('selected_result', false) | ||||||
|  | 
 | ||||||
|  |   // if the the input is empty, it clears the dropdown
 | ||||||
|  |   if (!value) { | ||||||
|  |     appl.def('search_results', []) | ||||||
|  |     return | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // logic for controlling the dropdown options with up
 | ||||||
|  |   // and down arrows
 | ||||||
|  |   if (returnUpOrDownArrow() && appl.search_results && appl.search_results.length) { | ||||||
|  |     event.preventDefault() | ||||||
|  |     setIndexWithArrows(returnUpOrDownArrow()) | ||||||
|  |     return | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // if the input is not an up or down arrow or an empty string
 | ||||||
|  |   // or a return key, then it searches for nonprofits
 | ||||||
|  |   utils.delay(300, function(){ajax_nonprofit_search(value)}) | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | function ajax_nonprofit_search(value){ | ||||||
|  |   request.get('/nonprofits/search?npo_name=' + value).end(function(err, resp){ | ||||||
|  |     if(!resp.body) { | ||||||
|  |       appl.def('search_results', []) | ||||||
|  |       appl.notify("Sorry, we couldn't find any nonprofits containing the word '" + value + "'") | ||||||
|  |     } else { | ||||||
|  |       appl.def('selected_result_index', -1) | ||||||
|  |       appl.def('search_results', resp.body) | ||||||
|  |     } | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | function returnUpOrDownArrow() { | ||||||
|  |   var keyCode = event.keyCode | ||||||
|  |   if(keyCode === 38) | ||||||
|  |     return 'up' | ||||||
|  |   if(keyCode === 40) | ||||||
|  |     return 'down' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | function setIndexWithArrows(dir) { | ||||||
|  |   if(dir === 'down') { | ||||||
|  |     var search_length =  appl.search_results.length -1 | ||||||
|  |     appl.def('selected_result_index', appl.selected_result_index === search_length | ||||||
|  |       ?  search_length | ||||||
|  |       : appl.selected_result_index += 1) | ||||||
|  |   } else { | ||||||
|  |     appl.def('selected_result_index', appl.selected_result_index === 0 | ||||||
|  |       ? 0 | ||||||
|  |       : appl.selected_result_index -= 1) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | appl.def('select_result',  { | ||||||
|  |   with_arrows:  function(i, node) { | ||||||
|  |     addSelectedClass(appl.prev_elem(node)) | ||||||
|  |     var selected = appl.search_results[appl.selected_result_index] | ||||||
|  |     app.nonprofit_id = selected.id | ||||||
|  |     appl.def('selected_result', selected) | ||||||
|  |     utils.change_url_param('npo_id', selected.id, '/peer-to-peer') | ||||||
|  |   }, | ||||||
|  |   with_click:  function(i, node) { | ||||||
|  |     appl.def('selected_result_index', i) | ||||||
|  |     addSelectedClass(appl.prev_elem(node)) | ||||||
|  |     var selected = appl.search_results[i] | ||||||
|  |     app.nonprofit_id = selected.id | ||||||
|  |     appl.def('selected_result', selected) | ||||||
|  |     appl.def('search_results', []) | ||||||
|  |     utils.change_url_param('npo_id', selected.id, '/peer-to-peer') | ||||||
|  |   } | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | function addSelectedClass(node) { | ||||||
|  |   if(!node || !node.parentElement) return | ||||||
|  |   var siblings = node.parentElement.querySelectorAll('li') | ||||||
|  |   var len = siblings.length | ||||||
|  |   while(len--){siblings[len].className=''} | ||||||
|  |   node.className = 'is-selected' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // this is for clearing the dropdown
 | ||||||
|  | var main = document.querySelector('main') | ||||||
|  | 
 | ||||||
|  | main.onclick = function(ev) { | ||||||
|  |   var node = ev.target.nodeName | ||||||
|  |   if(node === 'INPUT' || node === 'BUTTON') { | ||||||
|  |     return | ||||||
|  |   } | ||||||
|  |   appl.def('search_results', []) | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Eric Schultz
						Eric Schultz