2019-10-07 15:51:50 -07:00
import dti from 'dom-to-image' ;
2019-07-28 13:47:54 -07:00
import './Label.html' ;
2019-10-07 15:51:50 -07:00
import PDF from 'jspdf' ;
import { saveAs } from 'file-saver' ;
2019-07-28 13:47:54 -07:00
import swal from 'sweetalert2' ;
import dragula from 'dragula' ;
2019-10-07 15:51:50 -07:00
//import JsBarcode from 'JsBarcode';
import QRCode from '/imports/util/qrcode/qrcode' ;
//let QRCode = require('/imports/util/qrcode/qrcode.js');
2020-01-16 09:31:12 -08:00
import './PrintLabel.js' ;
2019-10-07 15:51:50 -07:00
console . log ( QRCode ) ;
//let {qrcode, svg2url} = require('pure-svg-code');
//let QRCode = require('qrcode-svg');
2019-07-28 13:47:54 -07:00
//******************************************************************
//** Creates printable labels for a roll style printer.
//******************************************************************
let PREFIX = "LabelMaker_" ;
2019-10-07 15:51:50 -07:00
let PX _PER _MM = 300 / 25.4 ;
let SCREEN _PX _PER _MM = 96 / 25.4 ;
2020-01-16 09:31:12 -08:00
//let formats = {
// "8oz Label": {logo: true, text: true, barcode: true, width: 76.2, height: 50.8, labelClass: '8oz'},
// "Barcode Only": {logo: false, text: false, barcode: true, width: 25, height: 25, labelClass: 'barcode'}
//};
2019-07-28 13:47:54 -07:00
Template . LabelMaker . onCreated ( function ( ) {
2019-10-07 15:51:50 -07:00
this . labelWidth = new ReactiveVar ( 76 ) ;
this . labelHeight = new ReactiveVar ( 50 ) ;
this . title1 = new ReactiveVar ( "Strawberry" ) ;
this . title2 = new ReactiveVar ( "w/ Espelette" ) ;
this . ingredients = new ReactiveVar ( "*strawberry, sugar, *espelette" ) ;
this . date = new ReactiveVar ( 19001 ) ;
2020-01-16 09:31:12 -08:00
this . format = new ReactiveVar ( "oz8" ) ;
2019-07-28 13:47:54 -07:00
} ) ;
Template . LabelMaker . onRendered ( function ( ) {
let template = this ;
2019-10-07 15:51:50 -07:00
2020-01-16 09:31:12 -08:00
//new QRCode(document.getElementById("qrcode"), {text: "1234567890", width: 60, height: 60});
2019-07-28 13:47:54 -07:00
} ) ;
Template . LabelMaker . onDestroyed ( function ( ) {
} ) ;
Template . LabelMaker . events ( {
2020-01-16 09:31:12 -08:00
//'change .labelWidth': function(e, t) {
// let x = $(e.target).val();
//
// t.labelWidth.set(!Number.isNaN(x) && x > 0 ? parseFloat(x) : 76);
//},
//'change .labelHeight': function(event, template) {
// let x = $(event.target).val();
//
// t.labelHeight.set(!Number.isNaN(x) && x > 0 ? parseFloat(x) : 50);
//},
'change input[name="labelType"]' : function ( e , t ) {
t . format . set ( $ ( e . target ) . val ( ) ) ;
2019-07-28 13:47:54 -07:00
} ,
2019-10-07 15:51:50 -07:00
'change .title1' : function ( e , t ) { t . title1 . set ( $ ( e . target ) . val ( ) ) ; } ,
'change .title1Font' : function ( e , t ) { t . title1Font . set ( $ ( e . target ) . val ( ) ) ; } ,
'change .title1YOffset' : function ( e , t ) { t . title1YOffset . set ( parseInt ( $ ( e . target ) . val ( ) ) ) ; } ,
'change .title2' : function ( e , t ) { t . title2 . set ( $ ( e . target ) . val ( ) ) ; } ,
'change .title2Font' : function ( e , t ) { t . title2Font . set ( $ ( e . target ) . val ( ) ) ; } ,
'change .title2YOffset' : function ( e , t ) { t . title2YOffset . set ( parseInt ( $ ( e . target ) . val ( ) ) ) ; } ,
'change .ingredients' : function ( e , t ) { t . ingredients . set ( $ ( e . target ) . val ( ) ) ; } ,
'change .ingredientsFont' : function ( e , t ) { t . ingredientsFont . set ( $ ( e . target ) . val ( ) ) ; } ,
'change .ingredientsYOffset' : function ( e , t ) { t . ingredientsYOffset . set ( parseInt ( $ ( e . target ) . val ( ) ) ) ; } ,
'change .date' : function ( e , t ) { t . date . set ( parseInt ( $ ( e . target ) . val ( ) ) ) ; } ,
'click .preview' : function ( event , template ) {
2020-01-16 09:31:12 -08:00
let _this = template ;
let format = _this . format . get ( ) ;
let title1 = _this . title1 . get ( ) ;
let title2 = _this . title2 . get ( ) ;
let ingredients = _this . ingredients . get ( ) ;
let date = _this . date . get ( ) ;
let params = { format , title1 , title2 , ingredients , date } ;
2019-10-07 15:51:50 -07:00
window . open ( '/PrintLabel?' + $ . param ( params ) ) ;
} ,
'click .print' : function ( event , template ) {
let _this = template ;
2020-01-16 09:31:12 -08:00
let format = _this . format . get ( ) ;
2019-10-07 15:51:50 -07:00
let title1 = _this . title1 . get ( ) ;
let title2 = _this . title2 . get ( ) ;
let ingredients = _this . ingredients . get ( ) ;
let date = _this . date . get ( ) ;
2020-01-16 09:31:12 -08:00
//console.log("Calling print with: " + JSON.stringify({format, title1, title2, ingredients, date}));
Meteor . call ( 'printLabels' , format , title1 , title2 , ingredients , date , ( error , result ) => {
2019-10-07 15:51:50 -07:00
if ( error ) {
console . log ( error ) ;
}
else {
const blob = new Blob ( [ result ] , { type : 'application/pdf' } ) ;
const link = document . createElement ( 'a' ) ;
link . href = window . URL . createObjectURL ( blob ) ;
link . download = "labels.pdf" ;
link . click ( ) ;
}
} ) ;
2019-07-28 13:47:54 -07:00
}
} ) ;
Template . LabelMaker . helpers ( {
2020-01-16 09:31:12 -08:00
printLabelVars : function ( ) { //Called to pass the values for rendering a sample label on the client. This mimics the same call to the same view when going to 'print' the label to PDF later.
let t = Template . instance ( ) ;
return {
format : t . format . get ( ) ,
title1 : t . title1 . get ( ) ,
title2 : t . title2 . get ( ) ,
ingredients : t . ingredients . get ( ) ,
date : t . date . get ( )
}
} ,
2019-10-07 15:51:50 -07:00
title1 : function ( ) { return Template . instance ( ) . title1 . get ( ) ; } ,
title2 : function ( ) { return Template . instance ( ) . title2 . get ( ) ; } ,
ingredients : function ( ) { return Template . instance ( ) . ingredients . get ( ) ; } ,
date : function ( ) { return Template . instance ( ) . date . get ( ) ; } ,
labelWidth : function ( ) { return Template . instance ( ) . labelWidth . get ( ) ; } ,
labelHeight : function ( ) { return Template . instance ( ) . labelHeight . get ( ) ; } ,
2020-01-16 09:31:12 -08:00
2019-10-07 15:51:50 -07:00
labels : function ( ) {
return Session . get ( PREFIX + "generatedLabels" ) ;
} ,
labelPxWidth : function ( ) {
return Math . floor ( Template . instance ( ) . labelWidth . get ( ) * PX _PER _MM ) ;
} ,
labelPxHeight : function ( ) {
return Math . floor ( Template . instance ( ) . labelHeight . get ( ) * PX _PER _MM ) ;
} ,
labelPxWidthActual : function ( ) {
return Math . floor ( Template . instance ( ) . labelWidth . get ( ) * SCREEN _PX _PER _MM ) ;
} ,
labelPxHeightActual : function ( ) {
return Math . floor ( Template . instance ( ) . labelHeight . get ( ) * SCREEN _PX _PER _MM ) ;
2019-07-28 13:47:54 -07:00
}
} ) ;