controller : [
'$scope','egIDL','egAuth','egNet', 'egGridFlatDataProvider',
- 'egGridColumnsProvider', '$filter','$window',
+ 'egGridColumnsProvider','$filter','$window','egPrintStore',
function($scope, egIDL, egAuth, egNet, egGridFlatDataProvider,
- egGridColumnsProvider, $filter, $window) {
+ egGridColumnsProvider , $filter , $window , egPrintStore) {
var grid = this;
($window.URL || $window.webkitURL).createObjectURL(blob);
}
+ grid.printCSV = function() {
+ egPrintStore.print('text/csv', grid.generateCSV())
+ .then(function() { console.debug('print complete') });
+ }
+
// generates CSV for the currently visible grid contents
grid.generateCSV = function() {
var csvStr = '';
--- /dev/null
+/**
+ * Core Service - egPrint
+ *
+ */
+
+angular.module('egCoreMod')
+
+
+.factory('egPrintStore', ['$q', '$window', function($q, $window) {
+
+ var service = {};
+ service.msgId = 0;
+ service.messages = {};
+ service.pending = [];
+ service.socket = null;
+ service.hatchAvailable = null;
+ service.hatchURL = 'ws://localhost:8080/hatch/'; // TODO: configuration/ssl
+
+ service.hatchSend = function(msg) {
+
+ msg.msgid = '' + (service.msgId++);
+ msg.deferred = $q.defer();
+
+ service.messages[msg.msgid] = msg;
+
+ if (service.hatchAvailable === true) {
+ service.socket.send(JSON.stringify(msg));
+ } else {
+ service.pending.push(msg);
+ service.hatchConnect();
+ }
+
+ return msg.deferred.promise;
+ }
+
+ service.hatchConnect = function() {
+ service.socket = new WebSocket(service.hatchURL);
+
+ service.socket.onopen = function() {
+ console.debug('connected to Hatch');
+ service.hatchAvailable = true;
+ angular.forEach(service.pending, function(msg) {
+ service.socket.send(JSON.stringify(msg));
+ });
+ }
+
+ service.socket.onclose = function() {
+ console.debug("disconnected from Hatch");
+ service.socket = null;
+ }
+
+ service.socket.onerror = function() {
+ console.log(
+ "unable to connect to Hatch server at " + service.hatchURL);
+ service.hatchAvailable = false;
+ service.socket = null;
+ }
+
+ service.socket.onmessage = function(evt) {
+ var msgStr = evt.data;
+
+ if (!msgStr) {
+ console.error("Hatch returned empty message");
+ return;
+ }
+
+ console.debug('Hatch says ' + msgStr);
+ var msgObj = JSON.parse(msgStr);
+
+ if (msgObj.success) {
+ console.debug("hatch command succeeded : " + msgObj.success);
+ } else {
+ console.error("hatch command failed : " + msgObj.error);
+ }
+
+ var srcMsg = service.messages[msgObj.msgid];
+ delete service.messages[msgObj.msgid];
+ srcMsg.deferred.resolve(msgObj);
+ }
+ }
+
+ service.browserPrinter = function(mime, data) {
+ switch (mime) {
+ case 'text/csv':
+ case 'text/plain':
+ $window.print(data);
+ break;
+ case 'text/html':
+ // TODO: generate the document and print it
+ }
+ }
+
+ service.print = function(mime, data) {
+ if (service.hatchAvailable === false) {
+ service.browserPrint(mime, data);
+ return $q.when();
+ }
+
+ return service.hatchSend({
+ key : 'no-op',
+ action : 'print',
+ mime : mime,
+ value : data,
+ //printer : printer // TODO: prefs, etc.
+ });
+ }
+
+ return service;
+}]);