smilies.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /*
  2. [Discuz!] (C)2001-2099 Comsenz Inc.
  3. This is NOT a freeware, use is subject to license terms
  4. $Id: smilies.js 29684 2012-04-25 04:00:58Z zhangguosheng $
  5. */
  6. function _smilies_show(id, smcols, seditorkey) {
  7. if(seditorkey && !$(seditorkey + 'sml_menu')) {
  8. var div = document.createElement("div");
  9. div.id = seditorkey + 'sml_menu';
  10. div.style.display = 'none';
  11. div.className = 'sllt';
  12. $('append_parent').appendChild(div);
  13. var div = document.createElement("div");
  14. div.id = id;
  15. div.style.overflow = 'hidden';
  16. $(seditorkey + 'sml_menu').appendChild(div);
  17. }
  18. if(typeof smilies_type == 'undefined') {
  19. var scriptNode = document.createElement("script");
  20. scriptNode.type = "text/javascript";
  21. scriptNode.charset = charset ? charset : (BROWSER.firefox ? document.characterSet : document.charset);
  22. scriptNode.src = 'data/cache/common_smilies_var.js?' + VERHASH;
  23. $('append_parent').appendChild(scriptNode);
  24. if(BROWSER.ie) {
  25. scriptNode.onreadystatechange = function() {
  26. smilies_onload(id, smcols, seditorkey);
  27. };
  28. } else {
  29. scriptNode.onload = function() {
  30. smilies_onload(id, smcols, seditorkey);
  31. };
  32. }
  33. } else {
  34. smilies_onload(id, smcols, seditorkey);
  35. }
  36. }
  37. function smilies_onload(id, smcols, seditorkey) {
  38. seditorkey = !seditorkey ? '' : seditorkey;
  39. smile = getcookie('smile').split('D');
  40. if(typeof smilies_type == 'object') {
  41. if(smile[0] && smilies_array[smile[0]]) {
  42. CURRENTSTYPE = smile[0];
  43. } else {
  44. for(i in smilies_array) {
  45. CURRENTSTYPE = i;break;
  46. }
  47. }
  48. smiliestype = '<div id="'+id+'_tb" class="tb tb_s cl"><ul>';
  49. for(i in smilies_type) {
  50. key = i.substring(1);
  51. if(smilies_type[i][0]) {
  52. smiliestype += '<li ' + (CURRENTSTYPE == key ? 'class="current"' : '') + ' id="'+seditorkey+'stype_'+key+'" onclick="smilies_switch(\'' + id + '\', \'' + smcols + '\', '+key+', 1, \'' + seditorkey + '\');if(CURRENTSTYPE) {$(\''+seditorkey+'stype_\'+CURRENTSTYPE).className=\'\';}this.className=\'current\';CURRENTSTYPE='+key+';doane(event);"><a href="javascript:;" hidefocus="true">'+smilies_type[i][0]+'</a></li>';
  53. }
  54. }
  55. smiliestype += '</ul></div>';
  56. $(id).innerHTML = smiliestype + '<div id="' + id + '_data"></div><div class="sllt_p" id="' + id + '_page"></div>';
  57. smilies_switch(id, smcols, CURRENTSTYPE, smile[1], seditorkey);
  58. smilies_fastdata = '';
  59. if(seditorkey == 'fastpost' && $('fastsmilies') && smilies_fast) {
  60. var j = 0;
  61. for(i = 0;i < smilies_fast.length; i++) {
  62. if(j == 0) {
  63. smilies_fastdata += '<tr>';
  64. }
  65. j = ++j > 3 ? 0 : j;
  66. s = smilies_array[smilies_fast[i][0]][smilies_fast[i][1]][smilies_fast[i][2]];
  67. smilieimg = STATICURL + 'image/smiley/' + smilies_type['_' + smilies_fast[i][0]][1] + '/' + s[2];
  68. img[k] = new Image();
  69. img[k].src = smilieimg;
  70. smilies_fastdata += s ? '<td onmouseover="smilies_preview(\'' + seditorkey + '\', \'fastsmiliesdiv\', this, ' + s[5] + ')" onmouseout="$(\'smilies_preview\').style.display = \'none\'" onclick="' + (typeof wysiwyg != 'undefined' ? 'insertSmiley(' + s[0] + ')': 'seditor_insertunit(\'' + seditorkey + '\', \'' + s[1].replace(/'/, '\\\'') + '\')') +
  71. '" id="' + seditorkey + 'smilie_' + s[0] + '_td"><img id="smilie_' + s[0] + '" width="' + s[3] +'" height="' + s[4] +'" src="' + smilieimg + '" alt="' + s[1] + '" />' : '<td>';
  72. }
  73. $('fastsmilies').innerHTML = '<table cellspacing="0" cellpadding="0"><tr>' + smilies_fastdata + '</tr></table>';
  74. }
  75. }
  76. }
  77. function smilies_switch(id, smcols, type, page, seditorkey) {
  78. page = page ? page : 1;
  79. if(!smilies_array[type] || !smilies_array[type][page]) return;
  80. setcookie('smile', type + 'D' + page, 31536000);
  81. smiliesdata = '<table id="' + id + '_table" cellpadding="0" cellspacing="0"><tr>';
  82. j = k = 0;
  83. img = [];
  84. for(var i = 0; i < smilies_array[type][page].length; i++) {
  85. if(j >= smcols) {
  86. smiliesdata += '<tr>';
  87. j = 0;
  88. }
  89. s = smilies_array[type][page][i];
  90. smilieimg = STATICURL + 'image/smiley/' + smilies_type['_' + type][1] + '/' + s[2];
  91. img[k] = new Image();
  92. img[k].src = smilieimg;
  93. smiliesdata += s && s[0] ? '<td onmouseover="smilies_preview(\'' + seditorkey + '\', \'' + id + '\', this, ' + s[5] + ')" onclick="' + (typeof wysiwyg != 'undefined' ? 'insertSmiley(' + s[0] + ')': 'seditor_insertunit(\'' + seditorkey + '\', \'' + s[1].replace(/'/, '\\\'') + '\')') +
  94. '" id="' + seditorkey + 'smilie_' + s[0] + '_td"><img id="smilie_' + s[0] + '" width="' + s[3] +'" height="' + s[4] +'" src="' + smilieimg + '" alt="' + s[1] + '" />' : '<td>';
  95. j++;k++;
  96. }
  97. smiliesdata += '</table>';
  98. smiliespage = '';
  99. if(smilies_array[type].length > 2) {
  100. prevpage = ((prevpage = parseInt(page) - 1) < 1) ? smilies_array[type].length - 1 : prevpage;
  101. nextpage = ((nextpage = parseInt(page) + 1) == smilies_array[type].length) ? 1 : nextpage;
  102. smiliespage = '<div class="z"><a href="javascript:;" onclick="smilies_switch(\'' + id + '\', \'' + smcols + '\', ' + type + ', ' + prevpage + ', \'' + seditorkey + '\');doane(event);">上页</a>' +
  103. '<a href="javascript:;" onclick="smilies_switch(\'' + id + '\', \'' + smcols + '\', ' + type + ', ' + nextpage + ', \'' + seditorkey + '\');doane(event);">下页</a></div>' +
  104. page + '/' + (smilies_array[type].length - 1);
  105. }
  106. $(id + '_data').innerHTML = smiliesdata;
  107. $(id + '_page').innerHTML = smiliespage;
  108. $(id + '_tb').style.width = smcols*(16+parseInt(s[3])) + 'px';
  109. }
  110. function smilies_preview(seditorkey, id, obj, w) {
  111. var menu = $('smilies_preview');
  112. if(!menu) {
  113. menu = document.createElement('div');
  114. menu.id = 'smilies_preview';
  115. menu.className = 'sl_pv';
  116. menu.style.display = 'none';
  117. $('append_parent').appendChild(menu);
  118. }
  119. menu.innerHTML = '<img width="' + w + '" src="' + obj.childNodes[0].src + '" />';
  120. mpos = fetchOffset($(id + '_data'));
  121. spos = fetchOffset(obj);
  122. pos = spos['left'] >= mpos['left'] + $(id + '_data').offsetWidth / 2 ? '13' : '24';
  123. showMenu({'ctrlid':obj.id,'showid':id + '_data','menuid':menu.id,'pos':pos,'layer':3});
  124. }