annotate Applications/StoneWebViewer/WebApplication/print.js @ 1562:2a4a6b967053

starting work on print
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 20 Aug 2020 18:17:38 +0200
parents
children e0045462a25c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1562
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 function beforePrint(event){
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 console.log('beforePrint');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 var $body = $('body');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 $body.addClass('print');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 // because firefox does not support/executes codes after the cloned document as been rendered
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 // https://bugzilla.mozilla.org/show_bug.cgi?format=default&id=1048317
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 // we cannot calculate using the good body size for the clone document
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 // so we have to hardcode the body width (meaning we can only renders in A4 in firefox);
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 var uaParser = new UAParser();
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 var isFirefox = (uaParser.getBrowser().name === 'Firefox');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 var isIE = (uaParser.getBrowser().name === 'IE');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 var isEdge = (uaParser.getBrowser().name === 'Edge');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 console.log('ua parser', uaParser.getBrowser());
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 if(isFirefox || isIE || isEdge){
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 $body.css('width', '8.5in');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 $body.css('height', '11in');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 // console.log('html size', $html.width(), $html.height());
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 }
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 if(isIE){
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22 window.alert('GENERAL_PARAGRAPHS.INCOMPATIBLE_PRINT_BROWSER');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 }
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 console.log('body size', $body.width(), $body.height());
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27 //var panes = vm.paneManager.getAllPanes();
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 var $splitpane = $('#viewport');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29 var splitpaneSize = {width: $splitpane.width(), height: $splitpane.height()};
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 console.log(splitpaneSize);
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31 var panesCount = {
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 x: app.layoutCountX,
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 y: app.layoutCountY
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 }
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35 console.log(panesCount);
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 for(var i = 0; i < panes.length; i++){
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 var $pane = panes[i];
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39 var viewport = vm.viewports[$pane.$$hashKey];
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40 var paneSize = {
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41 originalWidth: viewport.getCanvasSize().width,
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42 originalHeight: viewport.getCanvasSize().height,
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43 originalRatio: 0,
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 paneFinalWidth: splitpaneSize.width / panesCount.x,
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 paneFinalHeight: splitpaneSize.height / panesCount.y,
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 paneFinalRatio: 0,
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 canvasFinalWidth: 0,
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 canvasFinalHeight: 0,
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 canvasFinalRatio: 0
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 };
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 paneSize.originalRatio = paneSize.originalWidth / paneSize.originalHeight;
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 paneSize.paneFinalRatio = paneSize.paneFinalWidth / paneSize.paneFinalHeight;
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54 if(paneSize.paneFinalRatio > 1){
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55 // If pane width ratio means it's width is larger than it's height
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56 if(paneSize.paneFinalRatio > paneSize.originalRatio){
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
57 // the final pane is larger than the original
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
58 // So we should fit on the height to recalc the ratio
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
59 console.log('case 1');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
60 paneSize.canvasFinalHeight = paneSize.paneFinalHeight;
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
61 paneSize.canvasFinalWidth = paneSize.canvasFinalHeight * paneSize.originalRatio; // Then we calc the width according the ratio
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
62 } else {
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
63 // the final pane is higher than or equal to the original
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
64 // So we should fit on the width
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
65 console.log('case 2');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
66 paneSize.canvasFinalWidth = paneSize.paneFinalWidth;
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
67 paneSize.canvasFinalHeight = paneSize.canvasFinalWidth / paneSize.originalRatio; // Then we calc the width according the ratio
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
68
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
69 }
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
70 } else {
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
71 // If pane width ratio means it's height is higher than it's height
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
72 if(paneSize.paneFinalRatio > paneSize.originalRatio){
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
73 // the final pane is larger than the original
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
74 // So we should fit on the height to recalc the ratio
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
75 console.log('case 3');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
76 paneSize.canvasFinalHeight = paneSize.paneFinalHeight;
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
77 paneSize.canvasFinalWidth = paneSize.canvasFinalHeight * paneSize.originalRatio; // Then we calc the width according the ratio
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
78 } else {
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
79 // the final pane is higher than or equal to the original
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
80 // So we should fit on the width
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 console.log('case 4');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
82 paneSize.canvasFinalWidth = paneSize.paneFinalWidth;
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
83 paneSize.canvasFinalHeight = paneSize.canvasFinalWidth / paneSize.originalRatio; // Then we calc the width according the ratio
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
84
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
85 }
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
86 }
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
87
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
88 paneSize.canvasFinalRatio = paneSize.canvasFinalWidth / paneSize.canvasFinalHeight;
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
89 console.log('paneSizes:', paneSize, 'splitpaneSize:', splitpaneSize, 'panesCount:', panesCount);
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
90 // viewport.resizeCanvas(paneSize.canvasFinalWidth, paneSize.canvasFinalHeight);
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
91 // viewport.draw();
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92 var $canvas = $("[data-pane-hashkey='" + $pane.$$hashKey + "']").find('canvas');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
93 $canvas.width(paneSize.canvasFinalWidth);
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
94 $canvas.height(paneSize.canvasFinalHeight);
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
95 }
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 };
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
97
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98 function afterPrint(){
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
99 console.log('afterprint');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
100 var $body = $('body');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
101 // var $html = $('html');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
102 $body.removeClass('print');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
103 $body.css('width', '100%');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
104 $body.css('height', '100%');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
105 // $html.css('width', '100%');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
106 // $html.css('height', '100%');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
107 $('.wv-cornerstone-enabled-image canvas').css('width', 'auto');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
108 $('.wv-cornerstone-enabled-image canvas').css('height', 'auto');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
109 $(window).trigger('resize'); // to force screen and canvas recalculation
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
110 }
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
111
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
112 window.addEventListener('beforeprint', function(event){
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
113 beforePrint(event)
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
114 })
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
115 var printMedia = window.matchMedia('print');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
116 printMedia.addListener(function(mql) {
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
117 if(mql.matches) {
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
118 console.log('webkit equivalent of onbeforeprint');
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
119 beforePrint();
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
120 }
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
121 });
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
122
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
123 window.addEventListener('afterprint', function(){
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
124 afterPrint();
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
125 });$
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
126
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
127 /*vm.cancelPrintMode = function(){
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
128 afterPrint();
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
129 }
2a4a6b967053 starting work on print
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
130 */