Hormold

VK Change (#1386951306)

Dec 13th, 2013
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 75.27 KB | None | 0 0
  1. Файл - bugs.js (Старый размер - 37949 | Новый - 0):
  2. 0.  - Bugs = {
  3. 1.  -
  4. 2.  - switchTab: function(name, evt) {
  5. 3.  -   if (checkEvent(evt)) return true;
  6. 4.  -   var oldTab = false;
  7. 5.  -   each(geByClass('active_link', ge('bugs_tabs')), function(i, v) {
  8. 6.  -     if (hasClass(v, 'active_link')) {
  9. 7.  -       oldTab = v;
  10. 8.  -       removeClass(v, 'active_link');
  11. 9.  -     }
  12. 10.  -   });
  13. 11.  -   addClass(ge(name + '_tab'), 'active_link');
  14. 12.  -   if (name == 'show') {
  15. 13.  -     show('show_tab', 'bugs_new_link');
  16. 14.  -     hide('new_tab', 'extra_tab');
  17. 15.  -     return false;
  18. 16.  -   } else if (name == 'extra') {
  19. 17.  -     hide('show_tab', 'new_tab');
  20. 18.  -     show('extra_tab', 'bugs_new_link');
  21. 19.  -   } else {
  22. 20.  -     hide('extra_tab', 'show_tab', 'new_tab');
  23. 21.  -     show('bugs_new_link');
  24. 22.  -     if (evt === false) {
  25. 23.  -       return false;
  26. 24.  -     } else {
  27. 25.  -       return nav.go(ge(name + '_tab').firstChild, evt);
  28. 26.  -     }
  29. 27.  -   }
  30. 28.  - },
  31. 29.  -
  32. 30.  - switchSection: function(name, evt) {
  33. 31.  -   if (checkEvent(evt)) return true;
  34. 32.  -   each(geByClass('selected', ge('bugs_section_filters')), function() {
  35. 33.  -     removeClass(this, 'selected');
  36. 34.  -   });
  37. 35.  -   addClass(ge('filter_' + name).firstChild, 'selected');
  38. 36.  -   delete cur._back;
  39. 37.  -   nav.go({0: 'bugs', act: name});
  40. 38.  -   return false;
  41. 39.  - },
  42. 40.  -
  43. 41.  - getPage: function(offset) {
  44. 42.  -   show('bugs_pages_top');
  45. 43.  -   show('bugs_pages_bottom');
  46. 44.  -   var _n = nav.objLoc, act = nav.objLoc.act || cur.section, query = {act: act, offset: offset, load: 1};
  47. 45.  -   for (var v in _n) {
  48. 46.  -     if (v != '0' && v != 'act' && v != 'offset') query[v] = _n[v];
  49. 47.  -   }
  50. 48.  -   ajax.post('bugs', query, {
  51. 49.  -     cache: 1,
  52. 50.  -     onDone: function(content, script, summary, tags) {
  53. 51.  -       ge('bugs_table').innerHTML = content;
  54. 52.  -       if (window.tooltips) tooltips.hideAll();
  55. 53.  -       scrollToTop();
  56. 54.  -       if (summary) {
  57. 55.  -         ge('summary').innerHTML = se(summary).innerHTML;
  58. 56.  -       }
  59. 57.  -       if (ge('bugs_tags')) {
  60. 58.  -         ge('bugs_tags').innerHTML = tags;
  61. 59.  -       }
  62. 60.  -       toggle('tags_wrap', !!tags);
  63. 61.  -       if (offset) {
  64. 62.  -         extend(nav.objLoc, {offset: offset});
  65. 63.  -       } else {
  66. 64.  -         delete nav.objLoc.offset;
  67. 65.  -       }
  68. 66.  -       hide('bugs_pages_top');
  69. 67.  -       hide('bugs_pages_bottom');
  70. 68.  -       nav.setLoc(nav.objLoc);
  71. 69.  -     },
  72. 70.  -     onFail: function() {
  73. 71.  -       hide('bugs_pages_top');
  74. 72.  -       hide('bugs_pages_bottom');
  75. 73.  -     }
  76. 74.  -   });
  77. 75.  -   return false;
  78. 76.  - },
  79. 77.  -
  80. 78.  - subscribeBug: function(btn, subscribe) {
  81. 79.  -   ajax.post('bugs', {act: 'subscribe', id: cur.bug_id, subscribe: subscribe, hash: cur.hashes.subscribe_hash}, {
  82. 80.  -     onDone: function(html) {
  83. 81.  -       if (html) ge('bugs_view_subscribe').innerHTML = html;
  84. 82.  -     },
  85. 83.  -     showProgress: lockButton.pbind(btn),
  86. 84.  -     hideProgress: unlockButton.pbind(btn)
  87. 85.  -   })
  88. 86.  - },
  89. 87.  -
  90. 88.  -
  91. 89.  - getSearchParams: function(obj) {
  92. 90.  -   var params = {q: trim(val(obj)), load: 1, cache: 1};
  93. 91.  -   var status = 0;
  94. 92.  -   if (cur.bugsDD) {
  95. 93.  -     status = intval(cur.bugsDD.val());
  96. 94.  -   }
  97. 95.  -   if (!status) {
  98. 96.  -     status = (isChecked('bugs_chk_opened') ? 1 : 0) + (isChecked('bugs_chk_closed') ? 2 : 0) + (isChecked('bugs_chk_declined') ? 4 : 0);
  99. 97.  -   }
  100. 98.  -   if (cur.tags) {
  101. 99.  -     var tags = [];
  102. 100.  -     for (var i in cur.tags) {
  103. 101.  -       tags.push(i);
  104. 102.  -     }
  105. 103.  -     if (tags.length) params.tags = tags.join(',');
  106. 104.  -   }
  107. 105.  -   var defaultStatus = cur.type == 'subscriptions' ? 7 : 1;
  108. 106.  -   if (status != defaultStatus) params.status = '' + status;
  109. 107.  -   if ((params.q || params.tags) && nav.objLoc != 'all' && nav.objLoc.act != 'my') {
  110. 108.  -     nav.objLoc.act = 'all';
  111. 109.  -   }
  112. 110.  -   if (nav.objLoc.act) params.act = nav.objLoc.act;
  113. 111.  -   return params;
  114. 112.  - },
  115. 113.  - sameParams: function(params) {
  116. 114.  -   if (!cur.params) return false;
  117. 115.  -   for (var i in params) {
  118. 116.  -     if (params[i] != cur.params[i]) return false;
  119. 117.  -   }
  120. 118.  -   for (var i in cur.params) {
  121. 119.  -     if (params[i] != cur.params[i]) return false;
  122. 120.  -   }
  123. 121.  -   return true;
  124. 122.  - },
  125. 123.  -
  126. 124.  - updateAllSearch: function(obj, delay) {
  127. 125.  -   delay = delay || 10;
  128. 126.  -   clearTimeout(cur.searchTimeout);
  129. 127.  -   cur.searchTimeout = setTimeout((function() {
  130. 128.  -     var params = Bugs.getSearchParams(obj);
  131. 129.  -     toggleClass(ge('bugs_search_reset'), 'shown', !!params.q);
  132. 130.  -     if ((!Bugs.sameParams(params) || cur.ignoreEqual)) {
  133. 131.  -       delete cur.ignoreEqual;
  134. 132.  -       cur.params = params;
  135. 133.  -       cur.searchStr = params.q;
  136. 134.  -       Bugs.searchAll(cur.searchStr);
  137. 135.  -     }
  138. 136.  -     scrollToTop();
  139. 137.  -   }).bind(this), delay);
  140. 138.  - },
  141. 139.  -
  142. 140.  - searchAll: function() {
  143. 141.  -   var query = cur.params || Bugs.getSearchParams(ge('bugs_search_input'));
  144. 142.  -   setStyle(ge('bugs_search_reset'), {opacity: .6});
  145. 143.  -   if (query.q || query.tags) {
  146. 144.  -     each(geByClass('selected', ge('bugs_section_filters')), function() {
  147. 145.  -       removeClass(this, 'selected');
  148. 146.  -     });
  149. 147.  -     addClass(ge('filter_' + query.act).firstChild, 'selected');
  150. 148.  -   }
  151. 149.  -   ajax.post('bugs', query, {
  152. 150.  -     cache: 1,
  153. 151.  -     onDone: function(cont, script, summary, tags) {
  154. 152.  -       ge('bugs_table').innerHTML = cont;
  155. 153.  -       if (script) eval(script);
  156. 154.  -       if (summary) {
  157. 155.  -         ge('summary').innerHTML = se(summary).innerHTML;
  158. 156.  -       }
  159. 157.  -       if (ge('bugs_tags')) {
  160. 158.  -         ge('bugs_tags').innerHTML = tags;
  161. 159.  -       }
  162. 160.  -       toggle('tags_wrap', !!tags);
  163. 161.  -       delete nav.objLoc.offset;
  164. 162.  -       each(['q', 'status', 'tags'], function(i, v) {
  165. 163.  -         if (query[v]) {
  166. 164.  -           nav.objLoc[v] = query[v];
  167. 165.  -         } else {
  168. 166.  -           delete nav.objLoc[v];
  169. 167.  -         }
  170. 168.  -       });
  171. 169.  -       nav.setLoc(nav.objLoc);
  172. 170.  -     },
  173. 171.  -     showProgress: addClass.pbind(ge('bugs_search'), 'loading'),
  174. 172.  -     hideProgress: removeClass.pbind(ge('bugs_search'), 'loading')
  175. 173.  -   });
  176. 174.  - },
  177. 175.  -
  178. 176.  - clearAllSearch: function(el, event) {
  179. 177.  -   var field = ge('bugs_search_input');
  180. 178.  -   setStyle(el, {opacity: .6});
  181. 179.  -   field.value = '';
  182. 180.  -   field.focus();
  183. 181.  -   this.updateAllSearch(field);
  184. 182.  - },
  185. 183.  -
  186. 184.  - showNewBox: function() {
  187. 185.  -   return !showBox('bugs', {act: 'new_box'}, {
  188. 186.  -     stat: ['wide_dd.js', 'wide_dd.css', 'page.css', 'page.js', 'upload.js'],
  189. 187.  -     cache: 1,
  190. 188.  -     params: {
  191. 189.  -       width: 500,
  192. 190.  -       hideButtons: true,
  193. 191.  -       bodyStyle: 'border: 0px; padding: 0px'
  194. 192.  -     }
  195. 193.  -   });
  196. 194.  - },
  197. 195.  -
  198. 196.  - checkTextLength: function(el, maxLen, warn) {
  199. 197.  -   var v = trim(el.value).replace(/\n\n\n+/g, '\n\n');
  200. 198.  -   if (el.lastLen === v.length) return;
  201. 199.  -
  202. 200.  -   var realLen = el.lastLen = v.length;
  203. 201.  -   var brCount = realLen - v.replace(/\n/g, '').length;
  204. 202.  -
  205. 203.  -   warn = ge(warn);
  206. 204.  -   if (realLen > maxLen - 100 || brCount > 10) {
  207. 205.  -     show(warn);
  208. 206.  -     if (realLen > maxLen) {
  209. 207.  -       warn.innerHTML = getLang('global_recommended_exceeded', realLen - maxLen);
  210. 208.  -     } else if (brCount > 10) {
  211. 209.  -       warn.innerHTML = getLang('global_recommended_lines', brCount - 10);
  212. 210.  -     } else {
  213. 211.  -       warn.innerHTML = getLang('text_N_symbols_remain', maxLen - realLen);
  214. 212.  -     }
  215. 213.  -   } else {
  216. 214.  -     hide(warn);
  217. 215.  -   }
  218. 216.  - },
  219. 217.  -
  220. 218.  - checkNewFields: function(bug_id) {
  221. 219.  -   if (!trim(val('bugs_new_title'))) {
  222. 220.  -     notaBene(ge('bugs_new_title'));
  223. 221.  -     return false;
  224. 222.  -   }
  225. 223.  -   if (!bug_id && !curBox().changed) {
  226. 224.  -     notaBene('bugs_new_text');
  227. 225.  -     return false;
  228. 226.  -   }
  229. 227.  -   if (cur.wdd && cur.wdd.wdd_new_tags) {
  230. 228.  -     var tags = [];
  231. 229.  -     for (var i in cur.wdd.wdd_new_tags.selected) {
  232. 230.  -       tags.push(cur.wdd.wdd_new_tags.selected[i][0]);
  233. 231.  -     }
  234. 232.  -     if (!tags.length) {
  235. 233.  -       notaBene(ge('wdd_new_tags'));
  236. 234.  -       notaBene(ge('bugs_new_tags'));
  237. 235.  -       return false;
  238. 236.  -     }
  239. 237.  -   }
  240. 238.  -
  241. 239.  -   return true;
  242. 240.  - },
  243. 241.  -
  244. 242.  - saveBug: function(bug_id) {
  245. 243.  -   if (!this.checkNewFields(bug_id)) return false;
  246. 244.  -
  247. 245.  -   var query = {act: 'save', hash: cur.hashes.save_hash, title: trim(val('bugs_new_title')), text: val('bugs_new_text')};
  248. 246.  -   if (bug_id) {
  249. 247.  -     query.id = bug_id;
  250. 248.  -   }
  251. 249.  -   if (cur.wdd && cur.wdd.wdd_new_tags) {
  252. 250.  -     var tags = [];
  253. 251.  -     for (var i in cur.wdd.wdd_new_tags.selected) {
  254. 252.  -       tags.push(cur.wdd.wdd_new_tags.selected[i][0]);
  255. 253.  -     }
  256. 254.  -     if (tags.length) {
  257. 255.  -       query.tags = tags;
  258. 256.  -     }
  259. 257.  -   }
  260. 258.  -   var attachs = [], chosen = cur.bugsNewMedia.chosenMedias;
  261. 259.  -   if (attachs) {
  262. 260.  -     for (var i in chosen) {
  263. 261.  -       var att = chosen[i], type = att[0], value = att[1];
  264. 262.  -       if (type == 'photo' || type == 'doc') {
  265. 263.  -         attachs.push(type+','+value);
  266. 264.  -       }
  267. 265.  -     }
  268. 266.  -   }
  269. 267.  -   if (attachs.length) query.attachs = attachs;
  270. 268.  -   ajax.post('bugs', query, {
  271. 269.  -     showProgress: lockButton.pbind('bugs_submit_button'),
  272. 270.  -     hideProgress: function() {
  273. 271.  -       if (curBox()) curBox().hide();
  274. 272.  -     },
  275. 273.  -     onDone: function(description, data, msg) {
  276. 274.  -       if (description) ge('bugs_view_description').innerHTML = description;
  277. 275.  -       if (data) ge('bugs_view_data').innerHTML = data;
  278. 276.  -       if (msg) Bugs.showMsg(msg);
  279. 277.  -     },
  280. 278.  -     onFail: function(msg) {
  281. 279.  -       return Bugs.showError(msg);
  282. 280.  -     }
  283. 281.  -   });
  284. 282.  -   return false;
  285. 283.  - },
  286. 284.  - addBug: function() {
  287. 285.  -   return Bugs.saveBug();
  288. 286.  - },
  289. 287.  - editBug: function() {
  290. 288.  -   return Bugs.saveBug(cur.bug_id);
  291. 289.  - },
  292. 290.  -
  293. 291.  - addScreen: function(onShow) {
  294. 292.  -   var opts = {title: getLang('bugs_adding_screen'), width: 440, bodyStyle: 'padding: 0px'};
  295. 293.  -   if (onShow) {
  296. 294.  -     opts.onShow = onShow;
  297. 295.  -   }
  298. 296.  -   return showFastBox(opts, cur.screenBox);
  299. 297.  - },
  300. 298.  - addDoc: function(onShow) {
  301. 299.  -   var opts = {title: getLang('bugs_adding_doc'), width: 440, bodyStyle: 'padding: 0px'};
  302. 300.  -   if (onShow) {
  303. 301.  -     opts.onShow = onShow;
  304. 302.  -   }
  305. 303.  -   return showFastBox(opts, cur.docBox);
  306. 304.  - },
  307. 305.  - choosePhotoUploaded: function(info, params) {
  308. 306.  -   var i = info.ind !== undefined ? info.ind : info,
  309. 307.  -       fileName = info.fileName ? info.fileName : info,
  310. 308.  -       ind = info.fileName ? i + '_' + info.fileName : info,
  311. 309.  -       prg = ge('upload' + ind + '_progress_wrap');
  312. 310.  -
  313. 311.  -   prg && hide(geByClass1('progress_x', prg));
  314. 312.  -   ajax.post('al_photos.php', extend({act: 'choose_uploaded_support'}, params), {
  315. 313.  -     onDone: function(media, data) {
  316. 314.  -       cur.bugsNewMedia.chooseMedia('photo', media, extend(data, {upload_ind: i + '_' + fileName}));
  317. 315.  -     },
  318. 316.  -     onFail: Bugs.chooseFail.pbind(info)
  319. 317.  -   });
  320. 318.  - },
  321. 319.  - chooseDocUploaded: function(info, params) {
  322. 320.  -   var i = info.ind !== undefined ? info.ind : info,
  323. 321.  -       fileName = info.fileName ? info.fileName : info,
  324. 322.  -       ind = info.fileName ? i + '_' + info.fileName : info,
  325. 323.  -       prg = ge('upload' + ind + '_progress_wrap');
  326. 324.  -
  327. 325.  -   prg && hide(geByClass1('progress_x', prg));
  328. 326.  -   ajax.post('docs.php', extend({act: 'a_save_doc', from: 'choose'}, params), {
  329. 327.  -     onDone: function(oid, id, data) {
  330. 328.  -       re('upload'+ind+'_progress_wrap');
  331. 329.  -       cur.bugsNewMedia.chooseMedia('doc', oid+'_'+id, data);
  332. 330.  -     },
  333. 331.  -     onFail: Bugs.chooseFail.pbind(info)
  334. 332.  -   });
  335. 333.  - },
  336. 334.  - chooseFail: function(info, code) {
  337. 335.  -   var i = info.ind !== undefined ? info.ind : info, fileName = info.fileName ? info.fileName : info;
  338. 336.  -   if (Upload.types[i] == 'fileApi' && !Upload.options[i].wiki_editor) {
  339. 337.  -     var lnkId, ind = info.fileName ? i+'_'+info.fileName : info;
  340. 338.  -     if (cur.imMedia) {
  341. 339.  -       re('upload'+ind+'_progress_wrap');
  342. 340.  -       lnkId = cur.imMedia.lnkId;
  343. 341.  -       cur.addMedia[lnkId].unchooseMedia();
  344. 342.  -     } else if (cur.addMedia) {
  345. 343.  -       re('upload'+ind+'_progress_wrap');
  346. 344.  -       lnkId = (cur.attachMediaIndexes || {})[fileName];
  347. 345.  -       if (lnkId) cur.addMedia[lnkId].unchooseMedia();
  348. 346.  -     }
  349. 347.  -   }
  350. 348.  -   topError('Upload failed', {dt: -1, type: 102, url: (ge('file_uploader_form' + i) || {}).action});
  351. 349.  -   Upload.embed(i);
  352. 350.  - },
  353. 351.  -
  354. 352.  - initPhotoUpload: function(el, params) {
  355. 353.  -   el = ge(el);
  356. 354.  -   if (!el) return;
  357. 355.  -
  358. 356.  -   if (!cur.screens) cur.screens = {};
  359. 357.  -   var uploadData = cur.uploadPhotoData, opts = uploadData.options;
  360. 358.  -   return Upload.init(el, uploadData.url, uploadData.vars, {
  361. 359.  -     file_name: 'photo',
  362. 360.  -
  363. 361.  -     file_size_limit: 1024*1024*5, // 5Mb
  364. 362.  -     file_types_description: 'Image files (*.jpg, *.jpeg, *.png, *.gif)',
  365. 363.  -     file_types: '*.jpg;*.JPG;*.jpeg;*.JPEG;*.png;*.PNG;*.gif;*.GIF',
  366. 364.  -     accept: 'image/jpeg,image/png,image/gif',
  367. 365.  -     file_match: '\.(gif|jpg|jpeg|png)$',
  368. 366.  -     lang: opts.lang,
  369. 367.  -
  370. 368.  -     onUploadStart: function(info, res) {
  371. 369.  -       var i = info.ind !== undefined ? info.ind : info, options = Upload.options[i];
  372. 370.  -       if (Upload.types[i] == 'form') {
  373. 371.  -         geByClass1('file', el).disabled = true;
  374. 372.  -       }
  375. 373.  -       if (Upload.types[i] == 'fileApi') {
  376. 374.  -         if (cur.notStarted) {
  377. 375.  -           if (params && params.hideOnStart) boxQueue.hideLast();
  378. 376.  -           delete cur.notStarted;
  379. 377.  -         }
  380. 378.  -         if (options.multi_progress) this.onUploadProgress(info, 0, 0);
  381. 379.  -       }
  382. 380.  -       curBox().changed = true;
  383. 381.  -     },
  384. 382.  -     onUploadComplete: function(info, res) {
  385. 383.  -       var params, i = info.ind !== undefined ? info.ind : info, fileName = info.fileName ? info.fileName : info;
  386. 384.  -       try {
  387. 385.  -         params = eval('(' + res + ')');
  388. 386.  -       } catch(e) {
  389. 387.  -         params = q2ajx(res);
  390. 388.  -       }
  391. 389.  -       if (!params.photos) {
  392. 390.  -         Upload.onUploadError(info);
  393. 391.  -         return;
  394. 392.  -       }
  395. 393.  -       Bugs.choosePhotoUploaded(info, params);
  396. 394.  -     },
  397. 395.  -     onUploadProgress: function(info, bytesLoaded, bytesTotal) {
  398. 396.  -       var i = info.ind !== undefined ? info.ind : info;
  399. 397.  -       if (Upload.types[i] == 'fileApi') {
  400. 398.  -         var lnkId = (cur.attachMediaIndexes || {})[i];
  401. 399.  -         if (lnkId === undefined || lnkId && cur.addMedia[lnkId].chosenMedia || cur.imMedia) {
  402. 400.  -           var data = {loaded: bytesLoaded, total: bytesTotal};
  403. 401.  -           if (info.fileName) data.fileName = info.fileName;
  404. 402.  -           cur.bugsNewMedia.showMediaProgress('photo', i, data);
  405. 403.  -         }
  406. 404.  -       } else if (Upload.types[i] == 'flash') {
  407. 405.  -         if (!ge('form'+i+'_progress')) {
  408. 406.  -           var obj = Upload.obj[i], objHeight = getSize(obj)[1], tm = objHeight / 2 + 10;
  409. 407.  -           var node = obj.firstChild;
  410. 408.  -           while (node) {
  411. 409.  -             if (node.nodeType == 1) {
  412. 410.  -               if (node.id == 'uploader'+i && browser.msie) {
  413. 411.  -                 setStyle(node, {position: 'relative', left: '-5000px'});
  414. 412.  -               } else {
  415. 413.  -                 setStyle(node, {visibility: 'hidden'});
  416. 414.  -               }
  417. 415.  -             }
  418. 416.  -             node = node.nextSibling;
  419. 417.  -           }
  420. 418.  -           obj.appendChild(ce('div', {innerHTML: '<div class="bugs_progress_wrap">\
  421. 419.  -             <div id="form' + i + '_progress" class="bugs_progress" style="width: 0%;"></div>\
  422. 420.  -           </div></div>'}, {height: tm + 'px', marginTop: -tm + 'px'}));
  423. 421.  -         }
  424. 422.  -         var percent = intval(bytesLoaded / bytesTotal * 100);
  425. 423.  -         setStyle(ge('form' + i + '_progress'), {width: percent + '%'});
  426. 424.  -       }
  427. 425.  -     },
  428. 426.  -     onUploadError: Bugs.chooseFail,
  429. 427.  -     onUploadCompleteAll: function (info) {
  430. 428.  -       var i = info.ind !== undefined ? info.ind : info;
  431. 429.  -       if (Upload.types[i] !== 'fileApi') {
  432. 430.  -         if (params.hideOnStart) {
  433. 431.  -           boxQueue.hideLast();
  434. 432.  -         } else {
  435. 433.  -           Upload.embed(i);
  436. 434.  -         }
  437. 435.  -       }
  438. 436.  -     },
  439. 437.  -
  440. 438.  -     multiple: 1,
  441. 439.  -     multi_progress: 1,
  442. 440.  -     max_files: params && params.max_files || 5,
  443. 441.  -     max_files_hide_last: 1,
  444. 442.  -     clear: 1,
  445. 443.  -     type: 'photo',
  446. 444.  -     max_attempts: 3,
  447. 445.  -     file_input: curBox().inp,
  448. 446.  -     server: opts.server,
  449. 447.  -     error: opts.default_error,
  450. 448.  -     error_hash: opts.error_hash,
  451. 449.  -     dropbox: 'bas_dropbox'
  452. 450.  -   });
  453. 451.  - },
  454. 452.  -
  455. 453.  - initDocUpload: function(el, params) {
  456. 454.  -   el = ge(el);
  457. 455.  -   if (!el) return;
  458. 456.  -
  459. 457.  -   var uploadData = cur.uploadDocData, opts = uploadData.options;
  460. 458.  -   return Upload.init(el, uploadData.url, uploadData.vars, {
  461. 459.  -     file_name: 'file',
  462. 460.  -
  463. 461.  -     file_size_limit: 1024*1024*200, // 200Mb
  464. 462.  -     file_types_description: 'Documents',
  465. 463.  -     file_types: '*.*;',
  466. 464.  -     lang: opts.lang,
  467. 465.  -
  468. 466.  -     onUploadStart: function(info, res) {
  469. 467.  -       var i = info.ind !== undefined ? info.ind : info, options = Upload.options[i];
  470. 468.  -       if (Upload.types[i] == 'form') {
  471. 469.  -         geByClass1('file', el).disabled = true;
  472. 470.  -       }
  473. 471.  -       if (Upload.types[i] == 'fileApi') {
  474. 472.  -         if (cur.notStarted) {
  475. 473.  -           if (params && params.hideOnStart) boxQueue.hideLast();
  476. 474.  -           delete cur.notStarted;
  477. 475.  -         }
  478. 476.  -         if (options.multi_progress) this.onUploadProgress(info, 0, 0);
  479. 477.  -       }
  480. 478.  -       curBox().changed = true;
  481. 479.  -     },
  482. 480.  -     onUploadComplete: function(info, res) {
  483. 481.  -       var params, i = info.ind !== undefined ? info.ind : info, fileName = info.fileName ? info.fileName : info;
  484. 482.  -       try {
  485. 483.  -         params = eval('(' + res + ')');
  486. 484.  -       } catch(e) {
  487. 485.  -         params = q2ajx(res);
  488. 486.  -       }
  489. 487.  -       if (!params.file) {
  490. 488.  -         Upload.onUploadError(info);
  491. 489.  -         return;
  492. 490.  -       }
  493. 491.  -       Bugs.chooseDocUploaded(info, params);
  494. 492.  -     },
  495. 493.  -     onUploadProgress: function(info, bytesLoaded, bytesTotal) {
  496. 494.  -       var i = info.ind !== undefined ? info.ind : info;
  497. 495.  -       if (Upload.types[i] == 'fileApi') {
  498. 496.  -         var lnkId = (cur.attachMediaIndexes || {})[i];
  499. 497.  -         if (lnkId === undefined || lnkId && cur.addMedia[lnkId].chosenMedia || cur.imMedia) {
  500. 498.  -           var data = {loaded: bytesLoaded, total: bytesTotal};
  501. 499.  -           if (info.fileName) data.fileName = info.fileName;
  502. 500.  -           cur.bugsNewMedia.showMediaProgress('doc', i, data);
  503. 501.  -         }
  504. 502.  -       } else if (Upload.types[i] == 'flash') {
  505. 503.  -         if (!ge('form'+i+'_progress')) {
  506. 504.  -           var obj = Upload.obj[i], objHeight = getSize(obj)[1], tm = objHeight / 2 + 10;
  507. 505.  -           var node = obj.firstChild;
  508. 506.  -           while (node) {
  509. 507.  -             if (node.nodeType == 1) {
  510. 508.  -               if (node.id == 'uploader'+i && browser.msie) {
  511. 509.  -                 setStyle(node, {position: 'relative', left: '-5000px'});
  512. 510.  -               } else {
  513. 511.  -                 setStyle(node, {visibility: 'hidden'});
  514. 512.  -               }
  515. 513.  -             }
  516. 514.  -             node = node.nextSibling;
  517. 515.  -           }
  518. 516.  -           obj.appendChild(ce('div', {innerHTML: '<div class="bugs_progress_wrap">\
  519. 517.  -             <div id="form' + i + '_progress" class="bugs_progress" style="width: 0%;"></div>\
  520. 518.  -           </div></div>'}, {height: tm + 'px', marginTop: -tm + 'px'}));
  521. 519.  -         }
  522. 520.  -         var percent = intval(bytesLoaded / bytesTotal * 100);
  523. 521.  -         setStyle(ge('form' + i + '_progress'), {width: percent + '%'});
  524. 522.  -       }
  525. 523.  -     },
  526. 524.  -     onCheckComplete: params && params.onCheckComplete || false,
  527. 525.  -     onUploadError: Bugs.chooseFail,
  528. 526.  -     onUploadCompleteAll: function (info) {
  529. 527.  -       var i = info.ind !== undefined ? info.ind : info;
  530. 528.  -       if (Upload.types[i] !== 'fileApi') {
  531. 529.  -         if (params.hideOnStart) {
  532. 530.  -           boxQueue.hideLast();
  533. 531.  -         } else {
  534. 532.  -           Upload.embed(i);
  535. 533.  -         }
  536. 534.  -       }
  537. 535.  -     },
  538. 536.  -
  539. 537.  -     multiple: 1,
  540. 538.  -     multi_progress: 1,
  541. 539.  -     max_files: params && params.max_files || 5,
  542. 540.  -     max_files_hide_last: 1,
  543. 541.  -     clear: 1,
  544. 542.  -     type: 'photo',
  545. 543.  -     max_attempts: 3,
  546. 544.  -     file_input: curBox().inp,
  547. 545.  -     server: opts.server,
  548. 546.  -     error: opts.default_error,
  549. 547.  -     error_hash: opts.error_hash,
  550. 548.  -     dropbox: 'bas_dropbox'
  551. 549.  -   });
  552. 550.  - },
  553. 551.  -
  554. 552.  - initAddMedia: function(lnk, previewId, mediaTypes, opts) {
  555. 553.  -   var types = [], bgposes = {photo: 3, doc: -64}, addMedia;
  556. 554.  -   opts = opts || {};
  557. 555.  -   each (mediaTypes || [], function (i, v) {
  558. 556.  -     if (!v[1]) return;
  559. 557.  -     var handler = false;
  560. 558.  -     switch (v[0]) {
  561. 559.  -       case 'photo':
  562. 560.  -         handler = function() {
  563. 561.  -           if (opts.oneClick) {
  564. 562.  -             var inp = ge('bug_photo_input'), par = ge('bugs_view_comments') || curBox() && geByClass1('bugs_new_cont', curBox().bodyNode);
  565. 563.  -             if (!inp) inp = par.appendChild(ce('input', {
  566. 564.  -               type: 'file',
  567. 565.  -               multiple: 'true',
  568. 566.  -               id: 'bug_photo_input',
  569. 567.  -               onchange: function() {
  570. 568.  -                 data(this, 'changed', true);
  571. 569.  -                 curBox().inp = this;
  572. 570.  -                 Bugs.initPhotoUpload('bas_upload');
  573. 571.  -               }
  574. 572.  -             }));
  575. 573.  -             inp.click();
  576. 574.  -           } else {
  577. 575.  -             Bugs.addScreen(Bugs.initPhotoUpload.pbind('bas_add_data', {hideOnStart: true}));
  578. 576.  -           }
  579. 577.  -         }
  580. 578.  -         break;
  581. 579.  -       case 'doc':
  582. 580.  -         handler = function() {
  583. 581.  -           if (opts.oneClick) {
  584. 582.  -             var inp = ge('bug_doc_input'), par = ge('bugs_view_comments') || curBox() && geByClass1('bugs_new_cont', curBox().bodyNode);
  585. 583.  -             if (!inp) inp = par.appendChild(ce('input', {
  586. 584.  -               type: 'file',
  587. 585.  -               multiple: 'true',
  588. 586.  -               id: 'bug_doc_input',
  589. 587.  -               onchange: function() {
  590. 588.  -                 data(this, 'changed', true);
  591. 589.  -                 curBox().inp = this;
  592. 590.  -                 Bugs.initDocUpload('bas_upload');
  593. 591.  -               }
  594. 592.  -             }));
  595. 593.  -             inp.click();
  596. 594.  -           } else {
  597. 595.  -             Bugs.addDoc(Bugs.initDocUpload.pbind('bas_add_data', {hideOnStart: true}));
  598. 596.  -           }
  599. 597.  -         }
  600. 598.  -         break;
  601. 599.  -     }
  602. 600.  -     var icon = false, bgpos = ('3px ' + bgposes[v[0]] + 'px'), url = false, name = v[1].replace(/\s/g, '&nbsp;');
  603. 601.  -     types.push([v[0], v[1], bgpos, handler, url, icon]);
  604. 602.  -   });
  605. 603.  -
  606. 604.  -   var limit = opts.limit || 10;
  607. 605.  -
  608. 606.  -   var menu = initCustomMedia(lnk, types, {
  609. 607.  -     onShow: function () {
  610. 608.  -       cur.chooseMedia = addMedia.chooseMedia;
  611. 609.  -       cur.showMediaProgress = addMedia.showMediaProgress;
  612. 610.  -       cur.attachCount = addMedia.attachCount;
  613. 611.  -     },
  614. 612.  -     onItemClick: function(type) {
  615. 613.  -       if (addMedia.attachCount() >= limit) {
  616. 614.  -         showFastBox(getLang('global_error'), getLang('attachments_limit', limit));
  617. 615.  -         return false;
  618. 616.  -       }
  619. 617.  -       return true;
  620. 618.  -     }
  621. 619.  -   });
  622. 620.  -
  623. 621.  -   if (!menu) return;
  624. 622.  -   previewId = previewId || 'media_preview';
  625. 623.  -
  626. 624.  -   var lnkId = menu.id,
  627. 625.  -       previewEl = ge(previewId),
  628. 626.  -       progressEl, picsEl, docsEl;
  629. 627.  -
  630. 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>');
  631. 629.  -   var picsEl = previewEl.childNodes[0],
  632. 630.  -       docsEl = previewEl.childNodes[1],
  633. 631.  -       progressEl = previewEl.childNodes[2];
  634. 632.  -   removeClass(previewEl, 'media_preview');
  635. 633.  -   addClass(previewEl, 'multi_media_preview');
  636. 634.  -
  637. 635.  -   addMedia = {
  638. 636.  -     _addMediaLink: lnk,
  639. 637.  -     lnkId: lnkId,
  640. 638.  -     menu: menu,
  641. 639.  -     handlers: {},
  642. 640.  -     chosenMedias: [],
  643. 641.  -     _showAddMedia: function() {
  644. 642.  -       menu.show();
  645. 643.  -     },
  646. 644.  -     _hideAddMedia: function(noTimeout) {
  647. 645.  -       menu.hide(noTimeout);
  648. 646.  -     },
  649. 647.  -     chooseMedia: function(type, media, data, url, noboxhide) {
  650. 648.  -       if (addMedia.onChange && addMedia.onChange(type, media, data) === false) {
  651. 649.  -         return false;
  652. 650.  -       }
  653. 651.  -       if (addMedia.attachCount() >= limit && data.upload_ind === undefined) {
  654. 652.  -         return false;
  655. 653.  -       }
  656. 654.  -       var preview = '', postview = '', toPics = false, oncl;
  657. 655.  -       switch (type) {
  658. 656.  -         case 'photo':
  659. 657.  -           if (!isObject(data)) {
  660. 658.  -             data = {
  661. 659.  -               thumb_m: data[0] || '',
  662. 660.  -               thumb_s: data[1] || '',
  663. 661.  -               list: data[2] || '',
  664. 662.  -               view_opts: data[3] || '',
  665. 663.  -               upload_ind: data.upload_ind || undefined
  666. 664.  -             };
  667. 665.  -           }
  668. 666.  -           vkImage().src = data.thumb_s;
  669. 667.  -           oncl = opts.nocl ? '' : ' onclick="return Bugs.showPhoto(\'' + media + '\', \'' + data.list + '\', ' + data.view_opts.replace(/"/g, '&quot;') + ');"';
  670. 668.  -           preview = '<div ' + oncl + ' class="fl_l page_preview_photo"><img class="page_preview_photo" src="' + data.thumb_s + '" /></div>';
  671. 669.  -           toPics = true;
  672. 670.  -           break;
  673. 671.  -         case 'doc':
  674. 672.  -           if (!data.lang) return false;
  675. 673.  -           if (data.thumb && data.thumb_s) {
  676. 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>';
  677. 675.  -             toPics = true;
  678. 676.  -           } else {
  679. 677.  -             preview = '<a target="_blank" href="' + data.href + '" class="medadd_h medadd_h_doc inl_bl">' + data.lang.profile_choose_doc + '</a>';
  680. 678.  -             postview = '<div class="medadd_c medadd_c_doc"><a target="_blank" href="' + data.href + '">' + data.title + '</a></div>';
  681. 679.  -           }
  682. 680.  -           break;
  683. 681.  -       }
  684. 682.  -       var medias = addMedia.chosenMedias,
  685. 683.  -           ind = medias.length,
  686. 684.  -           mediaEl = (type == 'photos_list') ?
  687. 685.  -             se('<div class="page_preview_' + type + '_wrap" style="position: relative">' + preview + '<div class="page_photos_count">' + media.split(',').length + '</div></div>') :
  688. 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>');
  689. 687.  -       addClass(mediaEl, toPics ? 'fl_l' : 'clear_fix');
  690. 688.  -       if (data.upload_ind !== undefined) re('upload' + data.upload_ind + '_progress_wrap');
  691. 689.  -       (toPics ? picsEl : docsEl).appendChild(mediaEl);
  692. 690.  -       medias.push([type, media, mediaEl, url]);
  693. 691.  -
  694. 692.  -       toggle(picsEl, picsEl.childNodes.length > 0);
  695. 693.  -       toggle(docsEl, docsEl.childNodes.length > 0);
  696. 694.  -       toggle(progressEl, progressEl.childNodes.length > 0);
  697. 695.  -
  698. 696.  -       if (!cur.fileApiUploadStarted && noboxhide !== true) {
  699. 697.  -         boxQueue.hideLast();
  700. 698.  -       }
  701. 699.  -
  702. 700.  -       cur.lastPostMsg = false;
  703. 701.  -       if (opts.onMediaAdd) {
  704. 702.  -         opts.onMediaAdd();
  705. 703.  -       }
  706. 704.  -
  707. 705.  -       if (data.upload_ind !== undefined) {
  708. 706.  -         delete data.upload_ind;
  709. 707.  -       }
  710. 708.  -       return false;
  711. 709.  -     },
  712. 710.  -     unchooseMedia: function(ind) {
  713. 711.  -       if (addMedia.onChange && addMedia.onChange(false, ind) === false) {
  714. 712.  -         return false;
  715. 713.  -       }
  716. 714.  -       if (ind === undefined) {
  717. 715.  -         each (addMedia.chosenMedias, function (k, v) {
  718. 716.  -           if (v && k !== undefined) addMedia.unchooseMedia(k);
  719. 717.  -         });
  720. 718.  -         return;
  721. 719.  -       }
  722. 720.  -       var medias = addMedia.chosenMedias, x;
  723. 721.  -       if (medias[ind]) {
  724. 722.  -         if ((x = geByClass1('page_media_x_wrap', medias[ind][2], 'div')) && x.tt && x.tt.el) {
  725. 723.  -           x.tt.destroy();
  726. 724.  -         }
  727. 725.  -         re(medias[ind][2]);
  728. 726.  -         medias[ind] = false;
  729. 727.  -       }
  730. 728.  -       toggle(picsEl, picsEl.childNodes.length > 0);
  731. 729.  -       toggle(docsEl, docsEl.childNodes.length > 0);
  732. 730.  -       toggle(progressEl, progressEl.childNodes.length > 0);
  733. 731.  -
  734. 732.  -       cur.lastPostMsg = false;
  735. 733.  -
  736. 734.  -       if (addMedia.onChange) addMedia.onChange(false);
  737. 735.  -     },
  738. 736.  -     showMediaProgress: function(type, i, info) {
  739. 737.  -       if (addMedia.onProgress && addMedia.onProgress(type, i, info) === false) {
  740. 738.  -         return false;
  741. 739.  -       }
  742. 740.  -       var frac = info.loaded / info.total, percent = intval(frac * 100),
  743. 741.  -           fileName = info.fileName || info.name || '',
  744. 742.  -           ind = fileName ? i + '_' + fileName : i,
  745. 743.  -           label = fileName ? (fileName.length > 33 ? fileName.substr(0, 30) + '...' : fileName) : '';
  746. 744.  -
  747. 745.  -       var prg = ge('upload' + ind + '_progress');
  748. 746.  -       if (!prg) {
  749. 747.  -         if (!cur.attachMediaIndexes) cur.attachMediaIndexes = {};
  750. 748.  -         cur.attachMediaIndexes[ind] = lnkId;
  751. 749.  -
  752. 750.  -         var progress = '\
  753. 751.  - <div class="fl_l"><div class="page_attach_progress_wrap" style="margin-top: 3px; margin-bottom: 4px;">\
  754. 752.  -   <div id="upload' + ind + '_progress" class="page_attach_progress"></div>\
  755. 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>';
  756. 754.  -
  757. 755.  -         progressEl.appendChild(ce('div', {id: 'upload' + ind + '_progress_wrap', innerHTML: progress, className: 'clear_fix upload_' + i + '_progress'}, {marginTop: '6px'}));
  758. 756.  -         show(progressEl);
  759. 757.  -         prg = ge('upload' + ind + '_progress');
  760. 758.  -         prg.full = false;
  761. 759.  -
  762. 760.  -         if (percent) {
  763. 761.  -           setStyle(prg, {width: prg.full ? (intval(prg.full * frac) + 'px') : percent + '%'})
  764. 762.  -         } else {
  765. 763.  -           setStyle(prg, {width: '1px'});
  766. 764.  -           hide(prg);
  767. 765.  -         }
  768. 766.  -       } else {
  769. 767.  -         show(prg);
  770. 768.  -         if (prg.full) {
  771. 769.  -           var tw = data(prg, 'tween'), w = intval(prg.full * frac);
  772. 770.  -           if (tw && tw.isTweening) {
  773. 771.  -             tw.to.width = w;
  774. 772.  -           } else {
  775. 773.  -             animate(prg, {width: w + 'px'}, 500);
  776. 774.  -           }
  777. 775.  -         } else {
  778. 776.  -           setStyle(prg, {width: percent + '%'});
  779. 777.  -         }
  780. 778.  -       }
  781. 779.  -     },
  782. 780.  -
  783. 781.  -     attachCount: function() {
  784. 782.  -       if (addMedia.attachedCount) {
  785. 783.  -         return addMedia.attachedCount();
  786. 784.  -       }
  787. 785.  -       if (!previewEl) {
  788. 786.  -         return 0;
  789. 787.  -       }
  790. 788.  -       var num = picsEl.childNodes.length + docsEl.childNodes.length + progressEl.childNodes.length;
  791. 789.  -       return num;
  792. 790.  -     },
  793. 791.  -   }
  794. 792.  -
  795. 793.  -   if (!cur.addMedia) {
  796. 794.  -     cur.addMedia = {};
  797. 795.  -   }
  798. 796.  -
  799. 797.  -   cur.addMedia[lnkId] = addMedia;
  800. 798.  -   return addMedia;
  801. 799.  - },
  802. 800.  -
  803. 801.  - showMsg: function(text) {
  804. 802.  -   var msg = ge('bugs_msg');
  805. 803.  -   if (!msg) {
  806. 804.  -     var parent;
  807. 805.  -     switch (cur.section) {
  808. 806.  -       case 'show':
  809. 807.  -         parent = ge('bugs_content');
  810. 808.  -         break;
  811. 809.  -       case 'list':
  812. 810.  -         parent = ge('bugs_table');
  813. 811.  -         break;
  814. 812.  -     }
  815. 813.  -     msg = parent.insertBefore(ce('div', {id: 'bugs_msg', className: 'msg'}), parent.firstChild);
  816. 814.  -   }
  817. 815.  -   re('bugs_error');
  818. 816.  -   msg.innerHTML = text;
  819. 817.  -   msg.style.backgroundColor = '#F4EBBD';
  820. 818.  -   animate(msg, {backgroundColor: '#F9F6E7'}, 2000);
  821. 819.  -   return true;
  822. 820.  - },
  823. 821.  -
  824. 822.  - showError: function(error) {
  825. 823.  -   var err = ge('bugs_error');
  826. 824.  -   if (!err) {
  827. 825.  -     var parent;
  828. 826.  -     switch (cur.section) {
  829. 827.  -       case 'show':
  830. 828.  -         parent = ge('bugs_content');
  831. 829.  -         break;
  832. 830.  -       case 'list':
  833. 831.  -         parent = ge('bugs_table');
  834. 832.  -         break;
  835. 833.  -     }
  836. 834.  -     err = parent.insertBefore(ce('div', {id: 'bugs_error', className: 'error'}), parent.firstChild);
  837. 835.  -   }
  838. 836.  -   re('bugs_msg');
  839. 837.  -   hide('bugs_progress');
  840. 838.  -   err.innerHTML = error;
  841. 839.  -   err.style.backgroundColor = '#FACEBB';
  842. 840.  -   animate(err, {backgroundColor: '#FFEFE8'}, 2000);
  843. 841.  -   scrollToTop(200);
  844. 842.  -   return true;
  845. 843.  - },
  846. 844.  -
  847. 845.  - showDeleteBox: function() {
  848. 846.  -   box = showFastBox('', '');
  849. 847.  -   box.setOptions({
  850. 848.  -     hideButtons: true,
  851. 849.  -     title: false,
  852. 850.  -     width: 460,
  853. 851.  -     bodyStyle: 'border: 0px; padding: 0px;'
  854. 852.  -   });
  855. 853.  -   box.bodyNode.innerHTML = getLang('bugs_sure_delete_bug');
  856. 854.  -   box.setOptions({});
  857. 855.  - },
  858. 856.  -
  859. 857.  - showEditBox: function() {
  860. 858.  -   return !showBox('bugs', {act: 'edit_box', id: cur.bug_id}, {
  861. 859.  -     stat: ['wide_dd.js', 'wide_dd.css', 'page.css', 'page.js', 'upload.js'],
  862. 860.  -     params: {
  863. 861.  -       width: 500,
  864. 862.  -       hideButtons: true,
  865. 863.  -       bodyStyle: 'border: 0px; padding: 0px'
  866. 864.  -     }
  867. 865.  -   });
  868. 866.  - },
  869. 867.  -
  870. 868.  - showStatusBox: function() {
  871. 869.  -   return !showBox('bugs', {act: 'status_box', id: cur.bug_id}, {
  872. 870.  -     stat: ['ui_controls.js', 'ui_controls.css'],
  873. 871.  -     params: {
  874. 872.  -       width: 500,
  875. 873.  -       hideButtons: true,
  876. 874.  -       bodyStyle: 'border: 0px; padding: 0px'
  877. 875.  -     }
  878. 876.  -   });
  879. 877.  - },
  880. 878.  -
  881. 879.  - saveStatus: function() {
  882. 880.  -   var query = {act: 'status', hash: cur.hashes.save_hash, status: cur.statusSelect.val(), id: cur.bug_id, text: val('bugs_new_text')};
  883. 881.  -   ajax.post('bugs', query, {
  884. 882.  -     showProgress: lockButton.pbind('bugs_submit_button'),
  885. 883.  -     hideProgress: function() {
  886. 884.  -       if (curBox()) curBox().hide();
  887. 885.  -     },
  888. 886.  -     onDone: function(description, data, msg) {
  889. 887.  -       if (description) ge('bugs_view_description').innerHTML = description;
  890. 888.  -       if (data) ge('bugs_view_data').innerHTML = data;
  891. 889.  -       if (msg) Bugs.showMsg(msg);
  892. 890.  -     },
  893. 891.  -     onFail: function(msg) {
  894. 892.  -       return Bugs.showError(msg);
  895. 893.  -     }
  896. 894.  -   });
  897. 895.  -   return false;
  898. 896.  - },
  899. 897.  -
  900. 898.  - declineToSupport: function(hash, msg) {
  901. 899.  -   if (cur.declineStarted || !hash || !msg) return false;
  902. 900.  -   cur.declineStarted = true;
  903. 901.  -   var query = {act: 'status', hash: hash, status: 4, id: cur.bug_id, text: msg};
  904. 902.  -   ajax.post('bugs', query, {
  905. 903.  -     hideProgress: function() {
  906. 904.  -       cur.declineStarted = false;
  907. 905.  -     },
  908. 906.  -     onDone: function(description, data, msg) {
  909. 907.  -       if (description) ge('bugs_view_description').innerHTML = description;
  910. 908.  -       if (data) ge('bugs_view_data').innerHTML = data;
  911. 909.  -       if (msg) Bugs.showMsg(msg);
  912. 910.  -     },
  913. 911.  -     onFail: function(msg) {
  914. 912.  -       return Bugs.showError(msg);
  915. 913.  -     }
  916. 914.  -   });
  917. 915.  -   return false;
  918. 916.  - },
  919. 917.  -
  920. 918.  - deleteBug: function(btn) {
  921. 919.  -   ajax.post('bugs', {act: 'delete', id: cur.bug_id, hash: cur.hashes.delete_hash}, {
  922. 920.  -     showProgress: lockButton.pbind(btn),
  923. 921.  -     hideProgress: function() {
  924. 922.  -       if (curBox()) curBox().hide();
  925. 923.  -     }
  926. 924.  -   });
  927. 925.  - },
  928. 926.  -
  929. 927.  - deleteReply: function(replyId, hash) {
  930. 928.  -   var el = ge('bug_update'+replyId);
  931. 929.  -   if (!el) return;
  932. 930.  -   ajax.post('bugs', {act: 'delete_reply', id: replyId, hash: hash}, {
  933. 931.  -     onDone: function(msg) {
  934. 932.  -       cur.deletedReplies = cur.deletedReplies || {};
  935. 933.  -       cur.deletedReplies[replyId] = el.innerHTML;
  936. 934.  -       el.innerHTML = msg;
  937. 935.  -     },
  938. 936.  -     onFail: function(msg) {
  939. 937.  -       return Bugs.showError(msg);
  940. 938.  -     }
  941. 939.  -   });
  942. 940.  -   return false;
  943. 941.  - },
  944. 942.  -
  945. 943.  - restoreReply: function(replyId, hash) {
  946. 944.  -   var el = ge('bug_update'+replyId);
  947. 945.  -   if (!el) return;
  948. 946.  -   ajax.post('bugs', {act: 'restore_reply', id: replyId, hash: hash}, {
  949. 947.  -     onDone: function() {
  950. 948.  -       el.innerHTML = (cur.deletedReplies || {})[replyId];
  951. 949.  -     },
  952. 950.  -     onFail: function(msg) {
  953. 951.  -       return Bugs.showError(msg);
  954. 952.  -     }
  955. 953.  -   });
  956. 954.  -   return false;
  957. 955.  - },
  958. 956.  -
  959. 957.  - editReply: function(replyId, hash) {
  960. 958.  -   if (cur.editStarted) return false;
  961. 959.  -   if (cur.editing) {
  962. 960.  -     this.cancelEditReply(cur.editing);
  963. 961.  -   }
  964. 962.  -   var cont = geByClass1('bugs_update_text', ge('bug_update'+replyId));
  965. 963.  -   var mrg = '1px 0 0 -3px', wdt = '385px', btn_mrg = '8px';
  966. 964.  -   if (browser.mozilla) {
  967. 965.  -     mrg = '1px 0 0 -4px';
  968. 966.  -   } else if (browser.opera) {
  969. 967.  -     mrg = '2px 0 0 -3px';
  970. 968.  -   } else if (browser.msie) {
  971. 969.  -     btn_mrg = '10px';
  972. 970.  -   }
  973. 971.  -
  974. 972.  -   cur.editStarted = true;
  975. 973.  -   ajax.post('bugs', {act: 'get_reply', id: replyId, hash: hash}, {
  976. 974.  -     onDone: function(t) {
  977. 975.  -       delete cur.editStarted;
  978. 976.  -       cont.parentNode.insertBefore(ce('div', {id: 'bug_update_edit'+replyId, innerHTML: '\
  979. 977.  - <textarea class="bug_edit_update" id="bug_update'+replyId+'edit" onkeydown="Bugs.saveReply(event, \''+replyId+'\', \''+hash+'\')" style="width: '+wdt+'; margin: '+mrg+';">' + t + '</textarea>\
  980. 978.  - <div style="margin: '+btn_mrg+' 0 8px -3px; height: 23px">\
  981. 979.  -   <div class="fl_l button_blue">\
  982. 980.  -     <button id="save_butn'+replyId+'" onclick="Bugs.doSaveReply(\''+replyId+'\', \''+hash+'\')">'+getLang('global_save')+'</button>\
  983. 981.  -   </div>\
  984. 982.  -   <div class="fl_l button_gray" style="margin-left: 10px;">\
  985. 983.  -     <button id="cancel_butn'+replyId+'" onclick="Bugs.cancelEditReply(\''+replyId+'\')">'+getLang('global_cancel')+'</button>\
  986. 984.  -   </div>\
  987. 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>\
  988. 986.  - </div>'}, {display: 'none'}), cont);
  989. 987.  -       autosizeSetup(ge('bug_update'+replyId+'edit'), {minHeight: 17});
  990. 988.  -
  991. 989.  -       setTimeout(function() {
  992. 990.  -         show(cont.previousSibling);
  993. 991.  -         hide(geByClass1('bugs_update_text', ge('bug_update'+replyId)));
  994. 992.  -         hide(geByClass1('bugs_update_info', ge('bug_update'+replyId)));
  995. 993.  -         elfocus('bug_update'+replyId+'edit');
  996. 994.  -         cur.editing = replyId;
  997. 995.  -       }, 0);
  998. 996.  -     },
  999. 997.  -     onFail: function(error) {
  1000. 998.  -       delete cur.editStarted;
  1001. 999.  -       return Bugs.showError(error);
  1002. 1000.  -     }
  1003. 1001.  -   });
  1004. 1002.  -   return false;
  1005. 1003.  - },
  1006. 1004.  -
  1007. 1005.  - saveReply: function(event, replyId, hash) {
  1008. 1006.  -   if (event && event.keyCode == 27) {
  1009. 1007.  -     this.cancelEditReply(cur.editing);
  1010. 1008.  -     return;
  1011. 1009.  -   }
  1012. 1010.  -   if (event && event.ctrlKey && (event.keyCode == 10 || event.keyCode == 13)) {
  1013. 1011.  -     this.doSaveReply(replyId, hash);
  1014. 1012.  -   }
  1015. 1013.  - },
  1016. 1014.  -
  1017. 1015.  - cancelEditReply: function(replyId) {
  1018. 1016.  -   show(geByClass1('bugs_update_text', ge('bug_update'+replyId)));
  1019. 1017.  -   show(geByClass1('bugs_update_info', ge('bug_update'+replyId)));
  1020. 1018.  -   re('bug_update_edit'+replyId);
  1021. 1019.  -   delete cur.editing;
  1022. 1020.  - },
  1023. 1021.  -
  1024. 1022.  - doSaveReply: function(replyId, hash) {
  1025. 1023.  -   var v = trim(val('bug_update'+replyId+'edit'));
  1026. 1024.  -   ajax.post('bugs', {act: 'edit_reply', id: replyId, text: v, hash: hash}, {
  1027. 1025.  -     onDone: function(text) {
  1028. 1026.  -       var cont = geByClass1('bugs_update_text', ge('bug_update'+replyId)), acts = geByClass1('bugs_update_info', ge('bug_update'+replyId));
  1029. 1027.  -       cont.innerHTML = text;
  1030. 1028.  -       show(cont, acts);
  1031. 1029.  -       re('bug_update_edit'+replyId);
  1032. 1030.  -       delete cur.editing;
  1033. 1031.  -     },
  1034. 1032.  -     onFail: function(error) {
  1035. 1033.  -       return Bugs.showError(error);
  1036. 1034.  -     },
  1037. 1035.  -     showProgress: lockButton.pbind(ge('save_butn'+replyId)),
  1038. 1036.  -     hideProgress: unlockButton.pbind(ge('save_butn'+replyId))
  1039. 1037.  -   });
  1040. 1038.  - },
  1041. 1039.  -
  1042. 1040.  - showPhoto: function(photoRaw, listId, opts) {
  1043. 1041.  -   var cbox = curBox();
  1044. 1042.  -   cur.boxBackup = document.createDocumentFragment();
  1045. 1043.  -   var boxBody = cbox.bodyNode;
  1046. 1044.  -   cur.scrollTopBack = boxLayerWrap.scrollTop;
  1047. 1045.  -   opts.onShow = function() {
  1048. 1046.  -     while(boxBody.firstChild) {
  1049. 1047.  -       cur.boxBackup.appendChild(boxBody.firstChild);
  1050. 1048.  -     }
  1051. 1049.  -   }
  1052. 1050.  -   opts.onHide = function() {
  1053. 1051.  -     box = showFastBox('', '');
  1054. 1052.  -     box.setOptions({
  1055. 1053.  -       hideButtons: true,
  1056. 1054.  -       title: false,
  1057. 1055.  -       width: 500,
  1058. 1056.  -       bodyStyle: 'border: 0px; padding: 0px;'
  1059. 1057.  -     });
  1060. 1058.  -     box.bodyNode.appendChild(cur.boxBackup);
  1061. 1059.  -     box.setOptions({}); // clear box coords
  1062. 1060.  -     boxLayerWrap.scrollTop = cur.scrollTopBack;
  1063. 1061.  -   }
  1064. 1062.  -   return showPhoto(photoRaw, listId, opts);
  1065. 1063.  - },
  1066. 1064.  -
  1067. 1065.  - selectTag: function(tag, e) {
  1068. 1066.  -   if (checkEvent(e) || cur.type == 'subscriptions') return false;
  1069. 1067.  -   cur.tags = cur.tags || {};
  1070. 1068.  -   cur.tags[tag] = 1;
  1071. 1069.  -   addClass(ge('filter_tag'+tag), 'summary_tab_sel');
  1072. 1070.  -   removeClass(ge('filter_tag'+tag), 'summary_tab');
  1073. 1071.  -   ge('bugs_selected_tags').appendChild(ge('filter_tag'+tag));
  1074. 1072.  -   toggle('selected_tags_wrap', geByClass('bugs_filter_tag', ge('bugs_selected_tags')).length);
  1075. 1073.  -   toggle('tags_wrap', geByClass('bugs_filter_tag', ge('bugs_tags')).length);
  1076. 1074.  -   Bugs.updateAllSearch(ge('bugs_search_input'));
  1077. 1075.  - },
  1078. 1076.  - deselectTag: function(tag, e) {
  1079. 1077.  -   if (checkEvent(e) || cur.type == 'subscriptions') return false;
  1080. 1078.  -   delete cur.tags[tag];
  1081. 1079.  -   removeClass(ge('filter_tag'+tag), 'summary_tab_sel');
  1082. 1080.  -   addClass(ge('filter_tag'+tag), 'summary_tab');
  1083. 1081.  -   ge('bugs_tags').appendChild(ge('filter_tag'+tag));
  1084. 1082.  -   toggle('selected_tags_wrap', geByClass('bugs_filter_tag', ge('bugs_selected_tags')).length);
  1085. 1083.  -   toggle('tags_wrap', geByClass('bugs_filter_tag', ge('bugs_tags')).length);
  1086. 1084.  -   Bugs.updateAllSearch(ge('bugs_search_input'));
  1087. 1085.  - },
  1088. 1086.  -
  1089. 1087.  - showSubscribed: function(bug_id) {
  1090. 1088.  -   return !showBox('bugs', {act: 'subscribers_box', id: bug_id || cur.bug_id}, {
  1091. 1089.  -     params: {
  1092. 1090.  -       width: 500,
  1093. 1091.  -       bodyStyle: 'padding: 0px'
  1094. 1092.  -     }
  1095. 1093.  -   });
  1096. 1094.  - },
  1097. 1095.  -
  1098. 1096.  - registerDragZone: function(opts) {
  1099. 1097.  -   addEvent(document, "dragenter dragover", function(ev) {
  1100. 1098.  -     if (Bugs.checkHtml5Uploader()) {
  1101. 1099.  -       setTimeout(function() {
  1102. 1100.  -         clearTimeout(cur.dragTimer);
  1103. 1101.  -         delete cur.dragTimer;
  1104. 1102.  -       }, 0);
  1105. 1103.  -       opts.on(ev);
  1106. 1104.  -       return cancelEvent(ev);
  1107. 1105.  -     }
  1108. 1106.  -   });
  1109. 1107.  -   addEvent(document, "dragleave", function(ev) {
  1110. 1108.  -     if (cur.dragTimer) {
  1111. 1109.  -       clearTimeout(cur.dragTimer);
  1112. 1110.  -       delete cur.dragTimer;
  1113. 1111.  -     }
  1114. 1112.  -     cur.dragTimer = setTimeout(function() {
  1115. 1113.  -       opts.un(ev);
  1116. 1114.  -     }, 100);
  1117. 1115.  -     cancelEvent(ev);
  1118. 1116.  -   });
  1119. 1117.  -   addEvent(document, "drop", function(ev) {
  1120. 1118.  -     opts.un(ev, true);
  1121. 1119.  -     opts.drop(ev.dataTransfer.files, ev);
  1122. 1120.  -     return cancelEvent(ev);
  1123. 1121.  -   });
  1124. 1122.  -   cur.destroy.push(function() {
  1125. 1123.  -     removeEvent(document, "dragenter dragover");
  1126. 1124.  -     removeEvent(document, "dragleave");
  1127. 1125.  -     removeEvent(document, "drop");
  1128. 1126.  -   });
  1129. 1127.  - },
  1130. 1128.  -
  1131. 1129.  - checkHtml5Uploader: function() {
  1132. 1130.  -   return (window.XMLHttpRequest || window.XDomainRequest) && (window.FormData || window.FileReader && (window.XMLHttpRequest && XMLHttpRequest.sendAsBinary ||  window.ArrayBuffer && window.Uint8Array && (window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder)));
  1133. 1131.  - },
  1134. 1132.  -
  1135. 1133.  - _eof: 1};try{stManager.done('bugs.js');}catch(e){}
  1136. ------
  1137. Файл - dev.js (Старый размер - 23687 | Новый - 3160):
  1138. 3.  -   cur.searchEl = ge('dev_search');
  1139. 4.  -   placeholderSetup(cur.searchEl, {back: true});
  1140. 5.  -
  1141. 6.  -   cur.nav.push(function(changed, old, n) {
  1142. 7.  -     if ((old[0] == 'dev' || old[0] == 'dev/') && !old.act) {
  1143. 8.  -       return true;
  1144. 9.  -     }
  1145. 10.  -     if (n[0].substr(0, 4) == 'dev/' || (n[0] == 'dev' && n.act) && cur.page) {
  1146. 11.  -       var page = n[0].substr(4);
  1147. 12.  -       if (page) {
  1148. 13.  -         Dev.switchPage(page, n.edit, n);
  1149. 14.  -         return false;
  1150. 15.  -       }
  1151. 16.  -     }
  1152. 17.  -   });
  1153. 18.  -
  1154. 19.  -   var onKey = function(e) {
  1155. 20.  -     if (cur.edit && e.keyCode == 83 && (e.ctrlKey || e.metaKey)) {
  1156. 21.  -       var btn = ge('dev_save_button');
  1157. 22.  -       btn.click();
  1158. 23.  -       return cancelEvent(e);
  1159. 24.  -     }
  1160. 25.  -     if (e.keyCode == KEY.RETURN && hasClass(e.target, 'dev_param_field')) {
  1161. 26.  -       ge('dev_req_run_btn').click();
  1162. 27.  -     }
  1163. 28.  -   }
  1164. 29.  -   addEvent(document, 'keydown', onKey);
  1165. 30.  -   cur.destroy.push(function() {
  1166. 31.  -     removeEvent(document, 'keydown', onKey);
  1167. 32.  -   });
  1168. 33.  -
  1169. 34.  -   Dev.initPage(opts);
  1170. 35.  -   if (cur.page) {
  1171. 36.  -     Dev.initSuggestions();
  1172. 37.  -   }
  1173. 38.  - },
  1174. 39.  -
  1175. 40.  - initPage: function(opts) {
  1176. 44.  -     var simular = ge('dev_edit_simular');
  1177. 45.  -     placeholderSetup(simular, {back: true});
  1178. 48.  +       debugLog(textareas[i]);
  1179. 51.  -     elfocus(desc);
  1180. 52.  -   }
  1181. 53.  -   if (opts.res) {
  1182. 54.  -     Dev.requestResult(parseJSON(opts.res));
  1183. 55.  +     elfocus(desc)
  1184. 58.  -   elfocus(cur.searchEl);
  1185. 59.  -   cur.editors = [];
  1186. 60.  -   if (opts.editors) {
  1187. 61.  -     for(var i in opts.editors) {
  1188. 62.  -       var ed = opts.editors[i];
  1189. 63.  -       cur.initEdit.apply(cur.initEdit, ed);
  1190. 64.  -     }
  1191. 65.  -   }
  1192. 66.  -
  1193. 67.  - },
  1194. 68.  -
  1195. 69.  - switchPage: function(page, edit, opts) {
  1196. 70.  -   cur.page = page;
  1197. 71.  -   var pageRaw = page.split('.');
  1198. 72.  -   Dev.switchSection(pageRaw[0], false, true)
  1199. 73.  -
  1200. 74.  -   var curSel = geByClass1('dev_mlist_sel', ge('dev_mlist_cont'));
  1201. 75.  -   removeClass(curSel, 'dev_mlist_sel');
  1202. 76.  -   var newSel = ge('dev_mlist_'+page.replace('.', '_'));
  1203. 77.  -   if (newSel) {
  1204. 78.  -     addClass(newSel, 'dev_mlist_sel');
  1205. 79.  -   }
  1206. 80.  -
  1207. 81.  -   var actsCont = ge('dev_page_acts');
  1208. 82.  -   var pageOpts = {preload: 1};
  1209. 83.  -   if (opts && opts.translate) {
  1210. 84.  -     pageOpts.translate = opts.translate;
  1211. 85.  -   }
  1212. 86.  -   if (opts && opts.ver) {
  1213. 87.  -     pageOpts.ver = opts.ver;
  1214. 88.  -   }
  1215. 89.  -   if (edit) {
  1216. 90.  -     pageOpts.edit = 1;
  1217. 91.  -   }
  1218. 92.  -   ajax.post('/dev/'+page, pageOpts, {
  1219. 93.  -     onDone: function(title, text, acts, edit_sections, isPage, opts, js) {
  1220. 94.  -       ge('dev_header_name').innerHTML = title;
  1221. 95.  -       ge('dev_page_cont').innerHTML = text;
  1222. 96.  -       ge('dev_page_acts').innerHTML = acts;
  1223. 97.  -       ge('dev_page_sections').innerHTML = edit_sections;
  1224. 98.  -       delete pageOpts.preload;
  1225. 99.  -       delete cur.verDD;
  1226. 100.  -       nav.setLoc('dev/'+page+nav.toStr(pageOpts));
  1227. 101.  -       if (isPage) {
  1228. 102.  -         hide('dev_method_narrow');
  1229. 103.  -         show('dev_page_narrow');
  1230. 104.  -       } else {
  1231. 105.  -         show('dev_method_narrow');
  1232. 106.  -         hide('dev_page_narrow');
  1233. 107.  -       }
  1234. 108.  -       Dev.initPage(opts);
  1235. 109.  -       if (js) {
  1236. 110.  -         eval('(function(){' + js + ';})()');
  1237. 111.  -       }
  1238. 112.  -       scrollToTop(0);
  1239. 113.  -     },
  1240. 114.  -     showProgress: function() {
  1241. 115.  -       if (newSel && !cur.devSectLoader) {
  1242. 116.  -         cur.devSectLoader = actsCont.innerHTML;
  1243. 117.  -         actsCont.innerHTML = '<div class="progress_inline dev_sect_load fl_r"></div>';
  1244. 118.  -       }
  1245. 119.  -     },
  1246. 120.  -     hideProgress: function() {
  1247. 121.  -       if (cur.devSectLoader) {
  1248. 122.  -         actsCont.innerHTML = cur.devSectLoader;
  1249. 123.  -         cur.devSectLoader = false;
  1250. 124.  -       }
  1251. 125.  -     }
  1252. 126.  -   });
  1253. 127.  - },
  1254. 128.  -
  1255. 129.  - switchSection: function(sect, openSect, onlyIfSect) {
  1256. 130.  -   if (cur.sect == sect) {
  1257. 131.  -     return;
  1258. 132.  -   }
  1259. 133.  -   if (!cur.sections || !cur.sections[sect]) {
  1260. 134.  -     if (onlyIfSect) {
  1261. 135.  -       return;
  1262. 136.  -     }
  1263. 137.  -     sect = 'users';
  1264. 138.  -   }
  1265. 139.  -   var rows = cur.sections[sect]['list'];
  1266. 140.  -   var name = cur.sections[sect]['name'];
  1267. 141.  -   ge('dev_section_menu').innerHTML = name;
  1268. 142.  -   if (cur.methodsDD && cur.methodsDD.header && cur.methodsDD.header.firstChild) {
  1269. 143.  -     cur.methodsDD.header.firstChild.innerHTML = name;
  1270. 144.  -   }
  1271. 145.  -   var html = '';
  1272. 146.  -   var firstMethod = false;
  1273. 147.  -   for (var i in rows) {
  1274. 148.  -     var name = rows[i];
  1275. 149.  -     if (!firstMethod) {
  1276. 150.  -       firstMethod = name;
  1277. 151.  -     }
  1278. 152.  -     html += '<a id="dev_mlist_'+(name.replace(/\./g, '_'))+'" class="dev_mlist_item'+(cur.page == name ? ' dev_mlist_sel' : '')+'" href="/dev/'+name+'">'+name+'</a>';
  1279. 153.  -   }
  1280. 154.  -   var mlist = ge('dev_mlist_list');
  1281. 155.  -   mlist.innerHTML = html;
  1282. 156.  -   cur.sect = sect;
  1283. 157.  -   if (openSect) {
  1284. 158.  -     nav.go('/dev/'+sect);
  1285. 159.  -   }
  1286. 169.  -   if (nav.objLoc.translate) {
  1287. 170.  -     params.translate = parseInt(nav.objLoc.translate);
  1288. 171.  -   }
  1289. 175.  -   }
  1290. 176.  -   if (cur.editors) {
  1291. 177.  -     for (var i in cur.editors) {
  1292. 178.  -       var ed = cur.editors[i];
  1293. 179.  -       if (ed) {
  1294. 180.  -         params[Dev.getParamName(ed.cont)] = ed.val();
  1295. 181.  -
  1296. 182.  -       }
  1297. 183.  -       debugLog('ed', ed);
  1298. 184.  -     }
  1299. 199.  -             parents.push(kItem[2]);
  1300. 200.  +             parents.push(kItem[1]);
  1301. 220.  -
  1302. 221.  -   var el = cont;
  1303. 222.  -   var nextEl = el.nextSibling;
  1304. 223.  -   while (nextEl) {
  1305. 224.  -     if (hasClass(nextEl, 'dev_sel_section')) {
  1306. 225.  -       for (var i in cur.dropDowns) {
  1307. 226.  -         if (cur.dropDowns[i].container.parentNode == nextEl) {
  1308. 227.  -           cur.dropDowns.splice(i ,1);
  1309. 228.  -         }
  1310. 229.  -       }
  1311. 230.  -       re(nextEl);
  1312. 231.  -     } else {
  1313. 232.  -       el = nextEl;
  1314. 233.  +   var el = cont.nextSibling;
  1315. 234.  +   while(el) {
  1316. 235.  +     if (hasClass(el, 'dev_sel_section')) {
  1317. 236.  +       re(el);
  1318. 238.  -     nextEl = el.nextSibling;
  1319. 239.  +     el = el.nextSibling;
  1320. 241.  -   if (parseInt(v) == -1) {
  1321. 242.  -     var name = '';
  1322. 243.  -   } else {
  1323. 244.  +   if (parseInt(v) != -1) {
  1324. 248.  -         name = dd.defaultItems[i][2];
  1325. 249.  +         name = dd.defaultItems[i][1];
  1326. 252.  -   }
  1327. 253.  -   var prg = ge('dev_sections_progress');
  1328. 254.  -   var parents = [];
  1329. 255.  -   if (cur.dropDowns) {
  1330. 256.  -     for (var i in cur.dropDowns) {
  1331. 257.  -       var iItem = cur.dropDowns[i];
  1332. 258.  -       var value = iItem.val();
  1333. 259.  -       if (parseInt(value) == -1) {
  1334. 260.  -         break;
  1335. 261.  -       } else {
  1336. 262.  -         for(var k in iItem.options.defaultItems) {
  1337. 263.  -           var kItem = iItem.options.defaultItems[k];
  1338. 264.  -           debugLog(kItem);
  1339. 265.  -           if (kItem[0] == value) {
  1340. 266.  -             parents.push(kItem[2]);
  1341. 267.  -             break;
  1342. 268.  -           }
  1343. 269.  -         }
  1344. 270.  -       }
  1345. 271.  +     if (!name) {
  1346. 272.  +       return;
  1347. 274.  +     var prg = ge('dev_sections_progress');
  1348. 275.  +     ajax.post('dev', {act: 'a_get_sections', name: name}, {
  1349. 276.  +       onDone: function(rows, js) {
  1350. 277.  +         debugLog(rows, js);
  1351. 278.  +         cont.parentNode.insertBefore(cf(rows), prg);
  1352. 279.  +         eval('(function(){' + js + ';})()');
  1353. 280.  +       },
  1354. 281.  +       showProgress: show.pbind(prg),
  1355. 282.  +       hideProgress: hide.pbind(prg)
  1356. 283.  +     })
  1357. 285.  -   ajax.post('dev', {act: 'a_get_sections', name: name, page: cur.page, parents: parents.join(','), hash: cur.editHash}, {
  1358. 286.  -     onDone: function(rows, js) {
  1359. 287.  -       cont.parentNode.insertBefore(cf(rows), prg);
  1360. 288.  -       eval('(function(){' + js + ';})()');
  1361. 289.  -     },
  1362. 290.  -     showProgress: show.pbind(prg),
  1363. 291.  -     hideProgress: hide.pbind(prg)
  1364. 292.  -   });
  1365. 294.  -
  1366. 295.  - methodRun: function(hash, btn) {
  1367. 296.  -   var params = {hash: hash};
  1368. 297.  -   var paramsFields = geByClass('dev_param_field', ge('dev_params_wrap'));
  1369. 299.  -   var params = {act: 'a_run_method', method: cur.page, hash: hash};
  1370. 300.  -   for (var i in paramsFields) {
  1371. 301.  -     var el = paramsFields[i];
  1372. 302.  -     var v = val(el);
  1373. 303.  -     if (v !== '') {
  1374. 304.  -       params['param_'+el.id.substr(10)] = v;
  1375. 305.  -     }
  1376. 306.  -   }
  1377. 307.  -   if (cur.edit) {
  1378. 308.  -     params['_edit'] = '1';
  1379. 309.  -   }
  1380. 310.  -   if (cur.verDD) {
  1381. 311.  -     params['param_v'] = cur.verDD.val();
  1382. 312.  -   }
  1383. 313.  -   ajax.post('dev', params, {
  1384. 314.  -     onDone: function(code) {
  1385. 315.  -       var res = parseJSON(code);
  1386. 316.  -       Dev.requestResult(res);
  1387. 317.  -     },
  1388. 318.  -     onFail: function(msg) {
  1389. 319.  -       setTimeout(showFastBox({title: getLang('global_error'), width: 500}, '<div style="word-wrap: break-word;">'+msg+'</div>').hide, 2000);
  1390. 320.  -       return true;
  1391. 321.  -     },
  1392. 322.  -     showProgress: lockButton.pbind(btn),
  1393. 323.  -     hideProgress: unlockButton.pbind(btn)
  1394. 324.  -   });
  1395. 325.  + methodRun: function(hash) {
  1396. 326.  +   headNode.appendChild(ce('script', {
  1397. 327.  +     type: 'text/javascript',
  1398. 328.  +     src: '/dev?act=a_run_method&method='+cur.page+'&hash='+hash
  1399. 329.  +   }));
  1400. 332.  - wrapObject: function(obj, rootNode) {
  1401. 333.  -   var html = '';
  1402. 334.  -   if (!cur.wrapNum) {
  1403. 335.  -     cur.wrapNum = 0;
  1404. 336.  -   }
  1405. 337.  -   switch (typeof obj) {
  1406. 338.  -     case 'object':
  1407. 339.  -       var items = [];
  1408. 340.  -       if (Object.prototype.toString.call( obj ) == '[object Array]') {
  1409. 341.  -         for (var i in obj) {
  1410. 342.  -           items.push(Dev.wrapObject(obj[i]));
  1411. 343.  -         }
  1412. 344.  -         html += '<span class="dev_result_block"><span class="dev_result_lbracket">[</span>'+items.join(', ')+'<span class="dev_result_lbracket">]</span></span>';
  1413. 345.  -       } else {
  1414. 346.  -         for (var i in obj) {
  1415. 347.  -           items.push('<span class="dev_result_key">'+i+':</span> '+Dev.wrapObject(obj[i]));
  1416. 348.  -         }
  1417. 349.  -         var res = '<div class="dev_result_obj">'+items.join(',<br/>')+'</div>';
  1418. 350.  -         if (rootNode) {
  1419. 351.  -           html += res;
  1420. 352.  -         } else {
  1421. 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>';
  1422. 354.  -           cur.wrapNum += 1;
  1423. 355.  -         }
  1424. 356.  -       }
  1425. 357.  -       break;
  1426. 358.  -     case 'string':
  1427. 359.  -       var str = clean(obj);
  1428. 360.  -       if (obj.match(/^https?:\/\/.*/)) {
  1429. 361.  -         str = '<a href="'+str+'" target="_blank">'+str+'</a>';
  1430. 362.  -       }
  1431. 363.  -       str = str.replace(/\n/g, '<br />');
  1432. 364.  -       html += '<span class="dev_result_str">\''+str+'\'</span>';
  1433. 365.  -       break;
  1434. 366.  -     case 'number':
  1435. 367.  -       html += '<span class="dev_result_num">'+obj+'</span>';
  1436. 368.  -       break;
  1437. 369.  -     case 'boolean':
  1438. 370.  -       html += '<span class="dev_result_bool">'+obj+'</span>';
  1439. 371.  -     default:
  1440. 372.  -       debugLog('unknown type', typeof obj);
  1441. 373.  -       break;
  1442. 374.  -   }
  1443. 375.  -   if (rootNode && obj.response && obj.response['upload_url']) {
  1444. 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>';
  1445. 377.  -   }
  1446. 378.  -   return html;
  1447. 379.  + renderJson: function() {
  1448. 383.  -   var html = Dev.wrapObject(res, true);
  1449. 384.  -   ge('dev_result').innerHTML = html;
  1450. 385.  - },
  1451. 386.  -
  1452. 387.  - resultMove: function(el) {
  1453. 388.  -   var res = ge('dev_result');
  1454. 389.  -   while(el) {
  1455. 390.  -     if (hasClass(el, 'dev_result_block')) {
  1456. 391.  -       addClass(el, 'dev_result_highlight')
  1457. 392.  -       break;
  1458. 393.  -     }
  1459. 394.  -     el = el.parentNode;
  1460. 395.  -     if (el == res) {
  1461. 396.  -       break;
  1462. 397.  -     }
  1463. 398.  -   }
  1464. 399.  -   if (cur.highLighted != el) {
  1465. 400.  -     removeClass(cur.highLighted, 'dev_result_highlight')
  1466. 401.  -     cur.highLighted = el;
  1467. 402.  -   }
  1468. 403.  - },
  1469. 404.  -
  1470. 405.  - onSearchChange: function(el, ev) {
  1471. 406.  -   if (ev) {
  1472. 407.  -     switch(ev.keyCode) {
  1473. 408.  -       case KEY.DOWN:
  1474. 409.  -         return Dev.selSuggRow(false, 1, ev);
  1475. 410.  -         break;
  1476. 411.  -       case KEY.UP:
  1477. 412.  -         return Dev.selSuggRow(false, -1, ev);
  1478. 413.  -         break;
  1479. 414.  -       case KEY.RETURN:
  1480. 415.  -         return Dev.onSearchSelect();
  1481. 416.  -         break;
  1482. 417.  -       case KEY.ESC:
  1483. 418.  -         val(el, '');
  1484. 419.  -         break;
  1485. 420.  -     }
  1486. 421.  -   }
  1487. 422.  -   setTimeout(function() {
  1488. 423.  -     var v = val(el).toLowerCase().replace(/[^a--я]+/g, '');
  1489. 424.  -     if (v) {
  1490. 425.  -       if (v == cur.prevSearch) {
  1491. 426.  -         return show('dev_search_suggest');;
  1492. 427.  -       }
  1493. 428.  -       var reStr = '';
  1494. 429.  -       for (var i = 0; i < v.length; i++) {
  1495. 430.  -         reStr += v.substr(i, 1)+'.*?';
  1496. 431.  -       }
  1497. 432.  -       var regEx = new RegExp('.*?('+reStr+')', 'i');
  1498. 433.  -       var regExPrior = new RegExp('^('+reStr+')', 'i');
  1499. 434.  -       var found = [];
  1500. 435.  -       for(var i in cur.sections) {
  1501. 436.  -         var list = cur.sections[i].list;
  1502. 437.  -         for (var k in list) {
  1503. 438.  -           var method = list[k];
  1504. 439.  -           var m = method.match(regExPrior);
  1505. 440.  -           if (m) {
  1506. 441.  -             found.push([method, method.length]);
  1507. 442.  -           } else {
  1508. 443.  -             var m = method.match(regEx);
  1509. 444.  -             if (m) {
  1510. 445.  -               found.push([method, method.length+2]);
  1511. 446.  -             }
  1512. 447.  -           }
  1513. 448.  -         }
  1514. 449.  -       }
  1515. 450.  -       found = found.sort(function(a, b) {
  1516. 451.  -         if (a[1] < b[1]) {
  1517. 452.  -           return -1;
  1518. 453.  -         } else if (a[1] > b[1]) {
  1519. 454.  -           return 1
  1520. 455.  -         } else {
  1521. 456.  -           return 0;
  1522. 457.  -         }
  1523. 458.  -       });
  1524. 459.  -       var foundList = [];
  1525. 460.  -       for (var i in found) {
  1526. 461.  -         foundList.push(found[i][0])
  1527. 462.  -       }
  1528. 463.  -       Dev.showSuggestions(foundList, v);
  1529. 464.  -     } else {
  1530. 465.  -       Dev.showSuggestions();
  1531. 466.  -     }
  1532. 467.  -     cur.prevSearch = v;
  1533. 468.  -   }, 0);
  1534. 469.  - },
  1535. 470.  -
  1536. 471.  - initSuggestions: function() {
  1537. 472.  -   var cont = ge('dev_search_suggest_list');
  1538. 473.  -   debugLog('init sugg');
  1539. 474.  -   stManager.add(['notifier.css', 'notifier.js'], function() {
  1540. 475.  -     debugLog('go next');
  1541. 476.  -     cur.scroll = new Scrollbar(cont, {
  1542. 477.  -       prefix: 'fc_',
  1543. 478.  -       nomargin: true,
  1544. 479.  -       global: true,
  1545. 480.  -       nokeys: true,
  1546. 481.  -       right: vk.rtl ? 'auto' : 0,
  1547. 482.  -       left: !vk.rtl ? 'auto' : 0
  1548. 483.  -     });
  1549. 484.  -   });
  1550. 485.  - },
  1551. 486.  -
  1552. 487.  - showSuggestions: function(list, v) {
  1553. 488.  -   if (list && list.length) {
  1554. 489.  -     var cont = ge('dev_search_suggest_list');
  1555. 490.  -     var html = '';
  1556. 491.  -     var reStr = [];
  1557. 492.  -     for (var i = 0; i < v.length; i++) {
  1558. 493.  -       reStr.push(v.substr(i, 1));
  1559. 494.  -     }
  1560. 495.  -     var reg = new RegExp(reStr.join('.*?'), 'i');
  1561. 496.  -     for(var i in list) {
  1562. 497.  -       var name = list[i];
  1563. 498.  -       name = name.replace(reg, function(found) {
  1564. 499.  -         return '<em>'+found+'</em>';
  1565. 500.  -       })
  1566. 501.  -       html += '<a class="dev_search_row" onmousedown="return Dev.onSearchSelect(event);" onmouseover="Dev.selSuggRow(this);">'+name+'</a>';
  1567. 502.  -     }
  1568. 503.  -     cont.innerHTML = html;
  1569. 504.  -     show('dev_search_suggest');
  1570. 505.  -     if (cur.scroll) {
  1571. 506.  -       cur.scroll.scrollTop(0);
  1572. 507.  -       cur.scroll.update(false, true);
  1573. 508.  -     }
  1574. 509.  -   } else {
  1575. 510.  -     hide('dev_search_suggest');
  1576. 511.  -     debugLog('hiden');
  1577. 512.  -   }
  1578. 513.  -
  1579. 514.  - },
  1580. 515.  -
  1581. 516.  - onSearchSelect: function(ev) {
  1582. 517.  -   var cont = ge('dev_search_suggest_list');
  1583. 518.  -   var el = ge('dev_search');
  1584. 519.  -   var curSel = geByClass1('dev_sugg_sel', cont);
  1585. 520.  -   var method = false;
  1586. 521.  -   var q = val(el);
  1587. 522.  -   if (curSel) {
  1588. 523.  -     method = val(curSel).replace(/<[^>]*>/g, '');
  1589. 524.  -   } else {
  1590. 525.  -     firstSel = geByClass1('dev_search_row', cont);
  1591. 526.  -     var methodStr = (val(firstSel) || '').replace(/<[^>]*>/g, '');
  1592. 527.  -     if (methodStr && methodStr.replace(/[\. ]/g, '').toLowerCase().indexOf(q.replace(/[\. ]/g, '').toLowerCase()) === 0) {
  1593. 528.  -       if (methodStr.split('.')[0].toLowerCase().indexOf(q.toLowerCase()) === 0) {
  1594. 529.  -         method = methodStr.split('.')[0];
  1595. 530.  -       } else {
  1596. 531.  -         method = methodStr;
  1597. 532.  -       }
  1598. 533.  -     }
  1599. 534.  -   }
  1600. 535.  -
  1601. 536.  -   if (method) {
  1602. 537.  -     nav.go('dev/'+method);
  1603. 538.  -     val(el, '');
  1604. 539.  -   } else {
  1605. 540.  -     nav.go('dev?act=search&q='+q);
  1606. 541.  -   }
  1607. 542.  -   Dev.onSearchChange(el, ev);
  1608. 543.  -   return cancelEvent(ev);
  1609. 544.  - },
  1610. 545.  -
  1611. 546.  - selSuggRow: function(obj, move, ev) {
  1612. 547.  -   if (!isVisible(ge('dev_search_suggest'))) {
  1613. 548.  -     return false;
  1614. 549.  -   }
  1615. 550.  -   var cont = ge('dev_search_suggest_list');
  1616. 551.  -   var curSel = geByClass1('dev_sugg_sel', cont);
  1617. 552.  -   if (!obj) {
  1618. 553.  -     if (move == 1 && curSel) {
  1619. 554.  -       obj = curSel.nextSibling;
  1620. 555.  -     } else if (move == -1 && curSel) {
  1621. 556.  -       obj = curSel.previousSibling;
  1622. 557.  -       if (!obj) {
  1623. 558.  -         var listRows = geByClass('dev_search_row', cont);
  1624. 559.  -         obj = listRows[listRows.length - 1];
  1625. 560.  -       }
  1626. 561.  -     }
  1627. 562.  -     if (!obj) {
  1628. 563.  -       obj = geByClass1('dev_search_row', cont);
  1629. 564.  -     }
  1630. 565.  -   }
  1631. 566.  -   if (curSel != obj) {
  1632. 567.  -     if (curSel) {
  1633. 568.  -       removeClass(curSel, 'dev_sugg_sel');
  1634. 569.  -     }
  1635. 570.  -     addClass(obj, 'dev_sugg_sel');
  1636. 571.  -     if (move) {
  1637. 572.  -       var y = getXY(obj)[1];
  1638. 573.  -       var stY = getXY(cont)[1];
  1639. 574.  -       var pos = y - stY - cont.scrollTop;
  1640. 575.  -       var minHeight = getSize(obj)[1];
  1641. 576.  -       var maxHeight = 250 - getSize(obj)[1];
  1642. 577.  -       if (pos > maxHeight) {
  1643. 578.  -         cur.scroll.scrollTop(cont.scrollTop + pos - maxHeight);
  1644. 579.  -       } else if (pos < 0) {
  1645. 580.  -         cur.scroll.scrollTop(Math.max(0, cont.scrollTop + pos));
  1646. 581.  -       }
  1647. 582.  -     }
  1648. 583.  -
  1649. 584.  -   }
  1650. 585.  -   return cancelEvent(ev);
  1651. 586.  -
  1652. 587.  - },
  1653. 588.  -
  1654. 589.  - onSearchBlur: function() {
  1655. 590.  -   hide('dev_search_suggest');
  1656. 591.  - },
  1657. 592.  -
  1658. 593.  - checkParamVal: function(obj, ev, type, checks) {
  1659. 594.  -   switch(ev.keyCode) {
  1660. 595.  -     case KEY.UP:
  1661. 596.  -       if (type == 'int' || type == 'positive') {
  1662. 597.  -         val(obj, intval(val(obj)) + 1);
  1663. 598.  -       }
  1664. 599.  -       break;
  1665. 600.  -     case KEY.DOWN:
  1666. 601.  -       if (type == 'int' || type == 'positive') {
  1667. 602.  -         val(obj, intval(val(obj)) - 1);
  1668. 603.  -       }
  1669. 604.  -       break;
  1670. 605.  -   }
  1671. 606.  -   setTimeout(function() {
  1672. 607.  -     var v = val(obj);
  1673. 608.  -     var startVal = v;
  1674. 609.  -     switch(type) {
  1675. 610.  -       case 'int':
  1676. 611.  -         v = (v == '-') ? '-' : intval(v);
  1677. 612.  -         break;
  1678. 613.  -       case 'positive':
  1679. 614.  -         v = positive(v);
  1680. 615.  -         break;
  1681. 616.  -     }
  1682. 617.  -     if (v != startVal) {
  1683. 618.  -       val(obj, v);
  1684. 619.  -     }
  1685. 620.  -
  1686. 621.  -   }, 0)
  1687. 622.  -
  1688. 623.  - },
  1689. 624.  -
  1690. 625.  - toggleMethodListHeader: function(obj) {
  1691. 626.  -   var v = val(obj);
  1692. 627.  -   if (hasClass(obj, 'dev_methods_list_min')) {
  1693. 628.  -     removeClass(obj, 'dev_methods_list_min');
  1694. 629.  -     addClass(obj, 'dev_methods_list_max');
  1695. 630.  -   } else {
  1696. 631.  -     if (!v) {
  1697. 632.  -       addClass(obj, 'dev_methods_list_min');
  1698. 633.  -       removeClass(obj, 'dev_methods_list_max');
  1699. 634.  -     }
  1700. 635.  -   }
  1701. 636.  - },
  1702. 637.  -
  1703. 638.  - showPageSettings: function() {
  1704. 639.  -
  1705. 640.  - },
  1706. 641.  -
  1707. 642.  - reportError: function(address, title) {
  1708. 643.  -   return !showBox('/bugs', {act: 'new_box', doc: address, doc_title: replaceEntities(title)}, {
  1709. 644.  -     stat: ['wide_dd.js', 'wide_dd.css', 'page.css', 'page.js', 'upload.js'],
  1710. 645.  -     cache: 1,
  1711. 646.  -     params: {
  1712. 647.  -       width: 500,
  1713. 648.  -       hideButtons: true,
  1714. 649.  -       bodyStyle: 'border: 0px; padding: 0px'
  1715. 650.  -     }
  1716. 651.  -   });
  1717. 652.  - },
  1718. 653.  -
  1719. 654.  - paletteDown: function(ev, down, y, noChangeColor) {
  1720. 655.  -   var palette = ge('dev_palette');
  1721. 656.  -   var height = getSize(palette)[1];
  1722. 657.  -   if (y === undefined) {
  1723. 658.  -     var y = ev.offsetY || ev.layerY;
  1724. 659.  -   }
  1725. 660.  -   var y = Math.max(0, Math.min(y, height));
  1726. 661.  -   var t =  Math.round(y / (height / 360));
  1727. 662.  -   t = Math.abs(t - 360);
  1728. 663.  -   t = (t == 360)? 0 : t;
  1729. 664.  -   ge('dev_colors').style.backgroundColor = "rgb("+Dev.hsv2rgb(t,100,100)+")";
  1730. 665.  -   if (!noChangeColor) {
  1731. 666.  -     Dev.setColor(Dev.hsv2rgb(t, cur.pickerX, cur.pickerY));
  1732. 667.  -   }
  1733. 668.  -   cur.pickerT = t;
  1734. 669.  -   var pointer = ge('dev_picker1');
  1735. 670.  -   setStyle(pointer, {marginTop: y - 1});
  1736. 671.  -   if (down) {
  1737. 672.  -     var yMain = ev.clientY;
  1738. 673.  -     var onMove = function(evNew) {
  1739. 674.  -       Dev.paletteDown(evNew, false, y + evNew.clientY - yMain);
  1740. 675.  -     }
  1741. 676.  -     addEvent(window, 'mousemove', onMove);
  1742. 677.  -
  1743. 678.  -     addEvent(window, 'mouseup', function(evNew) {
  1744. 679.  -       removeEvent(window, 'mousemove', onMove)
  1745. 680.  -     });
  1746. 681.  -   }
  1747. 682.  -   return cancelEvent(ev);
  1748. 683.  +   debugLog(res);
  1749. 686.  - colorsDown: function(ev, down, x, y, noChangeColor) {
  1750. 687.  -   var pointer = ge('dev_picker2');
  1751. 688.  -   var colors = ge('dev_colors');
  1752. 689.  -   var size = getSize(colors);
  1753. 690.  -   if (x === undefined) {
  1754. 691.  -     var x = ev.offsetX || ev.layerX;
  1755. 692.  -   }
  1756. 693.  -   if (y === undefined) {
  1757. 694.  -     var y = ev.offsetY || ev.layerY;
  1758. 695.  -   }
  1759. 696.  -   y = Math.max(0, Math.min(y, size[1]));
  1760. 697.  -   x = Math.max(0, Math.min(x, size[0]));
  1761. 698.  -   setStyle(pointer, {marginTop: y - 6, marginLeft: x - 7});
  1762. 699.  -   cur.pickerX = x / size[0] * 100;
  1763. 700.  -   cur.pickerY = 100 - y / size[1] * 100;
  1764. 701.  -   if (!noChangeColor) {
  1765. 702.  -     Dev.setColor(Dev.hsv2rgb(cur.pickerT, cur.pickerX, cur.pickerY));
  1766. 703.  -   }
  1767. 704.  -   if (down) {
  1768. 705.  -     var yMain = ev.clientY;
  1769. 706.  -     var xMain = ev.clientX;
  1770. 707.  -     var onMove = function(evNew) {
  1771. 708.  -       Dev.colorsDown(evNew, false, x + evNew.clientX - xMain, y + evNew.clientY - yMain);
  1772. 709.  -     }
  1773. 710.  -     addEvent(window, 'mousemove', onMove);
  1774. 711.  -     addEvent(window, 'mouseup', function(evNew) {
  1775. 712.  -       removeEvent(window, 'mousemove', onMove)
  1776. 713.  + switchSection: function(obj) {
  1777. 714.  +   var oldEl = geByClass1('dev_mlist_shown', ge('dev_sidebar'));
  1778. 715.  +   if (oldEl) {
  1779. 716.  +     slideUp(oldEl, 200, function() {
  1780. 717.  +       removeClass(oldEl, 'dev_mlist_shown')
  1781. 719.  -   }
  1782. 720.  -   return cancelEvent(ev);
  1783. 721.  - },
  1784. 722.  -
  1785. 723.  - hsv2rgb: function (H,S,V){
  1786. 724.  -   debugLog('try', H, S, V);
  1787. 725.  -   var f, p, q , t, lH, R, G, B;
  1788. 726.  -
  1789. 727.  -   S /=100;
  1790. 728.  -   V /=100;
  1791. 729.  -
  1792. 730.  -   lH = Math.floor(H / 60);
  1793. 731.  -
  1794. 732.  -   f = H/60 - lH;
  1795. 733.  -   p = V * (1 - S);
  1796. 734.  -   q = V *(1 - S*f);
  1797. 735.  -   t = V* (1 - (1-f)* S);
  1798. 736.  -
  1799. 737.  -   switch (lH) {
  1800. 738.  -     case 0: R = V; G = t; B = p; break;
  1801. 739.  -     case 1: R = q; G = V; B = p; break;
  1802. 740.  -     case 2: R = p; G = V; B = t; break;
  1803. 741.  -     case 3: R = p; G = q; B = V; break;
  1804. 742.  -     case 4: R = t; G = p; B = V; break;
  1805. 743.  -     case 5: R = V; G = p; B = q; break;
  1806. 744.  -   }
  1807. 745.  -
  1808. 746.  -   return [parseInt(R*255), parseInt(G*255), parseInt(B*255)];
  1809. 747.  - },
  1810. 748.  - rgb2hsv: function(rgb) {
  1811. 749.  -   var rr, gg, bb,
  1812. 750.  -   r = rgb[0] / 255,
  1813. 751.  -   g = rgb[1] / 255,
  1814. 752.  -   b = rgb[2] / 255,
  1815. 753.  -   h, s,
  1816. 754.  -   v = Math.max(r, g, b),
  1817. 755.  -   diff = v - Math.min(r, g, b),
  1818. 756.  -   diffc = function(c){
  1819. 757.  -     return (v - c) / 6 / diff + 1 / 2;
  1820. 758.  -   };
  1821. 759.  -
  1822. 760.  -   if (diff == 0) {
  1823. 761.  -     h = s = 0;
  1824. 762.  -   } else {
  1825. 763.  -     s = diff / v;
  1826. 764.  -     rr = diffc(r);
  1827. 765.  -     gg = diffc(g);
  1828. 766.  -     bb = diffc(b);
  1829. 767.  -
  1830. 768.  -     if (r === v) {
  1831. 769.  -       h = bb - gg;
  1832. 770.  -     } else if (g === v) {
  1833. 771.  -       h = (1 / 3) + rr - bb;
  1834. 772.  -     } else if (b === v) {
  1835. 773.  -       h = (2 / 3) + gg - rr;
  1836. 774.  -     }
  1837. 775.  -     if (h < 0) {
  1838. 776.  -       h += 1;
  1839. 777.  -     } else if (h > 1) {
  1840. 778.  -       h -= 1;
  1841. 779.  -     }
  1842. 780.  -   }
  1843. 781.  -   return {
  1844. 782.  -     h: Math.round(h * 360),
  1845. 783.  -     s: Math.round(s * 100),
  1846. 784.  -     v: Math.round(v * 100)
  1847. 785.  -   };
  1848. 786.  - },
  1849. 787.  - hex2rgb: function(hex) {
  1850. 788.  -   var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
  1851. 789.  -   hex = hex.replace(shorthandRegex, function(m, r, g, b) {
  1852. 790.  -       return r + r + g + g + b + b;
  1853. 791.  -   });
  1854. 792.  -
  1855. 793.  -   var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
  1856. 794.  -   return result ? [
  1857. 795.  -       parseInt(result[1], 16),
  1858. 796.  -       parseInt(result[2], 16),
  1859. 797.  -       parseInt(result[3], 16)
  1860. 798.  -   ] : [0,0,0];
  1861. 799.  - },
  1862. 800.  -
  1863. 801.  - setColor: function(color) {
  1864. 802.  -   var col = ge('dev_colorbox'+cur.colorNum);
  1865. 803.  -   setStyle(col, {backgroundColor: 'rgb('+color.join(',')+')'});
  1866. 804.  -   var colInp = ge('widget_color'+cur.colorNum);
  1867. 805.  -   var hex = [color[0].toString(16), color[1].toString(16), color[2].toString(16)];
  1868. 806.  -   for(var i in hex) if (hex[i].length == 1) hex[i] = '0' + hex[i];
  1869. 807.  -   val(colInp, hex.join('').toUpperCase());
  1870. 808.  -   cur.soonUpdatePreview();
  1871. 809.  - },
  1872. 810.  -
  1873. 811.  - showColorBox: function(obj, num, ev) {
  1874. 812.  -   if (browser.msie && browser.version < 9) {
  1875. 813.  -     return false;
  1876. 814.  -   }
  1877. 815.  -   cur.colorNum = num;
  1878. 816.  -   var wrap = ge('dev_widget_colors');
  1879. 817.  -   var cont = ge('dev_colorpicker');
  1880. 818.  -   var colors = ge('dev_colors');
  1881. 819.  -   var palette = ge('dev_palette');
  1882. 820.  -   var shownHere = false;
  1883. 821.  -   if (!cur.colorShown) {
  1884. 822.  -     fadeIn(cont, 200);
  1885. 823.  -     var shownHere = true;
  1886. 824.  -     cur.colorShown = true;
  1887. 825.  -   }
  1888. 826.  -   var posY = (getXY(obj)[1] - getXY(wrap)[1]);
  1889. 827.  -   if (cur.colorInited) {
  1890. 828.  -     animate(cont, {marginTop: -180 + posY}, 200)
  1891. 829.  -   } else {
  1892. 830.  -     setStyle(cont, {marginTop: -180 + posY})
  1893. 831.  -     var palSize = getSize(palette);
  1894. 832.  -     var pal = palette.getContext('2d');
  1895. 833.  -     var gradient = pal.createLinearGradient(palSize[0]/2,palSize[1],palSize[0]/2,0);
  1896. 834.  -     var hue = [[255,0,0],[255,255,0],[0,255,0],[0,255,255],[0,0,255],[255,0,255],[255,0,0]];
  1897. 835.  -     for (var i=0; i <= 6; i++){
  1898. 836.  -       color = 'rgb('+hue[i][0]+','+hue[i][1]+','+hue[i][2]+')';
  1899. 837.  -       gradient.addColorStop(i*1/6, color);
  1900. 838.  -     };
  1901. 839.  -     pal.fillStyle = gradient;
  1902. 840.  -     pal.fillRect(0, 0, palSize[0], palSize[1]);
  1903. 841.  -     addEvent(document, 'mouseup', function() {
  1904. 842.  -       cur.paletteDown = false;
  1905. 843.  -     })
  1906. 845.  -   var colInp = ge('widget_color'+cur.colorNum);
  1907. 846.  -   debugLog('colInp', colInp);
  1908. 847.  -   var color = val(colInp);
  1909. 848.  -   var rgb = Dev.hex2rgb(color);
  1910. 849.  -   var hsv = Dev.rgb2hsv(rgb);
  1911. 850.  -
  1912. 851.  -   Dev.paletteDown(false, false, (360 - hsv.h) / 360 * getSize(palette)[1], true);
  1913. 852.  -   var colorsSize = getSize(colors);
  1914. 853.  -   Dev.colorsDown(false, false, (hsv.s) / 100 * colorsSize[0], (100 - hsv.v) / 100 * colorsSize[1], true);
  1915. 854.  -
  1916. 855.  -   var onWndMove = function(ev) {
  1917. 856.  -     var el = ev.target;
  1918. 857.  -     while(el) {
  1919. 858.  -       if (el.id == 'dev_colorpicker' || hasClass(el, 'dev_colorbox_cont')) {
  1920. 859.  -         if (cur.colorBoxHideTimeout) {
  1921. 860.  -           debugLog('cancel Hide');
  1922. 861.  -           clearTimeout(cur.colorBoxHideTimeout);
  1923. 862.  -           cur.colorBoxHideTimeout = false;
  1924. 863.  -         }
  1925. 864.  -         return false;
  1926. 865.  -       }
  1927. 866.  -       el = el.parentNode;
  1928. 867.  -     }
  1929. 868.  -     if (cur.colorBoxHideTimeout) {
  1930. 869.  -       return false;
  1931. 870.  -     }
  1932. 871.  -     cur.colorBoxHideTimeout = setTimeout(function() {
  1933. 872.  -       fadeOut(cont, 200);
  1934. 873.  -       cur.colorShown = false;
  1935. 874.  -       removeEvent(window, 'mousemove', onWndMove);
  1936. 875.  -     }, 500);
  1937. 876.  -
  1938. 877.  -   };
  1939. 878.  -   if (shownHere) {
  1940. 879.  -     addEvent(window, 'mousemove', onWndMove);
  1941. 880.  +   removeClass(geByClass1('dev_mlist_sel', ge('dev_sidebar')), 'dev_mlist_sel');
  1942. 881.  +   addClass(obj, 'dev_mlist_sel');
  1943. 882.  +   var el = obj.nextSibling;
  1944. 883.  +   while(el && el.nodeType != 1) {
  1945. 884.  +     var el = el.nextSibling;
  1946. 886.  -
  1947. 887.  -   cur.colorInited = true;
  1948. 888.  -   return cancelEvent(ev);
  1949. 889.  - },
  1950. 890.  -
  1951. 891.  -
  1952. 892.  - addVersion: function(hash) {
  1953. 893.  -   var params = {
  1954. 894.  -     act: 'a_save_version',
  1955. 895.  -     ver: val('dev_edit_number'),
  1956. 896.  -     methods: val('dev_edit_methods'),
  1957. 897.  -     text: val('dev_edit_ver_text'),
  1958. 898.  -     text_en: val('dev_edit_ver_text_en'),
  1959. 899.  -     hash: hash
  1960. 900.  +   if (el == oldEl) {
  1961. 901.  +     return;
  1962. 903.  -   ajax.post('dev.php', params, {
  1963. 904.  -     onDone: function() {
  1964. 905.  -       nav.go('/dev/versions')
  1965. 906.  -     },
  1966. 907.  -     onFail: function(obj) {
  1967. 908.  -       obj = ge(obj);
  1968. 909.  -       if (obj) {
  1969. 910.  -         notaBene(obj);
  1970. 911.  -         return true;
  1971. 912.  -       }
  1972. 913.  -     }
  1973. 914.  +   slideDown(el, 200, function() {
  1974. 915.  +     addClass(el, 'dev_mlist_shown');
  1975. 917.  -
  1976. ------
Advertisement
Add Comment
Please, Sign In to add comment