summaryrefslogtreecommitdiffstats
path: root/web/js/labitrack.d/03-labitrack.js
diff options
context:
space:
mode:
Diffstat (limited to 'web/js/labitrack.d/03-labitrack.js')
-rw-r--r--web/js/labitrack.d/03-labitrack.js104
1 files changed, 104 insertions, 0 deletions
diff --git a/web/js/labitrack.d/03-labitrack.js b/web/js/labitrack.d/03-labitrack.js
new file mode 100644
index 0000000..6da295e
--- /dev/null
+++ b/web/js/labitrack.d/03-labitrack.js
@@ -0,0 +1,104 @@
+(function(){
+ λ.label = function(){
+ var mindata = {
+ id: "???",
+ name: "Name",
+ desc: "Description",
+ tags: []
+ };
+
+ var render;
+
+ function label()
+ {
+ this.canvas = null;
+ this.bitmap = null;
+ this.data = null;
+ this.busy = false;
+ this.set_template('standard');
+ this.renderpreview = new λ.ratelimiter(50, render, this);
+ }
+ var labelpt = label.prototype;
+
+ labelpt.set_template = function(tmpl){
+ this.template = λ.templates.get(tmpl);
+ this.update_canvas();
+ };
+
+ labelpt.set_canvas = function(canvas){
+ this.canvas = canvas;
+ this.update_canvas();
+ };
+
+ labelpt.set_data = function(data){
+ this.data = data;
+ this.render();
+ };
+
+ render = function(callback, preview){
+ if (preview === undef) preview = true;
+ var t = this;
+ var data = null;
+ var params = $.extend({}, mindata, t.data);
+ var time = labitrack.utils.time(function(){
+ t.busy = true;
+ data = t.template.draw(params, preview);
+ if (!preview) {
+ labitrack.utils.convert_to_monochrome(data);
+ } else {
+ t.bitmap = data;
+ t.update_canvas();
+ }
+ t.busy = false;
+ });
+ if (callback) {
+ callback.apply(t, [data, time]);
+ }
+ };
+
+ labelpt.render = function(callback, preview){
+ if (preview === false) {
+ return render.apply(this, [callback, preview]);
+ }
+ return this.renderpreview(callback);
+ };
+
+ labelpt.update_canvas = function(){
+ var bitmap = this.bitmap;
+ var canvas = this.canvas;
+ if (bitmap !== null && canvas !== null) {
+ canvas.width = bitmap.width;
+ canvas.height = bitmap.height;
+ var ctx = canvas.getContext('2d');
+ ctx.putImageData(bitmap, 0, 0);
+ }
+ };
+
+ labelpt.print = function(){
+ console.log("Print label on server");
+ this.render(function(data){
+ var ctx = labitrack.utils.new_context(data.width, data.height);
+ ctx.putImageData(data, 0, 0);
+ $.post('/print.json',
+ {
+ image: ctx.canvas.toDataURL('image/png')
+ }, function(data) { console.log('uploaded');}, 'json');
+ }, false);
+ };
+
+ return label;
+ }();
+
+ λ.templates = function(){
+ var templates = {};
+
+ return {
+ 'register': function(key, value){
+ templates[key] = value;
+ },
+ 'get': function(key){
+ return templates[key];
+ }
+ };
+ }();
+}());