Browse Source

Preliminary hex dump

Bryan Allred 12 years ago
parent
commit
5158b2bcfd
5 changed files with 117 additions and 3 deletions
  1. 4 2
      index.html
  2. 5 0
      partials/dump.html
  3. 5 1
      scripts/app.js
  4. 48 0
      scripts/components.js
  5. 55 0
      scripts/controllers.js

+ 4 - 2
index.html

@ -6,7 +6,8 @@
6 6
    </head>
7 7
    <body>
8 8
        <header>
9
            <a href="/" title="Hex Meh">Hex Meh</a>
9
            <a href="/" title="Hex Intro">Hex Inro</a>
10
            <a href="#/dump" title="Hex Dump">Hex Dump</a>
10 11
            <a href="https://github.com/bmallred/hexmeh"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
11 12
        </header>
12 13
        <div role="main" ng-view></div>
@ -16,8 +17,9 @@
16 17
        
17 18
        <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
18 19
        <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script>
19
        <script type="text/javascript" src="//code.angularjs.org/1.0.1/angular-resource-1.0.1.min.js"></script>
20
        <script type="text/javascript" src="http://code.angularjs.org/1.0.1/angular-resource-1.0.1.min.js"></script>
20 21
        <script type="text/javascript" src="scripts/utilities.js"></script>
22
        <script type="text/javascript" src="scripts/components.js"></script>
21 23
        <script type="text/javascript" src="scripts/controllers.js"></script>
22 24
        <script type="text/javascript" src="scripts/app.js"></script>
23 25
    </body>

+ 5 - 0
partials/dump.html

@ -0,0 +1,5 @@
1
<div id="drop-zone" style="height: 5em; width: 80%; border: 1px dashed #000; background-color: #fff;">Drop a file here!</div>
2
3
<tabs>
4
    <pane ng:repeat="file in files" title="{{file.name}}"></pane>
5
</tabs>

+ 5 - 1
scripts/app.js

@ -2,12 +2,16 @@
2 2
3 3
angular.module("hexmeh", [])
4 4
    .config(["$routeProvider", "$locationProvider", function ($routeProvider, $locationProvider) {
5
        $locationProvider.html5Mode(true);
5
        //$locationProvider.html5Mode(true);
6 6
        
7 7
        $routeProvider.when("/", {
8 8
            controller: MainController,
9 9
            templateUrl: "partials/intro.html"
10 10
        })
11
        .when("/dump", {
12
            controller: DumpController,
13
            templateUrl: "partials/dump.html"
14
        })
11 15
        .otherwise({
12 16
            controller: MainController,
13 17
            templateUrl: "partials/intro.html"

+ 48 - 0
scripts/components.js

@ -0,0 +1,48 @@
1
angular.module('hexmeh', [])
2
    .directive('tabs', function () {
3
        return {
4
            restrict: 'E',
5
            transclude: true,
6
            scope: {},
7
            controller: function($scope, $element) {
8
                var panes = $scope.panes = [];
9
                
10
                $scope.select = function(pane) {
11
                    angular.forEach(panes, function(pane) {
12
                        pane.selected = false;
13
                    });
14
                    pane.selected = true;
15
                }
16
            
17
                this.addPane = function(pane) {
18
                    if (panes.length == 0) $scope.select(pane);
19
                    panes.push(pane);
20
                }
21
            },
22
            template:
23
                '<div class="tabbable">' +
24
                '<ul class="nav nav-tabs">' +
25
                '<li ng-repeat="pane in panes" ng-class="{active:pane.selected}">'+
26
                '<a href="" ng-click="select(pane)">{{pane.title}}</a>' +
27
                '</li>' +
28
                '</ul>' +
29
                '<div class="tab-content" ng-transclude></div>' +
30
                '</div>',
31
            replace: true
32
        };
33
    })
34
    .directive('pane', function() {
35
        return {
36
            require: '^tabs',
37
            restrict: 'E',
38
            transclude: true,
39
            scope: { title: '@' },
40
            link: function(scope, element, attrs, tabsCtrl) {
41
                tabsCtrl.addPane(scope);
42
            },
43
            template:
44
                '<div class="tab-pane" ng-class="{active: selected}" ng-transclude>' +
45
                '</div>',
46
            replace: true
47
            };
48
    });

+ 55 - 0
scripts/controllers.js

@ -40,4 +40,59 @@ function MainController($scope, $routeParams) {
40 40
      
41 41
      return false;
42 42
  };
43
}
44
45
function DumpController($scope, $routeParams) {
46
    $scope.columns = 16;
47
    $scope.fileApi = false;
48
    $scope.files = [];
49
    
50
    $scope.showFiles = function () {
51
        return $scope.files;
52
    };
53
    
54
    // Check for the various File API support.
55
    if (window.File && window.FileReader && window.FileList && window.Blob) {
56
        // Great success! All the File APIs are supported.
57
        $("#drop-zone").bind("dragover", function (e) {
58
            e.stopPropagation();
59
            e.preventDefault();
60
            e.originalEvent.dataTransfer.dropEffect = 'copy';
61
        });
62
        
63
        $("#drop-zone").bind("drop", function(e) {
64
            e.stopPropagation();
65
            e.preventDefault();
66
            
67
            var files = e.originalEvent.dataTransfer.files;
68
            
69
            for (var i = 0, f; f = files[i]; i++) {
70
                /*var reader = new FileReader();
71
                
72
                // Closure to capture the file information.
73
                reader.onload = (function(theFile) {
74
                    return function(e) {
75
                        var bytes = new Uint8Array(e.target.result);
76
                        var c = 0;
77
                        for (var i = 0; i < bytes.length; i++) {
78
                            if (c++ >= 16) {
79
                                $("#tabFile1").append("<br>");
80
                                c = 0;
81
                            }
82
                            
83
                            $("#tabFile1").append(bytes[i].toString(16) + " ");
84
                        }
85
                };
86
                })(f);
87
                
88
                // Read in the image file as a data URL.
89
                reader.readAsArrayBuffer(f);*/
90
          
91
                $scope.files.push(f);
92
            }
93
        });
94
    } else {
95
        $scope.fileApi = false;
96
        alert('The File APIs are not fully supported in this browser.');
97
    }
43 98
}