Advertisement
thanhson

Facebook Old Chat Sidebar

Aug 1st, 2014
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.45 KB | None | 0 0
  1. // Sơn Bii - Team Coder Việt
  2. // My Facebook : https://www.facebook.com/son96.info
  3. // Fanpage : https://facebook.com/teamcoderviet
  4.  
  5. (function(source) {
  6. if ('function' == typeof source) {
  7. source = '(' + source + ')();'
  8. }
  9. var script = document.createElement('script');
  10. script.setAttribute("type", "application/javascript");
  11. script.textContent = source;
  12. document.body.appendChild(script);
  13. document.body.removeChild(script);
  14. })
  15.  
  16. (function(){
  17. var w = window;
  18. var d = w.document;
  19.  
  20. var settings = {
  21. Onload: true,
  22.  
  23. Sticky: true,
  24.  
  25. Online: true,
  26.  
  27. Idle: true,
  28.  
  29. Mobile: true,
  30.  
  31. Margin: '0px 10px',
  32. MinHeight: '140px',
  33. Width: '200px'
  34. };
  35.  
  36. function ajax(url){
  37. this.Url = url;
  38. this.XMLHttpRequest = new w.XMLHttpRequest();
  39. }
  40.  
  41. ajax.prototype = {
  42. 'send':function(type,data,callback){
  43. try{
  44. this.Callback = callback;
  45. this.XMLHttpRequest.open(type,this.Url,true);
  46. this.XMLHttpRequest.onreadystatechange = this.stdcallback.bind(this);
  47. this.XMLHttpRequest.send(data);
  48. return true;
  49. }catch(e){
  50. return false;
  51. }
  52. },
  53.  
  54. 'stdcallback':function(){
  55. if(this.XMLHttpRequest.readyState === 4 && this.XMLHttpRequest.status === 200){
  56. if(typeof this.Callback === 'function') this.Callback(this.XMLHttpRequest);
  57. }
  58. }
  59. };
  60.  
  61. var util = {
  62. 'insertRule':function(rule){
  63. if(!this.css){
  64. this.css = d.createElement('style');
  65. d.querySelector('head').appendChild(this.css);
  66. }
  67.  
  68. return this.css.appendChild(d.createTextNode(rule));
  69. },
  70.  
  71. 'getItem':function(key){
  72. return unescape(d.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + escape(key).replace(/[\-\.\+\*]/g, '\\$&') + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1')) || null;
  73. },
  74.  
  75. 'setItem':function(key,value){
  76. d.cookie = escape(key) + '=' + escape(value) + '; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/';
  77. },
  78.  
  79. 'removeItem':function(key){
  80. d.cookie = escape(key) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/';
  81. }
  82. };
  83.  
  84. var rocki = {
  85. 'DOMContentLoaded':function(){
  86. w.toggle_list = function(r){
  87. if(util.getItem('toggle' + r) === 'true'){
  88. util.setItem('toggle' + r,'false');
  89. }else{
  90. util.setItem('toggle' + r,'true');
  91. }
  92. w.render_chat();
  93. };
  94.  
  95. w.change_order = function(r){
  96. var f = d.querySelectorAll('ul.fbChatOrderedList li.separator[id]');
  97. for(var i = 1, j = f.length; i < j; i++){
  98. if(f.item(i).id === r){
  99. util.setItem('order' + f.item(i).id,i-1);
  100. util.setItem('order' + f.item(i-1).id,i);
  101. }else{
  102. util.setItem('order' + f.item(i).id,i);
  103. }
  104. }
  105. w.render_chat();
  106. };
  107.  
  108. w.Arbiter.subscribe('sidebar/initialized',function(a,d){
  109. d.isViewportCapable = function(){ return false; };
  110. d.disable();
  111. });
  112.  
  113. w.Env = w.require('Env');
  114. w.Env.user = w.require("CurrentUserInitialData").id;
  115.  
  116. w.Arbiter.subscribe('buddylist-nub/initialized',function(a,c){
  117. var av = w.require('AvailableList'),
  118. sp = w.require('ShortProfiles'),
  119. tl = w.require('Toggler'),
  120. oa = w.require('debounceAcrossTransitions'),
  121. ps = w.require('PresenceStatus'),
  122. at = w.require('LastMobileActiveTimes');
  123.  
  124. w.ChatOpenTab = w.require('ChatOpenTab');
  125.  
  126. var getAvailableList = function(){
  127. return av.getAvailableIDs().filter(function(r){
  128. switch(av.get(r)){
  129. case av.ACTIVE: return settings.Online;
  130. case av.IDLE: return settings.Idle;
  131. default: return false;
  132. }
  133. });
  134. };
  135.  
  136. var sortAlpha = function(x,y){
  137. var r = sp.getNow(x), s = sp.getNow(y);
  138. if(!r || !s) return 0;
  139. var t = r.name.toLowerCase(),
  140. u = s.name.toLowerCase();
  141. return t < u ? -1 : 1;
  142. };
  143.  
  144. var sortLists = function(x,y){
  145. if(!x.member || !y.member) return 0;
  146. var r = Number(util.getItem('order' + x.uid)),
  147. s = Number(util.getItem('order' + y.uid));
  148. if(r === s) return 0;
  149. return r < s ? -1 : 1;
  150. };
  151.  
  152. c.orderedList._getListItem = function(id){
  153. this.itemCache = this.itemCache || {};
  154. if(!this.itemCache.hasOwnProperty(id)){
  155. var usr = sp.getNow(id);
  156. this.itemCache[id] = d.createElement('li');
  157. this.itemCache[id].setAttribute('onclick', 'ChatOpenTab.openUserTab(' + usr.id + ');');
  158. this.itemCache[id].className = '__42fz';
  159. this.itemCache[id].innerHTML =
  160. '<a class="_55ln" rel="ignore" tabindex="0">\
  161. <div class="__55lp">\
  162. <div class="__56p9">\
  163. <div size="28" style="width:28px;height:28px;">\
  164. <img width="28" height="28" src="' + usr.thumbSrc +'">\
  165. </div>\
  166. </div>\
  167. <div class="__5bon">\
  168. <div class="__568z">\
  169. <div class="__5t35"></div>\
  170. <i class="_sp_9ot619 _sx_1b221c"></i>\
  171. </div>\
  172. </div>\
  173. <div class="__55lr">' + usr.name + '</div>\
  174. </div></a>';
  175. var status = this.itemCache[id].querySelector('.__568z');
  176. this.itemCache[id]._text = status.querySelector(':first-child');
  177. this.itemCache[id]._img = status.querySelector(':last-child');
  178. }
  179. if(av.get(id) === av.MOBILE){
  180. this.itemCache[id]._text.innerHTML = at.getShortDisplay(id);
  181. this.itemCache[id]._img.className = ' _sp_axfrm8';
  182. this.itemCache[id]._text.style.color = '#898F9C';
  183. }else{
  184. this.itemCache[id]._text.innerHTML = ps.getDetailedActivePresence(id);
  185. this.itemCache[id]._img.className = ' _sp_9ot619 _sx_1b221c';
  186. this.itemCache[id]._text.style.color = '#63A924';
  187. }
  188. return this.itemCache[id];
  189. };
  190.  
  191. w.render_chat = /*c.orderedList.render =*/ c.orderedList._renderOrderedList = function(){
  192. this.render = oa(function(){
  193. if(!rocki.lists) return setTimeout(this.render.bind(this),300);
  194. var a = getAvailableList(), b = [], c, d, e = {};
  195.  
  196. //var rc = w.require('React'), ol = w.require('ChatSidebarOrderedList.react'), tp = this.getSortedList({}, this._numTopFriends);
  197. //rc.renderComponent(ol({availableUsers:av,isSidebar:this._isSidebar,scrollContainer:this._scrollContainer,topUsers:tp}),this._orderedList);
  198.  
  199. rocki.lists.sort(sortLists);
  200. if(a.length > 0){
  201. a.sort(sortAlpha);
  202. for(var f = 0, g = rocki.lists.length; f < g; f++){
  203. if(!rocki.lists[f].member) return setTimeout(this.render.bind(this),300);
  204. c = a.filter(function(r){ return rocki.lists[f].member.hasOwnProperty(r); });
  205. if(c.length > 0){
  206. b.push('<li class="separator" id="' + rocki.lists[f].uid + '" onclick="toggle_list(\'' + rocki.lists[f].uid + '\');"><div class="outer"><div class="inner"><span class="text">' +
  207. rocki.lists[f].text + ' (' + c.length + ') <a href="#" onclick="change_order(\'' + rocki.lists[f].uid + '\');return false;">+</a> <a href="#" onclick="requireLazy([\'Dialog\'],function(a){new a().setAsyncURL(\'/ajax/choose/?type=friendlist&flid=' + rocki.lists[f].uid + '\').setAutohide(true).show();});return false;">~</a></span><div class="dive"><span class="bar"></span></div></div></div></li>');
  208.  
  209. if(util.getItem('toggle' + rocki.lists[f].uid) !== 'true'){
  210. for(var k = 0, l = c.length; k < l; k++){
  211. b.push(this._getListItem(c[k]));
  212. e[c[k]] = 1;
  213. }
  214. }
  215. }
  216. }
  217. c = a.filter(function(r){ return !e.hasOwnProperty(r); });
  218. if(c.length > 0){
  219. b.push('<li class="separator" onclick="toggle_list(\'other\');"><div class="outer"><div class="inner"><span class="text">' +
  220. 'Other (' + c.length + ')</span><div class="dive"><span class="bar"></span></div></div></div></li>');
  221.  
  222. if(util.getItem('toggleother') !== 'true'){
  223. for(var k = 0, l = c.length; k < l; k++){
  224. b.push(this._getListItem(c[k]));
  225. }
  226. }
  227. }
  228. if(settings.Mobile){
  229. c = av.getAvailableIDs().filter(function(r){ return av.get(r) === av.MOBILE && w.PresencePrivacy.getFriendVisibility(r) !== w.PresencePrivacy.BLACKLISTED; });
  230. if(c.length > 0){
  231. b.push('<li class="separator" onclick="toggle_list(\'mobile\');"><div class="outer"><div class="inner"><span class="text">' +
  232. 'Mobile (' + c.length + ')</span><div class="dive"><span class="bar"></span></div></div></div></li>');
  233.  
  234. if(util.getItem('togglemobile') !== 'true'){
  235. c.sort(sortAlpha);
  236. for(var k = 0, l = c.length; k < l; k++){
  237. b.push(this._getListItem(c[k]));
  238. }
  239. }
  240. }
  241. }
  242. }else{
  243. b.push('<div style="padding:10px;">No friends online.</div>');
  244. }
  245. if(b.length > 0){
  246. var ul = this._root.firstChild;
  247. ul.innerHTML = '';
  248. for(var s = 0, t = b.length; s < t; s++){
  249. if(typeof b[s] === 'string'){
  250. ul.innerHTML += b[s];
  251. }else{
  252. ul.appendChild(b[s]);
  253. }
  254. }
  255. this.inform('render',{},this.BEHAVIOR_PERSISTENT);
  256. console.log('Facebook Old Chat by Sơn bii');
  257. }
  258. }.bind(this),300,false);
  259. this.render();
  260. }.bind(c.orderedList);
  261.  
  262. w.Arbiter.subscribe('sidebar/show',function(a,d){
  263. d.hide();
  264. c.show();
  265. });
  266.  
  267. tl.createInstance(c.root).setSticky(settings.Sticky);
  268.  
  269. c.orderedList.scrollTo = function(){ return false; };
  270.  
  271. c.orderedList._arbiter.subscribe('render',function(){
  272. c.label.innerHTML =
  273. c.root.querySelector('div.titlebarTextWrapper').innerHTML =
  274. 'Chat (' + getAvailableList().length + ')';
  275. });
  276.  
  277. sp.fetchAll();
  278.  
  279. //var menu = d.querySelector('div.fbNubFlyout div.fbNubFlyoutTitlebar ul.uiMenuInner');
  280. //menu.innerHTML = '<li data-label="Manage Lists" class="uiMenuItem"><a aria-checked="false" href="/bookmarks/lists" tabindex="-1" class="itemAnchor"><span class="itemLabel fsm">Manage Lists</span></a></li>' + menu.innerHTML;
  281.  
  282. util.setItem('togglemobile',true);
  283.  
  284. if(w.ChatVisibility.isOnline() && settings.Onload) c.show();
  285. });
  286. },
  287.  
  288. 'getflid':function(){
  289. var a = new ajax('/ajax/typeahead/first_degree.php?__a=1&filter[0]=friendlist&lazy=0&viewer=' + w.Env.user + '&__user=' + w.Env.user);
  290. a.send('GET',null,function(b){
  291. var typeahead = eval('(' + b.responseText.substr(9) + ')');
  292. if(!!typeahead.payload){
  293. this.lists = typeahead.payload.entries;
  294. this.getmember();
  295. }
  296. }.bind(this));
  297. },
  298.  
  299. 'getmember':function(){
  300. var regex = /\\?"(\d+)\\?":1/g, a;
  301. for(var i = 0, j = this.lists.length; i < j; i++){
  302. a = new ajax('/ajax/choose/?type=friendlist&flid=' + this.lists[i].uid + '&view=all&__a=1&__d=1&__user=' + w.Env.user);
  303. a.send('GET',null,function(b,c){
  304. var d; this.lists[c].member = {};
  305. while(d = regex.exec(b.responseText)){
  306. this.lists[c].member[d[1]] = 1;
  307. }
  308. }.bind(this,a.XMLHttpRequest,i));
  309. }
  310. }
  311. };
  312.  
  313. if(w && w.Arbiter){
  314. util.insertRule('\
  315. .fbDock {\
  316. margin:' + settings.Margin + '!important;\
  317. }\
  318. #fbDockChatBuddylistNub {\
  319. width:' + settings.Width + '!important;\
  320. }\
  321. .fbNubFlyout {\
  322. min-height:' + settings.MinHeight + '!important;\
  323. }\
  324. .fbChatOrderedList .separator {\
  325. float: left;\
  326. width: 100%;\
  327. }\
  328. .fbChatOrderedList .separator {\
  329. -moz-user-select: none;\
  330. display: table;\
  331. height: 32px;\
  332. }\
  333. .fbChatOrderedList .separator .outer {\
  334. display: table-cell;\
  335. vertical-align: middle;\
  336. }\
  337. .fbChatOrderedList .separator .outer .inner {\
  338. cursor: pointer;\
  339. position: relative;\
  340. text-align: center;\
  341. top: -50%;\
  342. z-index: 1;\
  343. }\
  344. .fbChatOrderedList .separator .text {\
  345. background-color: #FFFFFF;\
  346. color: #989DB3;\
  347. display: inline-block;\
  348. font-size: 10px;\
  349. font-weight: bold;\
  350. padding: 0 5px;\
  351. text-transform: uppercase;\
  352. }\
  353. .fbChatOrderedList .separator .dive {\
  354. left: 0;\
  355. position: absolute;\
  356. top: 50%;\
  357. width: 100%;\
  358. z-index: -1;\
  359. }\
  360. .fbChatOrderedList .separator .dive .bar {\
  361. border-bottom: 2px solid #CCD0DA;\
  362. display: block;\
  363. margin: 0 5px;\
  364. }\
  365. .__42fz {\
  366. float: left;\
  367. width: 100%;\
  368. }\
  369. .__55ln {\
  370. color: #333333;\
  371. display: block;\
  372. height: 28px;\
  373. line-height: 28px;\
  374. padding: 2px 8px 2px 5px;\
  375. position: relative;\
  376. }\
  377. .__55lp {\
  378. position: relative;\
  379. }\
  380. .__56p9 {\
  381. float: left;\
  382. height: 28px;\
  383. position: relative;\
  384. width: 28px;\
  385. }\
  386. .__5bon {\
  387. float: right;\
  388. line-height: 24px;\
  389. margin: 0 4px;\
  390. text-align: right;\
  391. }\
  392. .__568z {\
  393. display: inline-block;\
  394. }\
  395. .__5t35 {\
  396. color: #A8A8A8;\
  397. display: inline-block;\
  398. font-size: 9px;\
  399. font-weight: bold;\
  400. line-height: 12px;\
  401. text-shadow: none;\
  402. vertical-align: middle;\
  403. }\
  404. .__5t35 {\
  405. color: #63A924;\
  406. font-weight: 500;\
  407. }\
  408. ._sp_9ot619 {\
  409. background-image: url("/rsrc.php/v2/ye/r/hKjn1vT0PpA.png");\
  410. background-repeat: no-repeat;\
  411. background-size: auto auto;\
  412. display: inline-block;\
  413. height: 16px;\
  414. width: 16px;\
  415. }\
  416. ._sx_1b221c {\
  417. background-position: -210px -367px;\
  418. height: 7px;\
  419. width: 7px;\
  420. }\
  421. .__55lr {\
  422. overflow: hidden;\
  423. padding-left: 8px;\
  424. text-overflow: ellipsis;\
  425. white-space: nowrap;\
  426. }\
  427. ._sp_axfrm8 {\
  428. background-position: -213px -384px;\
  429. background-image: url("/rsrc.php/v2/yQ/r/5Hl1VnbYk4m.png");\
  430. background-repeat: no-repeat;\
  431. background-size: auto auto;\
  432. display: inline-block;\
  433. height: 11px;\
  434. width: 7px;\
  435. }\
  436. ');
  437.  
  438. rocki.DOMContentLoaded();
  439. rocki.getflid();
  440. }
  441. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement