File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
/**
* 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: "<li data-value='@${loginid}'><img style='width:20px;height:20px;' src='${image}'> ${name} <small>${loginid}</small></li>",
suspendOnComposing: false,
searchKey: "searchText",
insertTpl: "@${loginid}",
callbacks: {
remoteFilter: function(query, callback) {
NProgress.start();
clearTimeout(searchPending);
searchPending = setTimeout(function () {
$.getJSON(htVar.url, { query: query, mentionType: "user" }, function (data) {
NProgress.done();
callback(data.result)
});
}, 300);
}
}
})
.atwho({
at: ":",
limit: 10,
displayTpl: "<li>${content} <small>${name}</small></li>",
insertTpl: "${content}",
data: emojis
})
.atwho({
at: "#",
limit: 10,
displayTpl: "<li data-value='#${issueNo}'><small>#${issueNo}</small> ${title}</li>",
suspendOnComposing: false,
insertTpl: "#${issueNo}",
callbacks: {
remoteFilter: function(query, callback) {
NProgress.start();
$.getJSON(htVar.url, {query: query, mentionType: "issue"}, function(data) {
NProgress.done();
callback(data.result)
});
},
sorter: function(query, items, searchKey) {
var item, i, len, results;
if (!query) {
return items;
}
results = [];
for (i = 0, len = items.length; i < len; i++) {
item = items[i];
if (item.issueNo === query) {
item.atwhoOrder = 0;
} else {
var issueNoIndexOf = item.issueNo.toLowerCase().indexOf(query.toLowerCase());
item.atwhoOrder = i + 1
+ Math.pow(10, issueNoIndexOf)
+ ((issueNoIndexOf > -1) ? 0 : Math.pow(100, item.title.toLowerCase().indexOf(query.toLowerCase())));
}
results.push(item);
}
return results.sort(function(a, b) {
return a.atwhoOrder - b.atwhoOrder;
});
}
}
})
.atwho("run");
}
_init(htOptions || {});
};