blameasync.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. * GitPHP Javascript blame
  3. *
  4. * Load blame data into blob page asynchronously
  5. *
  6. * @author Christopher Han <xiphux@gmail.com>
  7. * @copyright Copyright (c) 2011 Christopher Han
  8. * @package GitPHP
  9. * @subpackage Javascript
  10. */
  11. define(["jquery", "modules/geturl", "modules/tooltip.commit", 'modules/resources'],
  12. function($, url, tooltipCommit, resources) {
  13. var blobTable = null;
  14. var blameLink = null;
  15. var blameCol = null;
  16. function buildContainer() {
  17. var col = $(document.createElement('td'));
  18. col.attr('id', 'blameData');
  19. col.css('display', 'none');
  20. var p = $(document.createElement('p'));
  21. p.text(resources.LoadingBlameData);
  22. p.appendTo(col);
  23. var div = $(document.createElement('div'));
  24. div.css('text-align', 'center');
  25. var img = $(document.createElement('img'));
  26. img.attr('src', url + 'images/blame-loader.gif');
  27. img.attr('alt', resources.Loading);
  28. img.appendTo(div);
  29. div.appendTo(col);
  30. return col;
  31. }
  32. function insertBlame(data) {
  33. blameCol.html(data).addClass('de1');
  34. tooltipCommit($('a.commitTip'));
  35. }
  36. var showBlame = function() {
  37. if (blameCol) {
  38. blameCol.show('fast');
  39. return false;
  40. }
  41. blameCol = buildContainer();
  42. blobTable.find('tr:first').prepend(blameCol);
  43. blameCol.show('fast');
  44. $.get(blameLink.attr('href'), { o: 'js' },
  45. function(data) {
  46. if (blameCol.css('display') == 'none') {
  47. blameCol.html(data).addClass('de1');
  48. insertBlame(data);
  49. } else {
  50. blameCol.fadeOut('fast', function() {
  51. insertBlame(data);
  52. blameCol.fadeIn('fast');
  53. });
  54. }
  55. });
  56. };
  57. var hideBlame = function() {
  58. if (blameCol) {
  59. blameCol.hide('fast');
  60. }
  61. return false;
  62. };
  63. var init = function(blobTableElem, blameLinkElem) {
  64. blobTable = blobTableElem;
  65. blameLink = blameLinkElem;
  66. blameLink.toggle(showBlame, hideBlame);
  67. };
  68. return {
  69. init: init
  70. }
  71. }
  72. );