Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(567)

Side by Side Diff: chrome/browser/resources/print_preview.js

Issue 7038028: Initial support for cloudprint in print preview (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review feedback Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // require: cr/ui/print_preview_cloud.js
6
5 var localStrings = new LocalStrings(); 7 var localStrings = new LocalStrings();
6 8
9 var useCloudPrint = false;
10 var maxCloudPrinters = 10;
11
7 // The total page count of the previewed document regardless of which pages the 12 // The total page count of the previewed document regardless of which pages the
8 // user has selected. 13 // user has selected.
9 var totalPageCount = -1; 14 var totalPageCount = -1;
10 15
11 // The previously selected pages by the user. It is used in 16 // The previously selected pages by the user. It is used in
12 // onPageSelectionMayHaveChanged() to make sure that a new preview is not 17 // onPageSelectionMayHaveChanged() to make sure that a new preview is not
13 // requested more often than necessary. 18 // requested more often than necessary.
14 var previouslySelectedPages = []; 19 var previouslySelectedPages = [];
15 20
16 // Timer id of the page range textfield. It is used to reset the timer whenever 21 // Timer id of the page range textfield. It is used to reset the timer whenever
17 // needed. 22 // needed.
18 var timerId; 23 var timerId;
19 24
20 // Store the last selected printer index. 25 // Store the last selected printer index.
21 var lastSelectedPrinterIndex = 0; 26 var lastSelectedPrinterIndex = 0;
22 27
23 // Used to disable some printing options when the preview is not modifiable. 28 // Used to disable some printing options when the preview is not modifiable.
24 var previewModifiable = false; 29 var previewModifiable = false;
25 30
26 // Destination list special value constants. 31 // Destination list special value constants.
32 const ADD_PRINTER = 'addPrinter';
33 const MANAGE_CLOUD_PRINTERS = 'manageCloudPrinters';
34 const MANAGE_LOCAL_PRINTERS = 'manageLocalPrinters';
35 const MORE_PRINTERS = 'morePrinters';
36 const SIGN_IN = 'signIn';
27 const PRINT_TO_PDF = 'Print To PDF'; 37 const PRINT_TO_PDF = 'Print To PDF';
28 const MANAGE_PRINTERS = 'Manage Printers';
29 38
30 // State of the print preview settings. 39 // State of the print preview settings.
31 var printSettings = new PrintSettings(); 40 var printSettings = new PrintSettings();
32 41
33 // The name of the default or last used printer. 42 // The name of the default or last used printer.
34 var defaultOrLastUsedPrinterName = ''; 43 var defaultOrLastUsedPrinterName = '';
35 44
36 /** 45 /**
37 * Window onload handler, sets up the page and starts print preview by getting 46 * Window onload handler, sets up the page and starts print preview by getting
38 * the printer list. 47 * the printer list.
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 /** 159 /**
151 * Gets the selected printer capabilities and updates the controls accordingly. 160 * Gets the selected printer capabilities and updates the controls accordingly.
152 */ 161 */
153 function updateControlsWithSelectedPrinterCapabilities() { 162 function updateControlsWithSelectedPrinterCapabilities() {
154 var printerList = $('printer-list'); 163 var printerList = $('printer-list');
155 var selectedIndex = printerList.selectedIndex; 164 var selectedIndex = printerList.selectedIndex;
156 if (selectedIndex < 0) 165 if (selectedIndex < 0)
157 return; 166 return;
158 167
159 var selectedValue = printerList.options[selectedIndex].value; 168 var selectedValue = printerList.options[selectedIndex].value;
160 if (selectedValue == PRINT_TO_PDF) { 169 if (printerList.options[selectedIndex].isCloudPrint) {
170 updateWithCloudPrinterCapabilities();
171 return;
sanjeevr 2011/06/10 18:13:48 Nit: Is there a way to restructure this so we don'
Albert Bodenhamer 2011/06/10 23:13:45 Done.
172 } else if (selectedValue == SIGN_IN ||
173 selectedValue == MANAGE_CLOUD_PRINTERS ||
174 selectedValue == MANAGE_LOCAL_PRINTERS) {
175 printerList.selectedIndex = lastSelectedPrinterIndex;
176 chrome.send(selectedValue);
177 return;
178 } else if (selectedValue == PRINT_TO_PDF) {
161 updateWithPrinterCapabilities({'disableColorOption': true, 179 updateWithPrinterCapabilities({'disableColorOption': true,
162 'setColorAsDefault': true, 180 'setColorAsDefault': true,
163 'disableCopiesOption': true}); 181 'disableCopiesOption': true,
164 } else if (selectedValue == MANAGE_PRINTERS) { 182 'disableLandscapeOption': false});
165 printerList.selectedIndex = lastSelectedPrinterIndex;
166 chrome.send('managePrinters');
167 return;
168 } else { 183 } else {
169 // This message will call back to 'updateWithPrinterCapabilities' 184 // This message will call back to 'updateWithPrinterCapabilities'
170 // function. 185 // function.
171 chrome.send('getPrinterCapabilities', [selectedValue]); 186 chrome.send('getPrinterCapabilities', [selectedValue]);
172 } 187 }
173 188
174 lastSelectedPrinterIndex = selectedIndex; 189 lastSelectedPrinterIndex = selectedIndex;
175 190
176 // Regenerate the preview data based on selected printer settings. 191 // Regenerate the preview data based on selected printer settings.
177 setDefaultValuesAndRegeneratePreview(); 192 setDefaultValuesAndRegeneratePreview();
178 } 193 }
179 194
195 function updateWithCloudPrinterCapabilities() {
196 var printerList = $('printer-list');
197 var selectedIndex = printerList.selectedIndex;
198 if (printerList.options[selectedIndex].capabilities) {
199 doUpdateCloudPrinterCapabilities(
200 printerList.options[selectedIndex],
201 printerList.options[selectedIndex].capabilities);
202 } else {
203 cloudprint.updatePrinterCaps(printerList.options[selectedIndex],
204 doUpdateCloudPrinterCapabilities);
205 }
206 }
207
208 function doUpdateCloudPrinterCapabilities(printer) {
209 var settings = {'disableColorOption': !cloudprint.supportsColor(printer),
210 'setColorAsDefault': cloudprint.colorIsDefault(printer),
211 'disableCopiesOption': true,
212 'disableLandscapeOption': true};
213 updateWithPrinterCapabilities(settings);
214 var printerList = $('printer-list');
215 var selectedIndex = printerList.selectedIndex;
216 lastSelectedPrinterIndex = selectedIndex;
217
218 // Regenerate the preview data based on selected printer settings.
219 setDefaultValuesAndRegeneratePreview();
220 }
221
180 /** 222 /**
181 * Updates the controls with printer capabilities information. 223 * Updates the controls with printer capabilities information.
182 * @param {Object} settingInfo printer setting information. 224 * @param {Object} settingInfo printer setting information.
183 */ 225 */
184 function updateWithPrinterCapabilities(settingInfo) { 226 function updateWithPrinterCapabilities(settingInfo) {
185 var disableColorOption = settingInfo.disableColorOption; 227 var disableColorOption = settingInfo.disableColorOption;
186 var disableCopiesOption = settingInfo.disableCopiesOption; 228 var disableCopiesOption = settingInfo.disableCopiesOption;
187 var setColorAsDefault = settingInfo.setColorAsDefault; 229 var setColorAsDefault = settingInfo.setColorAsDefault;
230 var disableLandscapeOption = settingInfo.disableLandscapeOption;
188 var colorOption = $('color'); 231 var colorOption = $('color');
189 var bwOption = $('bw'); 232 var bwOption = $('bw');
190 233
191 if (disableCopiesOption) { 234 if (disableCopiesOption) {
192 fadeOutElement($('copies-option')); 235 fadeOutElement($('copies-option'));
193 $('hr-before-copies').classList.remove('invisible'); 236 $('hr-before-copies').classList.remove('invisible');
194 } else { 237 } else {
195 fadeInElement($('copies-option')); 238 fadeInElement($('copies-option'));
196 $('hr-before-copies').classList.add('invisible'); 239 $('hr-before-copies').classList.add('invisible');
197 } 240 }
198 241
242 if (disableLandscapeOption) {
243 fadeOutElement($('landscape-option'));
244 } else {
245 fadeInElement($('landscape-option'));
dpapad 2011/06/10 20:29:07 nit: Could you use the more compressed form? disa
Albert Bodenhamer 2011/06/10 23:13:45 I have a strong dislike of the ternary operator fo
246 }
247
199 disableColorOption ? fadeOutElement($('color-options')) : 248 disableColorOption ? fadeOutElement($('color-options')) :
200 fadeInElement($('color-options')); 249 fadeInElement($('color-options'));
201 250
202 if (colorOption.checked != setColorAsDefault) { 251 if (colorOption.checked != setColorAsDefault) {
203 colorOption.checked = setColorAsDefault; 252 colorOption.checked = setColorAsDefault;
204 bwOption.checked = !setColorAsDefault; 253 bwOption.checked = !setColorAsDefault;
205 setColor(colorOption.checked); 254 setColor(colorOption.checked);
206 } 255 }
207 } 256 }
208 257
209 /** 258 /**
259 * Turn on the integration of Cloud Print.
260 * @param {enable} true if cloud print should be used.
261 */
262 function setUseCloudPrint(enable, cloudPrintURL) {
263 useCloudPrint = enable;
264 cloudprint.setBaseURL(cloudPrintURL);
265 }
266
267 /**
268 * Take the PDF data handed to us and submit it to the cloud, closing the print
269 * preview tab once the upload is successful.
270 * @param {pdfData} data to send as the print job.
271 */
272 function printToCloud(data) {
273 cloudprint.printToCloud(data, finishedCloudPrinting);
274 }
275
276 /**
277 * Cloud print upload of the PDF file is finished, time to close the dialog.
278 */
279 function finishedCloudPrinting() {
280 window.location = cloudprint.getBaseURL();
281 }
282
283 /**
284 * Disables or enables all controls in the options pane except for the cancel
285 * button.
286 */
287 function setControlsDisabled(disabled) {
dpapad 2011/06/10 20:29:07 This function was removed in earlier revisions, do
Albert Bodenhamer 2011/06/10 23:13:45 Done.
288 var elementList = $('controls').elements;
289 for (var i = 0; i < elementList.length; ++i) {
290 if (elementList[i] == $('cancel-button'))
291 continue;
292 elementList[i].disabled = disabled;
293 }
294 }
295
296 /**
210 * Validates the copies text field value. 297 * Validates the copies text field value.
211 * NOTE: An empty copies field text is considered valid because the blur event 298 * NOTE: An empty copies field text is considered valid because the blur event
212 * listener of this field will set it back to a default value. 299 * listener of this field will set it back to a default value.
213 * @return {boolean} true if the number of copies is valid else returns false. 300 * @return {boolean} true if the number of copies is valid else returns false.
214 */ 301 */
215 function isNumberOfCopiesValid() { 302 function isNumberOfCopiesValid() {
216 var copiesFieldText = $('copies').value.replace(/\s/g, ''); 303 var copiesFieldText = $('copies').value.replace(/\s/g, '');
217 if (copiesFieldText == '') 304 if (copiesFieldText == '')
218 return true; 305 return true;
219 306
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 const LONG_EDGE = 1; 377 const LONG_EDGE = 1;
291 return !isTwoSided() ? SIMPLEX : LONG_EDGE; 378 return !isTwoSided() ? SIMPLEX : LONG_EDGE;
292 } 379 }
293 380
294 /** 381 /**
295 * Creates a JSON string based on the values in the printer settings. 382 * Creates a JSON string based on the values in the printer settings.
296 * 383 *
297 * @return {string} JSON string with print job settings. 384 * @return {string} JSON string with print job settings.
298 */ 385 */
299 function getSettingsJSON() { 386 function getSettingsJSON() {
387 var printerList = $('printer-list');
388 var selectedPrinter = printerList.selectedIndex;
300 var printAll = $('all-pages').checked; 389 var printAll = $('all-pages').checked;
301 var deviceName = getSelectedPrinterName(); 390 var deviceName = getSelectedPrinterName();
302 var printToPDF = (deviceName == PRINT_TO_PDF); 391 var printToPDF = (deviceName == PRINT_TO_PDF);
303 392
304 return JSON.stringify({'deviceName': deviceName, 393 var settings = {'deviceName': deviceName,
305 'pageRange': getSelectedPageRanges(), 394 'pageRange': getSelectedPageRanges(),
306 'printAll': printAll, 395 'printAll': printAll,
307 'duplex': getDuplexMode(), 396 'duplex': getDuplexMode(),
308 'copies': getCopies(), 397 'copies': getCopies(),
309 'collate': isCollated(), 398 'collate': isCollated(),
310 'landscape': isLandscape(), 399 'landscape': isLandscape(),
311 'color': isColor(), 400 'color': isColor(),
312 'printToPDF': printToPDF}); 401 'printToPDF': printToPDF};
402 if (printerList.options[selectedPrinter].isCloudPrint) {
403 settings['cloudPrintID'] =
404 printerList.options[selectedPrinter].value;
405 }
406
407 return JSON.stringify(settings);
313 } 408 }
314 409
315 /** 410 /**
316 * Returns the name of the selected printer or the empty string if no 411 * Returns the name of the selected printer or the empty string if no
317 * printer is selected. 412 * printer is selected.
318 */ 413 */
319 function getSelectedPrinterName() { 414 function getSelectedPrinterName() {
320 var printerList = $('printer-list') 415 var printerList = $('printer-list')
321 var selectedPrinter = printerList.selectedIndex; 416 var selectedPrinter = printerList.selectedIndex;
322 var deviceName = ''; 417 var deviceName = '';
323 if (selectedPrinter >= 0) 418 if (selectedPrinter >= 0)
324 deviceName = printerList.options[selectedPrinter].value; 419 deviceName = printerList.options[selectedPrinter].value;
325 return deviceName; 420 return deviceName;
326 } 421 }
327 422
328 /** 423 /**
329 * Asks the browser to print the preview PDF based on current print settings. 424 * Asks the browser to print the preview PDF based on current print settings.
330 */ 425 */
331 function printFile() { 426 function printFile() {
332 if (getSelectedPrinterName() != PRINT_TO_PDF) { 427 if (getSelectedPrinterName() != PRINT_TO_PDF) {
333 $('print-button').classList.add('loading'); 428 $('print-button').classList.add('loading');
334 $('cancel-button').classList.add('loading'); 429 $('cancel-button').classList.add('loading');
335 $('print-summary').innerHTML = localStrings.getString('printing'); 430 $('print-summary').innerHTML = localStrings.getString('printing');
336 removeEventListeners(); 431 removeEventListeners();
337 window.setTimeout(function() { chrome.send('print', [getSettingsJSON()]); }, 432 var printerList = $('printer-list')
338 1000); 433 var printer = printerList[printerList.selectedIndex];
434 window.setTimeout(function() { chrome.send('print',
435 [getSettingsJSON(), cloudprint.getPrintTicketJSON(printer)]); }, 1000);
sanjeevr 2011/06/10 18:13:48 You probably need to check whether this is a cloud
Albert Bodenhamer 2011/06/10 23:13:45 getPrintTicketJSON now returns null for non-cloud
339 } else 436 } else
340 chrome.send('print', [getSettingsJSON()]); 437 chrome.send('print', [getSettingsJSON(), null]);
341 } 438 }
342 439
343 /** 440 /**
344 * Asks the browser to generate a preview PDF based on current print settings. 441 * Asks the browser to generate a preview PDF based on current print settings.
345 */ 442 */
346 function requestPrintPreview() { 443 function requestPrintPreview() {
347 removeEventListeners(); 444 removeEventListeners();
348 printSettings.save(); 445 printSettings.save();
349 showLoadingAnimation(); 446 showLoadingAnimation();
350 chrome.send('getPreview', [getSettingsJSON()]); 447 chrome.send('getPreview', [getSettingsJSON()]);
(...skipping 14 matching lines...) Expand all
365 chrome.send('getPrinters'); 462 chrome.send('getPrinters');
366 } 463 }
367 464
368 /** 465 /**
369 * Fill the printer list drop down. 466 * Fill the printer list drop down.
370 * Called from PrintPreviewHandler::SendPrinterList(). 467 * Called from PrintPreviewHandler::SendPrinterList().
371 * @param {Array} printers Array of printer info objects. 468 * @param {Array} printers Array of printer info objects.
372 */ 469 */
373 function setPrinters(printers) { 470 function setPrinters(printers) {
374 var printerList = $('printer-list'); 471 var printerList = $('printer-list');
472 if (useCloudPrint) {
473 cloudprint.fetchPrinters(addCloudPrinters);
474 if (printers.length > 0) {
475 option = addDestinationListOption('', '', false, true);
476 option = addDestinationListOption(localStrings.getString('localPrinters'),
477 '',
478 false,
479 true);
480 }
481 }
375 // If there exists a dummy printer value, then setDefaultPrinter() already 482 // If there exists a dummy printer value, then setDefaultPrinter() already
376 // requested a preview, so no need to do it again. 483 // requested a preview, so no need to do it again.
377 var needPreview = (printerList[0].value == ''); 484 var needPreview = (printerList[0].value == '');
378 for (var i = 0; i < printers.length; ++i) { 485 for (var i = 0; i < printers.length; ++i) {
379 var isDefault = (printers[i].deviceName == defaultOrLastUsedPrinterName); 486 var isDefault = (printers[i].deviceName == defaultOrLastUsedPrinterName);
380 addDestinationListOption(printers[i].printerName, printers[i].deviceName, 487 addDestinationListOption(printers[i].printerName, printers[i].deviceName,
381 isDefault, false); 488 isDefault, false);
382 } 489 }
383 490
384 // Remove the dummy printer added in setDefaultPrinter(). 491 // Remove the dummy printer added in setDefaultPrinter().
385 printerList.remove(0); 492 printerList.remove(0);
386 493
387 if (printers.length != 0) 494 if (printers.length != 0)
388 addDestinationListOption('', '', false, true); 495 addDestinationListOption('', '', false, true);
389 496
390 // Adding option for saving PDF to disk. 497 // Adding option for saving PDF to disk.
391 addDestinationListOption(localStrings.getString('printToPDF'), 498 addDestinationListOption(localStrings.getString('printToPDF'),
392 PRINT_TO_PDF, 499 PRINT_TO_PDF,
393 defaultOrLastUsedPrinterName == PRINT_TO_PDF, 500 defaultOrLastUsedPrinterName == PRINT_TO_PDF,
394 false); 501 false);
395 addDestinationListOption('', '', false, true); 502 addDestinationListOption('', '', false, true);
396 503
397 // Add an option to manage printers. 504 // Add options to manage printers.
398 addDestinationListOption(localStrings.getString('managePrinters'), 505 if (!cr.isChromeOS) {
399 MANAGE_PRINTERS, false, false); 506 addDestinationListOption(localStrings.getString('manageLocalPrinters'),
507 MANAGE_LOCAL_PRINTERS, false, false);
508 }
509 if (useCloudPrint) {
510 addDestinationListOption(localStrings.getString('manageCloudPrinters'),
511 MANAGE_CLOUD_PRINTERS, false, false);
512 }
400 513
401 printerList.disabled = false; 514 printerList.disabled = false;
402 515
403 if (needPreview) 516 if (needPreview)
404 updateControlsWithSelectedPrinterCapabilities(); 517 updateControlsWithSelectedPrinterCapabilities();
405 } 518 }
406 519
407 /** 520 /**
408 * Adds an option to the printer destination list. 521 * Adds an option to the printer destination list.
409 * @param {String} optionText specifies the option text content. 522 * @param {String} optionText specifies the option text content.
410 * @param {String} optionValue specifies the option value. 523 * @param {String} optionValue specifies the option value.
411 * @param {boolean} isDefault is true if the option needs to be selected. 524 * @param {boolean} isDefault is true if the option needs to be selected.
412 * @param {boolean} isDisabled is true if the option needs to be disabled. 525 * @param {boolean} isDisabled is true if the option needs to be disabled.
dpapad 2011/06/10 20:29:07 Update comments since it is now returning a value.
Albert Bodenhamer 2011/06/10 23:13:45 Done.
413 */ 526 */
414 function addDestinationListOption(optionText, optionValue, isDefault, 527 function addDestinationListOption(optionText, optionValue, isDefault,
415 isDisabled) { 528 isDisabled) {
416 var option = document.createElement('option'); 529 var option = document.createElement('option');
417 option.textContent = optionText; 530 option.textContent = optionText;
418 option.value = optionValue; 531 option.value = optionValue;
419 $('printer-list').add(option); 532 $('printer-list').add(option);
420 option.selected = isDefault; 533 option.selected = isDefault;
421 option.disabled = isDisabled; 534 option.disabled = isDisabled;
535 return option;
422 } 536 }
423 537
424 /** 538 /**
539 * Add cloud printers to the list drop down.
540 * Called from the cloudprint object on receipt of printer information from the
541 * cloud print server.
542 */
543 function addCloudPrinters(printers) {
544 addDestinationListOption(localStrings.getString('cloudPrinters'),
545 '',
546 false,
547 true);
548 if (printers != null) {
549 var l = printers.length;
550 if (l > maxCloudPrinters) {
551 l = maxCloudPrinters;
552 }
553 for (var i = 0; i < l; i++) {
554 var option = addDestinationListOption(printers[i]['name'],
555 printers[i]['id'],
556 i == 0,
dpapad 2011/06/10 20:29:07 I believe this should be printers[i]['name'] == d
Albert Bodenhamer 2011/06/10 23:13:45 Done.
557 false);
558 option.isCloudPrint = true;
559 }
560 if (printers.length == 0) {
561 addDestinationListOption(localStrings.getString('addCloudPrinter'),
562 ADD_PRINTER, false, false);
563 }
564 if (l < printers.length) {
565 var option = addDestinationListOption('', '', false, true);
566 addDestinationListOption(localStrings.getString('morePrinters'),
567 MORE_PRINTERS, false, false);
568 }
569 } else {
570 addDestinationListOption(localStrings.getString('signIn'),
571 SIGN_IN, false, false);
572 }
573 }
574
575 /**
425 * Sets the color mode for the PDF plugin. 576 * Sets the color mode for the PDF plugin.
426 * Called from PrintPreviewHandler::ProcessColorSetting(). 577 * Called from PrintPreviewHandler::ProcessColorSetting().
427 * @param {boolean} color is true if the PDF plugin should display in color. 578 * @param {boolean} color is true if the PDF plugin should display in color.
428 */ 579 */
429 function setColor(color) { 580 function setColor(color) {
430 var pdfViewer = $('pdf-viewer'); 581 var pdfViewer = $('pdf-viewer');
431 if (!pdfViewer) { 582 if (!pdfViewer) {
432 return; 583 return;
433 } 584 }
434 pdfViewer.grayscale(!color); 585 pdfViewer.grayscale(!color);
586 var printerList = $('printer-list')
587 cloudprint.setColor(printerList[printerList.selectedIndex], color);
435 } 588 }
436 589
437 /** 590 /**
438 * Display an error message in the center of the preview area. 591 * Display an error message in the center of the preview area.
439 * @param {string} errorMessage The error message to be displayed. 592 * @param {string} errorMessage The error message to be displayed.
440 * @param {boolean} showButton Indivates whether the "Reopen the page" button 593 * @param {boolean} showButton Indivates whether the "Reopen the page" button
441 * should be displayed. 594 * should be displayed.
442 */ 595 */
443 function displayErrorMessage(errorMessage, showButton) { 596 function displayErrorMessage(errorMessage, showButton) {
444 $('overlay-layer').classList.remove('invisible'); 597 $('overlay-layer').classList.remove('invisible');
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 this.isLandscape = ''; 1108 this.isLandscape = '';
956 } 1109 }
957 1110
958 /** 1111 /**
959 * Takes a snapshot of the print settings. 1112 * Takes a snapshot of the print settings.
960 */ 1113 */
961 PrintSettings.prototype.save = function() { 1114 PrintSettings.prototype.save = function() {
962 this.deviceName = getSelectedPrinterName(); 1115 this.deviceName = getSelectedPrinterName();
963 this.isLandscape = isLandscape(); 1116 this.isLandscape = isLandscape();
964 } 1117 }
1118
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698