browser staff : print config UI cont.
authorBill Erickson <berick@esilibrary.com>
Tue, 22 Apr 2014 14:41:26 +0000 (10:41 -0400)
committerBill Erickson <berick@esilibrary.com>
Tue, 22 Apr 2014 14:41:26 +0000 (10:41 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/src/templates/staff/admin/workstation/t_printing.tt2
Open-ILS/web/js/ui/default/staff/admin/workstation/app.js
Open-ILS/web/js/ui/default/staff/services/printstore.js

index 997d4a1..efa78d4 100644 (file)
         <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">
@@ -49,8 +54,8 @@
                     <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') %]
 
@@ -216,12 +146,13 @@ ng-init="htmlPrintContent='
   <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 -->
 
index dcb0d09..683e5cc 100644 (file)
@@ -33,16 +33,18 @@ function($scope , egPrintStore) {
     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;
     }
@@ -50,8 +52,7 @@ function($scope , egPrintStore) {
     $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
             );
         }
     }
@@ -75,40 +76,43 @@ function($scope , egPrintStore) {
                 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,
index b1fcabf..c9f7142 100644 (file)
@@ -217,7 +217,7 @@ angular.module('egCoreMod')
             content = service.interpolateHtmlTemplate(content, printScope);
             console.debug('generated HTML ' + content);
         }
-        
+
         return service.getPrintConfig()
         .then(function(conf) {
             return service.dispatchRequest({
@@ -226,11 +226,6 @@ angular.module('egCoreMod')
                 context : context,
                 content : content, 
                 contentType : contentType,
-                attributes : {
-                    'printer-name' : conf.name,
-                    'media' : conf.media,
-                    'requested-orientation' : conf['requested-orientation']
-                }
             });
         });
     }
@@ -245,22 +240,50 @@ angular.module('egCoreMod')
         });
     }
 
-    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;
         });
     }