Newer
Older
GrowiCustomScript / CustomScript.js
@KM KM on 29 Dec 3 KB first commit
/* 
 <div class="modify" data-youtube='95Lo9kiikOA'></div>
 <div class="modify" data-isbn13='9784005009916'></div>
 <div class="modify" data-metabase='abac037e-f970-4481-b69d-5b28ddeb2a2c'></div>

iframe.youtube-16-9 {
  width: 100%;
  height: auto;
  aspect-ratio: 1.78;
  max-width: 768px;
}
iframe.metabase-16-9 {
  width: 100%;
  height: auto;
  aspect-ratio: 1.78;
  max-width: 768px;
}
 */
window.addEventListener('load', () => {

	// !Change it!
	const amazonLogo = '/attachment/677116aa307fe184858fd549';

	const isbn10to13 = (code) => {
		var newCode="978" + code.substring(0,9);
		return newCode + checksum13(newCode);
	};

	const isbn13to10 = (code) => {
		const oldCode = code.substring(3,12);
		return oldCode + checksum10(oldCode);
	};

	const checksum10 = (code) => {
		let sum=0;
		for( cnt=0 ; cnt<9 ; cnt++ ){
			sum=sum + (code.charAt(cnt)-'0') * (10-cnt);
		}
		checksum = ( 11 - (sum % 11) );
		return (checksum == 11 ? "0" : (checksum == 10 ? "X" : checksum)) ;
	};

	const checksum13 = (code) => {
		var sum=0;
		for( cnt=0 ; cnt<12 ; cnt++ ){
			sum=sum + (code.charAt(cnt)-'0') * (cnt%2==0 ? 1 : 3);
		}
		checksum = ( 10 - (sum % 10) );
		return checksum;
	};

	const handleUrlChange = () => {
		document.querySelectorAll('div.modify').forEach((dtag) => {
			try {
        if (0 < dtag.children.length) {
          // if there are already contents in dtag.
          return;
        } else if (dtag.dataset.youtube) {
          const movie_id = dtag.dataset.youtube;
          dtag.innerHTML = `<iframe class=\"youtube-16-9\" src=\"https://www.youtube.com/embed/${movie_id}\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>`;
        } else if (dtag.dataset.isbn13) {
          const isbn = dtag.dataset.isbn13.trim();
          const asin = isbn13to10(isbn);
          dtag.innerHTML = `<a href=\"https://www.amazon.co.jp/o/ASIN/${asin}\"><img src=\"https://img.hanmoto.com/bd/img/${isbn}.jpg\" alt=\"${isbn}\"/></a>`;
        } else if (dtag.dataset.isbn10) {
          const asin = dtag.dataset.isbn10.trim();
          const isbn = isbn10to13(asin);
          dtag.innerHTML = `<a href=\"https://www.amazon.co.jp/o/ASIN/${asin}\"><img src=\"https://img.hanmoto.com/bd/img/${isbn}.jpg\" alt=\"${isbn}\"/></a>`;
        } else if (dtag.dataset.asin) {
          const asin = dtag.dataset.asin;
          dtag.innerHTML = `<a href=\"https\://www.amazon.co.jp/o/ASIN/${asin}\"><img src=\"${amazonLogo}\" alt=\"${asin}\"/></a>`;
        } else if (dtag.dataset.metabase) {
          const dashboard_id = dtag.dataset.metabase;
          dtag.innerHTML = `<iframe class=\"metabase-16-9\" src=\"https://ir-db.tsukuba-tech.ac.jp/public/question/${dashboard_id}\" title=\"Metabase Dashboard\" frameborder=\"0\" allowfullscreen></iframe>`;
        }
			} catch (e) {
				console.log(e);
			}
		});
	};

	// ---- onload event ----
	requestAnimationFrame((timestamp)=>{
		handleUrlChange();
	});
	
	// ---- url change event (observe body changed) ----
	let href = location.href;
	const observer = new MutationObserver((mutations) => {
		if (href == location.href) {
			return;
		}
		
		href = location.href;
		requestAnimationFrame((timestamp) => {
			handleUrlChange();
		});
	});

	const config = {
		characterData: true,
		subtree: true
	};

	observer.observe(document.body, config);
});