]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/staff/services/file.js
LP#1706124: Make include inactive patrons checkbox sticky
[working/Evergreen.git] / Open-ILS / web / js / ui / default / staff / services / file.js
1 /**
2  * File upload reader.
3  * http://stackoverflow.com/questions/17063000/ng-model-for-input-type-file
4  *
5  * After reading, the contents will be available in the scope variable
6  * referred to by container="..."
7  */
8
9 angular.module('egCoreMod')
10 .directive("egFileReader", [function () {
11     return {
12         scope: {
13             container: "="
14         },
15         link: function (scope, element, attributes) {
16             // TODO: support DataURL, etc. via attrs
17             element.bind("change", function (changeEvent) {
18                 var reader = new FileReader();
19                 reader.onload = function (loadEvent) {
20                     scope.$apply(function () {
21                         scope.container = loadEvent.target.result;
22                     });
23                 }
24                 reader.readAsText(changeEvent.target.files[0]);
25             });
26         }
27     }
28 }])
29
30 .directive('egJsonExporter', ['FileSaver', 'Blob', function(FileSaver, Blob) {
31     return {
32         scope: {
33             container: '=',
34             generator: '=',
35             defaultFileName: '='
36         },
37         link: function (scope, element, attributes) {
38             var name = scope.defaultFileName || 'evergreen-json-export';
39             element.bind('click', function (clickEvent) {
40                 if (scope.generator) {
41                     scope.generator().then(function(value) {
42                         var data = new Blob([JSON.stringify(value)], {type : 'application/json'});
43                         FileSaver.saveAs(data, name);
44                     });
45                 } else {
46                     var data = new Blob([JSON.stringify(scope.container)], {type : 'application/json'});
47                     FileSaver.saveAs(data, name);
48                 }
49             });
50         }
51     }
52 }])
53
54 // The following directives use a attr instead of binding to get the default file name!
55 .directive('egStringExporter', ['FileSaver', 'Blob', function(FileSaver, Blob) {
56     return {
57         scope: {
58             contentType: '=',
59             string: '=',
60             generator: '=',
61             defaultFileName: '@'
62         },
63         link: function (scope, element, attributes) {
64             var type = scope.contentType || 'text/plain';
65             var name = scope.defaultFileName || 'evergreen-string-export';
66             element.bind('click', function (clickEvent) {
67                 if (scope.generator) {
68                     scope.generator().then(function(value) {
69                         var data = new Blob([value], {type : type});
70                         FileSaver.saveAs(data, name);
71                     });
72                 } else {
73                     var data = new Blob([scope.string], {type : type});
74                     FileSaver.saveAs(data, name);
75                 }
76             });
77         }
78     }
79 }])
80
81 .directive('egLineExporter', ['FileSaver', 'Blob', function(FileSaver, Blob) {
82     return {
83         scope: {
84             contentType: '=',
85             jsonArray: '=',
86             defaultFileName: '@'
87         },
88         link: function (scope, element, attributes) {
89             element.bind('click', function (clickEvent) {
90                 var type = scope.contentType || 'text/plain';
91                 var fname = scope.defaultFileName || 'evergreen-string-export';
92                 FileSaver.saveAs(
93                     new Blob(
94                         scope.jsonArray.map(function (line) {
95                             return JSON.stringify(line) + '\n';
96                         }),
97                         {type : type}
98                     ),
99                     fname
100                 );
101             });
102         }
103     }
104 }])
105
106 ;