Hormold

VK Change (#1384276504)

Nov 12th, 2013
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 66.04 KB | None | 0 0
  1. Файл - emoji.js (Старый размер - 31259 | Новый - 0):
  2. 0.  - if (!window.Emoji) {
  3. 1.  - var Emoji = {
  4. 2.  -
  5. 3.  - opts: {},
  6. 4.  - last: 0,
  7. 5.  - shownId: false,
  8. 6.  -
  9. 7.  - init: function(txt, opts) {
  10. 8.  -   var optId = Emoji.last;
  11. 9.  -   opts.txt = txt;
  12. 10.  -   if (opts.forceTxt) {
  13. 11.  -     opts.editable = 0;
  14. 12.  -     placeholderSetup(txt);
  15. 13.  -   } else {
  16. 14.  -     opts.editable = 1;
  17. 15.  -     setTimeout(function() {
  18. 16.  -       placeholderSetup(txt, {editable: 1, editableFocus: Emoji.editableFocus});
  19. 17.  -       if (opts.shouldFocus) {
  20. 18.  -         Emoji.editableFocus(txt, false, true);
  21. 19.  -       }
  22. 20.  -     }, 0);
  23. 21.  -     if (browser.mozilla) {
  24. 22.  -       document.execCommand("enableObjectResizing", false, false);
  25. 23.  -       cur.destroy.push(function() {
  26. 24.  -         document.execCommand("enableObjectResizing", false, true);
  27. 25.  -       })
  28. 26.  -     }
  29. 27.  -     addEvent(txt, browser.opera ? 'click' : 'mousedown', function(e) {
  30. 28.  -       if (e.target && e.target.tagName == 'IMG') {
  31. 29.  -         if (Emoji.getCode(e.target)) {
  32. 30.  -           Emoji.editableFocus(txt, e.target, e.offsetX > 8);
  33. 31.  -           return cancelEvent(e);
  34. 32.  -         }
  35. 33.  -       }
  36. 34.  -       opts.emojiFocused = false;
  37. 35.  -     });
  38. 36.  -
  39. 37.  -     addEvent(txt, 'keypress keydown keyup paste', function(e) {
  40. 38.  -       if (e.type == 'keydown') {
  41. 39.  -         if (e.keyCode == KEY.RETURN || e.keyCode == 10) {
  42. 40.  -           if ((cur.ctrl_submit || opts.noEnterSend) && (e.ctrlKey || browser.mac && e.metaKey) ||
  43. 41.  -               !(cur.ctrl_submit || opts.noEnterSend) && !e.shiftKey && !(e.ctrlKey || browser.mac && e.metaKey)) {
  44. 42.  -             if (!Emoji.emojiEnter(optId, e)) {
  45. 43.  -               return false;
  46. 44.  -             }
  47. 45.  -             //if (!opts.noEnterSend) {
  48. 46.  -               opts.onSend();
  49. 47.  -               return cancelEvent(e);
  50. 48.  -             //}
  51. 49.  -           }
  52. 50.  -         }
  53. 51.  -         if (e.ctrlKey && e.keyCode == KEY.RETURN) {
  54. 52.  -           var val = this.value;
  55. 53.  -           if (opts.editable) {
  56. 54.  -             Emoji.insertHTML('<div><br/></div>');
  57. 55.  -           } else {
  58. 56.  -             if (typeof this.selectionStart == "number" && typeof this.selectionEnd == "number") {
  59. 57.  -               var start = this.selectionStart;
  60. 58.  -               this.value = val.slice(0, start) + "\n" + val.slice(this.selectionEnd);
  61. 59.  -               this.selectionStart = this.selectionEnd = start + 1;
  62. 60.  -             } else if (document.selection && document.selection.createRange) {
  63. 61.  -               this.focus();
  64. 62.  -               var range = document.selection.createRange();
  65. 63.  -               range.text = "\r\n";
  66. 64.  -               range.collapse(false);
  67. 65.  -               if (browser.opera) {
  68. 66.  -                 range.moveEnd('character', 0);
  69. 67.  -                 range.moveStart('character', 0);
  70. 68.  -               }
  71. 69.  -               range.select();
  72. 70.  -             }
  73. 71.  -             txt.autosize.update();
  74. 72.  -             setTimeout(function () {
  75. 73.  -               txt.autosize.update();
  76. 74.  -             }, 0);
  77. 75.  -           }
  78. 76.  -           return false;
  79. 77.  -         }
  80. 78.  -         if (e.keyCode == KEY.TAB && !(e.ctrlKey || browser.mac && e.metaKey)) {
  81. 79.  -           if (Emoji.shown) {
  82. 80.  -             Emoji.editableFocus(txt, false, true);
  83. 81.  -             Emoji.ttClick(optId, geByClass1('emoji_smile', opts.controlsCont), true);
  84. 82.  -           } else {
  85. 83.  -             Emoji.ttClick(optId, geByClass1('emoji_smile', opts.controlsCont), false, true);
  86. 84.  -           }
  87. 85.  -           return cancelEvent(e);
  88. 86.  -         }
  89. 87.  -         if (e.keyCode == KEY.ESC) {
  90. 88.  -           if (Emoji.shown) {
  91. 89.  -             Emoji.editableFocus(txt, false, true);
  92. 90.  -             Emoji.ttClick(optId, geByClass1('emoji_smile', opts.controlsCont), true);
  93. 91.  -             return cancelEvent(e);
  94. 92.  -           }
  95. 93.  -         }
  96. 94.  -       }
  97. 95.  -
  98. 96.  -       if (e.type == 'paste') {
  99. 97.  -         Emoji.onEditablePaste(txt, opts, optId);
  100. 98.  -       } else if (cur.editable && e.type == 'keyup') {
  101. 99.  -         if (opts.checkEditable) {
  102. 100.  -           opts.checkEditable(optId, txt);
  103. 101.  -         }
  104. 102.  -       }
  105. 103.  -       if (opts.onKeyAction) {
  106. 104.  -         opts.onKeyAction(e);
  107. 105.  -       }
  108. 106.  -       return true;
  109. 107.  -     });
  110. 108.  -   }
  111. 109.  -
  112. 110.  -
  113. 111.  -   Emoji.opts[Emoji.last] = opts;
  114. 112.  -   return Emoji.last++;
  115. 113.  - },
  116. 114.  -
  117. 115.  - onEditablePaste: function(txt, opts, optId) {
  118. 116.  -   var range = (browser.webkit || (browser.msie && browser.version > 10)) ? Emoji.getRange() : false;
  119. 117.  -   if (range) {
  120. 118.  -     var textarea = ce('TEXTAREA', {className: 'emoji_tmp_textarea'});
  121. 119.  -     txt.parentNode.appendChild(textarea);
  122. 120.  -     textarea.focus();
  123. 121.  -   }
  124. 122.  -   setTimeout(function(){
  125. 123.  -     if (range) {
  126. 124.  -       Emoji.setRange(range);
  127. 125.  -       var text = val(textarea);
  128. 126.  -       re(textarea);
  129. 127.  -       if (text) {
  130. 128.  -         Emoji.insertHTML(text.replace(/\n/g, '<br/>'));
  131. 129.  -       }
  132. 130.  -     }
  133. 131.  -     Emoji.cleanCont(txt);
  134. 132.  -   }, 0);
  135. 133.  - },
  136. 134.  -
  137. 135.  - cleanCont: function(cont) {
  138. 136.  -   var el = cont.firstChild;
  139. 137.  -   while (el) {
  140. 138.  -     var next = el.nextSibling;
  141. 139.  -     switch (el.nodeType) {
  142. 140.  -       case 1:
  143. 141.  -         if (el.id == 'tmp_paste_cont') break;
  144. 142.  -         if (el.tagName == 'DIV' || el.tagName == 'P' || el.tagName == 'SPAN') {
  145. 143.  -           el.setAttribute('style', '');
  146. 144.  -           el.className = '';
  147. 145.  -           el.id = '';
  148. 146.  -           Emoji.cleanCont(el);
  149. 147.  -         } else if (el.tagName == 'IMG') {
  150. 148.  -           if (!Emoji.getCode(el)) {
  151. 149.  -             re(el);
  152. 150.  -           }
  153. 151.  -         } else if (el.tagName != 'BR' ){
  154. 152.  -           var text = Emoji.editableVal(el, {saveEmoji: true});
  155. 153.  -           var f = cf(clean(text).replace(/\n/g, '<br/>'));
  156. 154.  -           var last = f.lastChild;
  157. 155.  -           el.parentNode.replaceChild(f, el);
  158. 156.  -           //if (last) {
  159. 157.  -           //  Emoji.editableFocus(cont, last, true);
  160. 158.  -           //}
  161. 159.  -         }
  162. 160.  -         break;
  163. 161.  -     }
  164. 162.  -     el = next;
  165. 163.  -   }
  166. 164.  - },
  167. 165.  -
  168. 166.  - editableFocus: function(editable, obj, after) {
  169. 167.  -   if (!editable) {
  170. 168.  -     return false;
  171. 169.  -   }
  172. 170.  -   editable.focus();
  173. 171.  -   if (editable.phonfocus) {
  174. 172.  -     editable.phonfocus();
  175. 173.  -   }
  176. 174.  -   if (typeof window.getSelection != 'undefined' && typeof document.createRange != 'undefined') {
  177. 175.  -     var sel = window.getSelection();
  178. 176.  -     if (browser.opera && !after) {
  179. 177.  -       sel.collapse(obj || editable, 0);
  180. 178.  -     } else {
  181. 179.  -       var range = document.createRange();
  182. 180.  -       if (obj) {
  183. 181.  -         range.selectNode(obj);
  184. 182.  -       } else {
  185. 183.  -         range.selectNodeContents(editable);
  186. 184.  -       }
  187. 185.  -       range.collapse(after ? false : true);
  188. 186.  -       var sel = window.getSelection();
  189. 187.  -       sel.removeAllRanges();
  190. 188.  -       sel.addRange(range);
  191. 189.  -     }
  192. 190.  -   } else if (typeof document.body.createTextRange != 'undefined') {
  193. 191.  -     var textRange = document.body.createTextRange();
  194. 192.  -     textRange.moveToElementText(obj || editable);
  195. 193.  -     textRange.collapse(after ? false : true);
  196. 194.  -     textRange.select();
  197. 195.  -   }
  198. 196.  - },
  199. 197.  -
  200. 198.  - getRange: function() {
  201. 199.  -   if (window.getSelection) {
  202. 200.  -     sel = window.getSelection();
  203. 201.  -     if (sel.getRangeAt && sel.rangeCount) {
  204. 202.  -       return sel.getRangeAt(0);
  205. 203.  -     }
  206. 204.  -   } else if (document.selection && document.selection.createRange) {
  207. 205.  -     return document.selection.createRange();
  208. 206.  -   }
  209. 207.  -   return null;
  210. 208.  - },
  211. 209.  -
  212. 210.  - setRange: function(range) {
  213. 211.  -   if (window.getSelection) {
  214. 212.  -     sel = window.getSelection();
  215. 213.  -     sel.removeAllRanges();
  216. 214.  -     sel.addRange(range);
  217. 215.  -   } else if (document.selection && range.select) {
  218. 216.  -     range.select();
  219. 217.  -   }
  220. 218.  - },
  221. 219.  -
  222. 220.  - editableVal: function(cont, opts) {
  223. 221.  -   if (!cont) return '';
  224. 222.  -   if (cont.tagName == 'TEXTAREA') return val(cont);
  225. 223.  -   var el = cont.firstChild;
  226. 224.  -   var v = '';
  227. 225.  -   var contTag = new RegExp('^(DIV|P|LI|OL|TR|TD|BLOCKQUOTE)$');
  228. 226.  -   while (el) {
  229. 227.  -     switch (el.nodeType) {
  230. 228.  -       case 3:
  231. 229.  -         var str = el.data.replace(/^\n|\n$/g, ' ').replace(/[\n\xa0]/g, ' ').replace(/[ ]+/g, ' ');
  232. 230.  -         v += str;
  233. 231.  -         break;
  234. 232.  -       case 1:
  235. 233.  -         var str = Emoji.editableVal(el);
  236. 234.  -         if (el.tagName && el.tagName.match(contTag) && str) {
  237. 235.  -           if (str.substr(-1) != '\n') {
  238. 236.  -             str += '\n';
  239. 237.  -           }
  240. 238.  -
  241. 239.  -           var prev = el.previousSibling;
  242. 240.  -           while(prev && prev.nodeType == 3 && trim(prev.nodeValue) == '') {
  243. 241.  -             prev = prev.previousSibling;
  244. 242.  -           }
  245. 243.  -           if (prev && !(prev.tagName && prev.tagName.match(contTag))) {
  246. 244.  -             str = '\n' + str;
  247. 245.  -           }
  248. 246.  -
  249. 247.  -         } else if (el.tagName == 'IMG') {
  250. 248.  -           var code = Emoji.getCode(el);
  251. 249.  -           if (code) {
  252. 250.  -             if (opts && opts.saveEmoji) {
  253. 251.  -               str += Emoji.getEmojiHTML(code);
  254. 252.  -             } else {
  255. 253.  -               str += Emoji.codeToChr(code);
  256. 254.  -             }
  257. 255.  -           }
  258. 256.  -         } else if (el.tagName == 'BR') {
  259. 257.  -           str += '\n';
  260. 258.  -         }
  261. 259.  -         v += str;
  262. 260.  -         break;
  263. 261.  -     }
  264. 262.  -     el = el.nextSibling;
  265. 263.  -   }
  266. 264.  -   return v;
  267. 265.  - },
  268. 266.  -
  269. 267.  - cssEmoji: {
  270. 268.  -   'D83DDE0A': [0, ':-)'], 'D83DDE03': [1, ':-D'], 'D83DDE09': [2, ';-)'], 'D83DDE06': [3, 'xD'], 'D83DDE1C': [4, ';-P'], 'D83DDE0B': [5, ':-p'], 'D83DDE0D': [6, '8-)'], 'D83DDE0E': [7, 'B-)'], 'D83DDE12': [8, ':-('], 'D83DDE0F': [9, ':]'], 'D83DDE14': [10, '3('], 'D83DDE22': [11, ':\'('], 'D83DDE2D': [12, ':_('], 'D83DDE29': [13, ':(('], 'D83DDE28': [14, ':o'], 'D83DDE10': [15, ':|'], 'D83DDE0C': [16, '3-)'], 'D83DDE20': [17, '>('], 'D83DDE21': [18, '>(('], 'D83DDE07': [19, 'O:)'], 'D83DDE30': [20, ';o'], 'D83DDE33': [21, '8|'], 'D83DDE32': [22, '8o'], 'D83DDE37': [23, ':X'], 'D83DDE1A': [24, ':-*'], 'D83DDE08': [25, '}:)'], '2764': [26 , '<3'], 'D83DDC4D': [27, ':like:'], 'D83DDC4E': [28, ':dislike:'], '261D': [29, ':up:'], '270C': [30, ':v:'], 'D83DDC4C': [31, ':ok:']
  271. 269.  - },
  272. 270.  - imgEmoji: {'D83DDE15': 1, 'D83DDE1F': 1, 'D83DDE2E': 1, 'D83DDE34': 1},
  273. 271.  -
  274. 272.  - getEmojiHTML: function(code, symbol, enabled) {
  275. 273.  -   var editable = (browser.msie && intval(browser.version) > 8) ? ' contenteditable="false"' : '';
  276. 274.  -   if (Emoji.cssEmoji[code] != undefined) {
  277. 275.  -     var num = -Emoji.cssEmoji[code][0] * 17;
  278. 276.  -     return '<img'+editable+' src="/images/blank.gif" emoji="'+code+'" '+(symbol ? 'alt="'+symbol+'"' : symbol)+' class="emoji_css" style="background-position: 0px '+num+'px;" />';
  279. 277.  -   } else {
  280. 278.  -     if (!Emoji.imgEmoji[code] && symbol && !enabled) {
  281. 279.  -       return symbol;
  282. 280.  -     } else {
  283. 281.  -       return '<img class="emoji" '+(symbol ? 'alt="'+symbol+'"' : symbol)+' src="/images/emoji'+(window.devicePixelRatio >= 2 ? '_2x' : '')+'/'+code+'.png" />';
  284. 282.  -     }
  285. 283.  -   }
  286. 284.  - },
  287. 285.  -
  288. 286.  - codeToChr: function(code) {
  289. 287.  -   var len = code.length / 4;
  290. 288.  -   var chr = '';
  291. 289.  -   var i = 0;
  292. 290.  -   while(len--) {
  293. 291.  -     chr += String.fromCharCode(parseInt(code.substr(i, 4), 16))
  294. 292.  -     i += 4;
  295. 293.  -   }
  296. 294.  -   return chr;
  297. 295.  - },
  298. 296.  -
  299. 297.  - checkEditable: function(optId, obj, options) {
  300. 298.  -   var scH = obj.scrollHeight;
  301. 299.  -   var opts = Emoji.opts[optId];
  302. 300.  -   if (!opts) {
  303. 301.  -     return false;
  304. 302.  -   }
  305. 303.  -   var bl = opts.tt;
  306. 304.  -   if (scH > options.height + 10) {
  307. 305.  -     if (!opts.isSized) {
  308. 306.  -       setStyle(obj, {height: options.height+'px', overflowY: 'auto'});
  309. 307.  -       var sm = geByClass1('emoji_smile', opts.controlsCont);
  310. 308.  -       var ph = ge('im_upload');
  311. 309.  -       var diff = sbWidth();
  312. 310.  -       setStyle(sm, vk.rtl ? {left: 1 + diff} : {right: 1 + diff});
  313. 311.  -       if (ph) {
  314. 312.  -         setStyle(ph.parentNode, vk.rtl ? {left: 1 + diff} : {right: 1 + diff});
  315. 313.  -       }
  316. 314.  -       if (bl) setStyle(bl, vk.rtl ? {left: (opts.ttDiff || 31) + diff} : {right: (opts.ttDiff || 31) + diff})
  317. 315.  -       opts.isSized = true;
  318. 316.  -     }
  319. 317.  -   } else if (opts.isSized) {
  320. 318.  -     setStyle(obj, {height: 'auto', overflowY: 'hidden'});
  321. 319.  -     var sm = geByClass1('emoji_smile', opts.controlsCont);
  322. 320.  -     var ph = ge('im_upload');
  323. 321.  -     setStyle(sm, vk.rtl ? {left: 1} : {right: 1});
  324. 322.  -     if (ph) {
  325. 323.  -       setStyle(ph.parentNode, vk.rtl ? {left: 1}: {right: 1});
  326. 324.  -     }
  327. 325.  -     if (bl) setStyle(bl, vk.rtl ? {left: (opts.ttDiff || 31)} : {right: (opts.ttDiff || 31)})
  328. 326.  -     opts.isSized = false;
  329. 327.  -   }
  330. 328.  - },
  331. 329.  -
  332. 330.  - emojiEnter: function(optId, e) {
  333. 331.  -   var opts = Emoji.opts[optId]
  334. 332.  -   if (opts.emojiFocused && opts.emojiOvered) {
  335. 333.  -     var img = geByTag1('img', opts.emojiOvered);
  336. 334.  -     Emoji.addEmoji(optId, Emoji.getCode(img), opts.emojiOvered);
  337. 335.  -     opts.emojiFocused = true;
  338. 336.  -     Emoji.ttClick(optId, ge((cur.peer == -3) ? 'imw_smile' : 'im_smile'), true);
  339. 337.  -     debugLog('canceling');
  340. 338.  -     return cancelEvent(e);
  341. 339.  -   }
  342. 340.  -   return true;
  343. 341.  - },
  344. 342.  -
  345. 343.  - insertHTML: function(html) {
  346. 344.  -   if (browser.msie && browser.version < 10) {
  347. 345.  -     var r = document.selection.createRange();
  348. 346.  -     if (r.pasteHTML) {
  349. 347.  -       r.pasteHTML(html);
  350. 348.  -     }
  351. 349.  -   } else {
  352. 350.  -     document.execCommand('insertHTML', false, html);
  353. 351.  -   }
  354. 352.  - },
  355. 353.  -
  356. 354.  - addEmoji: function(optId, code, obj) {
  357. 355.  -   if (optId === false) {
  358. 356.  -     return false;
  359. 357.  -   }
  360. 358.  -   var opts = Emoji.opts[optId];
  361. 359.  -   opts.emojiFocused = false;
  362. 360.  -   if (opts.editable) {
  363. 361.  -     var img = ' '+Emoji.getEmojiHTML(code)+'&nbsp;';
  364. 362.  -     var editable = opts.txt;
  365. 363.  -     var sel = window.getSelection ? window.getSelection() : false;
  366. 364.  -     if (sel && sel.rangeCount) {
  367. 365.  -       r = sel.getRangeAt(0);
  368. 366.  -       if (r.commonAncestorContainer) {
  369. 367.  -         var rCont = r.commonAncestorContainer;
  370. 368.  -       } else {
  371. 369.  -         var rCont = r.parentElement ? r.parentElement() : r.item(0);
  372. 370.  -       }
  373. 371.  -     } else {
  374. 372.  -       var rCont = false;
  375. 373.  -     }
  376. 374.  -     el = rCont;
  377. 375.  -     while(el && el != editable) {
  378. 376.  -       el = el.parentNode;
  379. 377.  -     }
  380. 378.  -     var edLast = (editable.lastChild || {});
  381. 379.  -     if (browser.mozilla && edLast.tagName == 'BR' && !edLast.previousSibling) {
  382. 380.  -       re(editable.lastChild);
  383. 381.  -     }
  384. 382.  -     if (!el) {
  385. 383.  -       Emoji.editableFocus(editable, false, true);
  386. 384.  -     }
  387. 385.  -     Emoji.insertHTML(img);
  388. 386.  -     var emojies = geByClass('emoji', editable);
  389. 387.  -     emojies.push.apply(emojies, geByClass('emoji_css', editable));
  390. 388.  -     for (i in emojies) {
  391. 389.  -       var prev = emojies[i].previousSibling;
  392. 390.  -       if (prev && prev.nodeType == 3 && prev.textContent && prev.textContent.charCodeAt(0) == 32) {
  393. 391.  -         var p = prev.previousSibling;
  394. 392.  -         if (p && p.nodeType == 3 && p.textContent && p.textContent.charCodeAt(p.textContent.length - 1) == 160) {
  395. 393.  -           re(prev);
  396. 394.  -         }
  397. 395.  -       }
  398. 396.  -     }
  399. 397.  -     if (editable.check) editable.check();
  400. 398.  -   } else {
  401. 399.  -     var textArea = opts.txt;
  402. 400.  -     var val = textArea.value;
  403. 401.  -     if (browser.iphone || browser.ipad) {
  404. 402.  -       var text = Emoji.codeToChr(code);
  405. 403.  -     } else {
  406. 404.  -       var text = Emoji.cssEmoji[code][1]+' ';
  407. 405.  -     }
  408. 406.  -     var endIndex, range;
  409. 407.  -     if (textArea.selectionStart != undefined && textArea.selectionEnd != undefined) {
  410. 408.  -       endIndex = textArea.selectionEnd;
  411. 409.  -       textArea.value = val.slice(0, textArea.selectionStart) + text + val.slice(endIndex);
  412. 410.  -       textArea.selectionStart = textArea.selectionEnd = endIndex + text.length;
  413. 411.  -     } else if (typeof document.selection != 'undefined' && typeof document.selection.createRange != 'undefined') {
  414. 412.  -       textArea.focus();
  415. 413.  -       range = document.selection.createRange();
  416. 414.  -       range.text = text;
  417. 415.  -       range.select();
  418. 416.  -     }
  419. 417.  -   }
  420. 418.  -   if (opts.saveDraft) {
  421. 419.  -     opts.saveDraft();
  422. 420.  -   }
  423. 421.  - },
  424. 422.  -
  425. 423.  - ttHide: function(optId) {
  426. 424.  -   Emoji.ttClick(optId, geByClass1('emoji_smile', Emoji.opts[optId].controlsCont), true);
  427. 425.  - },
  428. 426.  -
  429. 427.  - showShadow: function() {
  430. 428.  -   return !(browser.msie && browser.version < 10);
  431. 429.  - },
  432. 430.  -
  433. 431.  - ttClick: function(optId, obj, needHide, needShow, ev) {
  434. 432.  -   var opts = Emoji.opts[optId];
  435. 433.  -   if (!opts) {
  436. 434.  -     return;
  437. 435.  -   }
  438. 436.  -   if ((needHide && !Emoji.shown) || (needShow && Emoji.shown)) {
  439. 437.  -     return;
  440. 438.  -   }
  441. 439.  -   if (!obj) {
  442. 440.  -     obj = Emoji.shown || ge((cur.peer == -3) ? 'imw_smile' : 'im_smile');
  443. 441.  -   }
  444. 442.  -   if (obj.tt && obj.tt.destroy) {
  445. 443.  -     obj.tt.destroy();
  446. 444.  -   }
  447. 445.  -   if (!opts.tt && opts.sharedTT && opts.sharedTT.emojiTT) {
  448. 446.  -     opts.tt = opts.sharedTT.emojiTT;
  449. 447.  -     opts.emojiScroll = opts.sharedTT.emojiScroll;
  450. 448.  -     opts.allEmojiId = opts.sharedTT.emojiAllId;
  451. 449.  -   }
  452. 450.  -   var tt = opts.tt;
  453. 451.  -   if (!tt) {
  454. 452.  -     var pointerStyle = '';
  455. 453.  -     if (opts.ttShift) {
  456. 454.  -       pointerStyle = ' style="left: '+(95+opts.ttShift)+'px"';
  457. 455.  -     }
  458. 456.  -     var tt = ce('div', {
  459. 457.  -       id: 'emoji_block_'+optId,
  460. 458.  -       className: 'emoji_tt_wrap'+(!Emoji.showShadow() ? ' emoji_no_opacity' : ''),
  461. 459.  -       innerHTML: '<div class="emoji_pointer"'+pointerStyle+'></div><div class="emoji_expand_shadow"></div><div class="emoji_expand_shadow_top"></div><div class="emoji_list"><div class="emoji_scroll">'+Emoji.ttEmojiList(optId)+'</div></div>'
  462. 460.  -     });
  463. 461.  -     opts.tt = tt;
  464. 462.  -     Emoji.reappendEmoji(optId, tt);
  465. 463.  -     Emoji.emojiOver(optId, geByClass1('emoji_scroll', tt).firstChild);
  466. 464.  -
  467. 465.  -     if (opts.sharedTT) {
  468. 466.  -       debugLog('set tt');
  469. 467.  -       opts.sharedTT.emojiTT = tt;
  470. 468.  -     }
  471. 469.  -   }
  472. 470.  -   clearTimeout(opts.ttEmojiHide);
  473. 471.  -
  474. 472.  -   if (Emoji.shownId !== false && Emoji.shownId != optId) {
  475. 473.  -     Emoji.ttClick(Emoji.shownId, geByClass1('emoji_smile', Emoji.opts[Emoji.shownId].controlsCont), true);
  476. 474.  -   }
  477. 475.  -   if (Emoji.shown) {
  478. 476.  -     var toParams = {marginTop: -128, opacity: 0};
  479. 477.  -     if (Emoji.cssAnimation()) {
  480. 478.  -       addClass(tt, 'emoji_animation');
  481. 479.  -       setStyle(tt, toParams);
  482. 480.  -       opts.ttEmojiHide = setTimeout(function() {
  483. 481.  -         removeClass(tt, 'emoji_animation');
  484. 482.  -         hide(tt);
  485. 483.  -       }, 1000);
  486. 484.  -     } else {
  487. 485.  -       setTimeout(function() {
  488. 486.  -         animate(tt, toParams, 200, function() {
  489. 487.  -           hide(tt);
  490. 488.  -         });
  491. 489.  -       }, 10);
  492. 490.  -     }
  493. 491.  -     Emoji.shown = false;
  494. 492.  -     Emoji.shownId = false;
  495. 493.  -     opts.emojiFocused = false;
  496. 494.  -     cur.onMouseClick = false;
  497. 495.  -     removeEvent(document, 'keydown', Emoji.emojiMove);
  498. 496.  -     if (cur.peer == -3) {
  499. 497.  -       Emoji.anim(obj, 0);
  500. 498.  -     } else {
  501. 499.  -       addClass(obj, 'emoji_smile_animation');
  502. 500.  -       clearTimeout(opts.imSmileAnim);
  503. 501.  -       opts.imSmileAnim = setTimeout(removeClass.pbind(obj, 'emoji_smile_animation'), 1000);
  504. 502.  -       removeClass(obj, 'emoji_smile_on');
  505. 503.  -     }
  506. 504.  -     if (opts.onHide) {
  507. 505.  -       opts.onHide();
  508. 506.  -     }
  509. 507.  -   } else {
  510. 508.  -     show(tt);
  511. 509.  -     var toParams = {marginTop: -118, opacity: 1};
  512. 510.  -     if (Emoji.cssAnimation()) {
  513. 511.  -       addClass(tt, 'emoji_animation');
  514. 512.  -       setTimeout(setStyle.pbind(tt, toParams), 100);
  515. 513.  -     } else {
  516. 514.  -       setTimeout(function() {
  517. 515.  -         show(tt);
  518. 516.  -         animate(tt, toParams, 200);
  519. 517.  -       }, 10);
  520. 518.  -     }
  521. 519.  -     Emoji.shownId = optId;
  522. 520.  -     Emoji.shown = obj;
  523. 521.  -     cur.emojiList = geByClass1('emoji_list', tt);
  524. 522.  -     opts.emojiFocused = true;
  525. 523.  -     setTimeout(function() {
  526. 524.  -       cur.onMouseClick = function(e) {
  527. 525.  -         var el = e.target;
  528. 526.  -         while(el) {
  529. 527.  -           if (el.id == 'im_texts' || hasClass(el, 'emoji_tt_wrap') || hasClass(el, 'imw_emoji_wrap')) {
  530. 528.  -             return false;
  531. 529.  -           }
  532. 530.  -           el = el.parentNode;
  533. 531.  -         }
  534. 532.  -         Emoji.ttClick(optId, false, true);
  535. 533.  -       }
  536. 534.  -       addEvent(document, 'keydown', Emoji.emojiMove);
  537. 535.  -     }, 0);
  538. 536.  -     if (cur.peer == -3) {
  539. 537.  -       Emoji.anim(obj, 1);
  540. 538.  -     } else {
  541. 539.  -       addClass(obj, 'emoji_smile_animation')
  542. 540.  -       clearTimeout(opts.imSmileAnim);
  543. 541.  -       opts.imSmileAnim = setTimeout(removeClass.pbind(obj, 'emoji_smile_animation'), 1000);
  544. 542.  -       addClass(obj, 'emoji_smile_on');
  545. 543.  -     }
  546. 544.  -     if (opts.emojiScroll && opts.emojiExpanded) {
  547. 545.  -       opts.emojiScroll.update(false, true);
  548. 546.  -     }
  549. 547.  -     if (opts.onShow) {
  550. 548.  -       opts.onShow();
  551. 549.  -     }
  552. 550.  -   }
  553. 551.  -   if (!opts.emojiExpanded) {
  554. 552.  -     Emoji.emojiExpand(optId, tt);
  555. 553.  -   }
  556. 554.  -   return cancelEvent(ev);
  557. 555.  - },
  558. 556.  - curEmojiSet: ['D83DDE0A', 'D83DDE03', 'D83DDE09', 'D83DDE06', 'D83DDE1C', 'D83DDE0B', 'D83DDE0D', 'D83DDE0E', 'D83DDE12', 'D83DDE0F', 'D83DDE14', 'D83DDE22', 'D83DDE2D', 'D83DDE29', 'D83DDE28', 'D83DDE10', 'D83DDE0C', 'D83DDE04', 'D83DDE07', 'D83DDE30', 'D83DDE32', 'D83DDE33', 'D83DDE37', 'D83DDE02', '2764', 'D83DDE1A', 'D83DDE15', 'D83DDE2F', 'D83DDE26', 'D83DDE35', 'D83DDE20',  'D83DDE21', 'D83DDE1D', 'D83DDE34', 'D83DDE18', 'D83DDE1F', 'D83DDE2C', 'D83DDE36', 'D83DDE2A', 'D83DDE2B', '263A', 'D83DDE00', 'D83DDE25', 'D83DDE1B', 'D83DDE16', 'D83DDE24', 'D83DDE23', 'D83DDE27', 'D83DDE11', 'D83DDE05', 'D83DDE2E', 'D83DDE1E', 'D83DDE19', 'D83DDE13', 'D83DDE01', 'D83DDE31', 'D83DDE08', 'D83DDC7F', 'D83DDC7D', 'D83DDC4D', 'D83DDC4E', '261D', '270C', 'D83DDC4C', 'D83DDC4F', 'D83DDC4A', '270B', 'D83DDE4F', 'D83DDC43', 'D83DDC46', 'D83DDC47', 'D83DDC48', 'D83DDCAA', 'D83DDC42', 'D83DDC8B', 'D83DDCA9', '2744', 'D83CDF4A', 'D83CDF77', 'D83CDF78', 'D83CDF85', 'D83DDCA6', 'D83DDC7A', 'D83DDC28', 'D83DDD1E', 'D83DDC79', '26BD', '26C5', 'D83CDF1F', 'D83CDF4C', 'D83CDF7A', 'D83CDF7B', 'D83CDF39', 'D83CDF45', 'D83CDF52', 'D83CDF81', 'D83CDF82', 'D83CDF84', 'D83CDFC1', 'D83CDFC6', 'D83DDC0E', 'D83DDC0F', 'D83DDC1C', 'D83DDC2B', 'D83DDC2E', 'D83DDC03', 'D83DDC3B', 'D83DDC3C', 'D83DDC05', 'D83DDC13', 'D83DDC18', 'D83DDC94', 'D83DDCAD', 'D83DDC36', 'D83DDC31', 'D83DDC37', 'D83DDC11', '23F3', '26BE', '26C4', '2600', 'D83CDF3A', 'D83CDF3B', 'D83CDF3C', 'D83CDF3D', 'D83CDF4B', 'D83CDF4D', 'D83CDF4E', 'D83CDF4F', 'D83CDF6D', 'D83CDF37', 'D83CDF38', 'D83CDF46', 'D83CDF49', 'D83CDF50', 'D83CDF51', 'D83CDF53', 'D83CDF54', 'D83CDF55', 'D83CDF56', 'D83CDF57', 'D83CDF69', 'D83CDF83', 'D83CDFAA', 'D83CDFB1', 'D83CDFB2', 'D83CDFB7', 'D83CDFB8', 'D83CDFBE', 'D83CDFC0', 'D83CDFE6', 'D83DDE38'],
  559. 557.  - curEmojiKeys: {},
  560. 558.  - emojiShowMore: function(optId) {
  561. 559.  -   debugLog('show emoji more');
  562. 560.  -   var opts = Emoji.opts[optId];
  563. 561.  -   if (Emoji.allEmojiCodes) {
  564. 562.  -     debugLog('show emoji more all', opts.allEmojiId);
  565. 563.  -     var code;
  566. 564.  -     var shown = 0;
  567. 565.  -     var cont = geByClass1('emoji_scroll', opts.tt);
  568. 566.  -     var str = '';
  569. 567.  -     re('im_emoji_progress');
  570. 568.  -     while(code = Emoji.allEmojiCodes[opts.allEmojiId]) {
  571. 569.  -       opts.allEmojiId += 1;
  572. 570.  -       if (opts.sharedTT) {
  573. 571.  -         opts.sharedTT.emojiAllId = opts.allEmojiId;
  574. 572.  -       }
  575. 573.  -       if (Emoji.curEmojiKeys[code]) {
  576. 574.  -         continue;
  577. 575.  -       }
  578. 576.  -       str += Emoji.emojiWrapItem(optId, code);
  579. 577.  -       shown += 1;
  580. 578.  -       if (shown > 128) {
  581. 579.  -         break;
  582. 580.  -       }
  583. 581.  -     }
  584. 582.  -     if (str) {
  585. 583.  -       cont.appendChild(cf(str));
  586. 584.  -       opts.emojiScroll.update(false, true)
  587. 585.  -     }
  588. 586.  -   } else {
  589. 587.  -     cur.onEmojiLoad = Emoji.emojiShowMore.pbind(optId);
  590. 588.  -   }
  591. 589.  - },
  592. 590.  -
  593. 591.  - emojiLoadMore: function(optId) {
  594. 592.  -   var opts = Emoji.opts[optId];
  595. 593.  -   debugLog('load more');
  596. 594.  -   opts.emojiMoreSt = 1;
  597. 595.  -   if (Emoji.allEmojiCodes) {
  598. 596.  -     opts.allEmojiId = 0;
  599. 597.  -     if (opts.sharedTT) {
  600. 598.  -       opts.sharedTT.emojiAllId = 0;
  601. 599.  -     }
  602. 600.  -     if (cur.onEmojiLoad) {
  603. 601.  -       cur.onEmojiLoad();
  604. 602.  -     }
  605. 603.  -   } else {
  606. 604.  -     ajax.post('im', {act: 'get_emoji_list'}, {
  607. 605.  -       onDone: function(codes) {
  608. 606.  -         opts.allEmojiId = 0;
  609. 607.  -         if (opts.sharedTT) {
  610. 608.  -           opts.sharedTT.emojiAllId = 0;
  611. 609.  -         }
  612. 610.  -         Emoji.allEmojiCodes = codes;
  613. 611.  -         if (cur.onEmojiLoad) {
  614. 612.  -           cur.onEmojiLoad();
  615. 613.  -         }
  616. 614.  -       }
  617. 615.  -     })
  618. 616.  -   }
  619. 617.  - },
  620. 618.  -
  621. 619.  - ttEmojiList: function(optId) {
  622. 620.  -   var list = [];
  623. 621.  -   var ems = Emoji.curEmojiSet;
  624. 622.  -   var recent = [];
  625. 623.  -   var recentList = {};
  626. 624.  -
  627. 625.  -   for (var i in ems) {
  628. 626.  -     var code = ems[i];
  629. 627.  -     Emoji.curEmojiKeys[code] = 1;
  630. 628.  -     var str = Emoji.emojiWrapItem(optId, code, i);
  631. 629.  -     list.push(str);
  632. 630.  -   }
  633. 631.  -   if (recent.length) {
  634. 632.  -     list.unshift.apply(list, recent);
  635. 633.  -   }
  636. 634.  -   var loadingEl = '<div align="center" id="im_emoji_progress"><span class="progress_inline progress_gray"></span></div>';
  637. 635.  -
  638. 636.  -   return list.join('')+loadingEl;
  639. 637.  - },
  640. 638.  -
  641. 639.  - emojiWrapItem: function(optId, code, i) {
  642. 640.  -   var info = Emoji.cssEmoji[code];
  643. 641.  -   if (info) {
  644. 642.  -     var titleStr = ' title="'+info[1]+'"';
  645. 643.  -   } else {
  646. 644.  -     var titleStr = '';
  647. 645.  -   }
  648. 646.  -   if (browser.mobile) {
  649. 647.  -     var overEvent = '';
  650. 648.  -   } else {
  651. 649.  -     var overEvent = ' onmouseover="return Emoji.emojiOver('+optId+', this);"';
  652. 650.  -   }
  653. 651.  -   return '<a class="emoji_smile_cont '+((code != '2764' && i && (i < 54)) ? 'emoji_smile_shadow' : '')+'" '+titleStr+' onmousedown="Emoji.addEmoji(Emoji.shownId, \''+code+'\', this); return cancelEvent(event);" onclick="return cancelEvent(event);"'+overEvent+'><div class="emoji_bg"></div><div class="emoji_shadow"></div>'+Emoji.getEmojiHTML(code)+'</a>'
  654. 652.  - },
  655. 653.  -
  656. 654.  - reappendEmoji: function(optId, tt) {
  657. 655.  -   var opts = Emoji.opts[optId];
  658. 656.  -   if (opts.rceCont) {
  659. 657.  -     if (!opts.addMediaBtn) {
  660. 658.  -       opts.sendWrap.appendChild(opts.rceCont);
  661. 659.  -     } else {
  662. 660.  -       opts.sendWrap.insertBefore(opts.rceCont, opts.addMediaBtn);
  663. 661.  -     }
  664. 662.  -   }
  665. 663.  -   if (!tt) return;
  666. 664.  -   var controls = opts.controlsCont;
  667. 665.  -   var diff = opts.isSized ? sbWidth() : 0;
  668. 666.  -
  669. 667.  -   controls.insertBefore(tt, domFC(controls));
  670. 668.  -   diff += opts.ttDiff;
  671. 669.  -   if (opts.ttShift) {
  672. 670.  -     diff += opts.ttShift;
  673. 671.  -   }
  674. 672.  -   setStyle(tt, vk.rtl ? {left: diff} : {right: diff});
  675. 673.  -   clearTimeout(cur.ttEmojiHide);
  676. 674.  -   hide(tt);
  677. 675.  - },
  678. 676.  - emojiOver: function(optId, obj) {
  679. 677.  -   if (browser.mobile) {
  680. 678.  -     return true;
  681. 679.  -   }
  682. 680.  -   var opts = Emoji.opts[optId]
  683. 681.  -   addClass(obj, 'emoji_over');
  684. 682.  -   if (opts.emojiOvered && opts.emojiOvered != obj) {
  685. 683.  -     removeClass(opts.emojiOvered, 'emoji_over');
  686. 684.  -   }
  687. 685.  -   opts.emojiOvered = obj;
  688. 686.  -   Emoji.emojiOpera(optId);
  689. 687.  - },
  690. 688.  - emojiOpera: function(optId) { // fuck opera!
  691. 689.  -   if (browser.opera && !browser.mobile) {
  692. 690.  -     var tt = Emoji.opts[optId].tt;
  693. 691.  -     animate(tt, {opacity: 0.99}, 20, animate.pbind(tt, {opacity: 1}, 20));
  694. 692.  -   }
  695. 693.  - },
  696. 694.  - emojiExpand: function(optId, block) {
  697. 695.  -   var opts = Emoji.opts[optId];
  698. 696.  -   var list = geByClass1('emoji_list', block);
  699. 697.  -   if (Emoji.cssAnimation()) {
  700. 698.  -     removeClass(block, 'emoji_animation')
  701. 699.  -   }
  702. 700.  -   addClass(block, 'emoji_expanded');
  703. 701.  -
  704. 702.  -   if (opts.emojiScroll) {
  705. 703.  -     opts.emojiScroll.enable()
  706. 704.  -   } else {
  707. 705.  -     var topShown = false;
  708. 706.  -     var bottomShown = false;
  709. 707.  -     opts.emojiScroll = new Scrollbar(list, {
  710. 708.  -       prefix: 'emoji_',
  711. 709.  -       nomargin: true,
  712. 710.  -       global: true,
  713. 711.  -       nokeys: true,
  714. 712.  -       right: vk.rtl ? 'auto' : 10,
  715. 713.  -       left: !vk.rtl ? 'auto' : 10,
  716. 714.  -       scrollChange: function(top) {
  717. 715.  -         if (window.tooltips) {
  718. 716.  -           tooltips.destroyAll();
  719. 717.  -           cur.ttScrollTime = new Date().getTime();
  720. 718.  -         }
  721. 719.  -         if (Emoji.showShadow()) {
  722. 720.  -           if (top && !topShown) {
  723. 721.  -             show(geByClass1('emoji_expand_shadow_top', opts.tt));
  724. 722.  -             topShown = true;
  725. 723.  -           } else if (!top && topShown) {
  726. 724.  -             topShown = false;
  727. 725.  -             hide(geByClass1('emoji_expand_shadow_top', opts.tt));
  728. 726.  -           }
  729. 727.  -         }
  730. 728.  -         if (top > 10 && !opts.emojiMoreSt) {
  731. 729.  -           Emoji.emojiLoadMore(optId);
  732. 730.  -         }
  733. 731.  -         Emoji.emojiOpera(optId);
  734. 732.  -       },
  735. 733.  -       more: Emoji.emojiShowMore.pbind(optId)
  736. 734.  -     });
  737. 735.  -
  738. 736.  -     if (opts.sharedTT) {
  739. 737.  -       opts.sharedTT.emojiScroll = opts.emojiScroll;
  740. 738.  -     }
  741. 739.  -   }
  742. 740.  -   opts.emojiExpanded = true;
  743. 741.  - },
  744. 742.  -
  745. 743.  - emojiMove: function(e) {
  746. 744.  -   var optId = Emoji.shownId;
  747. 745.  -   var opts = Emoji.opts[optId];
  748. 746.  -   if (Emoji.shown && opts.emojiFocused) {
  749. 747.  -     var el = opts.emojiOvered;
  750. 748.  -     switch (e.keyCode) {
  751. 749.  -       case KEY.LEFT:
  752. 750.  -         el = el.previousSibling;
  753. 751.  -         break;
  754. 752.  -       case KEY.RIGHT:
  755. 753.  -         el = el.nextSibling;
  756. 754.  -         break;
  757. 755.  -       case KEY.UP:
  758. 756.  -         var i = 9;
  759. 757.  -         while (el.previousSibling && --i > 0) {
  760. 758.  -           el = el.previousSibling;
  761. 759.  -         }
  762. 760.  -         if (i > 1) {
  763. 761.  -           return cancelEvent(e);
  764. 762.  -         }
  765. 763.  -         break;
  766. 764.  -       case KEY.DOWN:
  767. 765.  -         var i = 9;
  768. 766.  -         while (el.nextSibling && --i > 0) {
  769. 767.  -           el = el.nextSibling;
  770. 768.  -         }
  771. 769.  -         if (i > 1) {
  772. 770.  -           return cancelEvent(e);
  773. 771.  -         }
  774. 772.  -         break;
  775. 773.  -       case KEY.ENTER:
  776. 774.  -         return Emoji.emojiEnter(optId, e);
  777. 775.  -         break;
  778. 776.  -       default:
  779. 777.  -         return true;
  780. 778.  -     }
  781. 779.  -     if (el) {
  782. 780.  -       var diff = el.offsetTop - cur.emojiList.scrollTop;
  783. 781.  -       if (diff > 72) {
  784. 782.  -         animate(cur.emojiList, {scrollTop: cur.emojiList.scrollTop + (diff - 72)}, 80, function() {
  785. 783.  -           opts.emojiScroll.update(true, true)
  786. 784.  -         });
  787. 785.  -       } else if (diff < 0) {
  788. 786.  -         animate(cur.emojiList, {scrollTop: cur.emojiList.scrollTop + diff}, 80, function() {
  789. 787.  -           opts.emojiScroll.update(true, true)
  790. 788.  -         });
  791. 789.  -       }
  792. 790.  -       Emoji.emojiOver(optId, el);
  793. 791.  -     }
  794. 792.  -     return cancelEvent(e);
  795. 793.  -   }
  796. 794.  -   return true;
  797. 795.  - },
  798. 796.  -
  799. 797.  - anim: function(el, to) {
  800. 798.  -   clearInterval(cur._imAnim);
  801. 799.  -   var dt = 300, dStep = 45 / (dt / 13), oStep = 1 / (dt / 13), steps = Math.floor(dt / 13), i = 0;
  802. 800.  -   var el1 = domLC(el), el2 = domFC(el);
  803. 801.  -   var dFrom1 = to ? 0 : 45, dTo1 = to ? 45 : 0, oFrom1 = to ? 1 : 0, oTo1 = to ? 0 : 1;
  804. 802.  -   cur._imAnim = setInterval(function() {
  805. 803.  -     ++i;
  806. 804.  -     var d1 = (i >= steps) ? dTo1 : (dFrom1 + dStep * i * (to ? 1 : -1)), d2 = d1 - 45;
  807. 805.  -     var o1 = (i >= steps) ? oTo1 : (oFrom1 + oStep * i * (to ? -1 : 1)), o2 = 1 - o1;
  808. 806.  -     el1.style.WebkitTransform = el1.style.OTransform = el1.style.transform = 'rotate(' + d1 + 'deg)';
  809. 807.  -     el2.style.WebkitTransform = el2.style.OTransform = el2.style.transform = 'rotate(' + d2 + 'deg)';
  810. 808.  -     el1.style.opacity = o1;
  811. 809.  -     el2.style.opacity = o2;
  812. 810.  -     if (i >= steps) {
  813. 811.  -       clearInterval(cur._imAnim);
  814. 812.  -       (to ? addClass : removeClass)(el, 'emoji_smile_on');
  815. 813.  -       el1.style.WebkitTransform = el1.style.OTransform = el1.style.transform = el2.style.WebkitTransform = el2.style.OTransform = el2.style.transform = el1.style.opacity = el2.style.opacity = '';
  816. 814.  -     }
  817. 815.  -   }, 13);
  818. 816.  - },
  819. 817.  - cssAnimation: function() {
  820. 818.  -   var v = intval(browser.version);
  821. 819.  -   if ((browser.chrome && v > 14) || (browser.mozilla && v > 13) || (browser.opera && v > 2)) {
  822. 820.  -     return (cur.peer != -3);
  823. 821.  -   }
  824. 822.  -   return false;
  825. 823.  - },
  826. 824.  - ttOver: function(obj) {
  827. 825.  -   animate(obj, {opacity: 1}, 200);
  828. 826.  - },
  829. 827.  - ttOut: function(obj) {
  830. 828.  -   animate(obj, {opacity: 0.7}, 200);
  831. 829.  - },
  832. 830.  - tplSmile: function(optId, placeholder, classAddr) {
  833. 831.  -   return '<div title="'+placeholder+'" class="fl_l emoji_smile'+classAddr+'" onmouseover="Emoji.ttOver(this);" onmouseout="Emoji.ttOut(this);" onmousedown="return Emoji.ttClick('+optId+', this, false, false, event);" onclick="return cancelEvent(event);" style="right: 1px; opacity: 0.7;"><div class="emoji_smile_icon_on"></div><div class="emoji_smile_icon"></div></div>'
  834. 832.  - },
  835. 833.  -
  836. 834.  -
  837. 835.  - emojiToHTML: function(str, replaceSymbols) {
  838. 836.  -   if (browser.ipad || browser.iphone) {
  839. 837.  -     return str;
  840. 838.  -   }
  841. 839.  -   str = str.replace(/&nbsp;/g, ' ').replace(/<br>/g, "\n");
  842. 840.  -   var regs = {
  843. 841.  -     'D83DDE07': /(\s|^)([0O�]:\))([\s\.,]|$)/g,
  844. 842.  -     'D83DDE09': /(\s|^)(;-\)+)([\s\.,]|$)/g,
  845. 843.  -     'D83DDE06': /(\s|^)([X�x�]-?D)([\s\.,]|$)/g,
  846. 844.  -     'D83DDE0E': /(\s|^)(B-\))([\s\.,]|$)/g,
  847. 845.  -     'D83DDE0C': /(\s|^)(3-\))([\s\.,]|$)/g,
  848. 846.  -     'D83DDE20': /(\s|^)(&gt;\()([\s\.,]|$)/g,
  849. 847.  -     'D83DDE30': /(\s|^)(;[o�O�])([\s\.,]|$)/g,
  850. 848.  -     'D83DDE33': /(\s|^)(8\|)([\s\.,]|$)/g,
  851. 849.  -     'D83DDE32': /(\s|^)(8-?[o�O�])([\s\.,]|$)/g,
  852. 850.  -     'D83DDE0D': /(\s|^)(8-\))([\s\.,]|$)/g,
  853. 851.  -     'D83DDE37': /(\s|^)(:[X�])([\s\.,]|$)/g,
  854. 852.  -     'D83DDE28': /(\s|^)(:[o�O�])([\s\.,]|$)/g,
  855. 853.  -     '2764': /(\s|^)(&lt;3)([\s\.,]|$)/g
  856. 854.  -   };
  857. 855.  -   for (var code in regs) {
  858. 856.  -     str = str.replace(regs[code], function(match, pre, smile, space) {
  859. 857.  -       return (pre || '') + Emoji.getEmojiHTML(code)+(space || '');
  860. 858.  -     });
  861. 859.  -   }
  862. 860.  -   var regs = {
  863. 861.  -     'D83DDE0A': /(:-\))([\s\.,]|$)/g,
  864. 862.  -     'D83DDE03': /(:-D)([\s\.,]|$)/g,
  865. 863.  -     'D83DDE1C': /(;-[P�])([\s\.,]|$)/g,
  866. 864.  -     'D83DDE0B': /(:-[p�])([\s\.,]|$)/g,
  867. 865.  -     'D83DDE12': /(:-\()([\s\.,]|$)/g,
  868. 866.  -     'D83DDE0F': /(:-?\])([\s\.,]|$)/g,
  869. 867.  -     'D83DDE14': /(3-?\()([\s\.,]|$)/g,
  870. 868.  -     'D83DDE22': /(:&#039;\()([\s\.,]|$)/g,
  871. 869.  -     'D83DDE2D': /(:_\()([\s\.,]|$)/g,
  872. 870.  -     'D83DDE29': /(:\(\()([\s\.,]|$)/g,
  873. 871.  -     //'D83DDE15': /(:\\)([\s\.,]|$)/g,
  874. 872.  -     'D83DDE10': /(:\|)([\s\.,]|$)/g,
  875. 873.  -     'D83DDE21': /(&gt;\(\()([\s\.,]|$)/g,
  876. 874.  -     'D83DDE1A': /(:-\*)([\s\.,]|$)/g,
  877. 875.  -     'D83DDE08': /(\}:\))([\s\.,]|$)/g,
  878. 876.  -     'D83DDC4D': /(:like:)([\s\.,]|$)/g,
  879. 877.  -     'D83DDC4E': /(:dislike:)([\s\.,]|$)/g,
  880. 878.  -     '261D': /(:up:)([\s\.,]|$)/g,
  881. 879.  -     '270C': /(:v:)([\s\.,]|$)/g,
  882. 880.  -     'D83DDC4C': /(:ok:|:��:)([\s\.,]|$)/g
  883. 881.  -   };
  884. 882.  -   for (var code in regs) {
  885. 883.  -     str = str.replace(regs[code], function(match, smile, space) {
  886. 884.  -       return Emoji.getEmojiHTML(code)+(space || '');
  887. 885.  -     });
  888. 886.  -   }
  889. 887.  -
  890. 888.  -   str = str.replace(/\n/g, '<br>');
  891. 889.  -   if (replaceSymbols) {
  892. 890.  -     str = str.replace(Emoji.emojiRegEx, Emoji.emojiReplace).replace(/\uFE0F/g, '');
  893. 891.  -   }
  894. 892.  -
  895. 893.  -   return str;
  896. 894.  - },
  897. 895.  -
  898. 896.  - emojiReplace: function(symbol) {
  899. 897.  -   var i = 0;
  900. 898.  -   var code = '', num;
  901. 899.  -   while(num = symbol.charCodeAt(i++)) {
  902. 900.  -     if (i == 2 && num == 8419) {
  903. 901.  -       code = '003'+symbol.charAt(0)+'20E3';
  904. 902.  -       break;
  905. 903.  -     }
  906. 904.  -     code += num.toString(16);
  907. 905.  -   }
  908. 906.  -   if (symbol.match(/[\uDDE7-\uDDFA]/)) {
  909. 907.  -     if (cur.flagSymbol) {
  910. 908.  -       code = cur.flagSymbol + code;
  911. 909.  -       cur.flagSymbol = false;
  912. 910.  -     } else {
  913. 911.  -       cur.flagSymbol = code;
  914. 912.  -       return '';
  915. 913.  -     }
  916. 914.  -   }
  917. 915.  -   code = code.toUpperCase();
  918. 916.  -   return Emoji.getEmojiHTML(code, symbol, true);
  919. 917.  - },
  920. 918.  -
  921. 919.  - emojiRegEx: /([\uE000-\uF8FF\u270A-\u2764\u2122\u25C0\u25FB-\u25FE\u2615\u263a\u2648-\u2653\u2660-\u2668\u267B\u267F\u2693\u261d\u26A0-\u26FA\u2708]|\uD83C[\uDC00-\uDFFF]|[\u2600\u26C4\u26BE\u23F3\u2764]|\uD83D[\uDC00-\uDFFF]|\uD83C[\uDDE8-\uDDFA]\uD83C[\uDDEA-\uDDFA]|[0-9]\u20e3)/g,
  922. 920.  -
  923. 921.  - getCode: function(obj) {
  924. 922.  -   var code = false;
  925. 923.  -   if (obj.className == 'emoji') {
  926. 924.  -     var m = obj.src.match(/\/([a-zA-Z0-9]+).png/);
  927. 925.  -     if (m) {
  928. 926.  -       var code = m[1];
  929. 927.  -     }
  930. 928.  -   } else if (obj.className == 'emoji_css') {
  931. 929.  -     var code = obj.getAttribute('emoji');
  932. 930.  -   }
  933. 931.  -   return code;
  934. 932.  - },
  935. 933.  -
  936. 934.  - __eof: 1}}
  937. 935.  - try{stManager.done('emoji.js');}catch(e){}
  938. ------
  939. Файл - notifier.css (Старый размер - 20754 | Новый - 0):
  940. 0.  - #notifier_css {
  941. 1.  -   display: none;
  942. 2.  - }
  943. 3.  -
  944. 4.  - #notifiers_wrap {
  945. 5.  -   bottom: -5px;
  946. 6.  -   left: 0;
  947. 7.  -   z-index: 1100;
  948. 8.  - }
  949. 9.  -
  950. 10.  - .notifier_baloon_wrap {
  951. 11.  -   padding: 0 0 10px 10px;
  952. 12.  -   visibility: hidden;
  953. 13.  - }
  954. 14.  - .notifier_baloon {
  955. 15.  -   color: #FFF;
  956. 16.  -   cursor: pointer;
  957. 17.  -   background: url('/images/mv_bg.png');
  958. 18.  -   background: rgba(0, 0, 0, 0.75);
  959. 19.  -
  960. 20.  -   -moz-border-radius: 5px;
  961. 21.  -   -webkit-border-radius: 5px;
  962. 22.  -   border-radius: 5px;
  963. 23.  -
  964. 24.  -   -moz-box-shadow: 0 2px 15px #000;
  965. 25.  -    -webkit-box-shadow: 0 2px 15px #000;
  966. 26.  -    box-shadow: 0 2px 15px #000;
  967. 27.  -
  968. 28.  -   /* padding: 10px; */
  969. 29.  -   width: 320px;
  970. 30.  -   text-shadow: 0px 1px 0px #262626;
  971. 31.  - }
  972. 32.  - .notifier_baloon_head {
  973. 33.  -   padding: 10px 10px 3px;
  974. 34.  -   /* background: rgba(0, 0, 0, 0.9); */
  975. 35.  - }
  976. 36.  - div.notifier_baloon_title {
  977. 37.  -   /* width: 180px; */
  978. 38.  -   font-weight: bold;
  979. 39.  -   font-size: 1.09em;
  980. 40.  - }
  981. 41.  - .notifier_close_wrap {
  982. 42.  -   background: #000;
  983. 43.  -
  984. 44.  -   -moz-border-radius: 3px;
  985. 45.  -   -webkit-border-radius: 3px;
  986. 46.  -   border-radius: 3px;
  987. 47.  -
  988. 48.  -   -moz-box-shadow: 0 0 2px #111;
  989. 49.  -    -webkit-box-shadow: 0 0 2px #111;
  990. 50.  -    box-shadow: 0 0 2px #111;
  991. 51.  -   padding: 5px;
  992. 52.  -   margin: 0 0 0 10px;
  993. 53.  -   visibility: hidden;
  994. 54.  -
  995. 55.  -   opacity: 0.6;
  996. 56.  -   filter: alpha(opacity=60);
  997. 57.  -
  998. 58.  -   /* background: none; */
  999. 59.  -   /* -moz-box-shadow: none; */
  1000. 60.  -   /*  -webkit-box-shadow: none; */
  1001. 61.  -   /*  box-shadow: none; */
  1002. 62.  -   /* opacity: 1; */
  1003. 63.  -   /* filter: alpha(opacity=100); */
  1004. 64.  - }
  1005. 65.  - .notifier_close {
  1006. 66.  -   display: block;
  1007. 67.  -   background: url("/images/notifier_close.gif") no-repeat scroll 0 0 transparent;
  1008. 68.  -   opacity: 0.6;
  1009. 69.  -   filter: alpha(opacity=60);
  1010. 70.  -
  1011. 71.  -   width: 7px;
  1012. 72.  -   height: 7px;
  1013. 73.  - }
  1014. 74.  - .notifier_baloon_over .notifier_close_wrap {
  1015. 75.  -   visibility: visible;
  1016. 76.  - }
  1017. 77.  - .notifier_close_over .notifier_close {
  1018. 78.  -   opacity: 1;
  1019. 79.  -   filter: alpha(opacity=100);
  1020. 80.  - }
  1021. 81.  - .notifier_baloon_body {
  1022. 82.  -   padding: 5px 10px 10px;
  1023. 83.  - }
  1024. 84.  - td.notifier_image_wrap {
  1025. 85.  -   vertical-align: top;
  1026. 86.  -   padding-right: 10px;
  1027. 87.  -   width: 50px;
  1028. 88.  - }
  1029. 89.  - td.notifier_add_image_wrap {
  1030. 90.  -   vertical-align: top;
  1031. 91.  -   padding-left: 10px;
  1032. 92.  -   width: 50px;
  1033. 93.  - }
  1034. 94.  -
  1035. 95.  - div.notifier_image_wrap {
  1036. 96.  -   /*background: #FFF;*/
  1037. 97.  -   overflow: hidden;
  1038. 98.  -   width: 50px;
  1039. 99.  -   max-height: 50px;
  1040. 100.  -
  1041. 101.  -   -moz-border-radius: 3px;
  1042. 102.  -   -webkit-border-radius: 3px;
  1043. 103.  -   border-radius: 3px;
  1044. 104.  -
  1045. 105.  -   -moz-box-shadow: 0 1px 2px #111;
  1046. 106.  -   -webkit-box-shadow: 0 1px 2px #111;
  1047. 107.  -   box-shadow: 0 1px 2px #111;
  1048. 108.  -   line-height: 0;
  1049. 109.  - }
  1050. 110.  - .notifier_image {
  1051. 111.  -   width: 50px;
  1052. 112.  -
  1053. 113.  -   -moz-border-radius: 3px;
  1054. 114.  -   -webkit-border-radius: 3px;
  1055. 115.  -   border-radius: 3px;
  1056. 116.  - }
  1057. 117.  - div.notifier_image_gift {
  1058. 118.  -   -moz-box-shadow: none;
  1059. 119.  -   -webkit-box-shadow: none;
  1060. 120.  -   box-shadow: none;
  1061. 121.  - }
  1062. 122.  - td.notifier_baloon_msg {
  1063. 123.  -   text-align: left;
  1064. 124.  -   vertical-align: top;
  1065. 125.  - }
  1066. 126.  - div.notifier_baloon_msg {
  1067. 127.  -   /* padding-top: 10px; */
  1068. 128.  - }
  1069. 129.  - #notifiers_wrap a,
  1070. 130.  - div.notifier_baloon_msg span.mem_link,
  1071. 131.  - div.notifier_baloon_msg span.group_link {
  1072. 132.  -   color: #B1DAFF;
  1073. 133.  - }
  1074. 134.  - #notifiers_wrap a.mem_link,
  1075. 135.  - #notifiers_wrap a.group_link,
  1076. 136.  - #notifiers_wrap a.memLink {
  1077. 137.  -   font-weight: bold;
  1078. 138.  - }
  1079. 139.  - .notifier_author_quote {
  1080. 140.  -   padding-right: 4px;
  1081. 141.  - }
  1082. 142.  - #queue_transport_wrap,
  1083. 143.  - #queue_transport_frame,
  1084. 144.  - #queue_storage_frame {
  1085. 145.  -   width: 1px;
  1086. 146.  -   height: 1px;
  1087. 147.  -   overflow: hidden;
  1088. 148.  - }
  1089. 149.  -
  1090. 150.  -
  1091. 151.  - /* Chat styles */
  1092. 152.  - .rb_box_wrap {
  1093. 153.  -   z-index: 700;
  1094. 154.  -   display: none;
  1095. 155.  - }
  1096. 156.  - .rb_resize_wrap {
  1097. 157.  -   position: relative;
  1098. 158.  - }
  1099. 159.  - .rb_resize {
  1100. 160.  -   cursor: move;
  1101. 161.  -   cursor: se-resize;
  1102. 162.  -   position: absolute;
  1103. 163.  -   right: 2px;
  1104. 164.  -   top: -12px;
  1105. 165.  -   width: 10px;
  1106. 166.  -   height: 10px;
  1107. 167.  -   background: url(/images/icons/rbox_full2.png?3) 0 -34px no-repeat;
  1108. 168.  -   opacity: 0.35;
  1109. 169.  -   filter: alpha(opacity=35);
  1110. 170.  - }
  1111. 171.  - .rb_inactive .fc_tab {
  1112. 172.  -   background: rgba(0, 0, 0, 0.6);
  1113. 173.  - }
  1114. 174.  -
  1115. 175.  - .rb_inactive .fc_tab_close_wrap,
  1116. 176.  - .rb_inactive .fc_tab_max_wrap,
  1117. 177.  - .rb_inactive .fc_tab_min_wrap {
  1118. 178.  -   opacity: 0.4;
  1119. 179.  -   filter: alpha(opacity=40);
  1120. 180.  - }
  1121. 181.  - .rb_inactive .fc_tab_title {
  1122. 182.  -   color: #AAA;
  1123. 183.  -   text-shadow: none;
  1124. 184.  - }
  1125. 185.  - #rb_box_fc_clist .fc_tab_title,
  1126. 186.  - .rb_minimized .fc_tab_title {
  1127. 187.  -   color: #FFF;
  1128. 188.  - }
  1129. 189.  -
  1130. 190.  - .rb_minimized .fc_tab_log_wrap,
  1131. 191.  - .rb_minimized .fc_tab_txt_wrap,
  1132. 192.  - .rb_minimized .rb_resize_wrap {
  1133. 193.  -   display: none;
  1134. 194.  - }
  1135. 195.  - .rb_minimized .fc_tab_wrap {
  1136. 196.  -   max-width: 260px;
  1137. 197.  - }
  1138. 198.  - .rb_minimized .fc_tab {
  1139. 199.  -   padding-bottom: 2px;
  1140. 200.  - }
  1141. 201.  - .rb_minimized .fc_clist_inner,
  1142. 202.  - .rb_minimized .fc_tab {
  1143. 203.  -   background: rgba(0, 0, 0, 0.75);
  1144. 204.  - }
  1145. 205.  -
  1146. 206.  - .fc_clist_inner {
  1147. 207.  -   background: url('/images/mv_bg.png');
  1148. 208.  -   background: rgba(0, 0, 0, 0.75);
  1149. 209.  -   padding: 6px 10px 10px;
  1150. 210.  -   -moz-border-radius: 4px;
  1151. 211.  -   -webkit-border-radius: 4px;
  1152. 212.  -   border-radius: 4px;
  1153. 213.  - }
  1154. 214.  - .fc_contacts_wrap {
  1155. 215.  -   -moz-border-radius: 4px;
  1156. 216.  -   -webkit-border-radius: 4px;
  1157. 217.  -   border-radius: 4px;
  1158. 218.  -   overflow: hidden;
  1159. 219.  - }
  1160. 220.  - .fc_content_wrap {
  1161. 221.  -   -moz-border-radius: 4px;
  1162. 222.  -   -webkit-border-radius: 4px;
  1163. 223.  -   border-radius: 4px;
  1164. 224.  -   overflow: hidden;
  1165. 225.  - }
  1166. 226.  - .fc_content_overflow {
  1167. 227.  -   position: absolute;
  1168. 228.  - }
  1169. 229.  - .fc_tab_close_wrap, .fc_tab_min_wrap, .fc_tab_max_wrap {
  1170. 230.  -   display: block;
  1171. 231.  -   background: #000;
  1172. 232.  -
  1173. 233.  -   -moz-border-radius: 3px;
  1174. 234.  -   -webkit-border-radius: 3px;
  1175. 235.  -   border-radius: 3px;
  1176. 236.  -
  1177. 237.  -   -moz-box-shadow: 0 0 2px #111;
  1178. 238.  -    -webkit-box-shadow: 0 0 2px #111;
  1179. 239.  -    box-shadow: 0 0 2px #111;
  1180. 240.  -   padding: 3px;
  1181. 241.  -   margin: 0 0 0 4px;
  1182. 242.  -   visibility: hidden;
  1183. 243.  -
  1184. 244.  -   opacity: 0.6;
  1185. 245.  -   filter: alpha(opacity=60);
  1186. 246.  -   visibility: visible;
  1187. 247.  -   cursor: pointer;
  1188. 248.  - }
  1189. 249.  -
  1190. 250.  - .fc_tab_close, .fc_tab_min, .fc_tab_max {
  1191. 251.  -   display: block;
  1192. 252.  -   background: url(/images/icons/rbox_full2.png?3) no-repeat scroll 0 0 transparent;
  1193. 253.  -   opacity: 0.6;
  1194. 254.  -   filter: alpha(opacity=60);
  1195. 255.  -
  1196. 256.  -   width: 7px;
  1197. 257.  -   height: 7px;
  1198. 258.  - }
  1199. 259.  - .fc_tab_min {
  1200. 260.  -   background-position: 0 -22px;
  1201. 261.  - }
  1202. 262.  - .rb_minimized .fc_tab_min, .fc_tab_max {
  1203. 263.  -   background-position: 0 -11px;
  1204. 264.  - }
  1205. 265.  - .fc_tab_close_wrap:hover .fc_tab_close,
  1206. 266.  - .fc_tab_min_wrap:hover .fc_tab_min,
  1207. 267.  - .fc_tab_max_wrap:hover .fc_tab_max {
  1208. 268.  -   opacity: 1;
  1209. 269.  -   filter: alpha(opacity=100);
  1210. 270.  - }
  1211. 271.  - .fc_tab_title {
  1212. 272.  -   padding: 0px 3px 5px;
  1213. 273.  -   font-weight: bold;
  1214. 274.  -   font-size: 1.09em;
  1215. 275.  -   color: #FFF;
  1216. 276.  -   height: 14px;
  1217. 277.  -   overflow: hidden;
  1218. 278.  -   text-shadow: 0px 1px 0px #262626;
  1219. 279.  -   white-space: nowrap;
  1220. 280.  -   -o-text-overflow: ellipsis;
  1221. 281.  -   text-overflow: ellipsis;
  1222. 282.  - }
  1223. 283.  - /*.fc_tab_count {
  1224. 284.  -   font-size: 0.9em;
  1225. 285.  - }*/
  1226. 286.  - .fc_tab_online .fc_tab_online_icon,
  1227. 287.  - .fc_tab_mobile .fc_tab_online_icon {
  1228. 288.  -   width: 6px;
  1229. 289.  -   height: 6px;
  1230. 290.  -   margin: 5px 0 0 3px;
  1231. 291.  -   background: url(/images/icons/rbox_full2.png?3) 0 -168px no-repeat;
  1232. 292.  - }
  1233. 293.  - .fc_tab_mobile .fc_tab_online_icon {
  1234. 294.  -   width: 9px;
  1235. 295.  -   height: 11px;
  1236. 296.  -   margin: 2px 0 0 3px;
  1237. 297.  -   background-position: -1px -154px;
  1238. 298.  - }
  1239. 299.  - #fc_contacts {
  1240. 300.  -   height: 500px;
  1241. 301.  -   overflow: auto hidden;
  1242. 302.  -   overflow-x: hidden;
  1243. 303.  -   overflow-y: auto;
  1244. 304.  -   background: #FFF;
  1245. 305.  -   -moz-box-shadow: inset 0 0 3px #777;
  1246. 306.  -   -webkit-box-shadow: inset 0 0 3px #777;
  1247. 307.  -   box-shadow: inset 0 0 3px #777;
  1248. 308.  - }
  1249. 309.  - .fc_content {
  1250. 310.  -   overflow: auto hidden;
  1251. 311.  -   overflow-x: hidden;
  1252. 312.  -   overflow-y: auto;
  1253. 313.  -   background: #FFF;
  1254. 314.  -   -moz-box-shadow: inset 0 0 3px #777;
  1255. 315.  -   -webkit-box-shadow: inset 0 0 3px #777;
  1256. 316.  -   box-shadow: inset 0 0 3px #777;
  1257. 317.  - }
  1258. 318.  - .fc_clist_empty {
  1259. 319.  -   color: #777;
  1260. 320.  -   text-align: center;
  1261. 321.  -   padding: 50px 20px;
  1262. 322.  - }
  1263. 323.  - .fc_contact {
  1264. 324.  -   display: block;
  1265. 325.  -   height: 30px;
  1266. 326.  -   padding: 4px 8px;
  1267. 327.  -   line-height: 0;
  1268. 328.  -   white-space: nowrap;
  1269. 329.  -   overflow: hidden;
  1270. 330.  -   width: 100%;
  1271. 331.  - }
  1272. 332.  - .fc_contact:first-child {
  1273. 333.  -   padding-top: 8px;
  1274. 334.  - }
  1275. 335.  - .fc_contact:last-child {
  1276. 336.  -   padding-bottom: 8px;
  1277. 337.  - }
  1278. 338.  - a.fc_contact:hover {
  1279. 339.  -   text-decoration: none;
  1280. 340.  - }
  1281. 341.  - a.fc_contact_over {
  1282. 342.  -   background: #EDF1F5;
  1283. 343.  -   background: none repeat scroll 0 0 rgba(219, 227, 235, 0.5);
  1284. 344.  - }
  1285. 345.  - img.fc_contact_photo {
  1286. 346.  -   width: 30px;
  1287. 347.  -   height: 30px;
  1288. 348.  -   background: 0 0 no-repeat;
  1289. 349.  -   -moz-border-radius: 2px;
  1290. 350.  -   -webkit-border-radius: 2px;
  1291. 351.  -   border-radius: 2px;
  1292. 352.  - }
  1293. 353.  - span.fc_contact_photo {
  1294. 354.  -   display: block;
  1295. 355.  -   margin: -4px -8px;
  1296. 356.  -   padding: 4px 8px;
  1297. 357.  - }
  1298. 358.  - .fc_contact_status {
  1299. 359.  -   display: none;
  1300. 360.  -   height: 6px;
  1301. 361.  -   width: 6px;
  1302. 362.  -   margin: 12px 0 0 4px;
  1303. 363.  - }
  1304. 364.  - .fc_contact_online .fc_contact_status,
  1305. 365.  - .fc_contact_mobile .fc_contact_status {
  1306. 366.  -   display: block;
  1307. 367.  -   background: url(/images/icons/rbox_full2.png?3) 0 -49px no-repeat;
  1308. 368.  - }
  1309. 369.  - .fc_contact_mobile .fc_contact_status {
  1310. 370.  -   background-position: -1px -128px;
  1311. 371.  -   width: 9px;
  1312. 372.  -   height: 11px;
  1313. 373.  -   margin: 9px 0px 0px 3px;
  1314. 374.  - }
  1315. 375.  - .fc_contact_over .fc_contact_status {
  1316. 376.  -   display: block;
  1317. 377.  -   background: url(/images/icons/rbox_full2.png?3) 1px -83px no-repeat;
  1318. 378.  -   width: 11px;
  1319. 379.  -   height: 11px;
  1320. 380.  -   margin: 10px 0 0 1px;
  1321. 381.  - }
  1322. 382.  - .fc_contact_profile .fc_contact_status {
  1323. 383.  -   margin-top: 9px;
  1324. 384.  -   background-position: 0 -99px;
  1325. 385.  -   height: 12px;
  1326. 386.  - }
  1327. 387.  - .fc_contact_name {
  1328. 388.  -   line-height: 2.72em;
  1329. 389.  -   padding: 0 0 0 8px;
  1330. 390.  -   white-space: nowrap;
  1331. 391.  -   display: block;
  1332. 392.  -   width: 130px;
  1333. 393.  -   -o-text-overflow: ellipsis;
  1334. 394.  -   text-overflow: ellipsis;
  1335. 395.  -   overflow: hidden;
  1336. 396.  - }
  1337. 397.  - .fc_contact_unread {
  1338. 398.  -   font-size: 10px;
  1339. 399.  - }
  1340. 400.  - .font_medium .fc_contact_unread {
  1341. 401.  -   font-size: 11px;
  1342. 402.  - }
  1343. 403.  - .fc_clist_splitter {
  1344. 404.  -   border-bottom: 1px solid #F1F1F1;
  1345. 405.  -   color: #666;
  1346. 406.  -   padding: 3px 8px;
  1347. 407.  -   background: #F1F1F1;
  1348. 408.  -   width: 100%;
  1349. 409.  - }
  1350. 410.  - .fc_clist_splitter2 {
  1351. 411.  -   margin-top: 5px;
  1352. 412.  - }
  1353. 413.  -
  1354. 414.  - div.fc_clist_filter_wrap {
  1355. 415.  -   cursor: text;
  1356. 416.  -   padding: 6px 4px 4px 22px;
  1357. 417.  -   background: #FFF url(/images/magglass.png) no-repeat 8px 7px;
  1358. 418.  -   margin: 4px 0 8px;
  1359. 419.  -
  1360. 420.  -   -moz-border-radius: 3px;
  1361. 421.  -   -webkit-border-radius: 3px;
  1362. 422.  -   border-radius: 3px;
  1363. 423.  -   overflow: hidden;
  1364. 424.  -
  1365. 425.  -   -moz-box-shadow: inset 0 0 3px #777;
  1366. 426.  -   -webkit-box-shadow: inset 0 0 3px #777;
  1367. 427.  -   box-shadow: inset 0 0 3px #777;
  1368. 428.  - }
  1369. 429.  - div.fc_clist_filter_wrap .input_back {
  1370. 430.  -   margin-top: 0 !important;
  1371. 431.  -   margin-left: 0 !important;
  1372. 432.  - }
  1373. 433.  - div.fc_clist_filter {
  1374. 434.  -   padding-right: 15px;
  1375. 435.  - }
  1376. 436.  - #fc_clist_filter {
  1377. 437.  -   border: 0;
  1378. 438.  -   padding: 0;
  1379. 439.  -   outline: 0;
  1380. 440.  -   width: 100%;
  1381. 441.  -
  1382. 442.  -   height: 14px;
  1383. 443.  -   line-height: 1.27em;
  1384. 444.  - }
  1385. 445.  - .fc_clist_online_wrap {
  1386. 446.  -   position: relative;
  1387. 447.  - }
  1388. 448.  - .fc_clist_online {
  1389. 449.  -   cursor: pointer;
  1390. 450.  -   position: absolute;
  1391. 451.  -   margin: -1px 0 0 -15px;
  1392. 452.  -   background: url(/images/icons/rbox_full2.png?3) 4px -67px no-repeat;
  1393. 453.  -   padding: 4px;
  1394. 454.  -   width: 7px;
  1395. 455.  -   height: 7px;
  1396. 456.  -   opacity: 0.6;
  1397. 457.  -   filter: alpha(opacity=60);
  1398. 458.  - }
  1399. 459.  - .fc_clist_online_active {
  1400. 460.  -   opacity: 1;
  1401. 461.  -   filter: none;
  1402. 462.  -   z-index: 100;
  1403. 463.  - }
  1404. 464.  -
  1405. 465.  - em.fc_clist_hl {
  1406. 466.  -   font-style: normal;
  1407. 467.  -   background: #E1E7ED;
  1408. 468.  -   border-bottom: 1px solid #DAE1E8;
  1409. 469.  -   margin: 0px;
  1410. 470.  -   padding: 0px 1px;
  1411. 471.  - }
  1412. 472.  -
  1413. 473.  - #fc_tab_wrap {
  1414. 474.  -   position: relative;
  1415. 475.  -   width: 200px;
  1416. 476.  - }
  1417. 477.  - .fc_tab {
  1418. 478.  -   background: url('/images/mv_bg.png');
  1419. 479.  -   background: rgba(0, 0, 0, 0.75);
  1420. 480.  -   padding: 7px 10px 10px;
  1421. 481.  -   -moz-border-radius: 4px;
  1422. 482.  -   -webkit-border-radius: 4px;
  1423. 483.  -   border-radius: 4px;
  1424. 484.  - }
  1425. 485.  - .fc_tab_head {
  1426. 486.  -   cursor: pointer;
  1427. 487.  - }
  1428. 488.  - .fc_tab_notify_wrap {
  1429. 489.  -   /*position: relative;*/
  1430. 490.  - }
  1431. 491.  - .fc_tab_notify {
  1432. 492.  -   background-color: #EEE;
  1433. 493.  -   /*color: #777;*/
  1434. 494.  -   position: absolute;
  1435. 495.  -   padding: 4px;
  1436. 496.  -   text-align: center;
  1437. 497.  -   border-bottom: 1px solid #DDD;
  1438. 498.  -   -moz-border-radius: 4px;
  1439. 499.  -   -webkit-border-radius: 4px;
  1440. 500.  -   border-radius: 4px;
  1441. 501.  -   z-index: 1;
  1442. 502.  - }
  1443. 503.  - .fc_tab_log_wrap {
  1444. 504.  -   /*-moz-border-radius: 4px 4px 0 0;
  1445. 505.  -   -webkit-border-radius: 4px 4px 0 0;
  1446. 506.  -   border-radius: 4px 4px 0 0;*/
  1447. 507.  -
  1448. 508.  -   -moz-border-radius: 3px;
  1449. 509.  -   -webkit-border-radius: 3px;
  1450. 510.  -   border-radius: 3px;
  1451. 511.  -   overflow: hidden;
  1452. 512.  - }
  1453. 513.  - .fc_tab_log {
  1454. 514.  -   background: #FFF;
  1455. 515.  -   overflow: auto hidden;
  1456. 516.  -   overflow-x: hidden;
  1457. 517.  -   /*position: relative;*/
  1458. 518.  -   /*padding-bottom: 10px;*/
  1459. 519.  -
  1460. 520.  -   -moz-box-shadow: inset 0 0 3px #777;
  1461. 521.  -   -webkit-box-shadow: inset 0 0 3px #777;
  1462. 522.  -   box-shadow: inset 0 0 3px #777;
  1463. 523.  - }
  1464. 524.  - .fc_tab_typing {
  1465. 525.  -   color: #777;
  1466. 526.  -   opacity: 0;
  1467. 527.  -   filter: alpha(opacity=0);
  1468. 528.  -   min-height: 1.2em;
  1469. 529.  -   max-height: 2.4em;
  1470. 530.  -   line-height: 120%;
  1471. 531.  -   padding: 5px 4px 7px 39px;
  1472. 532.  -   background: url(/images/icons/typing.gif?1) 17px 50% no-repeat;
  1473. 533.  -   vertical-align: middle;
  1474. 534.  - }
  1475. 535.  - .fc_log_empty {
  1476. 536.  -   color: #777;
  1477. 537.  -   text-align: center;
  1478. 538.  -   padding: 50px 20px;
  1479. 539.  - }
  1480. 540.  - /*div.fc_tab_txt_wrap {
  1481. 541.  -
  1482. 542.  - }*/
  1483. 543.  - div.fc_tab_txt {
  1484. 544.  -   margin-top: 2px;
  1485. 545.  -   background: #FFF;
  1486. 546.  -   padding: 3px 3px 3px 39px;
  1487. 547.  -   zoom: 1;
  1488. 548.  -
  1489. 549.  -   -moz-border-radius: 2px;
  1490. 550.  -   -webkit-border-radius: 2px;
  1491. 551.  -   border-radius: 2px;
  1492. 552.  -   overflow: hidden;
  1493. 553.  -
  1494. 554.  -   -moz-box-shadow: inset 0 0 3px #777;
  1495. 555.  -   -webkit-box-shadow: inset 0 0 3px #777;
  1496. 556.  -   box-shadow: inset 0 0 3px #777;
  1497. 557.  - }
  1498. 558.  - .fc_editable {
  1499. 559.  -   min-height: 30px;
  1500. 560.  -   overflow-x: hidden;
  1501. 561.  -   padding-right: 22px;
  1502. 562.  -   outline: none;
  1503. 563.  - }
  1504. 564.  - textarea.fc_tab_txt {
  1505. 565.  -   width: 100%;
  1506. 566.  -   padding: 0;
  1507. 567.  -   border: 0;
  1508. 568.  -   outline: 0;
  1509. 569.  -   resize: none;
  1510. 570.  -   overflow: hidden;
  1511. 571.  -   height: 14px;
  1512. 572.  -   display: block;
  1513. 573.  -   line-height: 1.27em;
  1514. 574.  -   height: 30px;
  1515. 575.  - }
  1516. 576.  - div.fc_tab_txt_self {
  1517. 577.  -   width: 30px;
  1518. 578.  -   height: 30px;
  1519. 579.  -   margin-left: -36px;
  1520. 580.  -   position: absolute;
  1521. 581.  -   *margin: 0;
  1522. 582.  -   *left: 14px;
  1523. 583.  -   zoom: 1;
  1524. 584.  -
  1525. 585.  -
  1526. 586.  - }
  1527. 587.  - img.fc_tab_txt_self {
  1528. 588.  -   width: 30px;
  1529. 589.  -   height: 30px;
  1530. 590.  -
  1531. 591.  -   -moz-border-radius: 2px;
  1532. 592.  -   -webkit-border-radius: 2px;
  1533. 593.  -   border-radius: 2px;
  1534. 594.  -   overflow: hidden;
  1535. 595.  - }
  1536. 596.  - .fc_tab_button {
  1537. 597.  -   display: none;
  1538. 598.  - }
  1539. 599.  -
  1540. 600.  - .fc_msgs_wrap {
  1541. 601.  -   clear: both;
  1542. 602.  -   padding: 2px 12px 1px 4px;
  1543. 603.  -   border-top: 1px solid #EEE;
  1544. 604.  -   border-top-color: rgba(221, 221, 221, 0.5);
  1545. 605.  -   min-height: 35px;
  1546. 606.  -   *height: 35px;
  1547. 607.  - }
  1548. 608.  - .fc_msgs_wrap:first-child {
  1549. 609.  -   border-top: 0;
  1550. 610.  - }
  1551. 611.  - .fc_msgs_date {
  1552. 612.  -   color: #777;
  1553. 613.  -   font-size: 0.9em;
  1554. 614.  -   padding: 0 0 4px 4px;
  1555. 615.  - }
  1556. 616.  - a.fc_msgs_author {
  1557. 617.  -   width: 30px;
  1558. 618.  -   height: 30px;
  1559. 619.  -   margin: 2px 0 3px;
  1560. 620.  -   display: block;
  1561. 621.  -   line-height: 0;
  1562. 622.  -
  1563. 623.  -   -moz-border-radius: 2px;
  1564. 624.  -   -webkit-border-radius: 2px;
  1565. 625.  -   border-radius: 2px;
  1566. 626.  -   overflow: hidden;
  1567. 627.  - }
  1568. 628.  - img.fc_msgs_author {
  1569. 629.  -   width: 30px;
  1570. 630.  -   height: 30px;
  1571. 631.  - }
  1572. 632.  - .fc_msgs {
  1573. 633.  -   margin-left: 32px;
  1574. 634.  - }
  1575. 635.  - .fc_msg {
  1576. 636.  -   padding: 0 0 3px 3px;
  1577. 637.  - }
  1578. 638.  - .fc_msg_author_name {
  1579. 639.  -   font-weight: bold;
  1580. 640.  -   padding: 0 0 3px 3px;
  1581. 641.  - }
  1582. 642.  - .fc_msgs_unread,
  1583. 643.  - .fc_msg_unread {
  1584. 644.  -   background-color: #EDF1F5;
  1585. 645.  - }
  1586. 646.  - .fc_msgs_error {
  1587. 647.  -   background-color: #FFEFE8;
  1588. 648.  -   border: 1px solid #E89B88;
  1589. 649.  -   font-size: 1em;
  1590. 650.  -   margin: 4px;
  1591. 651.  -   padding: 8px 11px;
  1592. 652.  - }
  1593. 653.  - .fc_msg_error {
  1594. 654.  -   /*font-weight: bold;*/
  1595. 655.  -   color: #800;
  1596. 656.  -   padding-left: 8px;
  1597. 657.  - }
  1598. 658.  - .fc_msg_progress {
  1599. 659.  -   display: block;
  1600. 660.  -   position: absolute;
  1601. 661.  -   float: right;
  1602. 662.  -   /*right: 0;*/
  1603. 663.  -   width: 50px;
  1604. 664.  -   height: 13px;
  1605. 665.  -   background: #FFF url(/images/upload.gif) no-repeat right 50%;
  1606. 666.  - }
  1607. 667.  - .fc_msg_unread .fc_msg_progress {
  1608. 668.  -   background-color: #EDF1F5;
  1609. 669.  - }
  1610. 670.  -
  1611. 671.  - /* scrollbars */
  1612. 672.  - .fc_scrollbar_cont {
  1613. 673.  -   width: 9px;
  1614. 674.  -   height: 100%;
  1615. 675.  -   position: absolute;
  1616. 676.  -   background: rgba(200, 200, 200, 0);
  1617. 677.  -   -webkit-transition: all 150ms linear;
  1618. 678.  -   -moz-transition: all 150ms linear;
  1619. 679.  -   -o-transition: all 150ms linear;
  1620. 680.  -   transition: all 150ms linear;
  1621. 681.  -   cursor: pointer;
  1622. 682.  - }
  1623. 683.  - .fc_scrollbar_cont.scrollbar_c_overed {
  1624. 684.  -   background: rgba(200, 200, 200, 0.4);
  1625. 685.  -   width: 11px;
  1626. 686.  - }
  1627. 687.  - .fc_scrollbar_inner {
  1628. 688.  -   background: #000;
  1629. 689.  -   opacity: 0.4;
  1630. 690.  -   filter: alpha(opacity=40);
  1631. 691.  -   width: 6px;
  1632. 692.  -   height: 26px;
  1633. 693.  -   margin-left: 1px;
  1634. 694.  -   -webkit-border-radius: 3px;
  1635. 695.  -   -moz-border-radius: 3px;
  1636. 696.  -   border-radius: 3px;
  1637. 697.  -   cursor: pointer;
  1638. 698.  -   -webkit-transition: width 150ms linear, opacity 200ms linear;
  1639. 699.  -   -moz-transition: width 150ms linear, opacity 200ms linear;
  1640. 700.  -   -o-transition: width 150ms linear, opacity 200ms linear;
  1641. 701.  -   transition: width 150ms linear, opacity 200ms linear;
  1642. 702.  - }
  1643. 703.  - .scrollbar_c_overed .fc_scrollbar_inner {
  1644. 704.  -   width: 8px;
  1645. 705.  -   -webkit-border-radius: 4px;
  1646. 706.  -   -moz-border-radius: 4px;
  1647. 707.  -   border-radius: 4px;
  1648. 708.  - }
  1649. 709.  - .fc_scrollbar_inner:hover,
  1650. 710.  - .fc_scrollbar_hovered {
  1651. 711.  -   opacity: 0.6;
  1652. 712.  -   filter: alpha(opacity=60);
  1653. 713.  - }
  1654. 714.  - .fc_scrollbar_top {
  1655. 715.  -   position: absolute;
  1656. 716.  -   height: 3px;
  1657. 717.  -   margin-top: -1px;
  1658. 718.  -   background: #555555;
  1659. 719.  -   opacity: 0.12;
  1660. 720.  -   filter: alpha(opacity=12);
  1661. 721.  -   display: none;
  1662. 722.  - }
  1663. 723.  - .fc_scrollbar_bottom {
  1664. 724.  -   position: absolute;
  1665. 725.  -   height: 3px;
  1666. 726.  -   margin-top: -2px;
  1667. 727.  -   background: #555555;
  1668. 728.  -   opacity: 0.12;
  1669. 729.  -   filter: alpha(opacity=12);
  1670. 730.  - }
  1671. 731.  -
  1672. 732.  - .fc_msg_attachments_loading {
  1673. 733.  -   height: 14px;
  1674. 734.  -   background: url(/images/upload.gif) 50% 50% no-repeat;
  1675. 735.  - }
  1676. 736.  - .fc_msg_attachments {
  1677. 737.  -   padding-top: 4px;
  1678. 738.  -   position: relative;
  1679. 739.  - }
  1680. 740.  - .fc_msg_attachments_notext {
  1681. 741.  -   padding-top: 0;
  1682. 742.  - }
  1683. 743.  - .fc_msg_att_desc {
  1684. 744.  -   color: #777;
  1685. 745.  - }
  1686. 746.  - a.fc_msg_att_lnk:hover {
  1687. 747.  -   text-decoration: none;
  1688. 748.  - }
  1689. 749.  - a.fc_msg_att_lnk:hover .fc_msg_att_text {
  1690. 750.  -   text-decoration: underline;
  1691. 751.  - }
  1692. 752.  - .fc_msg_att_icon_photo,
  1693. 753.  - .fc_msg_att_icon_video,
  1694. 754.  - .fc_msg_att_icon_doc,
  1695. 755.  - .fc_msg_att_icon_mail,
  1696. 756.  - .fc_msg_att_icon_audio,
  1697. 757.  - .fc_msg_att_icon_wall {
  1698. 758.  -   display: block;
  1699. 759.  -   float: left;
  1700. 760.  -   background: url(/images/icons/mono_iconset.gif?8) no-repeat 0 0;
  1701. 761.  -   width: 11px;
  1702. 762.  -   height: 11px;
  1703. 763.  -   margin: 1px 5px 0px 0;
  1704. 764.  -
  1705. 765.  -   display:-moz-inline-stack;
  1706. 766.  -   display:inline-block;
  1707. 767.  -   _overflow:hidden;
  1708. 768.  -   zoom:1;
  1709. 769.  -   *display:inline;
  1710. 770.  - }
  1711. 771.  - .fc_msg_att_icon_photo {background-position: 0px -30px; }
  1712. 772.  - .fc_msg_att_icon_video {background-position: 0px -75px; }
  1713. 773.  - .fc_msg_att_icon_audio {background-position: 0px -222px; }
  1714. 774.  - .fc_msg_att_icon_doc {background-position: 0px -280px; }
  1715. 775.  - .fc_msg_att_icon_mail {background-position: 0px -294px; }
  1716. 776.  - .fc_msg_att_icon_wall {
  1717. 777.  -   margin-top: 2px;
  1718. 778.  -   background-position: 0px -294px;
  1719. 779.  - }
  1720. 780.  -
  1721. 781.  - /*.fc_audio_performer {font-weight: bold;}*/
  1722. 782.  - .fc_audio_splitter {
  1723. 783.  -   padding: 0 3px;
  1724. 784.  - }
  1725. 785.  -
  1726. 786.  -
  1727. 787.  - /*Emoji*/
  1728. 788.  - .emoji_cont {
  1729. 789.  -   position: relative;
  1730. 790.  - }
  1731. 791.  - .emoji_smile {
  1732. 792.  -   position: absolute;
  1733. 793.  -   z-index: 100;
  1734. 794.  -   padding: 0px;
  1735. 795.  -   margin: 1px 0px 0px 0px;
  1736. 796.  -   right: 0px;
  1737. 797.  -   cursor: pointer;
  1738. 798.  -   opacity: 0.7;
  1739. 799.  -   filter: alpha(opacity=70);
  1740. 800.  - }
  1741. 801.  - .fc_tab_txt .emoji_smile {
  1742. 802.  -   margin: -2px -3px 0px 0px;
  1743. 803.  - }
  1744. 804.  - .emoji_smile_icon_on {
  1745. 805.  -   position: absolute;
  1746. 806.  -   width: 24px;
  1747. 807.  -   height: 24px;
  1748. 808.  -   opacity: 0.01;
  1749. 809.  -   filter: alpha(opacity=1);
  1750. 810.  -   background: url('/images/im_smile_cross.png?3') 0px 0px no-repeat;
  1751. 811.  -   -webkit-transform: rotate(-45deg);
  1752. 812.  -   -o-transform: rotate(-45deg);
  1753. 813.  -   transform: rotate(-45deg);
  1754. 814.  - }
  1755. 815.  - .emoji_smile_icon {
  1756. 816.  -   width: 24px;
  1757. 817.  -   height: 24px;
  1758. 818.  -   background: url('/images/im_smile_cross.png?3') 0px -24px no-repeat;
  1759. 819.  -   -webkit-transform: rotate(0deg);
  1760. 820.  -   -o-transform: rotate(0deg);
  1761. 821.  -   transform: rotate(0deg);
  1762. 822.  - }
  1763. 823.  - .emoji_smile_on .emoji_smile_icon_on {
  1764. 824.  -   opacity: 1;
  1765. 825.  -   filter: alpha(opacity=100);
  1766. 826.  -   -webkit-transform: rotate(0deg);
  1767. 827.  -   -o-transform: rotate(0deg);
  1768. 828.  -   transform: rotate(0deg);
  1769. 829.  -   z-index: 10;
  1770. 830.  - }
  1771. 831.  - .emoji_smile_on .emoji_smile_icon {
  1772. 832.  -   -webkit-transform: rotate(45deg);
  1773. 833.  -   opacity: 0;
  1774. 834.  -   filter: alpha(opacity=0);
  1775. 835.  -   z-index: 1;
  1776. 836.  - }
  1777. 837.  -
  1778. 838.  - .emoji_smile_animation .emoji_smile_icon_on {
  1779. 839.  -   -o-transition:all 400ms ease-in-out;
  1780. 840.  -   -moz-transition:all 400ms ease-in-out;
  1781. 841.  -   -webkit-transition:all 400ms ease-in-out;
  1782. 842.  -   transition:all 400ms ease-in-out;
  1783. 843.  - }
  1784. 844.  -
  1785. 845.  - .emoji_smile_animation .emoji_smile_icon {
  1786. 846.  -   -o-transition:all 400ms ease-in-out;
  1787. 847.  -   -moz-transition:all 400ms ease-in-out;
  1788. 848.  -   -webkit-transition:all 400ms ease-in-out;
  1789. 849.  -   transition:all 400ms ease-in-out;
  1790. 850.  - }
  1791. 851.  - .emoji_tt_wrap {
  1792. 852.  -   width: 200px;
  1793. 853.  -   height: 98px;
  1794. 854.  -   padding: 6px 6px;
  1795. 855.  -   position: absolute;
  1796. 856.  -   background: #4b4b4b;
  1797. 857.  -   background: rgba(0, 0, 0, 0.7);
  1798. 858.  -   -webkit-border-radius: 5px;
  1799. 859.  -   -moz-border-radius: 5px;
  1800. 860.  -   border-radius: 5px;
  1801. 861.  -   margin: -128px 0px 0px 303px;
  1802. 862.  -   box-shadow: 0 1px 3px rgba(0, 0, 0, 0.28);
  1803. 863.  -   opacity: 0;
  1804. 864.  -   filter: alpha(opacity=0);
  1805. 865.  - }
  1806. 866.  - .emoji_animation {
  1807. 867.  -   -o-transition:all 200ms ease-in-out;
  1808. 868.  -   -moz-transition:all 200ms ease-in-out;
  1809. 869.  -   -webkit-transition:all 200ms ease-in-out;
  1810. 870.  -   transition:all 200ms ease-in-out;
  1811. 871.  - }
  1812. 872.  - .emoji_pointer {
  1813. 873.  -   background: url(/images/icons/like_icons_bl.png) -2px -47px no-repeat;
  1814. 874.  -   border-top: 1px solid #484848;
  1815. 875.  -   width: 13px;
  1816. 876.  -   height: 7px;
  1817. 877.  -   position: absolute;
  1818. 878.  -   bottom: -7px;
  1819. 879.  -   left: 95px;
  1820. 880.  - }
  1821. 881.  - .emoji_smile_cont {
  1822. 882.  -   display: inline-block;
  1823. 883.  -   position: relative;
  1824. 884.  -   *display: inline;
  1825. 885.  -   *zoom: 1;
  1826. 886.  -   padding: 4px 4px;
  1827. 887.  -   cursor: pointer;
  1828. 888.  -   z-index: 10;
  1829. 889.  - }
  1830. 890.  - .emoji_smile_cont:active .im_emoji_bg {
  1831. 891.  -   background: rgba(20, 20, 20, 0.7);
  1832. 892.  - }
  1833. 893.  - .emoji_bg {
  1834. 894.  -   z-index: -1;
  1835. 895.  -   width: 24px;
  1836. 896.  -   height: 24px;
  1837. 897.  -   position: absolute;
  1838. 898.  -   margin: -4px 0px 0px -4px;
  1839. 899.  -   background: #222222;
  1840. 900.  -   background: rgba(50, 50, 50, 0.6);
  1841. 901.  -   -webkit-border-radius: 3px;
  1842. 902.  -   -moz-border-radius: 3px;
  1843. 903.  -   border-radius: 3px;
  1844. 904.  -   display: none;
  1845. 905.  -   -webkit-box-shadow:inset 0px 0px 5px rgba(0, 0, 0, 0.5);
  1846. 906.  -   -moz-box-shadow:inset 0px 0px 5px rgba(0, 0, 0, 0.5);
  1847. 907.  -   box-shadow:inset 0px 0px 5px rgba(0, 0, 0, 0.5);
  1848. 908.  - }
  1849. 909.  - .emoji_shadow {
  1850. 910.  -   display: none;
  1851. 911.  -   position: absolute;
  1852. 912.  -   width: 20px;
  1853. 913.  -   height: 1px;
  1854. 914.  -   margin-left: -2px;
  1855. 915.  -   margin-top: 20px;
  1856. 916.  -   background: #404040;
  1857. 917.  -   background: rgba(90, 90, 90, 0.6);
  1858. 918.  - }
  1859. 919.  - .emoji_over .emoji_bg {
  1860. 920.  -   display: block;
  1861. 921.  - }
  1862. 922.  - .emoji_over .emoji_shadow {
  1863. 923.  -   display: block;
  1864. 924.  - }
  1865. 925.  - .emoji_scrollbar_cont {
  1866. 926.  -   width: 7px;
  1867. 927.  -   height: 100%;
  1868. 928.  -   margin-top: 3px;
  1869. 929.  -   position: absolute;
  1870. 930.  - }
  1871. 931.  - .emoji_scrollbar_inner {
  1872. 932.  -   background: #A0A0A0;
  1873. 933.  -   opacity: 0.4;
  1874. 934.  -   filter: alpha(opacity=40);
  1875. 935.  -   width: 6px;
  1876. 936.  -   height: 26px;
  1877. 937.  -   margin-left: 6px;
  1878. 938.  -   -webkit-border-radius: 3px;
  1879. 939.  -   -moz-border-radius: 3px;
  1880. 940.  -   border-radius: 3px;
  1881. 941.  -   cursor: pointer;
  1882. 942.  - }
  1883. 943.  - .emoji_scrollbar_inner:hover,
  1884. 944.  - .emoji_scrollbar_hovered {
  1885. 945.  -   opacity: 0.6;
  1886. 946.  -   filter: alpha(opacity=60);
  1887. 947.  - }
  1888. 948.  - .emoji_scrollbar_top {
  1889. 949.  -   position: absolute;
  1890. 950.  -   height: 3px;
  1891. 951.  -   margin-top: -1px;
  1892. 952.  -   background: #555555;
  1893. 953.  -   opacity: 0.12;
  1894. 954.  -   filter: alpha(opacity=12);
  1895. 955.  -   display: none;
  1896. 956.  - }
  1897. 957.  - .emoji_scrollbar_bottom {
  1898. 958.  -   position: absolute;
  1899. 959.  -   height: 3px;
  1900. 960.  -   margin-top: -2px;
  1901. 961.  -   background: #555555;
  1902. 962.  -   opacity: 0.12;
  1903. 963.  -   filter: alpha(opacity=12);
  1904. 964.  - }
  1905. 965.  - .emoji_list {
  1906. 966.  -   overflow: hidden;
  1907. 967.  -   height: 98px;
  1908. 968.  -   position: relative;
  1909. 969.  -   width: 192px;
  1910. 970.  - }
  1911. 971.  - .emoji_tmp_textarea {
  1912. 972.  -   position: absolute;
  1913. 973.  -   opacity: 0;
  1914. 974.  - }
  1915. 975.  -
  1916. 976.  -
  1917. 977.  -
  1918. 978.  -
  1919. 979.  -
  1920. 980.  - /*dubt*/
  1921. 981.  - #im_emoji_over {
  1922. 982.  -   width: 24px;
  1923. 983.  -   height: 24px;
  1924. 984.  -   z-index: 1;
  1925. 985.  -   position: absolute;
  1926. 986.  -   background: #606060;
  1927. 987.  -   background: rgba(150, 150, 150, 0.4);
  1928. 988.  -   -webkit-border-radius: 5px;
  1929. 989.  -   -moz-border-radius: 5px;
  1930. 990.  -   border-radius: 5px;
  1931. 991.  - }
  1932. 992.  - .emoji_smile_shadow {
  1933. 993.  -   background: url('/images/emoji_shadow.png') 3px 4px no-repeat;
  1934. 994.  - }
  1935. 995.  - .emoji_expanded .emoji_expand_shadow {
  1936. 996.  -   z-index: 80;
  1937. 997.  -   position: absolute;
  1938. 998.  -   width: 195px;
  1939. 999.  -   height: 9px;
  1940. 1000.  -   background: url('/images/im_e_expand_sh.png?3') no-repeat;
  1941. 1001.  -   bottom: 1px;
  1942. 1002.  -   left: 3px;
  1943. 1003.  -   pointer-events: none;
  1944. 1004.  - }
  1945. 1005.  - .emoji_expanded .emoji_expand_shadow_top {
  1946. 1006.  -   display: none;
  1947. 1007.  -   z-index: 80;
  1948. 1008.  -   position: absolute;
  1949. 1009.  -   width: 195px;
  1950. 1010.  -   height: 14px;
  1951. 1011.  -   background: url('/images/im_e_expand_sh.png?3') 0px -3px no-repeat;
  1952. 1012.  -   top: 0px;
  1953. 1013.  -   left: 3px;
  1954. 1014.  -   pointer-events: none;
  1955. 1015.  - }
  1956. 1016.  - .emoji_no_opacity.emoji_expanded .emoji_expand_shadow,
  1957. 1017.  - .emoji_no_opacity.emoji_expanded .emoji_expand_shadow_top {
  1958. 1018.  -   display: none;
  1959. 1019.  - }
  1960. ------
Advertisement
Add Comment
Please, Sign In to add comment