Chromium Code Reviews| Index: experimental/skpdiff/diff_viewer.js |
| diff --git a/experimental/skpdiff/diff_viewer.js b/experimental/skpdiff/diff_viewer.js |
| index 338dbdfaef4dc45e4fa09c26cf558afd28a0b42d..fdfec527755e4a988431da4e5dec43143983c050 100644 |
| --- a/experimental/skpdiff/diff_viewer.js |
| +++ b/experimental/skpdiff/diff_viewer.js |
| @@ -1,4 +1,81 @@ |
| -function DiffViewController($scope) { |
| +angular.module('diff_viewer', []). |
| +config(['$routeProvider', function($routeProvider) { |
| + // Show the list of differences by default |
| + $routeProvider. |
| + otherwise({ templateUrl: '/diff_list.html', controller: DiffListController}); |
| +}]). |
| +directive('swapimg', function() { |
|
djsollen
2013/07/10 14:44:07
swap_img?
Zach Reizner
2013/07/10 15:00:10
underscores and dashes are illegal characters in H
|
| + // Custom directive for showing an image that gets swapped my mouseover. |
| + return { |
| + restrict: 'E', // The directive can be used as an element name |
| + replace: true, // The directive replaces itself with the template |
| + template: '<canvas ng-mouseenter="swap()" ng-mouseleave="swap()"></canvas>', |
| + scope: { // The attributes below are bound to the scope |
| + leftSrc: '@', |
| + rightSrc: '@', |
| + side: '@' |
| + }, |
| + link: function(scope, elm, attrs, ctrl) { |
| + var leftImage = new Image(); |
| + var rightImage = new Image(); |
| + var ctx = elm[0].getContext('2d'); |
| + |
| + scope.render = function() { |
| + var image; |
| + if (scope.side == "left") { |
| + image = leftImage; |
| + } else { |
| + image = rightImage; |
| + } |
| + |
| + // Make it so the maximum size of an image is 500, and the images are scaled |
| + // down in halves. |
| + var divisor = 1; |
| + while ((image.width / divisor) > 500) { |
| + divisor *= 2; |
| + } |
| + |
| + // Set canvas to correct size and draw the image into it |
| + elm[0].width = image.width / divisor; |
| + elm[0].height = image.height / divisor; |
| + ctx.drawImage(image, 0, 0, elm[0].width, elm[0].height); |
| + }; |
| + |
| + // When the leftSrc attribute changes, load the image and then rerender |
| + attrs.$observe('leftSrc', function(value) { |
| + leftImage.src = value; |
| + leftImage.onload = function() { |
| + if (scope.side == "left") { |
| + scope.render(); |
| + } |
| + }; |
| + }); |
| + |
| + // When the rightSrc attribute changes, load the image and then rerender |
| + attrs.$observe('rightSrc', function(value) { |
| + rightImage.src = value; |
| + rightImage.onload = function() { |
| + if (scope.side == "right") { |
| + scope.render(); |
| + } |
| + }; |
| + }); |
| + |
| + // Swap which side to draw onto the canvas and then rerender |
| + scope.swap = function() { |
| + if (scope.side == "left") { |
| + scope.side = "right"; |
| + } else { |
| + scope.side = "left"; |
| + } |
| + scope.render(); |
| + }; |
| + } |
| + }; |
| +}); |
| + |
| +function DiffListController($scope) { |
| + // Label each kind of differ for the sort buttons. |
| $scope.differs = [ |
| { |
| "title": "Different Pixels" |
| @@ -7,16 +84,20 @@ function DiffViewController($scope) { |
| "title": "Perceptual Difference" |
| } |
| ]; |
| - $scope.sortIndex = 1; |
| + |
| + // Puts the records within AngularJS scope |
| $scope.records = SkPDiffRecords.records; |
| - $scope.highlight = function(differName) { |
| - console.debug(differName); |
| - } |
| - $scope.setSortIndex = function(a) { |
| - $scope.sortIndex = a; |
| - } |
| - $scope.sortingDiffer = function(a) { |
| - console.debug($scope.sortIndex); |
| - return a.diffs[$scope.sortIndex].result; |
| - } |
| -} |
| + |
| + // Indicates which diff metric is used for sorting |
| + $scope.sortIndex = 1; |
| + |
| + // Called by the sort buttons to adjust the metric used for sorting |
| + $scope.setSortIndex = function(idx) { |
| + $scope.sortIndex = idx; |
| + }; |
| + |
| + // A predicate for pulling out the number used for sorting |
| + $scope.sortingDiffer = function(record) { |
| + return record.diffs[$scope.sortIndex].result; |
| + }; |
| +} |