사용자:하늘/hanja-dict-tools.js

< 사용자:하늘
하늘 (토론 | 기여)님의 2021년 9월 20일 (월) 21:26 판 (Cerulean님이 사용자:Cerulean/dropdown-menu.js 문서를 넘겨주기를 만들지 않고 사용자:Cerulean/sec.js 문서로 이동했습니다: 활용해볼려고..)

참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.

  • 파이어폭스 / 사파리: Shift 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5 또는 Ctrl-R을 입력 (Mac에서는 ⌘-R)
  • 구글 크롬: Ctrl-Shift-R키를 입력 (Mac에서는 ⌘-Shift-R)
  • 인터넷 익스플로러 / 엣지: Ctrl 키를 누르면서 새로 고침을 클릭하거나, Ctrl-F5를 입력.
  • 오페라: Ctrl-F5를 입력.
/*
사용자:다메즈마님의 기본 코드를 바탕으로한 스크립트 사용자:Skim/Secretary.js를 바탕으로 사용자:Utolee90이 재조합했습니다.

코드의 기능을 하나하나 설명할려고 합니다.
*/

function randomRange(n1, n2) {
	return Math.round(Math.random() * 10000) % (n2 - n1) + n1;
}
function BookmarkStorage() {

}

BookmarkStorage.prototype.AddBookmark = function (name, url) {
	var pre = localStorage.getItem("hisyokan-bookmark-key");
	var keys = name + ";";
	if (pre != null) {
		keys = name + ";" + pre;
	}
	localStorage.setItem("hisyokan-bookmark-key", keys);
	localStorage.setItem("bookmark-" + name, url);
};
BookmarkStorage.prototype.ClearBookmark = function () {
	var pre = localStorage.getItem("hisyokan-bookmark-key");
	localStorage.clear();
	window.localStorage.clear();
};
BookmarkStorage.prototype.GetList = function () {
	var keys = localStorage.getItem("hisyokan-bookmark-key").split(";");
	var res_list = [];

	for (var i = 0; i < keys.length; i++) {
		if (keys[i].length == 0) {
			continue;
		}
		res_list.push(
			{
				name: keys[i],
				link: localStorage.getItem("bookmark-" + keys[i])
			}
		);
	}
	return res_list;
};
function GetHtmlList(list) {
	list_el = document.createElement("ul");
	$(list_el).css({
		"list-style": "none",
		"padding": 0,
		"margin": 0
	});
	for (var i = 0; i < list.length; i++) {
		var li = document.createElement("li");
		var a = document.createElement("a");
		a.href = list[i].link;
		$(a).attr("href", list[i].link);
		$(a).html(list[i].name);
		$(li).html(a);
		$(list_el).append(li);
	}
	return list_el;
}
function Mascot() {
	this.is_loaded = false;
	this.is_show = false;
	this.mascot_img_list = [];
	this.message_queue = [];
	this.now_balloon = null;
	this.is_small = true;
}

Mascot.prototype.AddImage = function (img) {
	this.mascot_img_list.push(img);
};

Mascot.prototype._show_balloon = function () {
	this.now_balloon = document.createElement("div");
	$(this.now_balloon).css("position", "fixed");
	$(this.now_balloon).css("display", "none");
	$(this.now_balloon).html(this.message_queue[0]);
	$(this.now_balloon).css("background-color", "#07F");
	$(this.now_balloon).css("color", "#FFF");
	$(this.now_balloon).css("max-width", "225px");
	$(this.now_balloon).css("padding", "16px");
	$(this.now_balloon).css("z-index", "1000");
	$(document.body).append(this.now_balloon);

	$(this.now_balloon).css("bottom", $(this.mascot_img_html).height() / 2 + 16 - $(this.now_balloon).height() / 2 + 32);

	$(this.now_balloon).css("right", $(this.mascot_img_html).width() + 32);
	$(this.now_balloon).css("border-radius", 5);
	$(this.now_balloon).fadeIn(1000);
	this.message_queue.shift();
	this.now_balloon.obj = this;
	$(this.now_balloon).click
		(
			function () {
				var obj = this.obj;
				$(obj.now_balloon).fadeOut(1000).delay(1000, function () { $(this).remove(); });
				obj.now_balloon = null;
				if (obj.message_queue.length !== 0) {
					obj._show_balloon();
				}
			}
		);
};

