diff --git a/embroider_print.py b/embroider_print.py index 79d9bf45c..a8daece48 100644 --- a/embroider_print.py +++ b/embroider_print.py @@ -133,7 +133,7 @@ class PrintPreviewServer(Thread): @self.app.route('/metadata//set', methods=['POST']) def set_field(field_name): - self.metadata[field_name] = request.form['value'] + self.metadata[field_name] = request.json['value'] return "OK" @self.app.route('/metadata/', methods=['GET']) diff --git a/inkstitch/extensions.py b/inkstitch/extensions.py index 57d292313..0e0e49f82 100644 --- a/inkstitch/extensions.py +++ b/inkstitch/extensions.py @@ -1,5 +1,6 @@ import inkex import re +import json from collections import MutableMapping from .elements import AutoFill, Fill, Stroke, SatinColumn, Polyline, EmbroideryElement from . import SVG_POLYLINE_TAG, SVG_GROUP_TAG, SVG_DEFS_TAG, INKSCAPE_GROUPMODE, EMBROIDERABLE_TAGS, PIXELS_PER_MM @@ -49,15 +50,23 @@ class InkStitchMetadata(MutableMapping): # implement these five methods and we get a full dict-like interface. def __setitem__(self, name, value): - self[name].text = value + self._find_item(name).text = json.dumps(value) - def __getitem__(self, name): + def _find_item(self, name): tag = inkex.addNS(name, "inkstitch") item = self.metadata.find(tag) if item is None: item = inkex.etree.SubElement(self.metadata, tag) - return item.text + return item + + def __getitem__(self, name): + item = self._find_item(name) + + try: + return json.loads(item.text) + except ValueError: + return None def __delitem__(self, name): item = self[name] @@ -71,6 +80,7 @@ class InkStitchMetadata(MutableMapping): yield strip_namespace(child.tag) def __len__(self): + i = 0 for i, item in enumerate(self): pass diff --git a/print/resources/inkstitch.js b/print/resources/inkstitch.js index 15cf494ac..8123a31fc 100644 --- a/print/resources/inkstitch.js +++ b/print/resources/inkstitch.js @@ -1,3 +1,12 @@ +$.postJSON = function(url, data, success=null) { + return $.ajax(url, { + type: 'POST', + data: JSON.stringify(data), + contentType: 'application/json', + success: success + }); +}; + function ping() { $.get("/ping") .done(function() { setTimeout(ping, 1000) }) @@ -49,13 +58,22 @@ $(function() { var content = $(this).html(); var field_name = $(this).attr('data-field-name'); $('[data-field-name="' + field_name + '"]').text(content); - $.post('/metadata/' + field_name + '/set', {value: content}); + $.postJSON('/metadata/' + field_name + '/set', {value: content}); }); // load up initial metadata values $.getJSON('/metadata', function(metadata) { $.each(metadata, function(field_name, value) { - $('[data-field-name="' + field_name + '"]').text(value); + $('[data-field-name="' + field_name + '"]').each(function(i, item) { + console.log(item); + if ($(item).is(':checkbox')) { + console.log("is a checkbox"); + $(item).prop('checked', value).trigger('change'); + } else { + console.log("is not a checkbox"); + $(item).text(value); + } + }); }); }); @@ -108,9 +126,14 @@ $(function() { //Checkbox $(':checkbox').change(function() { - $('.' + this.id).toggle(); + var checked = $(this).prop('checked'); + var field_name = $(this).attr('data-field-name'); + + $('.' + field_name).toggle(checked); setPageNumbers(); scaleInksimulation(); + + $.postJSON('/metadata/' + field_name + '/set', {value: checked}); }); }); diff --git a/print/templates/ui.html b/print/templates/ui.html index 078f1a4ca..9acdd1bc2 100644 --- a/print/templates/ui.html +++ b/print/templates/ui.html @@ -24,10 +24,10 @@
{{ ('Print Layouts') }}: -

-

-

-

+

+

+

+