참고: 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.
- 파이어폭스 / 사파리: 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);
}
);