(function ($) {
$.fn.emoji = function (params) {
var defaults = {
button: "🙂",
place: "before",
emojis: [
"🙂",
"🙁",
"😀",
"😁",
"😂",
"😃",
"😄",
"😅",
"😆",
"😇",
"😈",
"😉",
"😊",
"😋",
"😌",
"😍",
"😎",
"😏",
"😐",
"😑",
"😒",
"😓",
"😔",
"😕",
"😖",
"😗",
"😘",
"😙",
"😚",
"😛",
"😜",
"😝",
"😞",
"😟",
"😠",
"😡",
"😢",
"😣",
"😤",
"😥",
"😦",
"😧",
"😨",
"😩",
"😪",
"😫",
"😬",
"😭",
"😮",
"😯",
"😰",
"😱",
"😲",
"😳",
"😴",
"💓",
"😵",
"😶",
"😷",
"😸",
"😹",
"😺",
"😻",
"😼",
"😽",
"😾",
"😿",
"🙀",
"🙃",
"💩",
"🙄",
"☠",
"👌",
"👍",
"👎",
"🙈",
"🙉",
"🙊",
],
fontSize: "20px",
listCSS: {
position: "absolute",
border: "1px solid gray",
"background-color": "#fff",
display: "none",
},
rowSize: 10,
};
var settings = {};
if (!params) {
settings = defaults;
} else {
for (var n in defaults) {
settings[n] = params[n] ? params[n] : defaults[n];
}
}
this.each(function (n, input) {
var $input = $(input);
function showEmoji() {
$list.show();
$input.focus();
setTimeout(function () {
$(document).on("click", closeEmoji);
}, 1);
}
function closeEmoji() {
$list.hide();
$(document).off("click", closeEmoji);
}
function clickEmoji(ev) {
if (input.selectionStart || input.selectionStart == "0") {
var startPos = input.selectionStart;
var endPos = input.selectionEnd;
input.value =
input.value.substring(0, startPos) +
ev.currentTarget.innerHTML +
input.value.substring(endPos, input.value.length);
} else {
input.value += ev.currentTarget.innerHTML;
}
closeEmoji();
$input.focus();
input.selectionStart = startPos + 2;
input.selectionEnd = endPos + 2;
}
var $button = $("<span>")
.html(settings.button)
.css({ cursor: "pointer", "font-size": settings.fontSize })
.on("click", showEmoji);
var $list = $("<div>").css(defaults.listCSS).css(settings.listCSS);
for (var n in settings.emojis) {
if (n > 0 && n % settings.rowSize == 0) {
$("<br>").appendTo($list);
}
$("<span>")
.html(settings.emojis[n])
.css({ cursor: "pointer", "font-size": settings.fontSize })
.on("click", clickEmoji)
.appendTo($list);
}
if (settings.place === "before") {
$button.insertBefore(this);
} else {
$button.insertAfter(this);
}
$list.insertAfter($input);
});
return this;
};
})(jQuery);
|