<li ng-class="{active : context == 'offline'}">
<a href='' ng-click="setContext('offline')">[% l('Offline') %]</a>
</li>
+ <li ng-class="{active : isTestView}" class="pull-right">
+ <a href='' ng-click="isTestView=true">[% l('Test Printing') %]</a>
+ </li>
</ul>
<div class="tab-content">
<div class="tab-pane active">
- <div class="row">
+
+ <!-- printer config UI -->
+ <div class="row" ng-hide="isTestView">
<div class="col-md-6">
<div class="input-group">
<div class="input-group-btn">
<span class="caret"></span></button>
<ul class="dropdown-menu">
<li ng-repeat="printer in printers">
- <a href='' ng-click="applyConfAttr('name', printer['printer-name'])">
- {{printer['printer-name']}}
+ <a href='' ng-click="setPrinter(printer.name)">
+ {{printer.name}}
</a>
</li>
</ul>
<input ng-if="printers[0] && !printConfig[context]" type="text"
class="form-control" disabled="disabled"
value="[% l('No Printer Selected') %]">
- <input ng-if="printConfig[context].name" type="text"
+ <input ng-if="printConfig[context].printer" type="text"
class="form-control" disabled="disabled"
- value="{{printConfig[context].name}}">
+ value="{{printConfig[context].printer}}">
</div><!-- /input-group -->
</div><!-- col -->
- </div><!-- row -->
-
- <!-- media selector -->
- <div class="row">
<div class="col-md-6">
- <div class="input-group">
- <div class="input-group-btn">
- <button type="button" class="btn btn-default dropdown-toggle"
- data-toggle="dropdown">[% l('Select Media') %]
- <span class="caret"></span></button>
- <ul class="dropdown-menu">
- <li ng-repeat="media in currentPrinter().media">
- <a href='' ng-click="applyConfAttr('media', media)">
- {{media}}
- </a>
- </li>
- </ul>
- </div><!-- /btn-group -->
- <input type="text"
- ng-if="!currentPrinter().media.length"
- class="form-control" disabled="disabled"
- value="[% l('No Media Found for Selected Printer') %]">
- <input type="text"
- ng-if="currentPrinter().media.length && !printConfig[context].media"
- class="form-control" disabled="disabled"
- value="[% l('No Media Selected') %]">
- <input type="text"
- ng-if="printConfig[context].media"
- class="form-control" disabled="disabled"
- value="{{printConfig[context].media}}">
- </div><!-- input grp -->
- </div><!-- col -->
+ <button type="button"
+ ng-click="configurePrinter()"
+ ng-class="{disabled : actionPending}"
+ class="btn btn-default btn-success">
+ [% l('Configure Printer') %]
+ </button>
+ </div>
</div><!-- row -->
-
- <!-- orientation selector -->
- <div class="row">
- <div class="col-md-6">
- <div class="input-group">
- <div class="input-group-btn">
- <button type="button" class="btn btn-default dropdown-toggle"
- data-toggle="dropdown">[% l('Select Orientation') %]
- <span class="caret"></span></button>
- <ul class="dropdown-menu">
- <li>
- <a href=''
- ng-click="applyConfAttr('orientation-requested', 'portrait')">
- [% l('Portrait') %]</a>
- </li>
- <li>
- <a href=''
- ng-click="applyConfAttr('orientation-requested', 'landscape')">
- [% l('Landscape') %]</a>
- </li>
- </ul>
- </div><!-- /btn-group -->
- <input type="text"
- ng-if="!printConfig[context]['orientation-requested']"
- class="form-control" disabled="disabled"
- value="[% l('No Orientation Selected') %]">
- <input type="text"
- ng-if="printConfig[context]['orientation-requested']"
- class="form-control" disabled="disabled"
- value="{{printConfig[context]['orientation-requested']}}">
- </div><!-- input grp -->
+ <div class="row" ng-hide="isTestView">
+ <div class="col-md-12">
+ <h2>[% l('Compiled Printer Settings') %]</h2>
+ <pre>{{printerConfString()}}</pre>
</div><!-- col -->
</div><!-- row -->
-
-
- <!-- save button -->
- <div class="row">
- <div class="col-md-6">
+ <!-- printer test UI -->
+ <div class="row" ng-show="isTestView">
+ <div class="col-md-10">
+ <div class="btn-group">
+ <button type="button"
+ class="btn btn-default btn-lg"
+ ng-class="{active : contentType=='text/plain'}"
+ ng-click="setContentType('text/plain')">[% l('Plain Text') %]</button>
+ <button type="button"
+ class="btn btn-default btn-lg"
+ ng-class="{active : contentType=='text/html'}"
+ ng-click="setContentType('text/html')">[% l('HTML') %]</button>
+ </div>
+ </div>
+ <div class="col-md-2">
<button type="button"
- ng-click="storePrinterSettings()"
- ng-class="{disabled : actionPending}"
- class="btn btn-default btn-success">
- [% l('Save Changes') %]
- </button>
- </div>
- </div>
- </div>
- </div>
-
- <div class="row"><div class="col-md-12"><hr/></div></div>
-
- <div class="row">
- <div class="col-md-12">
- <h2>[% l('Printer Test') %]</h2>
- </div>
- </div>
-
- <div class="row">
- <div class="col-md-10">
- <div class="btn-group">
- <button type="button"
- class="btn btn-default btn-lg"
- ng-class="{active : contentType=='text/plain'}"
- ng-click="setContentType('text/plain')">[% l('Plain Text') %]</button>
- <button type="button"
- class="btn btn-default btn-lg"
- ng-class="{active : contentType=='text/html'}"
- ng-click="setContentType('text/html')">[% l('HTML') %]</button>
- </div>
- </div>
- <div class="col-md-2">
- <button type="button"
- ng-click="testPrint()"
- class="btn btn-default btn-lg pull-right btn-success">
- [% l('Print') %]</button>
- </div>
-
- </div>
-
- <div class="row">
- <div class="col-md-12">
- <div ng-show="contentType=='text/plain'"
+ ng-click="testPrint()"
+ class="btn btn-default btn-lg pull-right btn-success">
+ [% l('Print') %]</button>
+ </div>
+ </div>
+
+ <div class="row" ng-show="isTestView">
+ <div class="col-md-12">
+ <div ng-show="contentType=='text/plain'"
ng-init="textPrintContent='
[% l('Test Print') %]
<p>{{date_value | date}}</p>
</div>
'">
- </textarea>
-
- </div>
- </div>
- </div>
-
-
-</div>
+ </textarea>
+ </div><!-- html content -->
+ </div><!-- col -->
+ </div><!-- row -->
+ </div><!-- tab pane -->
+ </div><!-- tab content -->
+ </div><!-- col -->
+ </div><!-- row -->
+</div><!-- container -->
console.log('PrintingCtrl');
$scope.actionPending = false;
+ $scope.isTestView = false;
$scope.setContext = function(ctx) {
$scope.context = ctx;
+ $scope.isTestView = false;
}
$scope.setContext('default');
- $scope.getPrinterByAttr = function(name, value) {
+ $scope.getPrinterByAttr = function(attr, value) {
var printer;
angular.forEach($scope.printers, function(p) {
- if (p[name] == value) printer = p;
+ if (p[attr] == value) printer = p;
});
return printer;
}
$scope.currentPrinter = function() {
if ($scope.printConfig && $scope.printConfig[$scope.context]) {
return $scope.getPrinterByAttr(
- 'printer-name',
- $scope.printConfig[$scope.context].name
+ 'name', $scope.printConfig[$scope.context].printer
);
}
}
if (!$scope.printConfig[ctx]) {
$scope.printConfig[ctx] = {
context : ctx,
- name : $scope.defaultPrinter['printer-name']
+ printer : $scope.defaultPrinter.name
}
}
}
);
- console.debug('loaded print config ' + js2JSON($scope.printConfig));
+ console.log("CONFIGS : " +
+ JSON.stringify($scope.printConfig, undefined, 2));
});
- // apply an attribute value to the current printer context
- // TODO: use a form instead?
- $scope.applyConfAttr = function(name, value) {
- if (name == 'name') {
- // user is changing the printer
- $scope.currentPrinter = $scope.getPrinterByAttr('name', value);
- }
- $scope.printConfig[$scope.context][name] = value;
+ $scope.printerConfString = function() {
+ if (!$scope.printConfig) return;
+ if (!$scope.printConfig[$scope.context]) return;
+ return JSON.stringify(
+ $scope.printConfig[$scope.context], undefined, 2);
}
- // store the currently active printer configuration data
- $scope.storePrinterSettings = function() {
+ $scope.configurePrinter = function() {
$scope.actionPending = true;
- egPrintStore.setPrintConfig($scope.printConfig)
- .then(function() { console.debug('print settings stored') })
- .finally(function() { $scope.actionPending = false });
+ egPrintStore.configurePrinter(
+ $scope.context,
+ $scope.printConfig[$scope.context].printer
+ )
+ .then(function(config) {$scope.printConfig = config})
+ .finally(function() {$scope.actionPending = false});
}
+ $scope.setPrinter = function(name) {
+ $scope.printConfig[$scope.context].printer = name;
+ }
// for testing
$scope.setContentType = function(type) { $scope.contentType = type }
$scope.testPrint = function() {
if ($scope.contentType == 'text/plain') {
- egPrintStore.print($scope.contentType, $scope.textPrintContent);
+ egPrintStore.print($scope.context, $scope.contentType, $scope.textPrintContent);
} else {
egPrintStore.print(
$scope.context,
content = service.interpolateHtmlTemplate(content, printScope);
console.debug('generated HTML ' + content);
}
-
+
return service.getPrintConfig()
.then(function(conf) {
return service.dispatchRequest({
context : context,
content : content,
contentType : contentType,
- attributes : {
- 'printer-name' : conf.name,
- 'media' : conf.media,
- 'requested-orientation' : conf['requested-orientation']
- }
});
});
}
});
}
- service.setPrintConfig = function(conf) {
+ service.setPrintConfig = function() {
service.printConfig = conf;
return service.setItem('eg.printing.config', conf);
}
+ // launch the print dialog then attach the resulting configuration
+ // to the requested context, then store the final values.
+ service.configurePrinter = function(context, printer) {
+
+ // load current settings
+ return service.getPrintConfig()
+
+ // dispatch the print configuration request
+ .then(function() {
+ return service.dispatchRequest({
+ key : 'no-op',
+ action : 'print-config',
+ printer : printer
+ })
+ })
+
+ // set the returned settings to the requested context
+ .then(function(newconf) {
+ newconf.printer = printer;
+ return service.printConfig[context] = newconf;
+ })
+
+ // store the newly linked settings
+ .then(function() {
+ service.setItem('eg.printing.config', service.printConfig);
+ })
+
+ // return the final settings to the caller
+ .then(function() {return service.printConfig});
+ }
+
service.getPrinters = function() {
if (service.printers)
return $q.when(service.printers);
- return service.dispatchRequest(
- {key : 'no-op', action : 'printers'})
+ return service.dispatchRequest({key : 'no-op', action : 'printers'})
.then(function(printers) {
- service.printers = printers
- angular.forEach(printers, function(printer) {
- printer.media = printer.media.sort();
- });
+ service.printers = printers.sort(
+ function(a,b) {return a.name < b.name ? -1 : 1});
return service.printers;
});
}