jquery-sinaEmotion-2.1.0.min.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. /*!
  2. * jQuery Sina Emotion v2.1.0
  3. * http://www.clanfei.com/
  4. *
  5. * Copyright 2012-2014 Lanfei
  6. * Released under the MIT license
  7. *
  8. * Date: 2014-05-19T20:10:23+0800
  9. */
  10. // (function(h){var b;var n;var i;var j;var d;var a=[];var e="默认";var k=function(){h("body").bind({click:function(){h("#sinaEmotion").hide()}});h("#sinaEmotion").bind({click:function(o){o.stopPropagation()}}).delegate(".prev",{click:function(o){var p=h("#sinaEmotion .categories").data("page");f(p-1);o.preventDefault()}}).delegate(".next",{click:function(o){var p=h("#sinaEmotion .categories").data("page");f(p+1);o.preventDefault()}}).delegate(".category",{click:function(o){h("#sinaEmotion .categories .current").removeClass("current");g(h.trim(h(this).addClass("current").text()));o.preventDefault()}}).delegate(".page",{click:function(o){h("#sinaEmotion .pages .current").removeClass("current");var p=parseInt(h(this).addClass("current").text()-1);c(p);o.preventDefault()}}).delegate(".face",{click:function(o){h("#sinaEmotion").hide();b.insertText(h(this).children("img").prop("alt"));o.preventDefault()}})};var m=function(o){if(i){o&&o();return}if(!n){n=h.fn.sinaEmotion.options}i={};j=[];d={};h("body").append('<div id="sinaEmotion">正在加载,请稍后...</div>');k();h.getJSON("https://api.weibo.com/2/emotions.json?callback=?",{source:n.appKey,language:n.language},function(r){var t,s;var u=r.data;h("#sinaEmotion").html('<div class="right"><a href="#" class="prev">&laquo;</a><a href="#" class="next">&raquo;</a></div><ul class="categories"></ul><ul class="faces"></ul><ul class="pages"></ul>');for(var q=0,p=u.length;q<p;++q){t=u[q];s=t.category||e;if(!i[s]){i[s]=[];j.push(s)}i[s].push({icon:t.icon,phrase:t.phrase});d[t.phrase]=t.icon}h(a).parseEmotion();a=null;o&&o()})};var f=function(u){var r="";var t=j.length;var p=Math.ceil(t/5);var o=h("#sinaEmotion .categories");var s=o.data("category")||e;u=(u+p)%p;for(var q=u*5;q<t&&q<(u+1)*5;++q){r+='<li class="item"><a href="#" class="category'+(s==j[q]?" current":"")+'">'+j[q]+"</a></li>"}o.data("page",u).html(r)};var g=function(o){h("#sinaEmotion .categories").data("category",o);c(0);l()};var c=function(u){var v;var t="";var p="";var w=n.rows;var o=h("#sinaEmotion .categories").data("category");var q=i[o];u=u||0;for(var s=u*w,r=q.length;s<r&&s<(u+1)*w;++s){v=q[s];t+='<li class="item"><a href="#" class="face"><img class="sina-emotion" src="'+v.icon+'" alt="'+v.phrase+'" /></a></li>'}h("#sinaEmotion .faces").html(t)};var l=function(){var r="";var u=n.rows;var t=h("#sinaEmotion .categories").data("category");var o=i[t];var s=o.length;if(s>u){for(var q=0,p=Math.ceil(s/u);q<p;++q){r+='<li class="item"><a href="#" class="page'+(q==0?" current":"")+'">'+(q+1)+"</a></li>"}h("#sinaEmotion .pages").html(r).show()}else{h("#sinaEmotion .pages").hide()}};h.fn.sinaEmotion=function(p){p=p||function(){return h(this).parents("form").find("textarea,input[type=text]").eq(0)};var o=h(this).last();var q=o.offset();if(o.is(":visible")){if(typeof p=="function"){b=p.call(o)}else{b=h(p)}m(function(){g(e);f(0)});h("#sinaEmotion").css({top:q.top+o.outerHeight()+5,left:q.left}).show()}return this};h.fn.parseEmotion=function(){if(!j){a=h(this);m()}else{if(j.length==0){a=a.add(h(this))}else{h(this).each(function(){var p=h(this);var o=p.html();o=o.replace(/<.*?>/g,function(q){q=q.replace("[","&#91;");q=q.replace("]","&#93;");return q}).replace(/\[[^\[\]]*?\]/g,function(q){var r=d[q];if(r){return'<img class="sina-emotion" src="'+r+'" alt="'+q+'" />'}return q});p.html(o)})}}return this};h.fn.insertText=function(o){this.each(function(){if(this.tagName!=="INPUT"&&this.tagName!=="TEXTAREA"){return}if(document.selection){this.focus();var q=document.selection.createRange();q.text=o;q.collapse();q.select()}else{if(this.selectionStart!==undefined){var r=this.selectionStart;var p=this.selectionEnd;this.value=this.value.substring(0,r)+o+this.value.substring(p,this.value.length);this.selectionStart=this.selectionEnd=r+o.length}else{this.value+=o}}});return this};h.fn.sinaEmotion.options={rows:72,language:"cnname",appKey:"1362404091"}})(jQuery);
  11. (function (h) {
  12. var b;
  13. var n;
  14. var i;
  15. var j;
  16. var d;
  17. var a = [];
  18. var e = "默认";
  19. var k = function () {
  20. h("body").bind({
  21. click: function () {
  22. h("#sinaEmotion").hide()
  23. }
  24. });
  25. h("#sinaEmotion").bind({
  26. click: function (o) {
  27. o.stopPropagation()
  28. }
  29. }).delegate(".prev", {
  30. click: function (o) {
  31. var p = h("#sinaEmotion .categories").data("page");
  32. f(p - 1);
  33. o.preventDefault()
  34. }
  35. }).delegate(".next", {
  36. click: function (o) {
  37. var p = h("#sinaEmotion .categories").data("page");
  38. f(p + 1);
  39. o.preventDefault()
  40. }
  41. }).delegate(".category", {
  42. click: function (o) {
  43. h("#sinaEmotion .categories .current").removeClass("current");
  44. g(h.trim(h(this).addClass("current").text()));
  45. o.preventDefault()
  46. }
  47. }).delegate(".page", {
  48. click: function (o) {
  49. h("#sinaEmotion .pages .current").removeClass("current");
  50. var p = parseInt(h(this).addClass("current").text() - 1);
  51. c(p);
  52. o.preventDefault()
  53. }
  54. }).delegate(".face", {
  55. click: function (o) {
  56. h("#sinaEmotion").hide();
  57. b.insertText(h(this).children("img").prop("alt"));
  58. o.preventDefault()
  59. }
  60. })
  61. };
  62. var m = function (o) {
  63. if (i) {
  64. o && o();
  65. return
  66. }
  67. if (!n) {
  68. n = h.fn.sinaEmotion.options
  69. }
  70. i = {};
  71. j = [];
  72. d = {};
  73. h("body").append('<div id="sinaEmotion">正在加载,请稍后...</div>');
  74. k();
  75. h.getJSON("https://api.weibo.com/2/emotions.json?callback=?", {
  76. source: n.appKey,
  77. language: n.language
  78. }, function (r) {
  79. var t, s;
  80. var u = r.data;
  81. h("#sinaEmotion").html('<div class="right"><a href="#" class="prev">&laquo;</a><a href="#" class="next">&raquo;</a></div><ul class="categories"></ul><ul class="faces"></ul><ul class="pages"></ul>');
  82. for (var q = 0, p = u.length; q < p; ++q) {
  83. t = u[q];
  84. s = t.category || e;
  85. if (!i[s]) {
  86. i[s] = [];
  87. j.push(s)
  88. }
  89. i[s].push({
  90. icon: t.icon,
  91. phrase: t.phrase
  92. });
  93. d[t.phrase] = t.icon
  94. }
  95. h(a).parseEmotion();
  96. a = null;
  97. o && o()
  98. })
  99. };
  100. var f = function (u) {
  101. var r = "";
  102. var t = j.length;
  103. var p = Math.ceil(t / 5);
  104. var o = h("#sinaEmotion .categories");
  105. var s = o.data("category") || e;
  106. u = (u + p) % p;
  107. for (var q = u * 5; q < t && q < (u + 1) * 5; ++q) {
  108. r += '<li class="item"><a href="#" class="category' + (s == j[q] ? " current" : "") + '">' + j[q] + "</a></li>"
  109. }
  110. o.data("page", u).html(r)
  111. };
  112. var g = function (o) {
  113. h("#sinaEmotion .categories").data("category", o);
  114. c(0);
  115. l()
  116. };
  117. var c = function (u) {
  118. var v;
  119. var t = "";
  120. var p = "";
  121. var w = n.rows;
  122. var o = h("#sinaEmotion .categories").data("category");
  123. var q = i[o];
  124. u = u || 0;
  125. for (var s = u * w, r = q.length; s < r && s < (u + 1) * w; ++s) {
  126. v = q[s];
  127. t += '<li class="item"><a href="#" class="face"><img class="sina-emotion" src="' + v.icon + '" alt="' + v.phrase + '" /></a></li>'
  128. }
  129. h("#sinaEmotion .faces").html(t)
  130. };
  131. var l = function () {
  132. var r = "";
  133. var u = n.rows;
  134. var t = h("#sinaEmotion .categories").data("category");
  135. var o = i[t];
  136. var s = o.length;
  137. if (s > u) {
  138. for (var q = 0, p = Math.ceil(s / u); q < p; ++q) {
  139. r += '<li class="item"><a href="#" class="page' + (q == 0 ? " current" : "") + '">' + (q + 1) + "</a></li>"
  140. }
  141. h("#sinaEmotion .pages").html(r).show()
  142. } else {
  143. h("#sinaEmotion .pages").hide()
  144. }
  145. };
  146. h.fn.sinaEmotion = function (p) {
  147. p = p ||
  148. function () {
  149. return h(this).parents("form").find("textarea,input[type=text]").eq(0)
  150. };
  151. var o = h(this).last();
  152. var q = o.offset();
  153. if (o.is(":visible")) {
  154. if (typeof p == "function") {
  155. b = p.call(o)
  156. } else {
  157. b = h(p)
  158. }
  159. m(function () {
  160. g(e);
  161. f(0)
  162. });
  163. h("#sinaEmotion").css({
  164. top: q.top + o.outerHeight() + 5,
  165. left: q.left
  166. }).show()
  167. }
  168. return this
  169. };
  170. h.fn.parseEmotion = function () {
  171. if (!j) {
  172. a = h(this);
  173. m()
  174. } else {
  175. if (j.length == 0) {
  176. a = a.add(h(this))
  177. } else {
  178. h(this).each(function () {
  179. var p = h(this);
  180. var o = p.html();
  181. if(o==undefined){
  182. return false;
  183. }
  184. o = o.replace(/<.*?>/g, function (q) {
  185. q = q.replace("[", "&#91;");
  186. q = q.replace("]", "&#93;");
  187. return q
  188. }).replace(/\[[^\[\]]*?\]/g, function (q) {
  189. var r = d[q];
  190. if (r) {
  191. return '<img class="sina-emotion" src="' + r + '" alt="' + q + '" />'
  192. }
  193. return q
  194. });
  195. p.html(o)
  196. })
  197. }
  198. }
  199. return this
  200. };
  201. h.fn.insertText = function (o) {
  202. this.each(function () {
  203. if (this.tagName !== "INPUT" && this.tagName !== "TEXTAREA") {
  204. return
  205. }
  206. if (document.selection) {
  207. this.focus();
  208. var q = document.selection.createRange();
  209. q.text = o;
  210. q.collapse();
  211. q.select()
  212. } else {
  213. if (this.selectionStart !== undefined) {
  214. var r = this.selectionStart;
  215. var p = this.selectionEnd;
  216. this.value = this.value.substring(0, r) + o + this.value.substring(p, this.value.length);
  217. this.selectionStart = this.selectionEnd = r + o.length
  218. } else {
  219. this.value += o
  220. }
  221. }
  222. });
  223. return this
  224. };
  225. h.fn.sinaEmotion.options = {
  226. rows: 72,
  227. language: "cnname",
  228. appKey: "1362404091"
  229. }
  230. })(jQuery);