90 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Vanilla Javascript to show and hide the API specific settings
 | |
|  * for the remote install feature.
 | |
|  *
 | |
|  * @class  Fragen\GitHub_Updater\Install
 | |
|  * @since  8.5.0
 | |
|  * @access public
 | |
|  * @package	github-updater
 | |
|  */
 | |
| 
 | |
| (function () {
 | |
| 
 | |
| 	// Hide non-default (Bitbucket & GitLab) settings on page load.
 | |
| 	let nonDefault = ['bitbucket', 'gitlab', 'gitea', 'zipfile'];
 | |
| 
 | |
| 	nonDefault.forEach(function (item) {
 | |
| 		let parents = getParents(item, 'tr');
 | |
| 		displayNone(parents);
 | |
| 	});
 | |
| 
 | |
| 	// When the api selector changes.
 | |
| 	let selects = document.querySelector('select[ name="github_updater_api" ]');
 | |
| 
 | |
| 	// Only run when on proper tab.
 | |
| 	if (selects !== null) {
 | |
| 		selects.addEventListener('change', function () {
 | |
| 			let defaults = ['github', 'bitbucket', 'gitlab', 'gitea', 'zipfile'];
 | |
| 
 | |
| 			// Create difference array.
 | |
| 			let hideMe = remove(defaults, this.value);
 | |
| 
 | |
| 			// Hide items with unselected api's classes.
 | |
| 			hideMe.forEach(function (item) {
 | |
| 				let parents = getParents(item, 'tr');
 | |
| 				displayNone(parents);
 | |
| 			});
 | |
| 
 | |
| 			// Show selected setting.
 | |
| 			[this.value].forEach(function (item) {
 | |
| 				let parents = getParents(item, 'tr');
 | |
| 				display(parents);
 | |
| 			});
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	// Remove selected element from array and return array.
 | |
| 	function remove(array, element) {
 | |
| 		const index = array.indexOf(element);
 | |
| 		if (index !== -1) {
 | |
| 			array.splice(index, 1);
 | |
| 		}
 | |
| 		return array;
 | |
| 	}
 | |
| 
 | |
| 	// Hide element.
 | |
| 	function displayNone(array) {
 | |
| 		array.forEach((item) => {
 | |
| 			item.style.display = 'none';
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	// Display element.
 | |
| 	function display(array) {
 | |
| 		array.forEach((item) => {
 | |
| 			item.style.display = '';
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	// Return query and selector for `$(query).parents.(selector)`.
 | |
| 	function getParents(item, selector) {
 | |
| 		return vanillaParents(document.querySelectorAll('input.'.concat(item, '_setting')), selector);
 | |
| 	}
 | |
| 
 | |
| 	// Vanilla JS version of jQuery `$(query).parents(selector)`.
 | |
| 	function vanillaParents(element, selector) {
 | |
| 		let parents = [];
 | |
| 		if (NodeList.prototype.isPrototypeOf(element)) {
 | |
| 			element.forEach((item) => {
 | |
| 				element = item.parentElement.closest(selector);
 | |
| 				parents.push(element);
 | |
| 			});
 | |
| 		} else {
 | |
| 			element = item.parentElement.closest(selector);
 | |
| 			parents.push(element);
 | |
| 		}
 | |
| 		return parents;
 | |
| 	}
 | |
| 
 | |
| })();
 |