Cross Post Hatena (+ del.icio.us)

By cho45 Last update Mar 5, 2006 — Installed 737 times.
// ==UserScript==
// @name        Cross Post Hatena (+ del.icio.us)
// @namespace   http://lowreal.net/
// @include     http://b.hatena.ne.jp/*
// @include     http://b.hatena.ne.jp/add?mode=confirm*
// ==/UserScript==
// 投稿時刻を拾えないため、はてなで[編集]すると、
// del.icio.us であがってしまう。


try {
	// post & edit
	(function () {
		var form = document.getElementById("edit_form");
		if (!form) return;

		form.addEventListener("submit", function (e) {

			var input = {};

			var inputs = form.getElementsByTagName("input");
			for (var i = 0, len = inputs.length; i < len; i++) {
				input[inputs[i].name] = encodeURIComponent(inputs[i].value);
			}


			var notes = input["comment"].replace(/^(%5B.+?%5D)+/i, '');
			var tags  = (input["comment"]
						 .match(/(%5B.+?%5D)/ig) || []).join(" ").replace(/%5B|%5D/ig, '');

			if (!input["url"]) {
				// edit mode
				var url = document.evaluate(
					["//a[../../td[@class='label'] = 'URL']"].join(""),
					document,
					null,
					XPathResult.FIRST_ORDERED_NODE_TYPE,
					null).singleNodeValue.href;
				input["url"] = encodeURIComponent(url);
			}

			var url = ["http://del.icio.us/api/posts/add?",
					   "url=", input["url"], "&",
					   "description=", input["title"], "&",
					   "extended=", notes, "&",
					   "tags=", tags
					   ].join("");

			GM_xmlhttpRequest({
				method : "GET",
				url : url,

				onload : function (req) {
					var res = new XML(req.responseText.replace(/^<\?xml.+?\?>/, ''));
					if (res.@code != "done") {
						alert("Error happend on x-posting to del.icio.us\n>" + res.@code);
					} else {
						window.status = "X-Posting to del.icio.us is done.";
					}
				},

				onerror : function (req) {
					alert(req.responseText);
				}
			});


		}, false);
	})();

	// delete
	(function () {
		function del_del(url) {
			GM_xmlhttpRequest({
				method : "GET",
				url : "http://del.icio.us/api/posts/delete?url=" + encodeURIComponent(url),

				onload : function (req) {
					var res = new XML(req.responseText.replace(/^<\?xml.+?\?>/, ''));
					if (res.@code != "done") {
						alert("Error happend on deleting on del.icio.us\n>" + res.@code);
					} else {
						window.status = "X-Posting to del.icio.us is done.";
					}
				},

				onerror : function (req) {
					alert(req.responseText);
				}
			});
		}


		var eids = document.evaluate(
			"//input[@name='eid' and ../../form[@class='delete']]",
			document,
			null,
			XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
			null);

		for (var i = 0, len = eids.snapshotLength; i < len; i++) {
			var input = eids.snapshotItem(i);
			(function () {
				var eid = input.value;
				var form = input.parentNode;
				form.addEventListener("submit", function (e) {

					var href = document.evaluate(
						["//a[@name='", eid, "']"].join(""),
						document,
						null,
						XPathResult.FIRST_ORDERED_NODE_TYPE,
						null).singleNodeValue.href;

					del_del(href);

				}, true);
			})();
		}

		var edit_del_form = document.evaluate(
			"//form[@action='./delete']",
			document,
			null,
			XPathResult.FIRST_ORDERED_NODE_TYPE,
			null).singleNodeValue;

		if (edit_del_form) {
			edit_del_form.addEventListener("submit", function (e) {
				
				var url = document.evaluate(
					["//a[../../td[@class='label'] = 'URL']"].join(""),
					document,
					null,
					XPathResult.FIRST_ORDERED_NODE_TYPE,
					null).singleNodeValue.href;
				del_del(url)
			}, true);
		}

	})();
} catch (e) { alert("XPOST.error: "+ e) }