/** * Yobi, Project Hosting SW * * Copyright 2013 NAVER Corp. * http://yobi.io * * @author Suwon Chae * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ yobi.Mention = function(htOptions) { var htVar = {}; var htElement = {}; /** * Initialize * * @param {Hash Table} htOptions */ function _init(htOptions){ _initVar(htOptions); _initElement(); _attachEvent(); } /** * Initialize Variables * * @param {Hash Table} htOptions */ function _initVar(htOptions) { htVar = htOptions || {}; // set htVar as htOptions htVar.doesNotDataLoaded = true; htVar.nKeyupEventGenerator = null; htVar.sMentionText = null; } /** * Initialize Element variables */ function _initElement() { if (!htVar.target) { if (window.console) { console.error("mention form element targeting doesn't exist!") } return; } htElement.welTarget = $(htVar.target); } /** * attachEvent */ function _attachEvent() { htElement.welTarget.on("keypress", _onKeyInput); if (jQuery.browser.mozilla){ htElement.welTarget.on("focus", _startKeyupEventGenerator); htElement.welTarget.on("blur", _stopKeyupEventGenerator); } } /** * Event handler on KeyInput event * * @param {Event} eEvt */ function _onKeyInput(eEvt){ eEvt = eEvt || window.event; var charCode = eEvt.which || eEvt.keyCode; if(charCode === 64 || charCode === 35 || charCode === 58) { // 64 = @, 35 = #, 58 = : if(htVar.doesNotDataLoaded) { _findMentionList(); } } } function _startKeyupEventGenerator(){ if (htVar.nKeyupEventGenerator){ clearInterval(htVar.nKeyupEventGenerator); } htVar.nKeyupEventGenerator = setInterval( function(){ if (htVar.sMentionText != htElement.welTarget.val()){ htElement.welTarget.trigger("keyup"); htVar.sMentionText = htElement.welTarget.val(); } } ,100); } function _stopKeyupEventGenerator(){ if (htVar.nKeyupEventGenerator){ clearInterval(htVar.nKeyupEventGenerator); htVar.nKeyupEventGenerator = null; } } /** * Find Userlist */ function _findMentionList(){ _onLoadUserList(); } function _onLoadUserList(){ htVar.doesNotDataLoaded = false; var searchPending; var emojis = [ { name: "+1", content: "đ" }, { name: "heart", content: "â¤ī¸ī¸" }, { name: "wink", content: "đ" }, { name: "smile", content: "đ" }, { name: "confused", content: "đ" }, { name: "check", content: "â " }, { name: "hooray", content: "đ" }, { name: "sad", content: "đĸ" }, { name: "-1", content: "đ" }, { name: "tada", content: "đ" }, { name: "x", content: "â" }, { name: "o", content: "â" }, { name: "face smile", content: "đ" }, { name: "face smile kiss", content: "đ" }, { name: "face kissing", content: "đ" }, { name: "face astonished", content: "đ˛" }, { name: "face angry", content: "đ " }, { name: "face scream", content: "đą" }, { name: "face cry", content: "đĸ" }, { name: "face neutral", content: "đ" }, { name: "face heart", content: "đ" }, { name: "question?", content: "â" }, { name: "!", content: "âī¸" }, { name: "bangbang!", content: "âŧī¸" }, { name: "beer", content: "đē" }, { name: "icecream", content: "đĻ" }, { name: "korea", content: "đ°đˇ" }, { name: "us america", content: "đēđ¸" }, { name: "fr", content: "đĢđˇ" }, { name: "cn china", content: "đ¨đŗ" }, { name: "+100", content: "đ¯" }, { name: "heavy check", content: "âī¸"}, { name: "+plus", content: "â"}, { name: "-minus", content: "âī¸"}, { name: "cactus", content: "đĩī¸"}, { name: "animal cat", content: "đ"}, { name: "clover", content: "đ"}, { name: "vī¸", content: "âī¸"}, { name: "lock", content: "đ"}, { name: "unlock", content: "đ"}, { name: "idea bulb", content: "đĄ"}, { name: "bomb", content: "đŖ"}, { name: "calendar", content: "đ"}, { name: "date", content: "đ "}, { name: "chicken", content: "đ"}, { name: "mushroom", content: "đ"}, { name: "moneybag", content: "đ°"}, { name: "money dollar", content: "đĩ"}, { name: "envelope", content: "âī¸"}, { name: "chart upward", content: "đ"}, { name: "chart downward", content: "đ"}, { name: "íë°° parcel", content: "đĻ"}, { name: "ë°ė clap", content: "đ"}, { name: "game joker", content: "đ"}, { name: "game cards", content: "đ´"}, { name: "game die", content: "đ˛"}, { name: "tea", content: "đĩ"}, { name: "coffee", content: "â"}, { name: "crystal", content: "đŽ"}, { name: "taxi", content: "đ"}, { name: "bus", content: "đ"}, { name: "train", content: "đ"}, { name: "warn", content: "â ī¸"}, { name: "star", content: "â"}, { name: "phone", content: "âī¸"}, ]; htElement.welTarget .atwho({ at: "@", limit: 10, displayTpl: "