Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Файл - bugs.js (Старый размер - 37949 | Новый - 0):
- 0. - Bugs = {
- 1. -
- 2. - switchTab: function(name, evt) {
- 3. - if (checkEvent(evt)) return true;
- 4. - var oldTab = false;
- 5. - each(geByClass('active_link', ge('bugs_tabs')), function(i, v) {
- 6. - if (hasClass(v, 'active_link')) {
- 7. - oldTab = v;
- 8. - removeClass(v, 'active_link');
- 9. - }
- 10. - });
- 11. - addClass(ge(name + '_tab'), 'active_link');
- 12. - if (name == 'show') {
- 13. - show('show_tab', 'bugs_new_link');
- 14. - hide('new_tab', 'extra_tab');
- 15. - return false;
- 16. - } else if (name == 'extra') {
- 17. - hide('show_tab', 'new_tab');
- 18. - show('extra_tab', 'bugs_new_link');
- 19. - } else {
- 20. - hide('extra_tab', 'show_tab', 'new_tab');
- 21. - show('bugs_new_link');
- 22. - if (evt === false) {
- 23. - return false;
- 24. - } else {
- 25. - return nav.go(ge(name + '_tab').firstChild, evt);
- 26. - }
- 27. - }
- 28. - },
- 29. -
- 30. - switchSection: function(name, evt) {
- 31. - if (checkEvent(evt)) return true;
- 32. - each(geByClass('selected', ge('bugs_section_filters')), function() {
- 33. - removeClass(this, 'selected');
- 34. - });
- 35. - addClass(ge('filter_' + name).firstChild, 'selected');
- 36. - delete cur._back;
- 37. - nav.go({0: 'bugs', act: name});
- 38. - return false;
- 39. - },
- 40. -
- 41. - getPage: function(offset) {
- 42. - show('bugs_pages_top');
- 43. - show('bugs_pages_bottom');
- 44. - var _n = nav.objLoc, act = nav.objLoc.act || cur.section, query = {act: act, offset: offset, load: 1};
- 45. - for (var v in _n) {
- 46. - if (v != '0' && v != 'act' && v != 'offset') query[v] = _n[v];
- 47. - }
- 48. - ajax.post('bugs', query, {
- 49. - cache: 1,
- 50. - onDone: function(content, script, summary, tags) {
- 51. - ge('bugs_table').innerHTML = content;
- 52. - if (window.tooltips) tooltips.hideAll();
- 53. - scrollToTop();
- 54. - if (summary) {
- 55. - ge('summary').innerHTML = se(summary).innerHTML;
- 56. - }
- 57. - if (ge('bugs_tags')) {
- 58. - ge('bugs_tags').innerHTML = tags;
- 59. - }
- 60. - toggle('tags_wrap', !!tags);
- 61. - if (offset) {
- 62. - extend(nav.objLoc, {offset: offset});
- 63. - } else {
- 64. - delete nav.objLoc.offset;
- 65. - }
- 66. - hide('bugs_pages_top');
- 67. - hide('bugs_pages_bottom');
- 68. - nav.setLoc(nav.objLoc);
- 69. - },
- 70. - onFail: function() {
- 71. - hide('bugs_pages_top');
- 72. - hide('bugs_pages_bottom');
- 73. - }
- 74. - });
- 75. - return false;
- 76. - },
- 77. -
- 78. - subscribeBug: function(btn, subscribe) {
- 79. - ajax.post('bugs', {act: 'subscribe', id: cur.bug_id, subscribe: subscribe, hash: cur.hashes.subscribe_hash}, {
- 80. - onDone: function(html) {
- 81. - if (html) ge('bugs_view_subscribe').innerHTML = html;
- 82. - },
- 83. - showProgress: lockButton.pbind(btn),
- 84. - hideProgress: unlockButton.pbind(btn)
- 85. - })
- 86. - },
- 87. -
- 88. -
- 89. - getSearchParams: function(obj) {
- 90. - var params = {q: trim(val(obj)), load: 1, cache: 1};
- 91. - var status = 0;
- 92. - if (cur.bugsDD) {
- 93. - status = intval(cur.bugsDD.val());
- 94. - }
- 95. - if (!status) {
- 96. - status = (isChecked('bugs_chk_opened') ? 1 : 0) + (isChecked('bugs_chk_closed') ? 2 : 0) + (isChecked('bugs_chk_declined') ? 4 : 0);
- 97. - }
- 98. - if (cur.tags) {
- 99. - var tags = [];
- 100. - for (var i in cur.tags) {
- 101. - tags.push(i);
- 102. - }
- 103. - if (tags.length) params.tags = tags.join(',');
- 104. - }
- 105. - var defaultStatus = cur.type == 'subscriptions' ? 7 : 1;
- 106. - if (status != defaultStatus) params.status = '' + status;
- 107. - if ((params.q || params.tags) && nav.objLoc != 'all' && nav.objLoc.act != 'my') {
- 108. - nav.objLoc.act = 'all';
- 109. - }
- 110. - if (nav.objLoc.act) params.act = nav.objLoc.act;
- 111. - return params;
- 112. - },
- 113. - sameParams: function(params) {
- 114. - if (!cur.params) return false;
- 115. - for (var i in params) {
- 116. - if (params[i] != cur.params[i]) return false;
- 117. - }
- 118. - for (var i in cur.params) {
- 119. - if (params[i] != cur.params[i]) return false;
- 120. - }
- 121. - return true;
- 122. - },
- 123. -
- 124. - updateAllSearch: function(obj, delay) {
- 125. - delay = delay || 10;
- 126. - clearTimeout(cur.searchTimeout);
- 127. - cur.searchTimeout = setTimeout((function() {
- 128. - var params = Bugs.getSearchParams(obj);
- 129. - toggleClass(ge('bugs_search_reset'), 'shown', !!params.q);
- 130. - if ((!Bugs.sameParams(params) || cur.ignoreEqual)) {
- 131. - delete cur.ignoreEqual;
- 132. - cur.params = params;
- 133. - cur.searchStr = params.q;
- 134. - Bugs.searchAll(cur.searchStr);
- 135. - }
- 136. - scrollToTop();
- 137. - }).bind(this), delay);
- 138. - },
- 139. -
- 140. - searchAll: function() {
- 141. - var query = cur.params || Bugs.getSearchParams(ge('bugs_search_input'));
- 142. - setStyle(ge('bugs_search_reset'), {opacity: .6});
- 143. - if (query.q || query.tags) {
- 144. - each(geByClass('selected', ge('bugs_section_filters')), function() {
- 145. - removeClass(this, 'selected');
- 146. - });
- 147. - addClass(ge('filter_' + query.act).firstChild, 'selected');
- 148. - }
- 149. - ajax.post('bugs', query, {
- 150. - cache: 1,
- 151. - onDone: function(cont, script, summary, tags) {
- 152. - ge('bugs_table').innerHTML = cont;
- 153. - if (script) eval(script);
- 154. - if (summary) {
- 155. - ge('summary').innerHTML = se(summary).innerHTML;
- 156. - }
- 157. - if (ge('bugs_tags')) {
- 158. - ge('bugs_tags').innerHTML = tags;
- 159. - }
- 160. - toggle('tags_wrap', !!tags);
- 161. - delete nav.objLoc.offset;
- 162. - each(['q', 'status', 'tags'], function(i, v) {
- 163. - if (query[v]) {
- 164. - nav.objLoc[v] = query[v];
- 165. - } else {
- 166. - delete nav.objLoc[v];
- 167. - }
- 168. - });
- 169. - nav.setLoc(nav.objLoc);
- 170. - },
- 171. - showProgress: addClass.pbind(ge('bugs_search'), 'loading'),
- 172. - hideProgress: removeClass.pbind(ge('bugs_search'), 'loading')
- 173. - });
- 174. - },
- 175. -
- 176. - clearAllSearch: function(el, event) {
- 177. - var field = ge('bugs_search_input');
- 178. - setStyle(el, {opacity: .6});
- 179. - field.value = '';
- 180. - field.focus();
- 181. - this.updateAllSearch(field);
- 182. - },
- 183. -
- 184. - showNewBox: function() {
- 185. - return !showBox('bugs', {act: 'new_box'}, {
- 186. - stat: ['wide_dd.js', 'wide_dd.css', 'page.css', 'page.js', 'upload.js'],
- 187. - cache: 1,
- 188. - params: {
- 189. - width: 500,
- 190. - hideButtons: true,
- 191. - bodyStyle: 'border: 0px; padding: 0px'
- 192. - }
- 193. - });
- 194. - },
- 195. -
- 196. - checkTextLength: function(el, maxLen, warn) {
- 197. - var v = trim(el.value).replace(/\n\n\n+/g, '\n\n');
- 198. - if (el.lastLen === v.length) return;
- 199. -
- 200. - var realLen = el.lastLen = v.length;
- 201. - var brCount = realLen - v.replace(/\n/g, '').length;
- 202. -
- 203. - warn = ge(warn);
- 204. - if (realLen > maxLen - 100 || brCount > 10) {
- 205. - show(warn);
- 206. - if (realLen > maxLen) {
- 207. - warn.innerHTML = getLang('global_recommended_exceeded', realLen - maxLen);
- 208. - } else if (brCount > 10) {
- 209. - warn.innerHTML = getLang('global_recommended_lines', brCount - 10);
- 210. - } else {
- 211. - warn.innerHTML = getLang('text_N_symbols_remain', maxLen - realLen);
- 212. - }
- 213. - } else {
- 214. - hide(warn);
- 215. - }
- 216. - },
- 217. -
- 218. - checkNewFields: function(bug_id) {
- 219. - if (!trim(val('bugs_new_title'))) {
- 220. - notaBene(ge('bugs_new_title'));
- 221. - return false;
- 222. - }
- 223. - if (!bug_id && !curBox().changed) {
- 224. - notaBene('bugs_new_text');
- 225. - return false;
- 226. - }
- 227. - if (cur.wdd && cur.wdd.wdd_new_tags) {
- 228. - var tags = [];
- 229. - for (var i in cur.wdd.wdd_new_tags.selected) {
- 230. - tags.push(cur.wdd.wdd_new_tags.selected[i][0]);
- 231. - }
- 232. - if (!tags.length) {
- 233. - notaBene(ge('wdd_new_tags'));
- 234. - notaBene(ge('bugs_new_tags'));
- 235. - return false;
- 236. - }
- 237. - }
- 238. -
- 239. - return true;
- 240. - },
- 241. -
- 242. - saveBug: function(bug_id) {
- 243. - if (!this.checkNewFields(bug_id)) return false;
- 244. -
- 245. - var query = {act: 'save', hash: cur.hashes.save_hash, title: trim(val('bugs_new_title')), text: val('bugs_new_text')};
- 246. - if (bug_id) {
- 247. - query.id = bug_id;
- 248. - }
- 249. - if (cur.wdd && cur.wdd.wdd_new_tags) {
- 250. - var tags = [];
- 251. - for (var i in cur.wdd.wdd_new_tags.selected) {
- 252. - tags.push(cur.wdd.wdd_new_tags.selected[i][0]);
- 253. - }
- 254. - if (tags.length) {
- 255. - query.tags = tags;
- 256. - }
- 257. - }
- 258. - var attachs = [], chosen = cur.bugsNewMedia.chosenMedias;
- 259. - if (attachs) {
- 260. - for (var i in chosen) {
- 261. - var att = chosen[i], type = att[0], value = att[1];
- 262. - if (type == 'photo' || type == 'doc') {
- 263. - attachs.push(type+','+value);
- 264. - }
- 265. - }
- 266. - }
- 267. - if (attachs.length) query.attachs = attachs;
- 268. - ajax.post('bugs', query, {
- 269. - showProgress: lockButton.pbind('bugs_submit_button'),
- 270. - hideProgress: function() {
- 271. - if (curBox()) curBox().hide();
- 272. - },
- 273. - onDone: function(description, data, msg) {
- 274. - if (description) ge('bugs_view_description').innerHTML = description;
- 275. - if (data) ge('bugs_view_data').innerHTML = data;
- 276. - if (msg) Bugs.showMsg(msg);
- 277. - },
- 278. - onFail: function(msg) {
- 279. - return Bugs.showError(msg);
- 280. - }
- 281. - });
- 282. - return false;
- 283. - },
- 284. - addBug: function() {
- 285. - return Bugs.saveBug();
- 286. - },
- 287. - editBug: function() {
- 288. - return Bugs.saveBug(cur.bug_id);
- 289. - },
- 290. -
- 291. - addScreen: function(onShow) {
- 292. - var opts = {title: getLang('bugs_adding_screen'), width: 440, bodyStyle: 'padding: 0px'};
- 293. - if (onShow) {
- 294. - opts.onShow = onShow;
- 295. - }
- 296. - return showFastBox(opts, cur.screenBox);
- 297. - },
- 298. - addDoc: function(onShow) {
- 299. - var opts = {title: getLang('bugs_adding_doc'), width: 440, bodyStyle: 'padding: 0px'};
- 300. - if (onShow) {
- 301. - opts.onShow = onShow;
- 302. - }
- 303. - return showFastBox(opts, cur.docBox);
- 304. - },
- 305. - choosePhotoUploaded: function(info, params) {
- 306. - var i = info.ind !== undefined ? info.ind : info,
- 307. - fileName = info.fileName ? info.fileName : info,
- 308. - ind = info.fileName ? i + '_' + info.fileName : info,
- 309. - prg = ge('upload' + ind + '_progress_wrap');
- 310. -
- 311. - prg && hide(geByClass1('progress_x', prg));
- 312. - ajax.post('al_photos.php', extend({act: 'choose_uploaded_support'}, params), {
- 313. - onDone: function(media, data) {
- 314. - cur.bugsNewMedia.chooseMedia('photo', media, extend(data, {upload_ind: i + '_' + fileName}));
- 315. - },
- 316. - onFail: Bugs.chooseFail.pbind(info)
- 317. - });
- 318. - },
- 319. - chooseDocUploaded: function(info, params) {
- 320. - var i = info.ind !== undefined ? info.ind : info,
- 321. - fileName = info.fileName ? info.fileName : info,
- 322. - ind = info.fileName ? i + '_' + info.fileName : info,
- 323. - prg = ge('upload' + ind + '_progress_wrap');
- 324. -
- 325. - prg && hide(geByClass1('progress_x', prg));
- 326. - ajax.post('docs.php', extend({act: 'a_save_doc', from: 'choose'}, params), {
- 327. - onDone: function(oid, id, data) {
- 328. - re('upload'+ind+'_progress_wrap');
- 329. - cur.bugsNewMedia.chooseMedia('doc', oid+'_'+id, data);
- 330. - },
- 331. - onFail: Bugs.chooseFail.pbind(info)
- 332. - });
- 333. - },
- 334. - chooseFail: function(info, code) {
- 335. - var i = info.ind !== undefined ? info.ind : info, fileName = info.fileName ? info.fileName : info;
- 336. - if (Upload.types[i] == 'fileApi' && !Upload.options[i].wiki_editor) {
- 337. - var lnkId, ind = info.fileName ? i+'_'+info.fileName : info;
- 338. - if (cur.imMedia) {
- 339. - re('upload'+ind+'_progress_wrap');
- 340. - lnkId = cur.imMedia.lnkId;
- 341. - cur.addMedia[lnkId].unchooseMedia();
- 342. - } else if (cur.addMedia) {
- 343. - re('upload'+ind+'_progress_wrap');
- 344. - lnkId = (cur.attachMediaIndexes || {})[fileName];
- 345. - if (lnkId) cur.addMedia[lnkId].unchooseMedia();
- 346. - }
- 347. - }
- 348. - topError('Upload failed', {dt: -1, type: 102, url: (ge('file_uploader_form' + i) || {}).action});
- 349. - Upload.embed(i);
- 350. - },
- 351. -
- 352. - initPhotoUpload: function(el, params) {
- 353. - el = ge(el);
- 354. - if (!el) return;
- 355. -
- 356. - if (!cur.screens) cur.screens = {};
- 357. - var uploadData = cur.uploadPhotoData, opts = uploadData.options;
- 358. - return Upload.init(el, uploadData.url, uploadData.vars, {
- 359. - file_name: 'photo',
- 360. -
- 361. - file_size_limit: 1024*1024*5, // 5Mb
- 362. - file_types_description: 'Image files (*.jpg, *.jpeg, *.png, *.gif)',
- 363. - file_types: '*.jpg;*.JPG;*.jpeg;*.JPEG;*.png;*.PNG;*.gif;*.GIF',
- 364. - accept: 'image/jpeg,image/png,image/gif',
- 365. - file_match: '\.(gif|jpg|jpeg|png)$',
- 366. - lang: opts.lang,
- 367. -
- 368. - onUploadStart: function(info, res) {
- 369. - var i = info.ind !== undefined ? info.ind : info, options = Upload.options[i];
- 370. - if (Upload.types[i] == 'form') {
- 371. - geByClass1('file', el).disabled = true;
- 372. - }
- 373. - if (Upload.types[i] == 'fileApi') {
- 374. - if (cur.notStarted) {
- 375. - if (params && params.hideOnStart) boxQueue.hideLast();
- 376. - delete cur.notStarted;
- 377. - }
- 378. - if (options.multi_progress) this.onUploadProgress(info, 0, 0);
- 379. - }
- 380. - curBox().changed = true;
- 381. - },
- 382. - onUploadComplete: function(info, res) {
- 383. - var params, i = info.ind !== undefined ? info.ind : info, fileName = info.fileName ? info.fileName : info;
- 384. - try {
- 385. - params = eval('(' + res + ')');
- 386. - } catch(e) {
- 387. - params = q2ajx(res);
- 388. - }
- 389. - if (!params.photos) {
- 390. - Upload.onUploadError(info);
- 391. - return;
- 392. - }
- 393. - Bugs.choosePhotoUploaded(info, params);
- 394. - },
- 395. - onUploadProgress: function(info, bytesLoaded, bytesTotal) {
- 396. - var i = info.ind !== undefined ? info.ind : info;
- 397. - if (Upload.types[i] == 'fileApi') {
- 398. - var lnkId = (cur.attachMediaIndexes || {})[i];
- 399. - if (lnkId === undefined || lnkId && cur.addMedia[lnkId].chosenMedia || cur.imMedia) {
- 400. - var data = {loaded: bytesLoaded, total: bytesTotal};
- 401. - if (info.fileName) data.fileName = info.fileName;
- 402. - cur.bugsNewMedia.showMediaProgress('photo', i, data);
- 403. - }
- 404. - } else if (Upload.types[i] == 'flash') {
- 405. - if (!ge('form'+i+'_progress')) {
- 406. - var obj = Upload.obj[i], objHeight = getSize(obj)[1], tm = objHeight / 2 + 10;
- 407. - var node = obj.firstChild;
- 408. - while (node) {
- 409. - if (node.nodeType == 1) {
- 410. - if (node.id == 'uploader'+i && browser.msie) {
- 411. - setStyle(node, {position: 'relative', left: '-5000px'});
- 412. - } else {
- 413. - setStyle(node, {visibility: 'hidden'});
- 414. - }
- 415. - }
- 416. - node = node.nextSibling;
- 417. - }
- 418. - obj.appendChild(ce('div', {innerHTML: '<div class="bugs_progress_wrap">\
- 419. - <div id="form' + i + '_progress" class="bugs_progress" style="width: 0%;"></div>\
- 420. - </div></div>'}, {height: tm + 'px', marginTop: -tm + 'px'}));
- 421. - }
- 422. - var percent = intval(bytesLoaded / bytesTotal * 100);
- 423. - setStyle(ge('form' + i + '_progress'), {width: percent + '%'});
- 424. - }
- 425. - },
- 426. - onUploadError: Bugs.chooseFail,
- 427. - onUploadCompleteAll: function (info) {
- 428. - var i = info.ind !== undefined ? info.ind : info;
- 429. - if (Upload.types[i] !== 'fileApi') {
- 430. - if (params.hideOnStart) {
- 431. - boxQueue.hideLast();
- 432. - } else {
- 433. - Upload.embed(i);
- 434. - }
- 435. - }
- 436. - },
- 437. -
- 438. - multiple: 1,
- 439. - multi_progress: 1,
- 440. - max_files: params && params.max_files || 5,
- 441. - max_files_hide_last: 1,
- 442. - clear: 1,
- 443. - type: 'photo',
- 444. - max_attempts: 3,
- 445. - file_input: curBox().inp,
- 446. - server: opts.server,
- 447. - error: opts.default_error,
- 448. - error_hash: opts.error_hash,
- 449. - dropbox: 'bas_dropbox'
- 450. - });
- 451. - },
- 452. -
- 453. - initDocUpload: function(el, params) {
- 454. - el = ge(el);
- 455. - if (!el) return;
- 456. -
- 457. - var uploadData = cur.uploadDocData, opts = uploadData.options;
- 458. - return Upload.init(el, uploadData.url, uploadData.vars, {
- 459. - file_name: 'file',
- 460. -
- 461. - file_size_limit: 1024*1024*200, // 200Mb
- 462. - file_types_description: 'Documents',
- 463. - file_types: '*.*;',
- 464. - lang: opts.lang,
- 465. -
- 466. - onUploadStart: function(info, res) {
- 467. - var i = info.ind !== undefined ? info.ind : info, options = Upload.options[i];
- 468. - if (Upload.types[i] == 'form') {
- 469. - geByClass1('file', el).disabled = true;
- 470. - }
- 471. - if (Upload.types[i] == 'fileApi') {
- 472. - if (cur.notStarted) {
- 473. - if (params && params.hideOnStart) boxQueue.hideLast();
- 474. - delete cur.notStarted;
- 475. - }
- 476. - if (options.multi_progress) this.onUploadProgress(info, 0, 0);
- 477. - }
- 478. - curBox().changed = true;
- 479. - },
- 480. - onUploadComplete: function(info, res) {
- 481. - var params, i = info.ind !== undefined ? info.ind : info, fileName = info.fileName ? info.fileName : info;
- 482. - try {
- 483. - params = eval('(' + res + ')');
- 484. - } catch(e) {
- 485. - params = q2ajx(res);
- 486. - }
- 487. - if (!params.file) {
- 488. - Upload.onUploadError(info);
- 489. - return;
- 490. - }
- 491. - Bugs.chooseDocUploaded(info, params);
- 492. - },
- 493. - onUploadProgress: function(info, bytesLoaded, bytesTotal) {
- 494. - var i = info.ind !== undefined ? info.ind : info;
- 495. - if (Upload.types[i] == 'fileApi') {
- 496. - var lnkId = (cur.attachMediaIndexes || {})[i];
- 497. - if (lnkId === undefined || lnkId && cur.addMedia[lnkId].chosenMedia || cur.imMedia) {
- 498. - var data = {loaded: bytesLoaded, total: bytesTotal};
- 499. - if (info.fileName) data.fileName = info.fileName;
- 500. - cur.bugsNewMedia.showMediaProgress('doc', i, data);
- 501. - }
- 502. - } else if (Upload.types[i] == 'flash') {
- 503. - if (!ge('form'+i+'_progress')) {
- 504. - var obj = Upload.obj[i], objHeight = getSize(obj)[1], tm = objHeight / 2 + 10;
- 505. - var node = obj.firstChild;
- 506. - while (node) {
- 507. - if (node.nodeType == 1) {
- 508. - if (node.id == 'uploader'+i && browser.msie) {
- 509. - setStyle(node, {position: 'relative', left: '-5000px'});
- 510. - } else {
- 511. - setStyle(node, {visibility: 'hidden'});
- 512. - }
- 513. - }
- 514. - node = node.nextSibling;
- 515. - }
- 516. - obj.appendChild(ce('div', {innerHTML: '<div class="bugs_progress_wrap">\
- 517. - <div id="form' + i + '_progress" class="bugs_progress" style="width: 0%;"></div>\
- 518. - </div></div>'}, {height: tm + 'px', marginTop: -tm + 'px'}));
- 519. - }
- 520. - var percent = intval(bytesLoaded / bytesTotal * 100);
- 521. - setStyle(ge('form' + i + '_progress'), {width: percent + '%'});
- 522. - }
- 523. - },
- 524. - onCheckComplete: params && params.onCheckComplete || false,
- 525. - onUploadError: Bugs.chooseFail,
- 526. - onUploadCompleteAll: function (info) {
- 527. - var i = info.ind !== undefined ? info.ind : info;
- 528. - if (Upload.types[i] !== 'fileApi') {
- 529. - if (params.hideOnStart) {
- 530. - boxQueue.hideLast();
- 531. - } else {
- 532. - Upload.embed(i);
- 533. - }
- 534. - }
- 535. - },
- 536. -
- 537. - multiple: 1,
- 538. - multi_progress: 1,
- 539. - max_files: params && params.max_files || 5,
- 540. - max_files_hide_last: 1,
- 541. - clear: 1,
- 542. - type: 'photo',
- 543. - max_attempts: 3,
- 544. - file_input: curBox().inp,
- 545. - server: opts.server,
- 546. - error: opts.default_error,
- 547. - error_hash: opts.error_hash,
- 548. - dropbox: 'bas_dropbox'
- 549. - });
- 550. - },
- 551. -
- 552. - initAddMedia: function(lnk, previewId, mediaTypes, opts) {
- 553. - var types = [], bgposes = {photo: 3, doc: -64}, addMedia;
- 554. - opts = opts || {};
- 555. - each (mediaTypes || [], function (i, v) {
- 556. - if (!v[1]) return;
- 557. - var handler = false;
- 558. - switch (v[0]) {
- 559. - case 'photo':
- 560. - handler = function() {
- 561. - if (opts.oneClick) {
- 562. - var inp = ge('bug_photo_input'), par = ge('bugs_view_comments') || curBox() && geByClass1('bugs_new_cont', curBox().bodyNode);
- 563. - if (!inp) inp = par.appendChild(ce('input', {
- 564. - type: 'file',
- 565. - multiple: 'true',
- 566. - id: 'bug_photo_input',
- 567. - onchange: function() {
- 568. - data(this, 'changed', true);
- 569. - curBox().inp = this;
- 570. - Bugs.initPhotoUpload('bas_upload');
- 571. - }
- 572. - }));
- 573. - inp.click();
- 574. - } else {
- 575. - Bugs.addScreen(Bugs.initPhotoUpload.pbind('bas_add_data', {hideOnStart: true}));
- 576. - }
- 577. - }
- 578. - break;
- 579. - case 'doc':
- 580. - handler = function() {
- 581. - if (opts.oneClick) {
- 582. - var inp = ge('bug_doc_input'), par = ge('bugs_view_comments') || curBox() && geByClass1('bugs_new_cont', curBox().bodyNode);
- 583. - if (!inp) inp = par.appendChild(ce('input', {
- 584. - type: 'file',
- 585. - multiple: 'true',
- 586. - id: 'bug_doc_input',
- 587. - onchange: function() {
- 588. - data(this, 'changed', true);
- 589. - curBox().inp = this;
- 590. - Bugs.initDocUpload('bas_upload');
- 591. - }
- 592. - }));
- 593. - inp.click();
- 594. - } else {
- 595. - Bugs.addDoc(Bugs.initDocUpload.pbind('bas_add_data', {hideOnStart: true}));
- 596. - }
- 597. - }
- 598. - break;
- 599. - }
- 600. - var icon = false, bgpos = ('3px ' + bgposes[v[0]] + 'px'), url = false, name = v[1].replace(/\s/g, ' ');
- 601. - types.push([v[0], v[1], bgpos, handler, url, icon]);
- 602. - });
- 603. -
- 604. - var limit = opts.limit || 10;
- 605. -
- 606. - var menu = initCustomMedia(lnk, types, {
- 607. - onShow: function () {
- 608. - cur.chooseMedia = addMedia.chooseMedia;
- 609. - cur.showMediaProgress = addMedia.showMediaProgress;
- 610. - cur.attachCount = addMedia.attachCount;
- 611. - },
- 612. - onItemClick: function(type) {
- 613. - if (addMedia.attachCount() >= limit) {
- 614. - showFastBox(getLang('global_error'), getLang('attachments_limit', limit));
- 615. - return false;
- 616. - }
- 617. - return true;
- 618. - }
- 619. - });
- 620. -
- 621. - if (!menu) return;
- 622. - previewId = previewId || 'media_preview';
- 623. -
- 624. - var lnkId = menu.id,
- 625. - previewEl = ge(previewId),
- 626. - progressEl, picsEl, docsEl;
- 627. -
- 628. - val(previewEl, '<div id="page_pics_preview' + lnkId + '" class="page_pics_preview media_preview clear_fix"></div><div id="page_docs_preview' + lnkId + '" class="page_docs_preview media_preview clear_fix"></div><div id="page_progress_preview' + lnkId + '" class="page_progress_preview media_preview clear_fix"></div>');
- 629. - var picsEl = previewEl.childNodes[0],
- 630. - docsEl = previewEl.childNodes[1],
- 631. - progressEl = previewEl.childNodes[2];
- 632. - removeClass(previewEl, 'media_preview');
- 633. - addClass(previewEl, 'multi_media_preview');
- 634. -
- 635. - addMedia = {
- 636. - _addMediaLink: lnk,
- 637. - lnkId: lnkId,
- 638. - menu: menu,
- 639. - handlers: {},
- 640. - chosenMedias: [],
- 641. - _showAddMedia: function() {
- 642. - menu.show();
- 643. - },
- 644. - _hideAddMedia: function(noTimeout) {
- 645. - menu.hide(noTimeout);
- 646. - },
- 647. - chooseMedia: function(type, media, data, url, noboxhide) {
- 648. - if (addMedia.onChange && addMedia.onChange(type, media, data) === false) {
- 649. - return false;
- 650. - }
- 651. - if (addMedia.attachCount() >= limit && data.upload_ind === undefined) {
- 652. - return false;
- 653. - }
- 654. - var preview = '', postview = '', toPics = false, oncl;
- 655. - switch (type) {
- 656. - case 'photo':
- 657. - if (!isObject(data)) {
- 658. - data = {
- 659. - thumb_m: data[0] || '',
- 660. - thumb_s: data[1] || '',
- 661. - list: data[2] || '',
- 662. - view_opts: data[3] || '',
- 663. - upload_ind: data.upload_ind || undefined
- 664. - };
- 665. - }
- 666. - vkImage().src = data.thumb_s;
- 667. - oncl = opts.nocl ? '' : ' onclick="return Bugs.showPhoto(\'' + media + '\', \'' + data.list + '\', ' + data.view_opts.replace(/"/g, '"') + ');"';
- 668. - preview = '<div ' + oncl + ' class="fl_l page_preview_photo"><img class="page_preview_photo" src="' + data.thumb_s + '" /></div>';
- 669. - toPics = true;
- 670. - break;
- 671. - case 'doc':
- 672. - if (!data.lang) return false;
- 673. - if (data.thumb && data.thumb_s) {
- 674. - preview = '<a target="_blank" href="' + data.href + '" class="fl_l"><div class="page_preview_doc_photo"><img src="' + data.thumb_s + '" align="center"></div><div class="page_preview_doc_photo_hint">' + data.title + '</div></a>';
- 675. - toPics = true;
- 676. - } else {
- 677. - preview = '<a target="_blank" href="' + data.href + '" class="medadd_h medadd_h_doc inl_bl">' + data.lang.profile_choose_doc + '</a>';
- 678. - postview = '<div class="medadd_c medadd_c_doc"><a target="_blank" href="' + data.href + '">' + data.title + '</a></div>';
- 679. - }
- 680. - break;
- 681. - }
- 682. - var medias = addMedia.chosenMedias,
- 683. - ind = medias.length,
- 684. - mediaEl = (type == 'photos_list') ?
- 685. - se('<div class="page_preview_' + type + '_wrap" style="position: relative">' + preview + '<div class="page_photos_count">' + media.split(',').length + '</div></div>') :
- 686. - se('<div class="page_preview_' + type + '_wrap"' + (opts.nocl ? ' style="cursor: default"' : '') + '>' + preview + '<div class="page_media_x_wrap inl_bl" '+ (browser.msie ? 'title' : 'tootltip') + '="'+getLang('bugs_dont_attach')+'" onmouseover="if (browser.msie) return; showTooltip(this, {text: this.getAttribute(\'tootltip\'), shift: [13, 3, 3], black: 1})" onclick="cur.addMedia['+addMedia.lnkId+'].unchooseMedia(' + ind + ')"><div class="page_media_x"></div></div>' + postview + '</div>');
- 687. - addClass(mediaEl, toPics ? 'fl_l' : 'clear_fix');
- 688. - if (data.upload_ind !== undefined) re('upload' + data.upload_ind + '_progress_wrap');
- 689. - (toPics ? picsEl : docsEl).appendChild(mediaEl);
- 690. - medias.push([type, media, mediaEl, url]);
- 691. -
- 692. - toggle(picsEl, picsEl.childNodes.length > 0);
- 693. - toggle(docsEl, docsEl.childNodes.length > 0);
- 694. - toggle(progressEl, progressEl.childNodes.length > 0);
- 695. -
- 696. - if (!cur.fileApiUploadStarted && noboxhide !== true) {
- 697. - boxQueue.hideLast();
- 698. - }
- 699. -
- 700. - cur.lastPostMsg = false;
- 701. - if (opts.onMediaAdd) {
- 702. - opts.onMediaAdd();
- 703. - }
- 704. -
- 705. - if (data.upload_ind !== undefined) {
- 706. - delete data.upload_ind;
- 707. - }
- 708. - return false;
- 709. - },
- 710. - unchooseMedia: function(ind) {
- 711. - if (addMedia.onChange && addMedia.onChange(false, ind) === false) {
- 712. - return false;
- 713. - }
- 714. - if (ind === undefined) {
- 715. - each (addMedia.chosenMedias, function (k, v) {
- 716. - if (v && k !== undefined) addMedia.unchooseMedia(k);
- 717. - });
- 718. - return;
- 719. - }
- 720. - var medias = addMedia.chosenMedias, x;
- 721. - if (medias[ind]) {
- 722. - if ((x = geByClass1('page_media_x_wrap', medias[ind][2], 'div')) && x.tt && x.tt.el) {
- 723. - x.tt.destroy();
- 724. - }
- 725. - re(medias[ind][2]);
- 726. - medias[ind] = false;
- 727. - }
- 728. - toggle(picsEl, picsEl.childNodes.length > 0);
- 729. - toggle(docsEl, docsEl.childNodes.length > 0);
- 730. - toggle(progressEl, progressEl.childNodes.length > 0);
- 731. -
- 732. - cur.lastPostMsg = false;
- 733. -
- 734. - if (addMedia.onChange) addMedia.onChange(false);
- 735. - },
- 736. - showMediaProgress: function(type, i, info) {
- 737. - if (addMedia.onProgress && addMedia.onProgress(type, i, info) === false) {
- 738. - return false;
- 739. - }
- 740. - var frac = info.loaded / info.total, percent = intval(frac * 100),
- 741. - fileName = info.fileName || info.name || '',
- 742. - ind = fileName ? i + '_' + fileName : i,
- 743. - label = fileName ? (fileName.length > 33 ? fileName.substr(0, 30) + '...' : fileName) : '';
- 744. -
- 745. - var prg = ge('upload' + ind + '_progress');
- 746. - if (!prg) {
- 747. - if (!cur.attachMediaIndexes) cur.attachMediaIndexes = {};
- 748. - cur.attachMediaIndexes[ind] = lnkId;
- 749. -
- 750. - var progress = '\
- 751. - <div class="fl_l"><div class="page_attach_progress_wrap" style="margin-top: 3px; margin-bottom: 4px;">\
- 752. - <div id="upload' + ind + '_progress" class="page_attach_progress"></div>\
- 753. - </div></div></div>' + (label ? '<div class="attach_label fl_l">' + label + '</div>' : '') + '<div class="progress_x fl_l" onmouseover="animate(this, {opacity: 1}, 200); showTooltip(this, {text: \'' + getLang('bugs_dont_attach') + '\', shift: [6, 3, 3]})" onmouseout="animate(this, {opacity: 0.6}, 200);" onclick="Upload.terminateUpload(' + i + ', \'' + (fileName || i) + '\');"></div>';
- 754. -
- 755. - progressEl.appendChild(ce('div', {id: 'upload' + ind + '_progress_wrap', innerHTML: progress, className: 'clear_fix upload_' + i + '_progress'}, {marginTop: '6px'}));
- 756. - show(progressEl);
- 757. - prg = ge('upload' + ind + '_progress');
- 758. - prg.full = false;
- 759. -
- 760. - if (percent) {
- 761. - setStyle(prg, {width: prg.full ? (intval(prg.full * frac) + 'px') : percent + '%'})
- 762. - } else {
- 763. - setStyle(prg, {width: '1px'});
- 764. - hide(prg);
- 765. - }
- 766. - } else {
- 767. - show(prg);
- 768. - if (prg.full) {
- 769. - var tw = data(prg, 'tween'), w = intval(prg.full * frac);
- 770. - if (tw && tw.isTweening) {
- 771. - tw.to.width = w;
- 772. - } else {
- 773. - animate(prg, {width: w + 'px'}, 500);
- 774. - }
- 775. - } else {
- 776. - setStyle(prg, {width: percent + '%'});
- 777. - }
- 778. - }
- 779. - },
- 780. -
- 781. - attachCount: function() {
- 782. - if (addMedia.attachedCount) {
- 783. - return addMedia.attachedCount();
- 784. - }
- 785. - if (!previewEl) {
- 786. - return 0;
- 787. - }
- 788. - var num = picsEl.childNodes.length + docsEl.childNodes.length + progressEl.childNodes.length;
- 789. - return num;
- 790. - },
- 791. - }
- 792. -
- 793. - if (!cur.addMedia) {
- 794. - cur.addMedia = {};
- 795. - }
- 796. -
- 797. - cur.addMedia[lnkId] = addMedia;
- 798. - return addMedia;
- 799. - },
- 800. -
- 801. - showMsg: function(text) {
- 802. - var msg = ge('bugs_msg');
- 803. - if (!msg) {
- 804. - var parent;
- 805. - switch (cur.section) {
- 806. - case 'show':
- 807. - parent = ge('bugs_content');
- 808. - break;
- 809. - case 'list':
- 810. - parent = ge('bugs_table');
- 811. - break;
- 812. - }
- 813. - msg = parent.insertBefore(ce('div', {id: 'bugs_msg', className: 'msg'}), parent.firstChild);
- 814. - }
- 815. - re('bugs_error');
- 816. - msg.innerHTML = text;
- 817. - msg.style.backgroundColor = '#F4EBBD';
- 818. - animate(msg, {backgroundColor: '#F9F6E7'}, 2000);
- 819. - return true;
- 820. - },
- 821. -
- 822. - showError: function(error) {
- 823. - var err = ge('bugs_error');
- 824. - if (!err) {
- 825. - var parent;
- 826. - switch (cur.section) {
- 827. - case 'show':
- 828. - parent = ge('bugs_content');
- 829. - break;
- 830. - case 'list':
- 831. - parent = ge('bugs_table');
- 832. - break;
- 833. - }
- 834. - err = parent.insertBefore(ce('div', {id: 'bugs_error', className: 'error'}), parent.firstChild);
- 835. - }
- 836. - re('bugs_msg');
- 837. - hide('bugs_progress');
- 838. - err.innerHTML = error;
- 839. - err.style.backgroundColor = '#FACEBB';
- 840. - animate(err, {backgroundColor: '#FFEFE8'}, 2000);
- 841. - scrollToTop(200);
- 842. - return true;
- 843. - },
- 844. -
- 845. - showDeleteBox: function() {
- 846. - box = showFastBox('', '');
- 847. - box.setOptions({
- 848. - hideButtons: true,
- 849. - title: false,
- 850. - width: 460,
- 851. - bodyStyle: 'border: 0px; padding: 0px;'
- 852. - });
- 853. - box.bodyNode.innerHTML = getLang('bugs_sure_delete_bug');
- 854. - box.setOptions({});
- 855. - },
- 856. -
- 857. - showEditBox: function() {
- 858. - return !showBox('bugs', {act: 'edit_box', id: cur.bug_id}, {
- 859. - stat: ['wide_dd.js', 'wide_dd.css', 'page.css', 'page.js', 'upload.js'],
- 860. - params: {
- 861. - width: 500,
- 862. - hideButtons: true,
- 863. - bodyStyle: 'border: 0px; padding: 0px'
- 864. - }
- 865. - });
- 866. - },
- 867. -
- 868. - showStatusBox: function() {
- 869. - return !showBox('bugs', {act: 'status_box', id: cur.bug_id}, {
- 870. - stat: ['ui_controls.js', 'ui_controls.css'],
- 871. - params: {
- 872. - width: 500,
- 873. - hideButtons: true,
- 874. - bodyStyle: 'border: 0px; padding: 0px'
- 875. - }
- 876. - });
- 877. - },
- 878. -
- 879. - saveStatus: function() {
- 880. - var query = {act: 'status', hash: cur.hashes.save_hash, status: cur.statusSelect.val(), id: cur.bug_id, text: val('bugs_new_text')};
- 881. - ajax.post('bugs', query, {
- 882. - showProgress: lockButton.pbind('bugs_submit_button'),
- 883. - hideProgress: function() {
- 884. - if (curBox()) curBox().hide();
- 885. - },
- 886. - onDone: function(description, data, msg) {
- 887. - if (description) ge('bugs_view_description').innerHTML = description;
- 888. - if (data) ge('bugs_view_data').innerHTML = data;
- 889. - if (msg) Bugs.showMsg(msg);
- 890. - },
- 891. - onFail: function(msg) {
- 892. - return Bugs.showError(msg);
- 893. - }
- 894. - });
- 895. - return false;
- 896. - },
- 897. -
- 898. - declineToSupport: function(hash, msg) {
- 899. - if (cur.declineStarted || !hash || !msg) return false;
- 900. - cur.declineStarted = true;
- 901. - var query = {act: 'status', hash: hash, status: 4, id: cur.bug_id, text: msg};
- 902. - ajax.post('bugs', query, {
- 903. - hideProgress: function() {
- 904. - cur.declineStarted = false;
- 905. - },
- 906. - onDone: function(description, data, msg) {
- 907. - if (description) ge('bugs_view_description').innerHTML = description;
- 908. - if (data) ge('bugs_view_data').innerHTML = data;
- 909. - if (msg) Bugs.showMsg(msg);
- 910. - },
- 911. - onFail: function(msg) {
- 912. - return Bugs.showError(msg);
- 913. - }
- 914. - });
- 915. - return false;
- 916. - },
- 917. -
- 918. - deleteBug: function(btn) {
- 919. - ajax.post('bugs', {act: 'delete', id: cur.bug_id, hash: cur.hashes.delete_hash}, {
- 920. - showProgress: lockButton.pbind(btn),
- 921. - hideProgress: function() {
- 922. - if (curBox()) curBox().hide();
- 923. - }
- 924. - });
- 925. - },
- 926. -
- 927. - deleteReply: function(replyId, hash) {
- 928. - var el = ge('bug_update'+replyId);
- 929. - if (!el) return;
- 930. - ajax.post('bugs', {act: 'delete_reply', id: replyId, hash: hash}, {
- 931. - onDone: function(msg) {
- 932. - cur.deletedReplies = cur.deletedReplies || {};
- 933. - cur.deletedReplies[replyId] = el.innerHTML;
- 934. - el.innerHTML = msg;
- 935. - },
- 936. - onFail: function(msg) {
- 937. - return Bugs.showError(msg);
- 938. - }
- 939. - });
- 940. - return false;
- 941. - },
- 942. -
- 943. - restoreReply: function(replyId, hash) {
- 944. - var el = ge('bug_update'+replyId);
- 945. - if (!el) return;
- 946. - ajax.post('bugs', {act: 'restore_reply', id: replyId, hash: hash}, {
- 947. - onDone: function() {
- 948. - el.innerHTML = (cur.deletedReplies || {})[replyId];
- 949. - },
- 950. - onFail: function(msg) {
- 951. - return Bugs.showError(msg);
- 952. - }
- 953. - });
- 954. - return false;
- 955. - },
- 956. -
- 957. - editReply: function(replyId, hash) {
- 958. - if (cur.editStarted) return false;
- 959. - if (cur.editing) {
- 960. - this.cancelEditReply(cur.editing);
- 961. - }
- 962. - var cont = geByClass1('bugs_update_text', ge('bug_update'+replyId));
- 963. - var mrg = '1px 0 0 -3px', wdt = '385px', btn_mrg = '8px';
- 964. - if (browser.mozilla) {
- 965. - mrg = '1px 0 0 -4px';
- 966. - } else if (browser.opera) {
- 967. - mrg = '2px 0 0 -3px';
- 968. - } else if (browser.msie) {
- 969. - btn_mrg = '10px';
- 970. - }
- 971. -
- 972. - cur.editStarted = true;
- 973. - ajax.post('bugs', {act: 'get_reply', id: replyId, hash: hash}, {
- 974. - onDone: function(t) {
- 975. - delete cur.editStarted;
- 976. - cont.parentNode.insertBefore(ce('div', {id: 'bug_update_edit'+replyId, innerHTML: '\
- 977. - <textarea class="bug_edit_update" id="bug_update'+replyId+'edit" onkeydown="Bugs.saveReply(event, \''+replyId+'\', \''+hash+'\')" style="width: '+wdt+'; margin: '+mrg+';">' + t + '</textarea>\
- 978. - <div style="margin: '+btn_mrg+' 0 8px -3px; height: 23px">\
- 979. - <div class="fl_l button_blue">\
- 980. - <button id="save_butn'+replyId+'" onclick="Bugs.doSaveReply(\''+replyId+'\', \''+hash+'\')">'+getLang('global_save')+'</button>\
- 981. - </div>\
- 982. - <div class="fl_l button_gray" style="margin-left: 10px;">\
- 983. - <button id="cancel_butn'+replyId+'" onclick="Bugs.cancelEditReply(\''+replyId+'\')">'+getLang('global_cancel')+'</button>\
- 984. - </div>\
- 985. - <div id="edit_progress'+replyId+'" style="margin: 5px 0px 0px 10px; vertical-align: 0px; float: left; display: none"><img src="/images/upload.gif"/></div>\
- 986. - </div>'}, {display: 'none'}), cont);
- 987. - autosizeSetup(ge('bug_update'+replyId+'edit'), {minHeight: 17});
- 988. -
- 989. - setTimeout(function() {
- 990. - show(cont.previousSibling);
- 991. - hide(geByClass1('bugs_update_text', ge('bug_update'+replyId)));
- 992. - hide(geByClass1('bugs_update_info', ge('bug_update'+replyId)));
- 993. - elfocus('bug_update'+replyId+'edit');
- 994. - cur.editing = replyId;
- 995. - }, 0);
- 996. - },
- 997. - onFail: function(error) {
- 998. - delete cur.editStarted;
- 999. - return Bugs.showError(error);
- 1000. - }
- 1001. - });
- 1002. - return false;
- 1003. - },
- 1004. -
- 1005. - saveReply: function(event, replyId, hash) {
- 1006. - if (event && event.keyCode == 27) {
- 1007. - this.cancelEditReply(cur.editing);
- 1008. - return;
- 1009. - }
- 1010. - if (event && event.ctrlKey && (event.keyCode == 10 || event.keyCode == 13)) {
- 1011. - this.doSaveReply(replyId, hash);
- 1012. - }
- 1013. - },
- 1014. -
- 1015. - cancelEditReply: function(replyId) {
- 1016. - show(geByClass1('bugs_update_text', ge('bug_update'+replyId)));
- 1017. - show(geByClass1('bugs_update_info', ge('bug_update'+replyId)));
- 1018. - re('bug_update_edit'+replyId);
- 1019. - delete cur.editing;
- 1020. - },
- 1021. -
- 1022. - doSaveReply: function(replyId, hash) {
- 1023. - var v = trim(val('bug_update'+replyId+'edit'));
- 1024. - ajax.post('bugs', {act: 'edit_reply', id: replyId, text: v, hash: hash}, {
- 1025. - onDone: function(text) {
- 1026. - var cont = geByClass1('bugs_update_text', ge('bug_update'+replyId)), acts = geByClass1('bugs_update_info', ge('bug_update'+replyId));
- 1027. - cont.innerHTML = text;
- 1028. - show(cont, acts);
- 1029. - re('bug_update_edit'+replyId);
- 1030. - delete cur.editing;
- 1031. - },
- 1032. - onFail: function(error) {
- 1033. - return Bugs.showError(error);
- 1034. - },
- 1035. - showProgress: lockButton.pbind(ge('save_butn'+replyId)),
- 1036. - hideProgress: unlockButton.pbind(ge('save_butn'+replyId))
- 1037. - });
- 1038. - },
- 1039. -
- 1040. - showPhoto: function(photoRaw, listId, opts) {
- 1041. - var cbox = curBox();
- 1042. - cur.boxBackup = document.createDocumentFragment();
- 1043. - var boxBody = cbox.bodyNode;
- 1044. - cur.scrollTopBack = boxLayerWrap.scrollTop;
- 1045. - opts.onShow = function() {
- 1046. - while(boxBody.firstChild) {
- 1047. - cur.boxBackup.appendChild(boxBody.firstChild);
- 1048. - }
- 1049. - }
- 1050. - opts.onHide = function() {
- 1051. - box = showFastBox('', '');
- 1052. - box.setOptions({
- 1053. - hideButtons: true,
- 1054. - title: false,
- 1055. - width: 500,
- 1056. - bodyStyle: 'border: 0px; padding: 0px;'
- 1057. - });
- 1058. - box.bodyNode.appendChild(cur.boxBackup);
- 1059. - box.setOptions({}); // clear box coords
- 1060. - boxLayerWrap.scrollTop = cur.scrollTopBack;
- 1061. - }
- 1062. - return showPhoto(photoRaw, listId, opts);
- 1063. - },
- 1064. -
- 1065. - selectTag: function(tag, e) {
- 1066. - if (checkEvent(e) || cur.type == 'subscriptions') return false;
- 1067. - cur.tags = cur.tags || {};
- 1068. - cur.tags[tag] = 1;
- 1069. - addClass(ge('filter_tag'+tag), 'summary_tab_sel');
- 1070. - removeClass(ge('filter_tag'+tag), 'summary_tab');
- 1071. - ge('bugs_selected_tags').appendChild(ge('filter_tag'+tag));
- 1072. - toggle('selected_tags_wrap', geByClass('bugs_filter_tag', ge('bugs_selected_tags')).length);
- 1073. - toggle('tags_wrap', geByClass('bugs_filter_tag', ge('bugs_tags')).length);
- 1074. - Bugs.updateAllSearch(ge('bugs_search_input'));
- 1075. - },
- 1076. - deselectTag: function(tag, e) {
- 1077. - if (checkEvent(e) || cur.type == 'subscriptions') return false;
- 1078. - delete cur.tags[tag];
- 1079. - removeClass(ge('filter_tag'+tag), 'summary_tab_sel');
- 1080. - addClass(ge('filter_tag'+tag), 'summary_tab');
- 1081. - ge('bugs_tags').appendChild(ge('filter_tag'+tag));
- 1082. - toggle('selected_tags_wrap', geByClass('bugs_filter_tag', ge('bugs_selected_tags')).length);
- 1083. - toggle('tags_wrap', geByClass('bugs_filter_tag', ge('bugs_tags')).length);
- 1084. - Bugs.updateAllSearch(ge('bugs_search_input'));
- 1085. - },
- 1086. -
- 1087. - showSubscribed: function(bug_id) {
- 1088. - return !showBox('bugs', {act: 'subscribers_box', id: bug_id || cur.bug_id}, {
- 1089. - params: {
- 1090. - width: 500,
- 1091. - bodyStyle: 'padding: 0px'
- 1092. - }
- 1093. - });
- 1094. - },
- 1095. -
- 1096. - registerDragZone: function(opts) {
- 1097. - addEvent(document, "dragenter dragover", function(ev) {
- 1098. - if (Bugs.checkHtml5Uploader()) {
- 1099. - setTimeout(function() {
- 1100. - clearTimeout(cur.dragTimer);
- 1101. - delete cur.dragTimer;
- 1102. - }, 0);
- 1103. - opts.on(ev);
- 1104. - return cancelEvent(ev);
- 1105. - }
- 1106. - });
- 1107. - addEvent(document, "dragleave", function(ev) {
- 1108. - if (cur.dragTimer) {
- 1109. - clearTimeout(cur.dragTimer);
- 1110. - delete cur.dragTimer;
- 1111. - }
- 1112. - cur.dragTimer = setTimeout(function() {
- 1113. - opts.un(ev);
- 1114. - }, 100);
- 1115. - cancelEvent(ev);
- 1116. - });
- 1117. - addEvent(document, "drop", function(ev) {
- 1118. - opts.un(ev, true);
- 1119. - opts.drop(ev.dataTransfer.files, ev);
- 1120. - return cancelEvent(ev);
- 1121. - });
- 1122. - cur.destroy.push(function() {
- 1123. - removeEvent(document, "dragenter dragover");
- 1124. - removeEvent(document, "dragleave");
- 1125. - removeEvent(document, "drop");
- 1126. - });
- 1127. - },
- 1128. -
- 1129. - checkHtml5Uploader: function() {
- 1130. - return (window.XMLHttpRequest || window.XDomainRequest) && (window.FormData || window.FileReader && (window.XMLHttpRequest && XMLHttpRequest.sendAsBinary || window.ArrayBuffer && window.Uint8Array && (window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder)));
- 1131. - },
- 1132. -
- 1133. - _eof: 1};try{stManager.done('bugs.js');}catch(e){}
- ------
- Файл - dev.js (Старый размер - 23687 | Новый - 3160):
- 3. - cur.searchEl = ge('dev_search');
- 4. - placeholderSetup(cur.searchEl, {back: true});
- 5. -
- 6. - cur.nav.push(function(changed, old, n) {
- 7. - if ((old[0] == 'dev' || old[0] == 'dev/') && !old.act) {
- 8. - return true;
- 9. - }
- 10. - if (n[0].substr(0, 4) == 'dev/' || (n[0] == 'dev' && n.act) && cur.page) {
- 11. - var page = n[0].substr(4);
- 12. - if (page) {
- 13. - Dev.switchPage(page, n.edit, n);
- 14. - return false;
- 15. - }
- 16. - }
- 17. - });
- 18. -
- 19. - var onKey = function(e) {
- 20. - if (cur.edit && e.keyCode == 83 && (e.ctrlKey || e.metaKey)) {
- 21. - var btn = ge('dev_save_button');
- 22. - btn.click();
- 23. - return cancelEvent(e);
- 24. - }
- 25. - if (e.keyCode == KEY.RETURN && hasClass(e.target, 'dev_param_field')) {
- 26. - ge('dev_req_run_btn').click();
- 27. - }
- 28. - }
- 29. - addEvent(document, 'keydown', onKey);
- 30. - cur.destroy.push(function() {
- 31. - removeEvent(document, 'keydown', onKey);
- 32. - });
- 33. -
- 34. - Dev.initPage(opts);
- 35. - if (cur.page) {
- 36. - Dev.initSuggestions();
- 37. - }
- 38. - },
- 39. -
- 40. - initPage: function(opts) {
- 44. - var simular = ge('dev_edit_simular');
- 45. - placeholderSetup(simular, {back: true});
- 48. + debugLog(textareas[i]);
- 51. - elfocus(desc);
- 52. - }
- 53. - if (opts.res) {
- 54. - Dev.requestResult(parseJSON(opts.res));
- 55. + elfocus(desc)
- 58. - elfocus(cur.searchEl);
- 59. - cur.editors = [];
- 60. - if (opts.editors) {
- 61. - for(var i in opts.editors) {
- 62. - var ed = opts.editors[i];
- 63. - cur.initEdit.apply(cur.initEdit, ed);
- 64. - }
- 65. - }
- 66. -
- 67. - },
- 68. -
- 69. - switchPage: function(page, edit, opts) {
- 70. - cur.page = page;
- 71. - var pageRaw = page.split('.');
- 72. - Dev.switchSection(pageRaw[0], false, true)
- 73. -
- 74. - var curSel = geByClass1('dev_mlist_sel', ge('dev_mlist_cont'));
- 75. - removeClass(curSel, 'dev_mlist_sel');
- 76. - var newSel = ge('dev_mlist_'+page.replace('.', '_'));
- 77. - if (newSel) {
- 78. - addClass(newSel, 'dev_mlist_sel');
- 79. - }
- 80. -
- 81. - var actsCont = ge('dev_page_acts');
- 82. - var pageOpts = {preload: 1};
- 83. - if (opts && opts.translate) {
- 84. - pageOpts.translate = opts.translate;
- 85. - }
- 86. - if (opts && opts.ver) {
- 87. - pageOpts.ver = opts.ver;
- 88. - }
- 89. - if (edit) {
- 90. - pageOpts.edit = 1;
- 91. - }
- 92. - ajax.post('/dev/'+page, pageOpts, {
- 93. - onDone: function(title, text, acts, edit_sections, isPage, opts, js) {
- 94. - ge('dev_header_name').innerHTML = title;
- 95. - ge('dev_page_cont').innerHTML = text;
- 96. - ge('dev_page_acts').innerHTML = acts;
- 97. - ge('dev_page_sections').innerHTML = edit_sections;
- 98. - delete pageOpts.preload;
- 99. - delete cur.verDD;
- 100. - nav.setLoc('dev/'+page+nav.toStr(pageOpts));
- 101. - if (isPage) {
- 102. - hide('dev_method_narrow');
- 103. - show('dev_page_narrow');
- 104. - } else {
- 105. - show('dev_method_narrow');
- 106. - hide('dev_page_narrow');
- 107. - }
- 108. - Dev.initPage(opts);
- 109. - if (js) {
- 110. - eval('(function(){' + js + ';})()');
- 111. - }
- 112. - scrollToTop(0);
- 113. - },
- 114. - showProgress: function() {
- 115. - if (newSel && !cur.devSectLoader) {
- 116. - cur.devSectLoader = actsCont.innerHTML;
- 117. - actsCont.innerHTML = '<div class="progress_inline dev_sect_load fl_r"></div>';
- 118. - }
- 119. - },
- 120. - hideProgress: function() {
- 121. - if (cur.devSectLoader) {
- 122. - actsCont.innerHTML = cur.devSectLoader;
- 123. - cur.devSectLoader = false;
- 124. - }
- 125. - }
- 126. - });
- 127. - },
- 128. -
- 129. - switchSection: function(sect, openSect, onlyIfSect) {
- 130. - if (cur.sect == sect) {
- 131. - return;
- 132. - }
- 133. - if (!cur.sections || !cur.sections[sect]) {
- 134. - if (onlyIfSect) {
- 135. - return;
- 136. - }
- 137. - sect = 'users';
- 138. - }
- 139. - var rows = cur.sections[sect]['list'];
- 140. - var name = cur.sections[sect]['name'];
- 141. - ge('dev_section_menu').innerHTML = name;
- 142. - if (cur.methodsDD && cur.methodsDD.header && cur.methodsDD.header.firstChild) {
- 143. - cur.methodsDD.header.firstChild.innerHTML = name;
- 144. - }
- 145. - var html = '';
- 146. - var firstMethod = false;
- 147. - for (var i in rows) {
- 148. - var name = rows[i];
- 149. - if (!firstMethod) {
- 150. - firstMethod = name;
- 151. - }
- 152. - html += '<a id="dev_mlist_'+(name.replace(/\./g, '_'))+'" class="dev_mlist_item'+(cur.page == name ? ' dev_mlist_sel' : '')+'" href="/dev/'+name+'">'+name+'</a>';
- 153. - }
- 154. - var mlist = ge('dev_mlist_list');
- 155. - mlist.innerHTML = html;
- 156. - cur.sect = sect;
- 157. - if (openSect) {
- 158. - nav.go('/dev/'+sect);
- 159. - }
- 169. - if (nav.objLoc.translate) {
- 170. - params.translate = parseInt(nav.objLoc.translate);
- 171. - }
- 175. - }
- 176. - if (cur.editors) {
- 177. - for (var i in cur.editors) {
- 178. - var ed = cur.editors[i];
- 179. - if (ed) {
- 180. - params[Dev.getParamName(ed.cont)] = ed.val();
- 181. -
- 182. - }
- 183. - debugLog('ed', ed);
- 184. - }
- 199. - parents.push(kItem[2]);
- 200. + parents.push(kItem[1]);
- 220. -
- 221. - var el = cont;
- 222. - var nextEl = el.nextSibling;
- 223. - while (nextEl) {
- 224. - if (hasClass(nextEl, 'dev_sel_section')) {
- 225. - for (var i in cur.dropDowns) {
- 226. - if (cur.dropDowns[i].container.parentNode == nextEl) {
- 227. - cur.dropDowns.splice(i ,1);
- 228. - }
- 229. - }
- 230. - re(nextEl);
- 231. - } else {
- 232. - el = nextEl;
- 233. + var el = cont.nextSibling;
- 234. + while(el) {
- 235. + if (hasClass(el, 'dev_sel_section')) {
- 236. + re(el);
- 238. - nextEl = el.nextSibling;
- 239. + el = el.nextSibling;
- 241. - if (parseInt(v) == -1) {
- 242. - var name = '';
- 243. - } else {
- 244. + if (parseInt(v) != -1) {
- 248. - name = dd.defaultItems[i][2];
- 249. + name = dd.defaultItems[i][1];
- 252. - }
- 253. - var prg = ge('dev_sections_progress');
- 254. - var parents = [];
- 255. - if (cur.dropDowns) {
- 256. - for (var i in cur.dropDowns) {
- 257. - var iItem = cur.dropDowns[i];
- 258. - var value = iItem.val();
- 259. - if (parseInt(value) == -1) {
- 260. - break;
- 261. - } else {
- 262. - for(var k in iItem.options.defaultItems) {
- 263. - var kItem = iItem.options.defaultItems[k];
- 264. - debugLog(kItem);
- 265. - if (kItem[0] == value) {
- 266. - parents.push(kItem[2]);
- 267. - break;
- 268. - }
- 269. - }
- 270. - }
- 271. + if (!name) {
- 272. + return;
- 274. + var prg = ge('dev_sections_progress');
- 275. + ajax.post('dev', {act: 'a_get_sections', name: name}, {
- 276. + onDone: function(rows, js) {
- 277. + debugLog(rows, js);
- 278. + cont.parentNode.insertBefore(cf(rows), prg);
- 279. + eval('(function(){' + js + ';})()');
- 280. + },
- 281. + showProgress: show.pbind(prg),
- 282. + hideProgress: hide.pbind(prg)
- 283. + })
- 285. - ajax.post('dev', {act: 'a_get_sections', name: name, page: cur.page, parents: parents.join(','), hash: cur.editHash}, {
- 286. - onDone: function(rows, js) {
- 287. - cont.parentNode.insertBefore(cf(rows), prg);
- 288. - eval('(function(){' + js + ';})()');
- 289. - },
- 290. - showProgress: show.pbind(prg),
- 291. - hideProgress: hide.pbind(prg)
- 292. - });
- 294. -
- 295. - methodRun: function(hash, btn) {
- 296. - var params = {hash: hash};
- 297. - var paramsFields = geByClass('dev_param_field', ge('dev_params_wrap'));
- 299. - var params = {act: 'a_run_method', method: cur.page, hash: hash};
- 300. - for (var i in paramsFields) {
- 301. - var el = paramsFields[i];
- 302. - var v = val(el);
- 303. - if (v !== '') {
- 304. - params['param_'+el.id.substr(10)] = v;
- 305. - }
- 306. - }
- 307. - if (cur.edit) {
- 308. - params['_edit'] = '1';
- 309. - }
- 310. - if (cur.verDD) {
- 311. - params['param_v'] = cur.verDD.val();
- 312. - }
- 313. - ajax.post('dev', params, {
- 314. - onDone: function(code) {
- 315. - var res = parseJSON(code);
- 316. - Dev.requestResult(res);
- 317. - },
- 318. - onFail: function(msg) {
- 319. - setTimeout(showFastBox({title: getLang('global_error'), width: 500}, '<div style="word-wrap: break-word;">'+msg+'</div>').hide, 2000);
- 320. - return true;
- 321. - },
- 322. - showProgress: lockButton.pbind(btn),
- 323. - hideProgress: unlockButton.pbind(btn)
- 324. - });
- 325. + methodRun: function(hash) {
- 326. + headNode.appendChild(ce('script', {
- 327. + type: 'text/javascript',
- 328. + src: '/dev?act=a_run_method&method='+cur.page+'&hash='+hash
- 329. + }));
- 332. - wrapObject: function(obj, rootNode) {
- 333. - var html = '';
- 334. - if (!cur.wrapNum) {
- 335. - cur.wrapNum = 0;
- 336. - }
- 337. - switch (typeof obj) {
- 338. - case 'object':
- 339. - var items = [];
- 340. - if (Object.prototype.toString.call( obj ) == '[object Array]') {
- 341. - for (var i in obj) {
- 342. - items.push(Dev.wrapObject(obj[i]));
- 343. - }
- 344. - html += '<span class="dev_result_block"><span class="dev_result_lbracket">[</span>'+items.join(', ')+'<span class="dev_result_lbracket">]</span></span>';
- 345. - } else {
- 346. - for (var i in obj) {
- 347. - items.push('<span class="dev_result_key">'+i+':</span> '+Dev.wrapObject(obj[i]));
- 348. - }
- 349. - var res = '<div class="dev_result_obj">'+items.join(',<br/>')+'</div>';
- 350. - if (rootNode) {
- 351. - html += res;
- 352. - } else {
- 353. - html += '<span class="dev_result_block"><span id="dev_wrap_open_'+cur.wrapNum+'" class="dev_result_bracket">{</span><br/>'+res+'<span id="dev_wrap_close_'+cur.wrapNum+'" class="dev_result_bracket">}</span></span>';
- 354. - cur.wrapNum += 1;
- 355. - }
- 356. - }
- 357. - break;
- 358. - case 'string':
- 359. - var str = clean(obj);
- 360. - if (obj.match(/^https?:\/\/.*/)) {
- 361. - str = '<a href="'+str+'" target="_blank">'+str+'</a>';
- 362. - }
- 363. - str = str.replace(/\n/g, '<br />');
- 364. - html += '<span class="dev_result_str">\''+str+'\'</span>';
- 365. - break;
- 366. - case 'number':
- 367. - html += '<span class="dev_result_num">'+obj+'</span>';
- 368. - break;
- 369. - case 'boolean':
- 370. - html += '<span class="dev_result_bool">'+obj+'</span>';
- 371. - default:
- 372. - debugLog('unknown type', typeof obj);
- 373. - break;
- 374. - }
- 375. - if (rootNode && obj.response && obj.response['upload_url']) {
- 376. - html += '<div class="dev_upload_form"><form action="'+obj.response['upload_url']+'" target="dev_upload_iframe" enctype="multipart/form-data" method="post"><input type="file" name="file" onchange="this.parentNode.submit(); show(\'dev_upload_iframe_wrap\')" class="dev_upload_input" /></form></div><div id="dev_upload_iframe_wrap"><iframe id="dev_upload_iframe" name="dev_upload_iframe"></iframe></div>';
- 377. - }
- 378. - return html;
- 379. + renderJson: function() {
- 383. - var html = Dev.wrapObject(res, true);
- 384. - ge('dev_result').innerHTML = html;
- 385. - },
- 386. -
- 387. - resultMove: function(el) {
- 388. - var res = ge('dev_result');
- 389. - while(el) {
- 390. - if (hasClass(el, 'dev_result_block')) {
- 391. - addClass(el, 'dev_result_highlight')
- 392. - break;
- 393. - }
- 394. - el = el.parentNode;
- 395. - if (el == res) {
- 396. - break;
- 397. - }
- 398. - }
- 399. - if (cur.highLighted != el) {
- 400. - removeClass(cur.highLighted, 'dev_result_highlight')
- 401. - cur.highLighted = el;
- 402. - }
- 403. - },
- 404. -
- 405. - onSearchChange: function(el, ev) {
- 406. - if (ev) {
- 407. - switch(ev.keyCode) {
- 408. - case KEY.DOWN:
- 409. - return Dev.selSuggRow(false, 1, ev);
- 410. - break;
- 411. - case KEY.UP:
- 412. - return Dev.selSuggRow(false, -1, ev);
- 413. - break;
- 414. - case KEY.RETURN:
- 415. - return Dev.onSearchSelect();
- 416. - break;
- 417. - case KEY.ESC:
- 418. - val(el, '');
- 419. - break;
- 420. - }
- 421. - }
- 422. - setTimeout(function() {
- 423. - var v = val(el).toLowerCase().replace(/[^a-zа-я]+/g, '');
- 424. - if (v) {
- 425. - if (v == cur.prevSearch) {
- 426. - return show('dev_search_suggest');;
- 427. - }
- 428. - var reStr = '';
- 429. - for (var i = 0; i < v.length; i++) {
- 430. - reStr += v.substr(i, 1)+'.*?';
- 431. - }
- 432. - var regEx = new RegExp('.*?('+reStr+')', 'i');
- 433. - var regExPrior = new RegExp('^('+reStr+')', 'i');
- 434. - var found = [];
- 435. - for(var i in cur.sections) {
- 436. - var list = cur.sections[i].list;
- 437. - for (var k in list) {
- 438. - var method = list[k];
- 439. - var m = method.match(regExPrior);
- 440. - if (m) {
- 441. - found.push([method, method.length]);
- 442. - } else {
- 443. - var m = method.match(regEx);
- 444. - if (m) {
- 445. - found.push([method, method.length+2]);
- 446. - }
- 447. - }
- 448. - }
- 449. - }
- 450. - found = found.sort(function(a, b) {
- 451. - if (a[1] < b[1]) {
- 452. - return -1;
- 453. - } else if (a[1] > b[1]) {
- 454. - return 1
- 455. - } else {
- 456. - return 0;
- 457. - }
- 458. - });
- 459. - var foundList = [];
- 460. - for (var i in found) {
- 461. - foundList.push(found[i][0])
- 462. - }
- 463. - Dev.showSuggestions(foundList, v);
- 464. - } else {
- 465. - Dev.showSuggestions();
- 466. - }
- 467. - cur.prevSearch = v;
- 468. - }, 0);
- 469. - },
- 470. -
- 471. - initSuggestions: function() {
- 472. - var cont = ge('dev_search_suggest_list');
- 473. - debugLog('init sugg');
- 474. - stManager.add(['notifier.css', 'notifier.js'], function() {
- 475. - debugLog('go next');
- 476. - cur.scroll = new Scrollbar(cont, {
- 477. - prefix: 'fc_',
- 478. - nomargin: true,
- 479. - global: true,
- 480. - nokeys: true,
- 481. - right: vk.rtl ? 'auto' : 0,
- 482. - left: !vk.rtl ? 'auto' : 0
- 483. - });
- 484. - });
- 485. - },
- 486. -
- 487. - showSuggestions: function(list, v) {
- 488. - if (list && list.length) {
- 489. - var cont = ge('dev_search_suggest_list');
- 490. - var html = '';
- 491. - var reStr = [];
- 492. - for (var i = 0; i < v.length; i++) {
- 493. - reStr.push(v.substr(i, 1));
- 494. - }
- 495. - var reg = new RegExp(reStr.join('.*?'), 'i');
- 496. - for(var i in list) {
- 497. - var name = list[i];
- 498. - name = name.replace(reg, function(found) {
- 499. - return '<em>'+found+'</em>';
- 500. - })
- 501. - html += '<a class="dev_search_row" onmousedown="return Dev.onSearchSelect(event);" onmouseover="Dev.selSuggRow(this);">'+name+'</a>';
- 502. - }
- 503. - cont.innerHTML = html;
- 504. - show('dev_search_suggest');
- 505. - if (cur.scroll) {
- 506. - cur.scroll.scrollTop(0);
- 507. - cur.scroll.update(false, true);
- 508. - }
- 509. - } else {
- 510. - hide('dev_search_suggest');
- 511. - debugLog('hiden');
- 512. - }
- 513. -
- 514. - },
- 515. -
- 516. - onSearchSelect: function(ev) {
- 517. - var cont = ge('dev_search_suggest_list');
- 518. - var el = ge('dev_search');
- 519. - var curSel = geByClass1('dev_sugg_sel', cont);
- 520. - var method = false;
- 521. - var q = val(el);
- 522. - if (curSel) {
- 523. - method = val(curSel).replace(/<[^>]*>/g, '');
- 524. - } else {
- 525. - firstSel = geByClass1('dev_search_row', cont);
- 526. - var methodStr = (val(firstSel) || '').replace(/<[^>]*>/g, '');
- 527. - if (methodStr && methodStr.replace(/[\. ]/g, '').toLowerCase().indexOf(q.replace(/[\. ]/g, '').toLowerCase()) === 0) {
- 528. - if (methodStr.split('.')[0].toLowerCase().indexOf(q.toLowerCase()) === 0) {
- 529. - method = methodStr.split('.')[0];
- 530. - } else {
- 531. - method = methodStr;
- 532. - }
- 533. - }
- 534. - }
- 535. -
- 536. - if (method) {
- 537. - nav.go('dev/'+method);
- 538. - val(el, '');
- 539. - } else {
- 540. - nav.go('dev?act=search&q='+q);
- 541. - }
- 542. - Dev.onSearchChange(el, ev);
- 543. - return cancelEvent(ev);
- 544. - },
- 545. -
- 546. - selSuggRow: function(obj, move, ev) {
- 547. - if (!isVisible(ge('dev_search_suggest'))) {
- 548. - return false;
- 549. - }
- 550. - var cont = ge('dev_search_suggest_list');
- 551. - var curSel = geByClass1('dev_sugg_sel', cont);
- 552. - if (!obj) {
- 553. - if (move == 1 && curSel) {
- 554. - obj = curSel.nextSibling;
- 555. - } else if (move == -1 && curSel) {
- 556. - obj = curSel.previousSibling;
- 557. - if (!obj) {
- 558. - var listRows = geByClass('dev_search_row', cont);
- 559. - obj = listRows[listRows.length - 1];
- 560. - }
- 561. - }
- 562. - if (!obj) {
- 563. - obj = geByClass1('dev_search_row', cont);
- 564. - }
- 565. - }
- 566. - if (curSel != obj) {
- 567. - if (curSel) {
- 568. - removeClass(curSel, 'dev_sugg_sel');
- 569. - }
- 570. - addClass(obj, 'dev_sugg_sel');
- 571. - if (move) {
- 572. - var y = getXY(obj)[1];
- 573. - var stY = getXY(cont)[1];
- 574. - var pos = y - stY - cont.scrollTop;
- 575. - var minHeight = getSize(obj)[1];
- 576. - var maxHeight = 250 - getSize(obj)[1];
- 577. - if (pos > maxHeight) {
- 578. - cur.scroll.scrollTop(cont.scrollTop + pos - maxHeight);
- 579. - } else if (pos < 0) {
- 580. - cur.scroll.scrollTop(Math.max(0, cont.scrollTop + pos));
- 581. - }
- 582. - }
- 583. -
- 584. - }
- 585. - return cancelEvent(ev);
- 586. -
- 587. - },
- 588. -
- 589. - onSearchBlur: function() {
- 590. - hide('dev_search_suggest');
- 591. - },
- 592. -
- 593. - checkParamVal: function(obj, ev, type, checks) {
- 594. - switch(ev.keyCode) {
- 595. - case KEY.UP:
- 596. - if (type == 'int' || type == 'positive') {
- 597. - val(obj, intval(val(obj)) + 1);
- 598. - }
- 599. - break;
- 600. - case KEY.DOWN:
- 601. - if (type == 'int' || type == 'positive') {
- 602. - val(obj, intval(val(obj)) - 1);
- 603. - }
- 604. - break;
- 605. - }
- 606. - setTimeout(function() {
- 607. - var v = val(obj);
- 608. - var startVal = v;
- 609. - switch(type) {
- 610. - case 'int':
- 611. - v = (v == '-') ? '-' : intval(v);
- 612. - break;
- 613. - case 'positive':
- 614. - v = positive(v);
- 615. - break;
- 616. - }
- 617. - if (v != startVal) {
- 618. - val(obj, v);
- 619. - }
- 620. -
- 621. - }, 0)
- 622. -
- 623. - },
- 624. -
- 625. - toggleMethodListHeader: function(obj) {
- 626. - var v = val(obj);
- 627. - if (hasClass(obj, 'dev_methods_list_min')) {
- 628. - removeClass(obj, 'dev_methods_list_min');
- 629. - addClass(obj, 'dev_methods_list_max');
- 630. - } else {
- 631. - if (!v) {
- 632. - addClass(obj, 'dev_methods_list_min');
- 633. - removeClass(obj, 'dev_methods_list_max');
- 634. - }
- 635. - }
- 636. - },
- 637. -
- 638. - showPageSettings: function() {
- 639. -
- 640. - },
- 641. -
- 642. - reportError: function(address, title) {
- 643. - return !showBox('/bugs', {act: 'new_box', doc: address, doc_title: replaceEntities(title)}, {
- 644. - stat: ['wide_dd.js', 'wide_dd.css', 'page.css', 'page.js', 'upload.js'],
- 645. - cache: 1,
- 646. - params: {
- 647. - width: 500,
- 648. - hideButtons: true,
- 649. - bodyStyle: 'border: 0px; padding: 0px'
- 650. - }
- 651. - });
- 652. - },
- 653. -
- 654. - paletteDown: function(ev, down, y, noChangeColor) {
- 655. - var palette = ge('dev_palette');
- 656. - var height = getSize(palette)[1];
- 657. - if (y === undefined) {
- 658. - var y = ev.offsetY || ev.layerY;
- 659. - }
- 660. - var y = Math.max(0, Math.min(y, height));
- 661. - var t = Math.round(y / (height / 360));
- 662. - t = Math.abs(t - 360);
- 663. - t = (t == 360)? 0 : t;
- 664. - ge('dev_colors').style.backgroundColor = "rgb("+Dev.hsv2rgb(t,100,100)+")";
- 665. - if (!noChangeColor) {
- 666. - Dev.setColor(Dev.hsv2rgb(t, cur.pickerX, cur.pickerY));
- 667. - }
- 668. - cur.pickerT = t;
- 669. - var pointer = ge('dev_picker1');
- 670. - setStyle(pointer, {marginTop: y - 1});
- 671. - if (down) {
- 672. - var yMain = ev.clientY;
- 673. - var onMove = function(evNew) {
- 674. - Dev.paletteDown(evNew, false, y + evNew.clientY - yMain);
- 675. - }
- 676. - addEvent(window, 'mousemove', onMove);
- 677. -
- 678. - addEvent(window, 'mouseup', function(evNew) {
- 679. - removeEvent(window, 'mousemove', onMove)
- 680. - });
- 681. - }
- 682. - return cancelEvent(ev);
- 683. + debugLog(res);
- 686. - colorsDown: function(ev, down, x, y, noChangeColor) {
- 687. - var pointer = ge('dev_picker2');
- 688. - var colors = ge('dev_colors');
- 689. - var size = getSize(colors);
- 690. - if (x === undefined) {
- 691. - var x = ev.offsetX || ev.layerX;
- 692. - }
- 693. - if (y === undefined) {
- 694. - var y = ev.offsetY || ev.layerY;
- 695. - }
- 696. - y = Math.max(0, Math.min(y, size[1]));
- 697. - x = Math.max(0, Math.min(x, size[0]));
- 698. - setStyle(pointer, {marginTop: y - 6, marginLeft: x - 7});
- 699. - cur.pickerX = x / size[0] * 100;
- 700. - cur.pickerY = 100 - y / size[1] * 100;
- 701. - if (!noChangeColor) {
- 702. - Dev.setColor(Dev.hsv2rgb(cur.pickerT, cur.pickerX, cur.pickerY));
- 703. - }
- 704. - if (down) {
- 705. - var yMain = ev.clientY;
- 706. - var xMain = ev.clientX;
- 707. - var onMove = function(evNew) {
- 708. - Dev.colorsDown(evNew, false, x + evNew.clientX - xMain, y + evNew.clientY - yMain);
- 709. - }
- 710. - addEvent(window, 'mousemove', onMove);
- 711. - addEvent(window, 'mouseup', function(evNew) {
- 712. - removeEvent(window, 'mousemove', onMove)
- 713. + switchSection: function(obj) {
- 714. + var oldEl = geByClass1('dev_mlist_shown', ge('dev_sidebar'));
- 715. + if (oldEl) {
- 716. + slideUp(oldEl, 200, function() {
- 717. + removeClass(oldEl, 'dev_mlist_shown')
- 719. - }
- 720. - return cancelEvent(ev);
- 721. - },
- 722. -
- 723. - hsv2rgb: function (H,S,V){
- 724. - debugLog('try', H, S, V);
- 725. - var f, p, q , t, lH, R, G, B;
- 726. -
- 727. - S /=100;
- 728. - V /=100;
- 729. -
- 730. - lH = Math.floor(H / 60);
- 731. -
- 732. - f = H/60 - lH;
- 733. - p = V * (1 - S);
- 734. - q = V *(1 - S*f);
- 735. - t = V* (1 - (1-f)* S);
- 736. -
- 737. - switch (lH) {
- 738. - case 0: R = V; G = t; B = p; break;
- 739. - case 1: R = q; G = V; B = p; break;
- 740. - case 2: R = p; G = V; B = t; break;
- 741. - case 3: R = p; G = q; B = V; break;
- 742. - case 4: R = t; G = p; B = V; break;
- 743. - case 5: R = V; G = p; B = q; break;
- 744. - }
- 745. -
- 746. - return [parseInt(R*255), parseInt(G*255), parseInt(B*255)];
- 747. - },
- 748. - rgb2hsv: function(rgb) {
- 749. - var rr, gg, bb,
- 750. - r = rgb[0] / 255,
- 751. - g = rgb[1] / 255,
- 752. - b = rgb[2] / 255,
- 753. - h, s,
- 754. - v = Math.max(r, g, b),
- 755. - diff = v - Math.min(r, g, b),
- 756. - diffc = function(c){
- 757. - return (v - c) / 6 / diff + 1 / 2;
- 758. - };
- 759. -
- 760. - if (diff == 0) {
- 761. - h = s = 0;
- 762. - } else {
- 763. - s = diff / v;
- 764. - rr = diffc(r);
- 765. - gg = diffc(g);
- 766. - bb = diffc(b);
- 767. -
- 768. - if (r === v) {
- 769. - h = bb - gg;
- 770. - } else if (g === v) {
- 771. - h = (1 / 3) + rr - bb;
- 772. - } else if (b === v) {
- 773. - h = (2 / 3) + gg - rr;
- 774. - }
- 775. - if (h < 0) {
- 776. - h += 1;
- 777. - } else if (h > 1) {
- 778. - h -= 1;
- 779. - }
- 780. - }
- 781. - return {
- 782. - h: Math.round(h * 360),
- 783. - s: Math.round(s * 100),
- 784. - v: Math.round(v * 100)
- 785. - };
- 786. - },
- 787. - hex2rgb: function(hex) {
- 788. - var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
- 789. - hex = hex.replace(shorthandRegex, function(m, r, g, b) {
- 790. - return r + r + g + g + b + b;
- 791. - });
- 792. -
- 793. - var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
- 794. - return result ? [
- 795. - parseInt(result[1], 16),
- 796. - parseInt(result[2], 16),
- 797. - parseInt(result[3], 16)
- 798. - ] : [0,0,0];
- 799. - },
- 800. -
- 801. - setColor: function(color) {
- 802. - var col = ge('dev_colorbox'+cur.colorNum);
- 803. - setStyle(col, {backgroundColor: 'rgb('+color.join(',')+')'});
- 804. - var colInp = ge('widget_color'+cur.colorNum);
- 805. - var hex = [color[0].toString(16), color[1].toString(16), color[2].toString(16)];
- 806. - for(var i in hex) if (hex[i].length == 1) hex[i] = '0' + hex[i];
- 807. - val(colInp, hex.join('').toUpperCase());
- 808. - cur.soonUpdatePreview();
- 809. - },
- 810. -
- 811. - showColorBox: function(obj, num, ev) {
- 812. - if (browser.msie && browser.version < 9) {
- 813. - return false;
- 814. - }
- 815. - cur.colorNum = num;
- 816. - var wrap = ge('dev_widget_colors');
- 817. - var cont = ge('dev_colorpicker');
- 818. - var colors = ge('dev_colors');
- 819. - var palette = ge('dev_palette');
- 820. - var shownHere = false;
- 821. - if (!cur.colorShown) {
- 822. - fadeIn(cont, 200);
- 823. - var shownHere = true;
- 824. - cur.colorShown = true;
- 825. - }
- 826. - var posY = (getXY(obj)[1] - getXY(wrap)[1]);
- 827. - if (cur.colorInited) {
- 828. - animate(cont, {marginTop: -180 + posY}, 200)
- 829. - } else {
- 830. - setStyle(cont, {marginTop: -180 + posY})
- 831. - var palSize = getSize(palette);
- 832. - var pal = palette.getContext('2d');
- 833. - var gradient = pal.createLinearGradient(palSize[0]/2,palSize[1],palSize[0]/2,0);
- 834. - var hue = [[255,0,0],[255,255,0],[0,255,0],[0,255,255],[0,0,255],[255,0,255],[255,0,0]];
- 835. - for (var i=0; i <= 6; i++){
- 836. - color = 'rgb('+hue[i][0]+','+hue[i][1]+','+hue[i][2]+')';
- 837. - gradient.addColorStop(i*1/6, color);
- 838. - };
- 839. - pal.fillStyle = gradient;
- 840. - pal.fillRect(0, 0, palSize[0], palSize[1]);
- 841. - addEvent(document, 'mouseup', function() {
- 842. - cur.paletteDown = false;
- 843. - })
- 845. - var colInp = ge('widget_color'+cur.colorNum);
- 846. - debugLog('colInp', colInp);
- 847. - var color = val(colInp);
- 848. - var rgb = Dev.hex2rgb(color);
- 849. - var hsv = Dev.rgb2hsv(rgb);
- 850. -
- 851. - Dev.paletteDown(false, false, (360 - hsv.h) / 360 * getSize(palette)[1], true);
- 852. - var colorsSize = getSize(colors);
- 853. - Dev.colorsDown(false, false, (hsv.s) / 100 * colorsSize[0], (100 - hsv.v) / 100 * colorsSize[1], true);
- 854. -
- 855. - var onWndMove = function(ev) {
- 856. - var el = ev.target;
- 857. - while(el) {
- 858. - if (el.id == 'dev_colorpicker' || hasClass(el, 'dev_colorbox_cont')) {
- 859. - if (cur.colorBoxHideTimeout) {
- 860. - debugLog('cancel Hide');
- 861. - clearTimeout(cur.colorBoxHideTimeout);
- 862. - cur.colorBoxHideTimeout = false;
- 863. - }
- 864. - return false;
- 865. - }
- 866. - el = el.parentNode;
- 867. - }
- 868. - if (cur.colorBoxHideTimeout) {
- 869. - return false;
- 870. - }
- 871. - cur.colorBoxHideTimeout = setTimeout(function() {
- 872. - fadeOut(cont, 200);
- 873. - cur.colorShown = false;
- 874. - removeEvent(window, 'mousemove', onWndMove);
- 875. - }, 500);
- 876. -
- 877. - };
- 878. - if (shownHere) {
- 879. - addEvent(window, 'mousemove', onWndMove);
- 880. + removeClass(geByClass1('dev_mlist_sel', ge('dev_sidebar')), 'dev_mlist_sel');
- 881. + addClass(obj, 'dev_mlist_sel');
- 882. + var el = obj.nextSibling;
- 883. + while(el && el.nodeType != 1) {
- 884. + var el = el.nextSibling;
- 886. -
- 887. - cur.colorInited = true;
- 888. - return cancelEvent(ev);
- 889. - },
- 890. -
- 891. -
- 892. - addVersion: function(hash) {
- 893. - var params = {
- 894. - act: 'a_save_version',
- 895. - ver: val('dev_edit_number'),
- 896. - methods: val('dev_edit_methods'),
- 897. - text: val('dev_edit_ver_text'),
- 898. - text_en: val('dev_edit_ver_text_en'),
- 899. - hash: hash
- 900. + if (el == oldEl) {
- 901. + return;
- 903. - ajax.post('dev.php', params, {
- 904. - onDone: function() {
- 905. - nav.go('/dev/versions')
- 906. - },
- 907. - onFail: function(obj) {
- 908. - obj = ge(obj);
- 909. - if (obj) {
- 910. - notaBene(obj);
- 911. - return true;
- 912. - }
- 913. - }
- 914. + slideDown(el, 200, function() {
- 915. + addClass(el, 'dev_mlist_shown');
- 917. -
- ------
Advertisement
Add Comment
Please, Sign In to add comment