mutations

GitHub mutations observer library script

12.04.2017 itibariyledir. En son verisyonu görün.

Bu script direkt olarak kurulamaz. Başka scriptler için bir kütüphanedir ve meta yönergeleri içerir // @require https://update.greasyfork.org/scripts/28721/187801/mutations.js

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

You will need to install an extension such as Tampermonkey to install this script.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

You will need to install an extension such as Tampermonkey to install this script.

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Zateb bir user-style yöneticim var, yükleyeyim!)

/* GitHub mutations observer library script v0.1.1
 * Detect changes to various elements and trigger an event
 * Copyright © 2017 Rob Garrison
 * License: MIT
 */
/* jshint esnext:true, unused:true */
(() => {
	"use strict";

	// prefix for event & document body class name, e.g. "ghmo:container"
	const prefix = "ghmo",
		targets = {
			// pjax container (covers general, repo & gists)
			"[data-pjax-container]": {
				count: 0,
				name: "container"
			},
			// comment preview active
			".js-preview-body": {
				count: 0,
				name: "preview"
			},
			// progressively loaded comments; "# items not shown"
			// example: https://github.com/isaacs/github/issues/18
			".js-discussion": {
				count: 0,
				name: "comments"
			},
			// progressively loaded content (diff files)
			".js-diff-progressive-container, .js-diff-load-container": {
				count: 0,
				name: "diff"
			}
		},
		list = Object.keys(targets),
		container = document.querySelector("body");

	let timer;

	function fireEvents() {
		list.forEach(selector => {
			if (targets[selector].count > 0) {
				// event => "ghmo:container", "ghmo:comments"
				const event = new Event(prefix + ":" + targets[selector].name);
				document.dispatchEvent(event);
			}
			targets[selector].count = 0;
		});
	}

	// prevent script from installing more than once
	if (!container.classList.contains(prefix + "-enabled")) {
		container.classList.add(prefix + "-enabled");

		new MutationObserver(mutations => {
			mutations.forEach(mutation => {
				clearTimeout(timer);
				const target = mutation.target;
				if (target) {
					list.forEach(selector => {
						if (target.matches(selector)) {
							targets[selector].count++;
						}
					});
				}
				timer = setTimeout(() => {
					fireEvents();
				}, 100);
			});
		}).observe(container, {
			childList: true,
			subtree: true
		});

	}

})();