/** * @author 夏の寒风 * @time 2012-12-14 */ //自定义hashtable function Hashtable() { this._hash = new Object(); this.put = function(key, value) { if (typeof (key) != "undefined") { if (this.containsKey(key) == false) { this._hash[key] = typeof (value) == "undefined" ? null : value; return true; } else { return false; } } else { return false; } } this.remove = function(key) { delete this._hash[key]; } this.size = function() { var i = 0; for (var k in this._hash) { i++; } return i; } this.get = function(key) { return this._hash[key]; } this.containsKey = function(key) { return typeof (this._hash[key]) != "undefined"; } this.clear = function() { for (var k in this._hash) { delete this._hash[k]; } } } var emotions = new Array(); var categorys = new Array();// 分组 var uSinaEmotionsHt = new Hashtable(); // 初始化缓存,页面仅仅加载一次就可以了 //替换 function AnalyticEmotion(s) { if(typeof (s) != "undefined" && s != null) { var sArr = s.match(/\[.*?\]/g); if(!sArr){return s} for(var i = 0; i < sArr.length; i++){ if(uSinaEmotionsHt.containsKey(sArr[i])) { var reStr = "<img src=\"" + uSinaEmotionsHt.get(sArr[i]) + "\" height=\"20\" width=\"20\" />"; s = s.replace(sArr[i], reStr); } } } return s; } (function($){ $.fn.SinaEmotion = function(target){ var cat_current; var cat_page; $(this).click(function(event){ event.stopPropagation(); var eTop = target.offset().top + target.height() + 15; var eLeft = target.offset().left - 1; if($('#emotions .categorys')[0]){ $('#emotions').css({top: eTop, left: eLeft}); $('#emotions').toggle(); return; } $('body').append('<div id="emotions"></div>'); $('#emotions').css({top: eTop, left: eLeft}); $('#emotions').html('<div>正在加载,请稍候...</div>'); $('#emotions').click(function(event){ event.stopPropagation(); }); $('#emotions').html('<div style="float:right"><a href="javascript:void(0);" id="prev">«</a><a href="javascript:void(0);" id="next">»</a></div><div class="categorys"></div><div class="container"></div><div class="page"></div>'); $('#emotions #prev').click(function(){ showCategorys(cat_page - 1); }); $('#emotions #next').click(function(){ showCategorys(cat_page + 1); }); showCategorys(); showEmotions(); }); $('body').click(function(){ $('#emotions').remove(); }); $.fn.insertText = function(text){ this.each(function() { if(this.tagName !== 'INPUT' && this.tagName !== 'TEXTAREA') {return;} if (document.selection) { this.focus(); var cr = document.selection.createRange(); cr.text = text; cr.collapse(); cr.select(); }else if (this.selectionStart || this.selectionStart == '0') { var start = this.selectionStart, end = this.selectionEnd; this.value = this.value.substring(0, start)+ text+ this.value.substring(end, this.value.length); this.selectionStart = this.selectionEnd = start+text.length; }else { this.value += text; } }); return this; } function showCategorys(){ var page = arguments[0]?arguments[0]:0; if(page < 0 || page >= categorys.length / 5){ return; } $('#emotions .categorys').html(''); cat_page = page; for(var i = page * 5; i < (page + 1) * 5 && i < categorys.length; ++i){ $('#emotions .categorys').append($('<a href="javascript:void(0);">' + categorys[i] + '</a>')); } $('#emotions .categorys a').click(function(){ showEmotions($(this).text()); }); $('#emotions .categorys a').each(function(){ if($(this).text() == cat_current){ $(this).addClass('current'); } }); } function showEmotions(){ var category = arguments[0]?arguments[0]:'默认'; var page = arguments[1]?arguments[1] - 1:0; $('#emotions .container').html(''); $('#emotions .page').html(''); cat_current = category; for(var i = page * 72; i < (page + 1) * 72 && i < emotions[category].length; ++i){ $('#emotions .container').append($('<a href="javascript:void(0);" title="' + emotions[category][i].name + '"><img src="' + emotions[category][i].icon + '" alt="' + emotions[category][i].name + '" width="22" height="22" /></a>')); } $('#emotions .container a').click(function(){ target.insertText($(this).attr('title')); $('#emotions').remove(); }); for(var i = 1; i < emotions[category].length / 72 + 1; ++i){ $('#emotions .page').append($('<a href="javascript:void(0);"' + (i == page + 1?' class="current"':'') + '>' + i + '</a>')); } $('#emotions .page a').click(function(){ showEmotions(category, $(this).text()); }); $('#emotions .categorys a.current').removeClass('current'); $('#emotions .categorys a').each(function(){ if($(this).text() == category){ $(this).addClass('current'); } }); } } })(jQuery);