Mascot.prototype.Show = function () {
	if (this.is_show) return;
	this.is_show = true;
	var select = this.mascot_img_list[randomRange(0, this.mascot_img_list.length)];
	var wrap_div = document.createElement("div");
	this.mascot_img_html = document.createElement("img");
	this.mascot_img_html.obj = this;
	if (localStorage.getItem("custom_dmns_is_small") == "true") {
		this.ToSmall();
	}
	else {
		this.ToBig();
	}
	this.mascot_img_html.onload = function () {
		var obj = this.obj;
		if (localStorage.getItem("custom_dmns_is_small") == "true") {
			obj.ToSmall();
		}
		else {
			obj.ToBig();
		}
		if (obj.message_queue.length !== 0) {
			obj._show_balloon();
		}
		$(".top_s_btn").css("display", "none");
		$("#to-top-btn").css("width", $(this).width() / 2);
		$("#to-bottom-btn").css("width", $(this).width() / 2);
		obj.is_loaded = true;
	};
	$(this.mascot_img_html).click(
		function () {
			if (this.obj.is_small === false) {
				this.obj.ToSmall();
			}
			else {
				this.obj.ToBig();
			}
		});

	this.mascot_img_html.src = select;

	$(this.mascot_img_html).css("display", "block");
	$(wrap_div).css("position", "fixed");
	$(wrap_div).css("right", "16px");
	$(wrap_div).css("bottom", "16px");
	$(wrap_div).css("z-index", "1000");
	$(wrap_div).append(this.mascot_img_html);
	$(wrap_div).append("<ul style='list-style:none;padding: 0px;margin:0px;display:inline;'><li style='float:left;'><a id='to-top-btn' href='#' style='text-align:center;display:inline-block;line-height:32px;width:100%;background-color:#07F;color:#FFF;font-weight:bold;'>위</a></li><li style='float:left;'><a id='to-bottom-btn' href='#' style='text-align:center;display:inline-block;line-height:32px;width:100%;background-color:#07F;color:#FFF;font-weight:bold;'>아래</a></li><li style='float:left;'> <a id='hisyokan-bookmark' href='#' style='text-align:center;display:inline-block;line-height:32px;width:100%;background-color:#07F;color:#FFF;font-weight:bold;'>마크</a></li></ul>");
	$(document.body).append(wrap_div);
	document.getElementById("hisyokan-bookmark").obj = this;
	$("#to-top-btn").click(
		function () { $('html, body').animate({ scrollTop: 0 }, 'slow'); }
	);

	$("#to-bottom-btn").click(
		function () { $('html, body').animate({ scrollTop: document.body.scrollHeight }, 'slow'); }
	);


	$("#hisyokan-bookmark").click(
		function () {
			var menu_list_h = document.createElement("ul");
			$(menu_list_h).css("list-style", "none");
			$(menu_list_h).css("margin", 0);
			$(menu_list_h).css("padding", 0);

			var li = document.createElement("li");
			var a_tag = document.createElement("a");
			a_tag.href = "#";
			a_tag.obj = this.obj;
			$(a_tag).css("display", "inline-block");
			$(a_tag).css("line-height", "12px");
			$(a_tag).css("padding", "1px");
			$(a_tag).css("color", "#FFF");
			$(a_tag).html("이 페이지 등록");
			$(a_tag).click(
				function () {
					var link = document.location.href;
					var name = document.title;
					name = name.replace(" - 리브레 위키", "");
					var bookmark = new BookmarkStorage();
					bookmark.AddBookmark(name, link);
					this.obj.CloseMessage();
					this.obj.ShowMessage("등록되었습니다");
					return false;
				}
			);
			$(li).html(a_tag);
			$(menu_list_h).append(li);
			li = document.createElement("li");
			a_tag = document.createElement("a");
			a_tag.href = "#";
			a_tag.obj = this.obj;
			$(a_tag).css("display", "inline-block");
			$(a_tag).css("line-height", "12px");
			$(a_tag).css("padding", "1px");
			$(a_tag).css("color", "#FFF");
			$(a_tag).html("북마크 리스트");
			$(a_tag).click(
				function () {
					var bookmark = new BookmarkStorage();
					this.obj.ShowMessage(GetHtmlList(bookmark.GetList()));
					return false;
				}
			);
			$(li).html(a_tag);
			$(menu_list_h).append(li);
			li = document.createElement("li");
			a_tag = document.createElement("a");
			a_tag.href = "#";
			a_tag.obj = this.obj;
			$(a_tag).css("display", "inline-block");
			$(a_tag).css("line-height", "12px");
			$(a_tag).css("padding", "1px");
			$(a_tag).css("color", "#FFF");
			$(a_tag).html("북마크 지우기");
			$(a_tag).click(
				function () {
					var bookmark = new BookmarkStorage();
					bookmark.ClearBookmark();
					localStorage.clear();
					this.obj.CloseMessage();
					this.obj.ShowMessage("북마크를 비웠습니다.");
					return false;
				}
			);
			$(li).html(a_tag);
			$(menu_list_h).append(li);
			$(li).html(a_tag);
			$(menu_list_h).append(li);
			this.obj.CloseMessage();
			this.obj.ShowMessage(menu_list_h);
			return false;
		}
	);

};

