optionally scale to the page width when printing, #71301
authorMark Wells <mark@freeside.biz>
Sat, 9 Jul 2016 17:32:46 +0000 (10:32 -0700)
committerMark Wells <mark@freeside.biz>
Sat, 9 Jul 2016 17:32:46 +0000 (10:32 -0700)
httemplate/elements/header-full.html
httemplate/elements/header-popup.html
httemplate/elements/printtofit.js [new file with mode: 0644]
httemplate/pref/pref-process.html
httemplate/pref/pref.html

index db38eaf..07595a5 100644 (file)
@@ -47,6 +47,9 @@ Example:
       <link rel="stylesheet" href="<% $fsurl %>elements/jquery-ui.min.css">
       <SCRIPT SRC="<% $fsurl %>elements/jquery.js"></SCRIPT>
       <SCRIPT SRC="<% $fsurl %>elements/jquery-ui.min.js"></SCRIPT>
+%     if ( $FS::CurrentUser::CurrentUser->option('printtofit') ) {
+      <SCRIPT SRC="<% $fsurl %>elements/printtofit.js"></SCRIPT>
+%     }
 %   }
     <% include('init_overlib.html') |n %>
     <% include('rs_init_object.html') |n %>
index 1759369..6c0f80b 100644 (file)
@@ -30,6 +30,9 @@ Example:
     <META HTTP-Equiv="Expires" Content="0"> 
 %   unless ( $no_jquery ) {
       <SCRIPT SRC="<% $fsurl %>elements/jquery.js"></SCRIPT>
+%     if ( $FS::CurrentUser::CurrentUser->option('printtofit') ) {
+      <SCRIPT SRC="<% $fsurl %>elements/printtofit.js"></SCRIPT>
+%     }
 %   }
     <% $head |n %>
   </HEAD>
diff --git a/httemplate/elements/printtofit.js b/httemplate/elements/printtofit.js
new file mode 100644 (file)
index 0000000..66257fc
--- /dev/null
@@ -0,0 +1,26 @@
+$().ready(function() {
+  var beforePrint = function() {
+    if ($('body').width() > 0) {
+      // 7.5 inches * 96 DPI; maybe make the width a user pref?
+      var maxwidth = 7.5 * 96;
+      $('body').css('zoom', maxwidth / $('body').width());
+    }
+  };
+  var afterPrint = function() {
+    $('body').css('zoom', 1);
+  }
+
+  if (window.matchMedia) { // chrome, most importantly; also IE10?
+    window.matchMedia('print').addListener(
+      function(mq) {
+        mq.matches ?  beforePrint() : afterPrint();
+      }
+    );
+  } else { // other IE
+    $(window).on('beforeprint', beforePrint);
+    $(window).on('afterprint', afterPrint);
+  }
+  // got nothing for firefox
+  // https://bugzilla.mozilla.org/show_bug.cgi?id=774398
+  // but firefox already has "shrink to fit"
+});
index f03a8df..b622efc 100644 (file)
@@ -55,6 +55,7 @@ unless ( $error ) { # if ($access_user) {
                       disable_html_editor disable_enter_submit_onetimecharge
                       enable_mask_clipboard_hack dashboard_customers
                       customer_view_emails
+                      printtofit
                       email_address
                       snom-ip snom-username snom-password
                       vonage-fromnumber vonage-username vonage-password
index 50d6e8d..c6bcf6f 100644 (file)
@@ -130,6 +130,13 @@ Interface
   </TR>
 
   <TR>
+    <TH ALIGN="right">Scale documents to fit on a letter-size page</TH>
+    <TD ALIGN="left">
+      <INPUT TYPE="checkbox" NAME="printtofit" VALUE="Y" <% $curuser->option('printtofit') ? 'CHECKED' : '' %>>
+    </TD>
+  </TR>
+
+  <TR>
     <TH ALIGN="right">How many recently-modified customers displayed on dashboard</TH>
     <TD ALIGN="left" COLSPAN=2>
       <INPUT TYPE="text" NAME="dashboard_customers" VALUE="<% $curuser->option('dashboard_customers') %>"></TD>
@@ -143,8 +150,6 @@ Interface
     </TD>
   </TR>
 
-
-
 </TABLE>
 <BR>