diff --git a/bower.json b/bower.json index addb46e..77325db 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "barcodeEditor", "description": "Editor for print barcode", - "version": "0.0.6", + "version": "0.0.7", "main": [ "dist/barcode_editor.js", "dist/css/style.scss" diff --git a/dist/barcode_editor.js b/dist/barcode_editor.js index e019f15..17c505f 100644 --- a/dist/barcode_editor.js +++ b/dist/barcode_editor.js @@ -236,6 +236,15 @@ popItem: function(){ this.items[this.items.length-1].remove(); this.items.pop(); + }, + /** + * Count of items in one page + * @returns {int} + */ + countInPage: function(){ + var inRow = Math.floor(this.get('pageWidth')/this.get('itemWidth')); + var rowsCount = Math.floor(this.get('pageHeight')/this.get('itemHeight')); + return inRow*rowsCount; } }); @@ -343,7 +352,19 @@ * Print page */ print: function(){ - this.$el.print({}); + var model = this.model; + var inPage = model.countInPage(), total = model.items.length, currentHeight = model.get('pageHeight'); + var deferred = $.Deferred(); + + model.set('pageHeight', Math.ceil(total/inPage)*currentHeight); + + deferred.then(function(){ + model.set('pageHeight', currentHeight); + }); + + this.$el.print({ + deferred: deferred + }); }, /** * Set parameter to input diff --git a/dist/barcode_editor.min.js b/dist/barcode_editor.min.js new file mode 100644 index 0000000..2c879f6 --- /dev/null +++ b/dist/barcode_editor.min.js @@ -0,0 +1,32 @@ +!function(t){"function"==typeof define&&define.amd?define(["jquery","underscore","backbone","jquery-ui/resizable","jQuery.print"],t):"object"==typeof exports?t(require("jquery","underscore","backbone","jquery-ui/resizable","jQuery.print")):t(jQuery,_,Backbone)}(function(t,e,i){function s(t){return t*h}function n(t){return t*o}function r(t){return t.charAt(0).toUpperCase()+t.substring(1).toLowerCase()}function a(t){for(var e=[g,d,c,p],i=0;ie)){var i=this.previous("itemsCount")||0 +if(e>i)for(var s=0;e-i>s;s++)n.addItem() +else for(var r=0;i-e>r;r++)n.popItem() +this.view.setParam("itemsCount",e)}}),this.on("change:fontSize",function(e,i){var s=t("").html("1").css({fontSize:i,fontFamily:"Courier, monospace"}) +t("body").append(s),this.set("charWidth",s.width()),s.remove()}),this.on("destroy",function(){this.view.remove()}),e.each(["fontSize","imageWidth","itemWidth","itemHeight","text"],function(t){n.on("change:"+t,function(){n.view.setParam(t,n.get(t)),n.updateItems()})}),this.view=new v({model:this,el:t(this.get("selector"))}),this.view.render(),this.clear().set(i)},updateItems:function(){for(var t=0;t"+parseInt(e)+""),this.view.setParam(t+"Border",e)},addItem:function(t){t=t||{} +var i={},s=this.get("barcodeImage") +s&&(i.src=t.src||s) +var n=new f(i) +return n.render(),n.setStyle(e.extend(this.getItemStyle(),t)),this.view.$items.append(n.$el),this.items.push(n),n},popItem:function(){this.items[this.items.length-1].remove(),this.items.pop()},countInPage:function(){var t=Math.floor(this.get("pageWidth")/this.get("itemWidth")),e=Math.floor(this.get("pageHeight")/this.get("itemHeight")) +return t*e}}),f=i.View.extend({className:"item",template:'

',initialize:function(t){this.options=t},render:function(){this.$el.html(e.template(this.template)()) +var t=this +this.$el.find("img").attr("src",this.options.src||"dist/barcode.png").on("load",function(){t.trigger("imageLoaded")})},setStyle:function(t){var e=s(t.width) +this.$el.css({width:e,height:s(t.height)}),this.$el.find("p").css({fontSize:t.fontSize,fontFamily:"Courier, monospace"}).text(this.strMax(t.text,e/(t.charWidth||10))),this.$el.find("img").css("width",s(t.imageWidth))},strMax:function(t,e){return t&&t.length?t.length>e?t.substr(0,e-2)+"..":t:""}}),v=i.View.extend({events:{"click button.print":"print"},initialize:function(){this.$page=this.$(".pageHandler .page"),this.$items=this.$page.children(".items"),this.$rules=this.$page.children(".rule"),this.$params=this.$el.find('.parameters input[type="number"], .parameters input[type="text"]'),this.rules={} +var t=this +a(function(e){t.rules[e]=t.$rules.filter("."+e)})},render:function(){var e=this,i=this.model +this.$items.resizable({handles:"n, e, s, w",containment:"parent",resize:function(t,r){var h=e.$items.position() +h.right=s(i.get("pageWidth"))-(h.left+r.size.width),h.bottom=s(i.get("pageHeight"))-(h.top+r.size.height),a(function(t){i.updateBorderValue(t,n(h[t]))})}}),this.$params.change(function(){var e=t(this),s=e.val() +"number"==e.attr("type")&&(s=parseInt(s)),i.set(e.attr("name"),s)})},print:function(){var e=this.model,i=e.countInPage(),s=e.items.length,n=e.get("pageHeight"),r=t.Deferred() +e.set("pageHeight",Math.ceil(s/i)*n),r.then(function(){e.set("pageHeight",n)}),this.$el.print({deferred:r})},setParam:function(t,e){var i=this.$params.filter('[name="'+t+'"]') +"number"==i.attr("type")&&(e=parseInt(e)),i.val(e)}}) +return m.printBarcodes=function(i,s){function n(){a.view.$el.css("position","static"),a.view.print(),a.destroy()}i.itemsCount=0 +var r=t('
') +r.css({position:"absolute",left:"-9000px",top:"-9000px"}).attr("id",e.uniqueId("beditor_")),t("body").append(r),i.selector="#"+r.attr("id") +for(var a=new m(i),h=s.length+1-1,o=0;o=h&&n()})}},window.BarcodeEditorFactory={Model:m,View:v,ItemView:f},m}) diff --git a/index.html b/index.html index f809a99..741d34e 100644 --- a/index.html +++ b/index.html @@ -120,7 +120,7 @@ "jquery-ui/widget": "bower_components/jquery-ui/ui/widget", "jquery-ui/resizable": "bower_components/jquery-ui/ui/resizable", "jQuery.print": "bower_components/jQuery.print/jQuery.print", - "barcodeEditor": "dist/barcode_editor" + "barcodeEditor": "dist/barcode_editor.min" }, shim:{ "jquery-ui/resizable": ["jquery-ui/core", "jquery-ui/mouse", "jquery-ui/widget"], @@ -132,18 +132,18 @@ window.editor1 = new BarcodeEditor({ selector: '#barcodeEditor1', pageWidth: 210, - pageHeight: 230, + pageHeight: 297, topBorder: 5, rightBorder: 5, bottomBorder: 5, leftBorder: 5, fontSize: 12, - imageWidth: 100, - itemWidth: 150, - itemHeight: 50, + imageWidth: 42, + itemWidth: 50, + itemHeight: 28, text: 'Съеш еще этих мягких булок', barcodeImage: 'dist/barcode.png', - itemsCount: 3 + itemsCount: 40 }); window.editor2 = new BarcodeEditor({