Mascot.prototype.ShowMessage = function (msg) {
	this.message_queue.push(msg);

	if (this.is_show === false) {
		this.Show();
	}
	else {
		this.CloseMessage();
	}

	if (this.now_balloon === null && this.is_loaded === true) {
		this._show_balloon();
	}
};

Mascot.prototype.CloseMessage = function () {
	$(this.now_balloon).fadeOut(1000).delay(1000, function () { $(this).remove(); });
	this.now_balloon = null;
	if (this.message_queue.length !== 0) {
		this._show_balloon();
	}
};

Mascot.prototype.ToSmall = function () {
	$(this.mascot_img_html).css("width", 90);
	if (this.now_balloon !== null) {
		$(this.now_balloon).css("bottom", $(this.mascot_img_html).height() / 2 + 16 - $(this.now_balloon).height() / 2 + 32);
		$(this.now_balloon).css("right", $(this.mascot_img_html).width() + 32);
	}
	$("#to-top-btn").css("width", $(this.mascot_img_html).width() / 3);
	$("#to-bottom-btn").css("width", $(this.mascot_img_html).width() / 3);
	$("#hisyokan-bookmark").css("width", $(this.mascot_img_html).width() / 3);
	this.is_small = true;
	localStorage.setItem("custom_dmns_is_small", true);
};

Mascot.prototype.ToBig = function () {
	$(this.mascot_img_html).css("width", 180);
	if (this.now_balloon !== null) {
		$(this.now_balloon).css("bottom", $(this.mascot_img_html).height() / 2 + 16 - $(this.now_balloon).height() / 2 + 32);
		$(this.now_balloon).css("right", $(this.mascot_img_html).width() + 32);
	}
	$("#to-top-btn").css("width", $(this.mascot_img_html).width() / 3);
	$("#to-bottom-btn").css("width", $(this.mascot_img_html).width() / 3);
	$("#hisyokan-bookmark").css("width", $(this.mascot_img_html).width() / 3);
	this.is_small = false;
	localStorage.setItem("custom_dmns_is_small", false);
};

var mascot = new Mascot();

$(document).ready(function () {

	var secretary1 = "https://librewiki.net/images/2/24/Sunglasses-smily-face.png";
	var secretary2 = "https://librewiki.net/images/d/de/Silly-Face.png";
	var secretary3 = "https://librewiki.net/images/f/f2/Happy-Face.png";

	var comment1 =
		[
			"안녕들 하신지",
			"어휴... 피곤해...",
			"다들 잘 있지?"
		];

	var comment2 =
		[
			"뭬~롱",
			"너 힘들지 않니???",
			"너도 한번 외쳐봐!"
		];

	var comment3 =
		[
			"웃으면 복이 와요.",
			"하하하 오늘도 좋은 날이죠?",
			"얼굴 찡그리지 말죠?",
		]; //비서3의 코멘트

	var secretaries = [secretary1, secretary2, secretary3];
	var comments = [comment1, comment2, comment3];
	var index = randomRange(0, secretaries.length);

	mascot.AddImage(secretaries[index]);
	mascot.ShowMessage(comments[index][randomRange(0, comments[index].length)]);

	var temp = function () {
		var param =
		{
			"action": "query",
			"meta": "notifications",
			"notlimit": 10,
			"format": "json"
		};
		$.ajax("/api.php",
			{
				data: param,
				dataType: "json"
			})
			.done(function (res) {
				var list_o = res.query.notifications.list;
				var list = [];
				for (var key in list_o) {
					list.push(list_o[key]);
				}
				var unread_message = [];
				for (var i = 0; i < list.length; i++) {
					if (list[i].read === null && list[i].type != "page-linked") {
						unread_message.push(list[i]);
					}
				}
				if (unread_message.length !== 0) {
					if (index === 0) {
						mascot.ShowMessage("<a style='color:#FFF;' href='/wiki/" + encodeURIComponent(unread_message[unread_message.length - 1].title.full) + "'>메시지~ 왔어요!</a>");
					}

					if (index == 1) {
						mascot.ShowMessage("<a style='color:#FFF;' href='/wiki/" + encodeURIComponent(unread_message[unread_message.length - 1].title.full) + "'>어랏! 네 메시지 확인해봐! </a>");
					}

					if (index == 2) {
						mascot.ShowMessage("<a style='color:#FFF;' href='/wiki/" + encodeURIComponent(unread_message[unread_message.length - 1].title.full) + "'>좋은 소식이에요. 메시지 확인하세요.</a>");
					}


				}
			});
	};
	temp();
	setInterval(temp, 1000 * 20);
}
);