javascript:(function(){
	console.log('bookmarklet "headings" was called');
	document.querySelectorAll('.bookmarklet_notice_headings').forEach(el => el.remove());
	
	let color_green = '#186839';
	let bg_color_green = '#97e7b9';
	
	let color_red = '#71180e';
	let bg_color_red = '#f4aaa4';
	
	function run_bm_headings() {
		let headings = Array.from(document.querySelectorAll('h1, h2, h3, h4, h5, h6'));
		let roleHeadings = Array.from(document.querySelectorAll('[role="heading"][aria-level]'));
		
		roleHeadings.forEach(roleHeading => {
			let level = parseInt(roleHeading.getAttribute('aria-level'));
			if (!isNaN(level) && level >= 1 && level <= 6) {
				roleHeading.dataset.headingLevel = level;
				headings.push(roleHeading);
			}
		});
		
		if (headings.length === 0) {
			bm_headings_show_summary('warn', 'Немає заголовків на цій сторінці. Ймовірно, це порушення.', '#825500', '#fddb9b');
			return;
		}
		
		let x;
		let messages = [];
		let lastHeadingLevel = 0;
		
		headings.forEach((heading, index) => {
			let tagName = heading.tagName ?? '';
			tagName = tagName.toLowerCase();
			let isNative = tagName.match(/^h\d/);
			let currentLevel = isNative ? parseInt(heading.tagName[1]) : parseInt(heading.dataset.headingLevel);
			
			let startTagSpan = document.createElement('span');
			startTagSpan.className = 'bookmarklet_notice_headings';
			startTagSpan.style.backgroundColor = 'yellow';
			startTagSpan.style.color = 'black';
			startTagSpan.textContent = (isNative) ? `<${tagName}>` : `<${tagName} role="heading" aria-level="${currentLevel}">`;
			
			let endTagSpan = document.createElement('span');
			endTagSpan.className = 'bookmarklet_notice_headings';
			endTagSpan.style.backgroundColor = 'yellow';
			endTagSpan.style.color = 'black';
			endTagSpan.textContent = `</${tagName}>`;
			
			heading.prepend(startTagSpan);
			heading.append(endTagSpan);
			
			if (index === 0 && currentLevel > 1) {
				x = 'Пропущено рівень h1.';
				bm_headings_add_message(heading, x, color_red, bg_color_red);
				messages.push(x);
			}
			
			if (lastHeadingLevel > 0 && currentLevel > lastHeadingLevel + 1) {
				let missedLevels = [];
				let counter = 0;
				for (let i = lastHeadingLevel + 1; i < currentLevel; i++) {
					missedLevels.push('h' + i);
					counter++;
				}
				let wording = (counter > 1) ? 'рівні' : 'рівень';
				x = 'Пропущено '+wording+' '+missedLevels.join(', ')+'.';
				bm_headings_add_message(heading, x, color_red, bg_color_red);
				messages.push(x);
			}
			
			lastHeadingLevel = currentLevel;
		});
		
		let texts = '';
		if (messages.length > 0) {
			texts = 'Список виявлених проблем:';
			messages.forEach(message => {
				texts += '<br><br>'+message;
			});
			bm_headings_show_summary('bad', texts, color_red, bg_color_red);
		} else {
			texts = 'Заголовки є, проблем не виявлено<br>(але потрібно перевірити на коректність і логічність).';
			bm_headings_show_summary('good', texts, color_green, bg_color_green);
		}
	}
	
	function bm_headings_add_message(element, text, color, bgColor) {
		let message = document.createElement('div');
		message.className = 'bookmarklet_notice_headings';
		message.textContent = '❌ '+text;
		message.style.color = color;
		message.style.backgroundColor = bgColor;
		message.style.padding = '8px';
		message.style.fontWeight = 'bold';
		element.parentNode.insertBefore(message, element);
	}
	
	function bm_headings_show_summary(status, text, color='#000', bg_color='#eee') {
		let statuses = {'good' : '✔️', 'bad' : '❌', 'warn' : '⚠️'};
		status = statuses[status] ?? statuses['warn'];
		let msg = document.createElement('div');
		msg.className = 'bookmarklet_notice_headings';
		msg.style.position = 'fixed';
		msg.style.top = '0';
		msg.style.right = '0';
		msg.style.fontWeight = 'bold';
		msg.style.padding = '10px';
		msg.style.zIndex = '9999';
		msg.style.color = color;
		msg.style.backgroundColor = bg_color;
		msg.innerHTML = `
		<div style="display: flex; flex-direction: row; justify-content: space-between; align-items: flex-start">
			<div>`+status+`</div>
			<div style="margin-left: 10px">`+text+`</div>
			<div style="margin-left: 10px">
				<span role="button" tabindex="0" aria-label="Видалити зі сторінки наслідки застосування букмарклета Заголовки" onclick="document.querySelectorAll('.bookmarklet_notice_headings').forEach(el => el.remove());" style="cursor: pointer">✖</span>
			</div>
		</div>`;
		document.body.insertBefore(msg, document.body.firstChild);
	}
	
	setTimeout(function(){
		run_bm_headings();
	}, 200);
})();