kopia lustrzana https://github.com/inkstitch/inkstitch
round-trip editable fields and checkboxes
rodzic
78532e8efe
commit
f9b90d31b7
|
@ -133,7 +133,7 @@ class PrintPreviewServer(Thread):
|
||||||
|
|
||||||
@self.app.route('/metadata/<field_name>/set', methods=['POST'])
|
@self.app.route('/metadata/<field_name>/set', methods=['POST'])
|
||||||
def set_field(field_name):
|
def set_field(field_name):
|
||||||
self.metadata[field_name] = request.form['value']
|
self.metadata[field_name] = request.json['value']
|
||||||
return "OK"
|
return "OK"
|
||||||
|
|
||||||
@self.app.route('/metadata/<field_mame>', methods=['GET'])
|
@self.app.route('/metadata/<field_mame>', methods=['GET'])
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import inkex
|
import inkex
|
||||||
import re
|
import re
|
||||||
|
import json
|
||||||
from collections import MutableMapping
|
from collections import MutableMapping
|
||||||
from .elements import AutoFill, Fill, Stroke, SatinColumn, Polyline, EmbroideryElement
|
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
|
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.
|
# implement these five methods and we get a full dict-like interface.
|
||||||
|
|
||||||
def __setitem__(self, name, value):
|
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")
|
tag = inkex.addNS(name, "inkstitch")
|
||||||
item = self.metadata.find(tag)
|
item = self.metadata.find(tag)
|
||||||
if item is None:
|
if item is None:
|
||||||
item = inkex.etree.SubElement(self.metadata, tag)
|
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):
|
def __delitem__(self, name):
|
||||||
item = self[name]
|
item = self[name]
|
||||||
|
@ -71,6 +80,7 @@ class InkStitchMetadata(MutableMapping):
|
||||||
yield strip_namespace(child.tag)
|
yield strip_namespace(child.tag)
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
|
i = 0
|
||||||
for i, item in enumerate(self):
|
for i, item in enumerate(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -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() {
|
function ping() {
|
||||||
$.get("/ping")
|
$.get("/ping")
|
||||||
.done(function() { setTimeout(ping, 1000) })
|
.done(function() { setTimeout(ping, 1000) })
|
||||||
|
@ -49,13 +58,22 @@ $(function() {
|
||||||
var content = $(this).html();
|
var content = $(this).html();
|
||||||
var field_name = $(this).attr('data-field-name');
|
var field_name = $(this).attr('data-field-name');
|
||||||
$('[data-field-name="' + field_name + '"]').text(content);
|
$('[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
|
// load up initial metadata values
|
||||||
$.getJSON('/metadata', function(metadata) {
|
$.getJSON('/metadata', function(metadata) {
|
||||||
$.each(metadata, function(field_name, value) {
|
$.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
|
||||||
$(':checkbox').change(function() {
|
$(':checkbox').change(function() {
|
||||||
$('.' + this.id).toggle();
|
var checked = $(this).prop('checked');
|
||||||
|
var field_name = $(this).attr('data-field-name');
|
||||||
|
|
||||||
|
$('.' + field_name).toggle(checked);
|
||||||
setPageNumbers();
|
setPageNumbers();
|
||||||
scaleInksimulation();
|
scaleInksimulation();
|
||||||
|
|
||||||
|
$.postJSON('/metadata/' + field_name + '/set', {value: checked});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -24,10 +24,10 @@
|
||||||
<div>
|
<div>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{{ ('Print Layouts') }}:</legend>
|
<legend>{{ ('Print Layouts') }}:</legend>
|
||||||
<p><input type="checkbox" id="client-overview" {{ 'checked' if view.client_overview else '' }}><label for="client-overview">Client Overview</label></p>
|
<p><input type="checkbox" id="client-overview" data-field-name="client-overview" /><label for="client-overview">Client Overview</label></p>
|
||||||
<p><input type="checkbox" id="client-detailedview" {{ 'checked' if view.client_detailedview else '' }}><label for="client-detailedview">Client Detailed View</label></p>
|
<p><input type="checkbox" id="client-detailedview" data-field-name="client-detailedview" /><label for="client-detailedview">Client Detailed View</label></p>
|
||||||
<p><input type="checkbox" id="operator-overview" {{ 'checked' if view.operator_overview else '' }}><label for="operator-overview">Operator Overview</label></p>
|
<p><input type="checkbox" id="operator-overview" data-field-name="operator-overview" CHECKED /><label for="operator-overview">Operator Overview</label></p>
|
||||||
<p><input type="checkbox" id="operator-detailedview" {{ 'checked' if view.operator_detailedview else '' }}><label for="operator-overview">Operator Detailed View</label></p>
|
<p><input type="checkbox" id="operator-detailedview" data-field-name="operator-detailedview" CHECKED /><label for="operator-detailedview">Operator Detailed View</label></p>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Ładowanie…
Reference in New Issue