Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Файл - groups_list.js (Старый размер - 33002 | Новый - 0):
- 0. - var GroupsList = {
- 1. - rand: function() {
- 2. - return Math.floor(Math.random() * 10000);
- 3. - },
- 4. - enter: function(el, gid, hash, act, past) {
- 5. - if (cur.invSwitching) {
- 6. - setTimeout(GroupsList.enter.pbind(el, gid, hash, act, past), 100);
- 7. - return false;
- 8. - }
- 9. - var sp, hp, tab = cur.scrollList.tab;
- 10. -
- 11. - if (el.tagName.toLowerCase() != 'button') {
- 12. - if (!el.backhtml) {
- 13. - el.backhtml = el.innerHTML;
- 14. - }
- 15. - sp = function() {
- 16. - var w = getSize(el)[0];
- 17. - el.innerHTML = '<span class="progress_inline"></span>';
- 18. - setStyle(el, {width: w - 30});
- 19. - }
- 20. - hp = function() {
- 21. - el.innerHTML = el.backhtml;
- 22. - }
- 23. - } else {
- 24. - sp = lockButton.pbind(el);
- 25. - hp = unlockButton.pbind(el);
- 26. - }
- 27. -
- 28. - var key = GroupsList.rand(), value = GroupsList.rand();
- 29. - cur.scrollList[key] = value;
- 30. -
- 31. - var context = (cur.scrollList.tab == 'groups') ? '2' : '1';
- 32. -
- 33. - var shown = false;
- 34. - cur.invSwitching = true;
- 35. - if (GroupsList.switchInvite(gid)) {
- 36. - shown = true;
- 37. - sp = false;
- 38. - hp = false;
- 39. - }
- 40. -
- 41. - ajax.post('al_groups.php', {
- 42. - act: 'enter',
- 43. - gid: gid,
- 44. - hash: hash,
- 45. - context: context + (act ? '_' + act : ''),
- 46. - inv_shown: cur.scrollList.invShown
- 47. - }, {
- 48. - onDone: function(newRow, added) {
- 49. - cur.invSwitching = false;
- 50. - if (!cur.scrollList || cur.scrollList[key] != value) return;
- 51. -
- 52. - var list = cur.scrollList.lists[tab], newStatus = past ? 5 : 1;
- 53. - if (act == 'unsure') {
- 54. - newStatus = past ? 5 : 3;
- 55. - } else if (act == 'decline') {
- 56. - newStatus = past ? -3 : -1;
- 57. - } else if (act == 'undecided') {
- 58. - newStatus = 4;
- 59. - }
- 60. - if (!list || list == 'loading' || list == 'update') {
- 61. - cur.scrollList.processed[tab][gid] = newStatus;
- 62. - } else {
- 63. - for (var i = 0, count = list.length; i < count; ++i) {
- 64. - if (list[i][2] == gid) {
- 65. - list[i][1] = newStatus;
- 66. - }
- 67. - }
- 68. - }
- 69. -
- 70. - var row = ge('gl_' + tab + gid);
- 71. -
- 72. - GroupsList.addInvite(newRow, added, act);
- 73. -
- 74. - var rowEl = geByClass1('group_list_row', ge('groups_list_content'));
- 75. - if (rowEl && rowEl.id == 'gl_' + tab + gid) {
- 76. - setStyle(rowEl, {backgroundColor: '#FEFAE4'});
- 77. - animate(rowEl, {backgroundColor: '#FFF'}, 2000);
- 78. - }
- 79. -
- 80. - if (shown) {
- 81. - return;
- 82. - }
- 83. -
- 84. - if (!row) return;
- 85. -
- 86. - var status = geByClass1('group_row_status', row), actions = geByClass1('group_row_actions', row), old = status.basehtml;
- 87. - var actOld = actions.basehtml;
- 88. - status.basehtml = status.innerHTML;
- 89. - actions.basehtml = actions.innerHTML;
- 90. - if (act == 'undecided') {
- 91. - actions.innerHTML = actOld || '';
- 92. - status.innerHTML = old || '\
- 93. - <div class="group_row_buttons">\
- 94. - <div class="group_row_button button_blue fl_l">\
- 95. - <button onclick="GroupsList.enter(this, ' + gid + ', \'' + hash + '\', \'join\')">' + getLang('groups_event_go_btn') + '</button>\
- 96. - </div>\
- 97. - <div class="group_row_button button_blue fl_l">\
- 98. - <button onclick="GroupsList.enter(this, ' + gid + ', \'' + hash + '\', \'unsure\')">' + getLang('groups_event_maybe_btn') + '</button>\
- 99. - </div>\
- 100. - <div class="group_row_button button_cancel fl_l">\
- 101. - <div class="button" onclick="GroupsList.enter(this, ' + gid + ', \'' + hash + '\', \'decline\')">' + getLang('groups_event_cant_btn') + '</div>\
- 102. - </div>\
- 103. - </div>';
- 104. - } else if (act) {
- 105. - if (past) {
- 106. - var statHTML = getLang('groups_was_on_event');
- 107. - if (act == 'decline') {
- 108. - actions.innerHTML = '<a onclick="GroupsList.enter(this.parentNode, ' + gid + ', \'' + hash + '\', \'join\', true)">' + getLang('groups_return_event') + '</a>';
- 109. - } else {
- 110. - actions.innerHTML = '<a onclick="GroupsList.enter(this.parentNode, ' + gid + ', \'' + hash + '\', \'decline\', true)">' + getLang('groups_remove_event') + '</a>';
- 111. - }
- 112. - } else {
- 113. - var acts = '<a onclick="GroupsList.enter(this.parentNode, ' + gid + ', \'' + hash + '\', \'undecided\')">' + getLang('groups_event_change') + '</a>';
- 114. - if (act == 'unsure') {
- 115. - var statHTML = getLang('groups_unsure_event');
- 116. - } else if (act == 'decline') {
- 117. - var statHTML = getLang('groups_event_left');
- 118. - //if (tab == 'inv') {
- 119. - acts += '<span class="divider">|</span><a onclick="GroupsList.spam(this.parentNode, ' + gid + ', \'' + hash + '\')">' + getLang('its_spam') + '</a>';
- 120. - //}
- 121. - } else {
- 122. - var statHTML = getLang('groups_you_in_event');
- 123. - }
- 124. - actions.innerHTML = acts;
- 125. - }
- 126. - status.innerHTML = '<div class="groups_acted_text">'+statHTML+'</div>';
- 127. - cur.lst = status;
- 128. - } else {
- 129. - status.innerHTML = '<div class="groups_acted_text">'+getLang('groups_group_enter_message')+'</div>';
- 130. - actions.innerHTML = '<a onclick="GroupsList.cancel(this.parentNode, ' + gid + ', \'' + hash + '\')">' + getLang('global_cancel') + '</a>';
- 131. - }
- 132. -
- 133. - if (tab == 'inv') {
- 134. - var row = ge('gl_groups'+ gid);
- 135. - if (row) {
- 136. - var statusOne = geByClass1('group_row_status', row), actionsOne = geByClass1('group_row_actions', row);
- 137. - statusOne.innerHTML = status.innerHTML;
- 138. - actionsOne.innerHTML = actions.innerHTML;
- 139. - }
- 140. - }
- 141. - if (act == 'join' || act == 'unsure') {
- 142. - GroupsList.updateEventsList(gid);
- 143. - } else if (act == 'undecided') {
- 144. - GroupsList.updateEventsList(false);
- 145. - }
- 146. - /*var list = cur.scrollList.lists[tab];
- 147. - if (act == 'join' || act == 'unsure' || act == 'decline') {
- 148. - GroupsList.updateEventsList();
- 149. - for(var i in list) {
- 150. - if (list[i][2] == gid) {
- 151. - cur['gid_restore_el'+gid] = [list.splice(i, 1), i];
- 152. - }
- 153. - }
- 154. - } else if (act == 'undecided' && cur['gid_restore_el'+gid]) {
- 155. - list.splice(cur['gid_restore_el'+gid][1], 0, cur['gid_restore_el'+gid][0][0]);
- 156. - }*/
- 157. - },
- 158. - onFail: function(text) {
- 159. - if (text) {
- 160. - setTimeout(showFastBox(getLang('global_error'), text).hide, 3000);
- 161. - return true;
- 162. - }
- 163. - },
- 164. - showProgress: sp, hideProgress: hp
- 165. - });
- 166. - },
- 167. -
- 168. - addInvite: function(newRow, added, act) {
- 169. - if (newRow) {
- 170. - var moreCont = ge('gle_invites_more');
- 171. - moreCont.appendChild(se(newRow));
- 172. - cur.scrollList.invShown += 1;
- 173. - if (cur.scrollList.invSwitchGid) {
- 174. - GroupsList.switchInvite(cur.scrollList.invSwitchGid);
- 175. - cur.scrollList.invSwitchGid = false;
- 176. - }
- 177. - }
- 178. -
- 179. - if (added && cur.scrollList.lists.groups) {
- 180. - var l = cur.scrollList.lists.groups;
- 181. - if (act == 'join' || act == 'unsure') {;
- 182. - l.push(added);
- 183. - } else if (!act) {
- 184. - l.unshift(added); // add to the start
- 185. - } else if (act == 'undecided') {
- 186. - for (var i in l) {
- 187. - if (l[i][2] == added[2]) {
- 188. - l.splice(i, 1)
- 189. - }
- 190. - }
- 191. - }
- 192. - cur.scrollList.cache['groups'] = {all: []};
- 193. - var c = cur.scrollList.cache['groups'];
- 194. - for (var i in l) {
- 195. - c.all.push(i);
- 196. - }
- 197. - cur.scrollList.index['groups'] = new vkIndexer(c.all, function(obj) {
- 198. - return l[obj][0];
- 199. - });
- 200. - GroupsList.showMore(true);
- 201. - }
- 202. - },
- 203. -
- 204. - switchInvite: function(gid, prepareActs) {
- 205. - var tab = cur.scrollList.tab;
- 206. - if (tab != 'groups') {
- 207. - return false;
- 208. - }
- 209. -
- 210. - var row = ge('gl_' + tab + gid);
- 211. -
- 212. - var moreCont = ge('gle_invites_more');
- 213. - var newRows = moreCont.childNodes;
- 214. - if (!newRows.length) {
- 215. - if (cur.scrollList.invShown < cur.scrollList.invCount) {
- 216. - cur.scrollList.invSwitchGid = gid;
- 217. - return true;
- 218. - }
- 219. - return false;
- 220. - }
- 221. - var newRow = newRows[0];
- 222. -
- 223. - if (!newRow) {
- 224. - return false;
- 225. - }
- 226. -
- 227. - if (cur.switchedInvite) {
- 228. - slideUp(cur.switchedInvite);
- 229. - }
- 230. - if (prepareActs) {
- 231. - cur.switchedInvite = ce('div', {className: 'gle_invites_actions', innerHTML: '<div class="progress_inline"></div>'});
- 232. - newRow.insertBefore(cur.switchedInvite, newRow.firstChild)
- 233. - }
- 234. -
- 235. - cur.scrollList.invShown -= 1;
- 236. - cur.scrollList.invCount -= 1;
- 237. -
- 238. - var cont = row.parentNode;
- 239. - var size = getSize(cont);
- 240. - setStyle(newRow, {opacity: 0, overflow: 'hidden', height: 1, position: 'absolute'});
- 241. - cont.appendChild(newRow);
- 242. - animate(newRow, {marginTop: -size[1], opacity: 1, height: size[1]}, 200, function() {
- 243. - hide(row);
- 244. - setStyle(newRow, {marginTop: 0, position: 'static', height: 'auto'});
- 245. - });
- 246. -
- 247. - if (cur.scrollList.invCount) {
- 248. - ge('gle_inv_summary').innerHTML = langNumeric(cur.scrollList.invCount, cur.scrollList.summaries.inv);
- 249. - } else {
- 250. - ge('gle_inv_summary').innerHTML = cur.scrollList.summaries.invEmpty;
- 251. - }
- 252. - return true;
- 253. - },
- 254. -
- 255. - leave: function(el, gid, hash, pp) {
- 256. - if (cur.invSwitching) {
- 257. - setTimeout(GroupsList.leave.pbind(el, gid, hash, pp), 100);
- 258. - return false;
- 259. - }
- 260. - var sp, hp, tab = cur.scrollList.tab;
- 261. -
- 262. - if (el.firstChild && el.firstChild.className == 'progress_inline') return;
- 263. - sp = function() {
- 264. - var w = getSize(el)[0];
- 265. - el.oldhtml = el.innerHTML;
- 266. - el.innerHTML = '<span class="progress_inline"></span>';
- 267. - setStyle(el, {width: w - 30});
- 268. - }
- 269. - hp = function() {
- 270. - el.innerHTML = el.oldhtml;
- 271. - }
- 272. -
- 273. - var key = GroupsList.rand(), value = GroupsList.rand();
- 274. - cur.scrollList[key] = value;
- 275. -
- 276. - var shown = false;
- 277. - cur.invSwitching = true;
- 278. - if (GroupsList.switchInvite(gid, true)) {
- 279. - shown = true;
- 280. - sp = false;
- 281. - hp = false;
- 282. - }
- 283. -
- 284. - var context = (cur.scrollList.tab == 'groups') ? '2' : '1';
- 285. -
- 286. - ajax.post('al_groups.php', {
- 287. - act: 'leave',
- 288. - gid: gid,
- 289. - hash: hash,
- 290. - context: context,
- 291. - inv_shown: cur.scrollList.invShown
- 292. - }, {
- 293. - onDone: function(newRow) {
- 294. - cur.invSwitching = false;
- 295. - if (!cur.scrollList || cur.scrollList[key] != value) return;
- 296. -
- 297. - var list = cur.scrollList.lists[tab];
- 298. - if (!list || list == 'loading' || list == 'update') {
- 299. - cur.scrollList.processed[tab][gid] = -1;
- 300. - } else {
- 301. - for (var i = 0, count = list.length; i < count; ++i) {
- 302. - if (list[i][2] == gid) {
- 303. - list[i][1] = -1;
- 304. - }
- 305. - }
- 306. - }
- 307. -
- 308. - var row = ge('gl_' + tab + gid);
- 309. - if (!row) return;
- 310. -
- 311. - var acts = '<a onclick="GroupsList.cancel(this.parentNode, ' + gid + ', \'' + hash + '\')">' + getLang('global_cancel') + '</a><span class="divider">|</span><a onclick="GroupsList.spam(this.parentNode, ' + gid + ', \'' + hash + '\')">' + getLang('its_spam') + '</a>';
- 312. -
- 313. - var text = '';
- 314. - if (tab == 'groups') {
- 315. - text = getLang(pp ? 'public_you_unsubscribed' : 'groups_group_left');
- 316. - } else {
- 317. - text = getLang('groups_group_deny_message');
- 318. - }
- 319. -
- 320. -
- 321. -
- 322. - GroupsList.addInvite(newRow, false, false);
- 323. -
- 324. - if (shown) {
- 325. - if (cur.switchedInvite) {
- 326. - cur.switchedInvite.innerHTML = text+' <a onclick="GroupsList.spam(this.parentNode, ' + gid + ', \'' + hash + '\', cur.switchedInvite)">' + getLang('its_spam') + '</a>';
- 327. - }
- 328. - return;
- 329. - }
- 330. -
- 331. - var status = geByClass1('group_row_status', row), actions = geByClass1('group_row_actions', row);
- 332. - status.basehtml = status.innerHTML;
- 333. - actions.basehtml = actions.innerHTML;
- 334. - status.innerHTML = text;
- 335. - actions.innerHTML = acts;
- 336. - },
- 337. - showProgress: sp, hideProgress: hp
- 338. - });
- 339. - },
- 340. - rejectAll: function(el, hash) {
- 341. - var box = showFastBox(getLang('global_warning'), getLang('groups_sure_reject_all'), getLang('groups_members_application_decline'), function() {
- 342. - ajax.post('al_groups.php', {act: 'reject_all', hash: hash}, {progress: box.progress});
- 343. - }, getLang('global_cancel'));
- 344. - },
- 345. - spam: function(el, gid, hash, applyCont) {
- 346. - var sp, hp, tab = cur.scrollList.tab;
- 347. -
- 348. - if (el.firstChild && el.firstChild.className == 'progress_inline') return;
- 349. - sp = function() {
- 350. - el.oldhtml = el.innerHTML;
- 351. - el.innerHTML = '<span class="progress_inline"></span>';
- 352. - }
- 353. - hp = function() {
- 354. - el.innerHTML = el.oldhtml;
- 355. - }
- 356. -
- 357. - var key = GroupsList.rand(), value = GroupsList.rand();
- 358. - cur.scrollList[key] = value;
- 359. -
- 360. - ajax.post('al_groups.php', {act: 'spam', gid: gid, hash: hash, context: 1}, {
- 361. - onDone: function(respText) {
- 362. - if (!cur.scrollList || cur.scrollList[key] != value) return;
- 363. - if (applyCont) {
- 364. - applyCont.innerHTML = respText;
- 365. - }
- 366. -
- 367. - var list = cur.scrollList.lists[tab];
- 368. - if (!list || list == 'loading' || list == 'update') {
- 369. - cur.scrollList.processed[tab][gid] = -2;
- 370. - } else {
- 371. - for (var i = 0, count = list.length; i < count; ++i) {
- 372. - if (list[i][2] == gid) {
- 373. - list[i][1] = -2;
- 374. - }
- 375. - }
- 376. - }
- 377. -
- 378. - var row = ge('gl_' + tab + gid);
- 379. - if (!row) return;
- 380. -
- 381. - var status = geByClass1('group_row_status', row), actions = geByClass1('group_row_actions', row);
- 382. - status.basehtml = status.innerHTML;
- 383. - actions.basehtml = actions.innerHTML;
- 384. - status.innerHTML = getLang('groups_ajax_inv_declined_spam');
- 385. - actions.innerHTML = '';
- 386. - },
- 387. - showProgress: sp, hideProgress: hp
- 388. - });
- 389. - },
- 390. - cancel: function(el, gid, hash) {
- 391. - var sp, hp, tab = cur.scrollList.tab;
- 392. -
- 393. - if (el.firstChild && el.firstChild.className == 'progress_inline') return;
- 394. - sp = function() {
- 395. - el.oldhtml = el.innerHTML;
- 396. - el.innerHTML = '<span class="progress_inline"></span>';
- 397. - }
- 398. - hp = function() {
- 399. - el.innerHTML = el.oldhtml;
- 400. - }
- 401. -
- 402. - var key = GroupsList.rand(), value = GroupsList.rand();
- 403. - cur.scrollList[key] = value;
- 404. -
- 405. - ajax.post('al_groups.php', {act: 'cancel', gid: gid, hash: hash, context: 1}, {
- 406. - onDone: function() {
- 407. - if (!cur.scrollList || cur.scrollList[key] != value) return;
- 408. -
- 409. - var list = cur.scrollList.lists[tab], elem = false;
- 410. - if (!list || list == 'loading' || list == 'update') {
- 411. - cur.scrollList.processed[tab][gid] = 0;
- 412. - } else {
- 413. - for (var i in list) {
- 414. - if (list[i][2] == gid) {
- 415. - list.splice(i, 1)
- 416. - }
- 417. - }
- 418. - cur.scrollList.cache['groups'] = {all: []};
- 419. - var c = cur.scrollList.cache['groups'];
- 420. - for (var i in list) {
- 421. - c.all.push(i);
- 422. - }
- 423. - cur.scrollList.index[tab] = new vkIndexer(c.all, function(obj) {
- 424. - return list[obj][0];
- 425. - });
- 426. - }
- 427. - /*} else {
- 428. - for (var i = 0, count = list.length; i < count; ++i) {
- 429. - if (list[i][2] == gid) {
- 430. - list[i][1] = 0;
- 431. - elem = list[i];
- 432. - break;
- 433. - }
- 434. - }
- 435. - }*/
- 436. -
- 437. - var row = ge('gl_' + tab + gid);
- 438. - if (!row) return;
- 439. -
- 440. - if (elem) {
- 441. - var name = elem[0], q = trim(cur.scrollList.query.value);
- 442. - if (q) {
- 443. - var highlight = GroupsList.getHighlight(q);
- 444. - name = name.replace(highlight.re, highlight.val);
- 445. - }
- 446. - var newRow = (cur.scrollList.genRow(elem, name)) ? cur.scrollList.genInvRow(elem, name) : cur.scrollList.genRow(elem, name);
- 447. - row.parentNode.replaceChild(ce('div', {innerHTML: newRow}).firstChild, row);
- 448. - } else {
- 449. - var status = geByClass1('group_row_status', row), actions = geByClass1('group_row_actions', row);
- 450. - status.innerHTML = status.basehtml;
- 451. - actions.innerHTML = actions.basehtml;
- 452. - }
- 453. - },
- 454. - showProgress: sp, hideProgress: hp
- 455. - });
- 456. - },
- 457. -
- 458. - scrollCheck: function() {
- 459. - if (browser.mobile) return;
- 460. - var lnk = ge(cur.scrollList.prefix + cur.scrollList.tab + '_more');
- 461. - if (!isVisible(lnk)) {
- 462. - return;
- 463. - }
- 464. -
- 465. - var docEl = document.documentElement;
- 466. - var ch = window.innerHeight || docEl.clientHeight || bodyNode.clientHeight;
- 467. - var st = scrollGetY();
- 468. -
- 469. - if (st + ch > lnk.offsetTop || (cur.searchOffset && st + 2*ch > lnk.offsetTop)) {
- 470. - GroupsList.showMore();
- 471. - }
- 472. - },
- 473. - initScroll: function() {
- 474. - addEvent((browser.msie6 ? pageNode : window), 'scroll', GroupsList.scrollCheck);
- 475. - addEvent(window, 'resize', GroupsList.scrollCheck);
- 476. - },
- 477. -
- 478. - locNav: function(changed, oldLoc, newLoc) {
- 479. - var changedTab = changed.tab, tab = changedTab || 'groups';
- 480. - delete(changed.tab);
- 481. - if (!isEmpty(changed) || changedTab === undefined) return;
- 482. -
- 483. - ge('groups_tab_' + cur.scrollList.tab).className = '';
- 484. - hide('groups_list_tab_' + cur.scrollList.tab);
- 485. - cur.scrollList.tab = tab;
- 486. - show('groups_list_tab_' + tab);
- 487. - var tabEl = ge('groups_tab_' + tab);
- 488. - tabEl.className = 'active_link';
- 489. - show(tabEl);
- 490. -
- 491. - if (cur.scrollList.events) {
- 492. - toggle(cur.scrollList.events, tab == 'groups' && ge('gle_list_cont').innerHTML);
- 493. - cur.scrollList.eventsShow = false;
- 494. - if (isVisible(cur.scrollList.eventsMore)) {
- 495. - hide(cur.scrollList.eventsMore);
- 496. - show(cur.scrollList.eventsMoreLnk);
- 497. - }
- 498. - }
- 499. - if (cur.scrollList.invites) {
- 500. - toggle(cur.scrollList.invites, tab == 'groups');
- 501. - }
- 502. - if (cur.scrollList.invites || cur.scrollList.events) {
- 503. - ((tab == 'groups') ? addClass : removeClass)(cur.scrollList.summary.parentNode, 'gl_summary_short');
- 504. - }
- 505. -
- 506. - toggle('gl_about_events', (tab == 'groups' || tab == 'inv'));
- 507. -
- 508. - nav.setLoc(newLoc);
- 509. - ge('groups_list_search').setValue('');
- 510. - setTimeout(elfocus.pbind('groups_list_search'), 0);
- 511. -
- 512. - cur.scrollList.summary.innerHTML = cur.scrollList.summaries[tab];
- 513. - cur.scrollList.offset = ge('groups_list_' + tab).childNodes.length;
- 514. -
- 515. - GroupsList.showMore(true);
- 516. -
- 517. - return false;
- 518. - },
- 519. -
- 520. - init: function(opts) {
- 521. - placeholderSetup('groups_list_search', {back: true});
- 522. - setTimeout(elfocus.pbind('groups_list_search'), 0);
- 523. - extend(cur, {
- 524. - module: 'groups_list',
- 525. - _back: {
- 526. - text: getLang('groups_back_to_list'),
- 527. - show: [GroupsList.initScroll],
- 528. - hide: [function() {
- 529. - removeEvent((browser.msie6 ? pageNode : window), 'scroll', GroupsList.scrollCheck);
- 530. - removeEvent(window, 'resize', GroupsList.scrollCheck);
- 531. - }]
- 532. - },
- 533. -
- 534. - scrollList: {
- 535. - tab: opts.tab,
- 536. -
- 537. - url: 'al_groups.php',
- 538. - params: {act: 'get_list', mid: opts.mid},
- 539. - prefix: 'groups_list_',
- 540. - query: ge('groups_list_search'),
- 541. - summary: ge('groups_list_summary'),
- 542. - events: ge('gle_list_wrap'),
- 543. - eventsMore: ge('gle_list_more'),
- 544. - eventsMoreLnk: ge('gle_list_more_lnk'),
- 545. - invites: ge('gle_invites_wrap'),
- 546. - searchCont: ge('groups_list_search_cont'),
- 547. -
- 548. - perpage: 20,
- 549. - offset: ge('groups_list_' + opts.tab).childNodes.length,
- 550. -
- 551. - lists: {},
- 552. - cache: {},
- 553. - index: {},
- 554. - processed: {'groups': {}, 'admin': {}, 'inv': {}},
- 555. - filtered: {},
- 556. - queries: {},
- 557. - summaries: opts.summaries,
- 558. -
- 559. - genEmpty: opts.genEmpty,
- 560. - genRow: opts.genRow,
- 561. - genEvent: opts.genEvent,
- 562. - genInvRow: opts.genInvRow,
- 563. - genSummary: opts.genSummary,
- 564. - genGroupsSummary: opts.genGroupsSummary,
- 565. - invShown: opts.invShown,
- 566. - invCount: opts.invCount
- 567. - },
- 568. - filter: opts.filter
- 569. - });
- 570. -
- 571. - cur.nav.push(GroupsList.locNav);
- 572. -
- 573. - setTimeout(GroupsList.load, 0);
- 574. - if (vk.version) {
- 575. - addEvent(window, 'load', GroupsList.initScroll);
- 576. - } else {
- 577. - GroupsList.initScroll();
- 578. - }
- 579. - },
- 580. - load: function(force, forceTab) {
- 581. - var tab = forceTab || cur.scrollList.tab;
- 582. - if (cur.scrollList.lists[tab]) return;
- 583. -
- 584. - var key = GroupsList.rand(), value = GroupsList.rand();
- 585. - cur.scrollList[key] = value;
- 586. -
- 587. - cur.scrollList.lists[tab] = 'loading';
- 588. - ajax.post(cur.scrollList.url, extend(cur.scrollList.params, {tab: tab}), {onDone: function(result) {
- 589. - if (!cur.scrollList || cur.scrollList[key] != value) return;
- 590. -
- 591. - var upd = (cur.scrollList.lists[tab] == 'update');
- 592. - if (!upd && cur.scrollList.lists[tab] != 'loading') return;
- 593. -
- 594. - cur.scrollList.cache[tab] = {all: []};
- 595. - var processed = cur.scrollList.processed[tab], gid;
- 596. - for (var i = 0, count = result.length; i < count; ++i) {
- 597. - res = processed[result[i][2]];
- 598. - if (res) {
- 599. - result[i][1] = res;
- 600. - }
- 601. - cur.scrollList.cache[tab].all.push(i);
- 602. - }
- 603. - cur.scrollList.lists[tab] = result;
- 604. -
- 605. - var callback = upd ? function() {
- 606. - if (cur.scrollList && cur.scrollList[key] == value && cur.scrollList.tab == tab) {
- 607. - GroupsList.showMore(force);
- 608. - }
- 609. - } : function() {};
- 610. -
- 611. - cur.scrollList.index[tab] = new vkIndexer(cur.scrollList.cache[tab].all, function(obj) {
- 612. - return cur.scrollList.lists[tab][obj][0];
- 613. - }, callback);
- 614. -
- 615. - if (cur.scrollList.eventsShow) {
- 616. - GroupsList.eventsMore();
- 617. - }
- 618. - }});
- 619. - },
- 620. -
- 621. - htmlencode: function(str) {
- 622. - var res = [];
- 623. - for (var i = 0, l = str.length; i < l; ++i) {
- 624. - var c = str.charCodeAt(i);
- 625. - if (c == 33 || c == 39 || (c > 127 && c < 1040) || c > 1103) {
- 626. - res.push('&#' + c + ';');
- 627. - } else if (c == 36) {
- 628. - res.push('�' + c + ';');
- 629. - } else {
- 630. - c = str.charAt(i);
- 631. - switch (c) {
- 632. - case '>': res.push('>'); break;
- 633. - case '<': res.push('<'); break;
- 634. - case '"': res.push('"'); break;
- 635. - case '&': res.push('&'); break;
- 636. - default: res.push(c); break;
- 637. - }
- 638. - }
- 639. - }
- 640. - return res.join('');
- 641. - },
- 642. - getHighlight: function(q) {
- 643. - var indxr = cur.scrollList.index[cur.scrollList.tab], delimiter = indxr.delimiter, trimmer = indxr.trimmer;
- 644. -
- 645. - q += ' ' + (parseLatin(q) || '');
- 646. - q = escapeRE(q).replace(/&/g, '&');
- 647. - q = q.replace(trimmer, '').replace(delimiter, '|');
- 648. - return {
- 649. - re: new RegExp('(' + q + ')', 'gi'),
- 650. - val: '<span class="group_row_highlight">$1</span>'
- 651. - }
- 652. - },
- 653. - updateEvents: function() {
- 654. - if (!cur.scrollList.events || cur.scrollList.tab != 'groups') return;
- 655. - toggle(cur.scrollList.events, !cur.scrollList.query.value && ge('gle_list_cont').innerHTML);
- 656. - cur.scrollList.eventsShow = false;
- 657. - if (isVisible(cur.scrollList.eventsMore)) {
- 658. - hide(cur.scrollList.eventsMore);
- 659. - show(cur.scrollList.eventsMoreLnk);
- 660. - }
- 661. - if (cur.scrollList.invites) {
- 662. - toggle(cur.scrollList.invites, !cur.scrollList.query.value);
- 663. - }
- 664. - (!cur.scrollList.query.value ? addClass : removeClass)(cur.scrollList.summary.parentNode, 'gl_summary_short');
- 665. - },
- 666. - updateEventsList: function(addedGid) {
- 667. - ajax.post('groups', {act: 'update_events'}, {
- 668. - onDone: function(html, more) {
- 669. - var gleCont = ge('gle_list_cont');
- 670. - val(gleCont, html);
- 671. - toggle(cur.scrollList.events, !!html);
- 672. - hide(cur.scrollList.eventsMore);
- 673. - val(cur.scrollList.eventsMore, '');
- 674. - val(cur.scrollList.eventsMoreLnk, more || '');
- 675. - toggle(cur.scrollList.eventsMoreLnk, !!more);
- 676. - cur.scrollList.eventsShow = false;
- 677. - if (addedGid) {
- 678. - var addedRow = ge('gle_block_'+addedGid);
- 679. - if (addedRow) {
- 680. - setStyle(addedRow, {backgroundColor: '#FEFAE4'});
- 681. - animate(addedRow, {backgroundColor: '#FFF'}, 2000);
- 682. - }
- 683. - }
- 684. - }
- 685. - })
- 686. - },
- 687. - eventsMore: function() {
- 688. - var list = cur.scrollList.lists['groups'];
- 689. - if (!list || list == 'loading' || list == 'update') {
- 690. - cur.scrollList.eventsShow = true;
- 691. - return;
- 692. - }
- 693. -
- 694. - hide(cur.scrollList.eventsMoreLnk);
- 695. - if (val(cur.scrollList.eventsMore)) {
- 696. - show(cur.scrollList.eventsMore);
- 697. - } else {
- 698. - var res = {}, shown = {}, dates = {}, list = [], html = [];
- 699. - each(ge('gle_list_cont').childNodes, function(k, v) {
- 700. - var id = intval(((v || {}).id || '').replace(/^gle_block_/, ''));
- 701. - if (id) shown[id] = true;
- 702. - });
- 703. - each(cur.scrollList.lists['groups'], function(k, v) {
- 704. - var gid = intval(v[2]);
- 705. - if (!v[11] || shown[gid]) return;
- 706. - list.push(gid);
- 707. - res[gid] = cur.scrollList.genEvent(v);
- 708. - dates[gid] = intval(v[11].split('<*>')[0]);
- 709. - });
- 710. - list.sort(function(gid1, gid2) {
- 711. - return (dates[gid1] < dates[gid2]) ? -1 : ((dates[gid2] < dates[gid1]) ? 1 : 0);
- 712. - });
- 713. - each(list, function(k, v) {
- 714. - html.push(res[v]);
- 715. - });
- 716. - if (html.length) {
- 717. - val(cur.scrollList.eventsMore, html.join(''));
- 718. - show(cur.scrollList.eventsMore);
- 719. - }
- 720. - }
- 721. - },
- 722. - showMore: function(force) {
- 723. - var tab = cur.scrollList.tab, list = cur.scrollList.lists[tab];
- 724. - if (!list || list == 'loading' || list == 'update') {
- 725. - if (!list) GroupsList.load(force);
- 726. - cur.scrollList.lists[tab] = 'update';
- 727. - return;
- 728. - }
- 729. -
- 730. - var tab = cur.scrollList.tab, list = cur.scrollList.cache[tab].all;
- 731. -
- 732. - var q = trim(cur.scrollList.query.value);
- 733. - cur.searchStr = q;
- 734. - if (!cur.loadingShown) {
- 735. - if (q) {
- 736. - show('groups_reset_search');
- 737. - } else {
- 738. - hide('groups_reset_search');
- 739. - }
- 740. - }
- 741. -
- 742. - if (cur.scrollList.queries[tab] === undefined) {
- 743. - cur.scrollList.queries[tab] = '';
- 744. - }
- 745. - var refresh = (force || q != cur.scrollList.queries[tab]);
- 746. - if (!refresh && force === false) return;
- 747. -
- 748. - cur.scrollList.queries[tab] = q;
- 749. -
- 750. - var highlight = false;
- 751. - if (q) {
- 752. - list = cur.scrollList.cache[tab]['_' + q];
- 753. - if (list === undefined) {
- 754. - var tmp = cur.scrollList.index[tab].search(q), mp = {};
- 755. - list = [];
- 756. - for (var i = 0, l = tmp.length; i < l; ++i) {
- 757. - if (!mp[tmp[i]]) {
- 758. - mp[tmp[i]] = true;
- 759. - list.push(tmp[i]);
- 760. - }
- 761. - }
- 762. - list.sort(function(a,b){return a-b;});
- 763. - cur.scrollList.cache[tab]['_' + q] = list;
- 764. - }
- 765. - highlight = GroupsList.getHighlight(q);
- 766. - }
- 767. -
- 768. - var len = list.length;
- 769. -
- 770. - var cont = ge(cur.scrollList.prefix + tab), more = ge(cur.scrollList.prefix + tab + '_more');
- 771. - if (!len) {
- 772. - if (q && tab == 'groups') {
- 773. - if (refresh) {
- 774. - GroupsList.serverSearch(cont, q, true);
- 775. - hide(more);
- 776. - } else if (cur.searchOffset) {
- 777. - GroupsList.serverSearchMore(cont, q);
- 778. - }
- 779. - } else {
- 780. - q = cur.scrollList.query.value;
- 781. - cont.innerHTML = cur.scrollList.genEmpty(q);
- 782. - cur.scrollList.summary.innerHTML = q ? cur.scrollList.genSummary(len) : cur.scrollList.summaries[tab];
- 783. - hide(more);
- 784. - hide(cur.scrollList.searchCont);
- 785. - cur.searchOffset = 0;
- 786. - }
- 787. - return;
- 788. - } else if (tab == 'groups' && cur.scrollList.params.mid == vk.id) {
- 789. - cur.scrollList.summary.innerHTML = cur.scrollList.genGroupsSummary(len);
- 790. - } else {
- 791. - cur.scrollList.summary.innerHTML = q ? cur.scrollList.genSummary(len) : cur.scrollList.summaries[tab];
- 792. - }
- 793. -
- 794. - var start = refresh ? 0 : cur.scrollList.offset, end = Math.min(len, start + cur.scrollList.perpage);
- 795. - var html = [];
- 796. -
- 797. - for (var i = start; i < end; ++i) {
- 798. - var row = cur.scrollList.lists[tab][list[i]];
- 799. - if (!row) continue;
- 800. - var name = row[0];
- 801. - if (highlight) {
- 802. - name = name.replace(highlight.re, highlight.val);
- 803. - }
- 804. - if (cur.scrollList.tab == 'inv') {
- 805. - html.push(cur.scrollList.genInvRow(row, name));
- 806. - } else {
- 807. - html.push(cur.scrollList.genRow(row, name));
- 808. - }
- 809. - }
- 810. -
- 811. - if (!q && (!start || refresh)) {
- 812. - hide(cur.scrollList.searchCont);
- 813. - cur.searchOffset = 0;
- 814. - }
- 815. -
- 816. - if (refresh) {
- 817. - cont.innerHTML = html.join('');
- 818. - cur.searchOffset = false;
- 819. - if (list.length < 10 && q && tab == 'groups') {
- 820. - var exclude = [];
- 821. - for (var i in list) {
- 822. - var el = cur.scrollList.lists[tab][list[i]];
- 823. - exclude.push(el[2]);
- 824. - }
- 825. - GroupsList.serverSearch(cont, q, false, exclude);
- 826. - } else {
- 827. - hide(cur.scrollList.searchCont);
- 828. - cur.searchOffset = 0;
- 829. - }
- 830. - } else {
- 831. - cont.innerHTML += html.join('');
- 832. - if (cur.searchOffset) {
- 833. - GroupsList.serverSearchMore(cont, q);
- 834. - }
- 835. - }
- 836. - cur.scrollList.offset = end;
- 837. -
- 838. - if (!cur.searchOffset) {
- 839. - (end < len ? show : hide)(more);
- 840. - }
- 841. - },
- 842. -
- 843. - serverSearchMore: function(cont, q) {
- 844. - if (cur.searchLoadingMore) return;
- 845. - cur.searchLoadingMore = 1;
- 846. - var more = ge(cur.scrollList.prefix + cur.scrollList.tab + '_more');
- 847. - var back = more.innerHTML;
- 848. - ajax.post('al_groups.php', {
- 849. - act: 'server_search',
- 850. - q: q,
- 851. - offset: cur.searchOffset,
- 852. - exclude: cur.searchExclude.join(',')
- 853. - }, {
- 854. - onDone: function(count, rows, finish) {
- 855. - cur.searchLoadingMore = 0;
- 856. - if (count) {
- 857. - cur.searchOffset += count;
- 858. - cur.scrollList.searchCont.appendChild(cf(rows));
- 859. - } else {
- 860. - cur.searchOffset = 0;
- 861. - }
- 862. - (finish ? hide : show)(cur.scrollList.prefix + cur.scrollList.tab + '_more');
- 863. - debugLog((finish ? 'hide' : 'show'));
- 864. - },
- 865. - onFail: function() {
- 866. - cur.searchLoadingMore = 0;
- 867. - },
- 868. - showProgress: function() {
- 869. - more.innerHTML = '<img src="/images/upload.gif" />';
- 870. - },
- 871. - hideProgress: function() {
- 872. - more.innerHTML = back;
- 873. - }
- 874. - })
- 875. - },
- 876. -
- 877. - serverSearch: function(cont, q, emptyLocal, exclude) {
- 878. - if (cur.scrollList.tab != 'groups') {
- 879. - return false;
- 880. - }
- 881. - clearTimeout(cur.searchTimeout);
- 882. - cur.searchTimeout = setTimeout(function() {
- 883. - if (cur.searchStr != q) return;
- 884. - cur.searchExclude = exclude || [];
- 885. - ajax.post('al_groups.php', {
- 886. - act: 'server_search',
- 887. - q: q,
- 888. - empty: emptyLocal ? 1 : 0,
- 889. - exclude: cur.searchExclude.join(',')
- 890. - }, {
- 891. - onDone: function(count, rows, summary, finish) {
- 892. - if (cur.searchStr != q) return;
- 893. - if (count) {
- 894. - var last = geByClass('group_list_row', cont).pop();
- 895. - if (last) {
- 896. - addClass(last, 'groups_list_last_row');
- 897. - }
- 898. - cur.scrollList.searchCont.innerHTML = rows;
- 899. - show(cur.scrollList.searchCont);
- 900. - if (emptyLocal) {
- 901. - cur.scrollList.summary.innerHTML = summary;
- 902. - cont.innerHTML = '';
- 903. - }
- 904. - if (!finish) {
- 905. - show(cur.scrollList.prefix + cur.scrollList.tab + '_more');
- 906. - }
- 907. - } else {
- 908. - cur.scrollList.searchCont.innerHTML = '';
- 909. - hide(cur.scrollList.searchCont);
- 910. - if (emptyLocal) {
- 911. - cont.innerHTML = cur.scrollList.genEmpty(q);
- 912. - cur.scrollList.summary.innerHTML = cur.scrollList.genSummary(0);
- 913. - }
- 914. - }
- 915. - cur.searchOffset = count;
- 916. - },
- 917. - showProgress: GroupsList.showLoading,
- 918. - hideProgress: GroupsList.hideLoading
- 919. - })
- 920. - }, 300);
- 921. - },
- 922. -
- 923. - resetSearch: function() {
- 924. - val(cur.scrollList.query, '');
- 925. - GroupsList.showMore(true);
- 926. - GroupsList.updateEvents();
- 927. - },
- 928. -
- 929. - showLoading: function() {
- 930. - cur.loadingShown = 1;
- 931. - show('groups_loading');
- 932. - hide('groups_reset_search');
- 933. - },
- 934. -
- 935. - hideLoading: function() {
- 936. - cur.loadingShown = 0;
- 937. - hide('groups_loading');
- 938. - if (cur.scrollList.query.value) {
- 939. - show('groups_reset_search');
- 940. - }
- 941. - },
- 942. -
- 943. - goToSearch: function() {
- 944. - var q = trim(cur.scrollList.query.value);
- 945. - nav.go('search?c%5Bq%5D='+encodeURIComponent(q)+'&c%5Bsection%5D=communities');
- 946. - },
- 947. -
- 948. - showInvites: function(obj) {
- 949. - removeClass(obj.previousSibling, 'groups_list_last_row');
- 950. - hide(obj);
- 951. - show(obj.nextSibling);
- 952. - },
- 953. -
- 954. - ttShow: function(obj, text) {
- 955. - var showsp = 200;
- 956. - if (cur.groupMemTT && cur.groupMemTT != obj && window.tooltips) {
- 957. - tooltips.hideAll();
- 958. - cur.groupMemTT = false;
- 959. - showsp = 0;
- 960. - }
- 961. - cur.groupMemTT = obj;
- 962. - return showTooltip(obj, {
- 963. - center: 1,
- 964. - black: 1,
- 965. - showsp: showsp,
- 966. - shift: [0, 2, 10],
- 967. - text: text
- 968. - });
- 969. - },
- 970. -
- 971. - showMapBox: function(place, zoom, link) {
- 972. - if (window.showZeroZoneBox && showZeroZoneBox('places', function() {
- 973. - GroupsList.showMapBox(place, zoom, link);
- 974. - })) { return; }
- 975. -
- 976. - showTabbedBox('places.php', {act: 'a_get_place_box', id: place}, {stat: ['places.css', 'map.css', 'maps.js', 'ui_controls.css', 'ui_controls.js']});
- 977. - },
- 978. -
- 979. - feedbanGroup: function(el, gid, hash) {
- 980. - var oid = -gid;
- 981. - ajax.post('al_fans.php', {act: 'feedtgl', oid: oid, hash: hash}, {
- 982. - onDone: function(val, str) {
- 983. - el.innerHTML = str;
- 984. - if (!cur.scrollList.lists || !cur.scrollList.lists.groups) {
- 985. - return;
- 986. - }
- 987. - var lst = cur.scrollList.lists.groups;
- 988. - if (lst && lst.length) {
- 989. - for (var i = 0, l = lst.length; i < l; ++i) {
- 990. - if (lst[i][2] == gid) {
- 991. - cur.scrollList.lists.groups[i][12] = val;
- 992. - break;
- 993. - }
- 994. - }
- 995. - }
- 996. - },
- 997. - showProgress: function() {
- 998. - el.innerHTML = '<span class="progress_inline"></span>';
- 999. - }
- 1000. - });
- 1001. - }
- 1002. - }
- 1003. -
- 1004. - try{stManager.done('groups_list.js');}catch(e){}
- ------
Advertisement
Add Comment
Please, Sign In to add comment