resultsController.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. var app = angular.module('Results', []);
  2. app.controller('ResultsCtrl', function ($scope) {
  3. // Grab results from nodeJS served page
  4. $scope.phantomasResults = window._phantomas_results;
  5. $scope.slowRequestsOn = false;
  6. $scope.slowRequestsLimit = 5;
  7. $scope.onNodeDetailsClick = function(node) {
  8. var isOpen = node.data.showDetails;
  9. if (!isOpen) {
  10. // Close all other nodes
  11. $scope.phantomasResults.javascript.children.forEach(function(currentNode) {
  12. currentNode.data.showDetails = false;
  13. });
  14. // Parse the backtrace
  15. if (!node.data.parsedBacktrace) {
  16. node.data.parsedBacktrace = parseBacktrace(node.data.backtrace);
  17. }
  18. }
  19. node.data.showDetails = !isOpen;
  20. };
  21. function parseBacktrace(str) {
  22. var splited = str.split(' / ');
  23. var out = [];
  24. splited.forEach(function(trace) {
  25. var result = /^(\S*)\s?\(?(https?:\/\/\S+):(\d+)\)?$/g.exec(trace);
  26. if (result && result[2].length > 0) {
  27. var filePath = result[2];
  28. var chunks = filePath.split('/');
  29. var fileName = chunks[chunks.length - 1];
  30. out.push({
  31. fnName: result[1],
  32. fileName: fileName,
  33. filePath: filePath,
  34. line: result[3]
  35. });
  36. }
  37. });
  38. return out;
  39. }
  40. });