"use strict";

window.addEventListener("load", function(event){
	// REGISTER ONCLICK HANDLERS //
	// iterate over all copylink buttons
	let copylink_button_list = document.getElementsByClassName("copylink");
	for(let one_copylink_button of copylink_button_list){
		// register onclick function
		one_copylink_button.onclick = function(){ copylink_click(this) };
		
		// add descriptive title
		one_copylink_button.title = copylink_hint_text;
	}
});



/**
* CALLBACK: Copylink was clicked.
* 
* @param self		Copylink button element.
*/
async function copylink_click(self){
	let success = true;
	
	// RETRIEVE SECTION ID //
	// try to find
	let section_id = copylink_section_id(self);
	
	// check whether search was successful
	if(section_id === null) success = false;
	
	
	// SAVE SECTION LINK TO CLIPBOARD //
	if(success){
		// build url
		let section_url = new URL("#" + section_id, window.location.href);
		
		// save to clipboard
		try {
			await navigator.clipboard.writeText(section_url);
		} catch (error){
			success = false;
		}
	}
	
	
	// FEEDBACK //
	if(success){
		// positive feedback
		self.classList.add("ti-check", "feedback-positive");
		self.classList.remove("ti-link");
		setTimeout(function(){
			self.classList.add("ti-link");
			self.classList.remove("ti-check", "feedback-positive");
		}, 2500);
		return;
	}
	
	// negative feedback
	self.classList.add("ti-x", "feedback-negative");
	self.classList.remove("ti-link");
	setTimeout(function(){
		self.classList.add("ti-link");
		self.classList.remove("ti-x", "feedback-negative");
	}, 2500);
}



/**
* HELPER: Find closest section id.
* 
* @param self		Base element.
* 
* @return			`null`:		Unable to find a section id
*					string:		Closest section id to copylink button.
*/
function copylink_section_id(self){
	// CHECK FOR ID ATTRIBUTE //
	if(self.id !== undefined && self.id !== null && self.id.length > 0){
		// found an id
		return self.id;
	}
	
	
	// STOP SEARCHING //
	// check whether element has parent
	if(self.parentElement === null || self.parentElement === undefined) return null;
	
	
	// CONTINUE SEARCHING //
	return copylink_section_id(self.parentElement);
}
