kopia lustrzana https://github.com/inkstitch/inkstitch
add buttons to quickly adjust svg size
rodzic
3e00ba26da
commit
15222ed4c3
|
@ -13,49 +13,64 @@ function setPageNumbers() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// set preview svg scale to fit into its box
|
// Scale SVG (fit || full size)
|
||||||
function scaleInksimulation() {
|
function scaleSVG(element, scale = 'fit') {
|
||||||
$('.inksimulation').each(function() {
|
|
||||||
|
// always center svg
|
||||||
|
transform = "translate(-50%, -50%)";
|
||||||
|
|
||||||
|
if(scale == 'fit') {
|
||||||
var scale = Math.min(
|
var scale = Math.min(
|
||||||
$(this).width() / $(this).find('svg').width(),
|
element.width() / element.find('svg').width(),
|
||||||
$(this).height() / $(this).find('svg').height()
|
element.height() / element.find('svg').height()
|
||||||
);
|
);
|
||||||
|
// Do not scale to more than 100%
|
||||||
|
scale = (scale <= 1) ? scale : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
transform += " scale(" + scale + ")";
|
||||||
|
var label = parseInt(scale*100);
|
||||||
|
|
||||||
// center the SVG
|
element.find('svg').css({ transform: transform });
|
||||||
transform = "translate(-50%, -50%)";
|
element.find('figcaption span').text(label);
|
||||||
|
}
|
||||||
|
|
||||||
if(scale <= 1) {
|
// set preview svg scale to fit into its box
|
||||||
transform += " scale(" + scale + ")";
|
function scaleAllSvg(element = "") {
|
||||||
label = parseInt(scale*100);
|
|
||||||
} else {
|
|
||||||
label = "100";
|
|
||||||
}
|
|
||||||
|
|
||||||
$(this).find('svg').css({ transform: transform });
|
if(element == "") {
|
||||||
$(this).find('figcaption span').text(label);
|
$('.inksimulation').each(function() {
|
||||||
});
|
scaleSVG($(this));
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
setTimeout(ping, 1000);
|
setTimeout(ping, 1000);
|
||||||
setPageNumbers();
|
setPageNumbers();
|
||||||
scaleInksimulation();
|
scaleAllSvg();
|
||||||
|
|
||||||
/* Mousewheel scaling */
|
/* SCALING AND MOVING SVG */
|
||||||
$('figure.inksimulation').on( 'DOMMouseScroll mousewheel', function ( event ) {
|
|
||||||
var transform = $(this).find('svg').css('transform').match(/-?[\d\.]+/g);
|
/* Mousewheel scaling */
|
||||||
var scale = parseFloat(transform[0]);
|
$('figure.inksimulation').on( 'DOMMouseScroll mousewheel', function (e) {
|
||||||
if( scale > 0.01 && (event.originalEvent.detail > 0 || event.originalEvent.wheelDelta < 0)) {
|
|
||||||
|
var svg = $(this).find('svg');
|
||||||
|
var transform = svg.css('transform').match(/-?[\d\.]+/g);
|
||||||
|
var scale = parseFloat(transform[0]);
|
||||||
|
|
||||||
|
if( scale > 0.01 && (e.originalEvent.detail > 0 || e.originalEvent.wheelDelta < 0)) {
|
||||||
// scroll down
|
// scroll down
|
||||||
scale -= 0.01;
|
scale -= 0.01;
|
||||||
} else {
|
} else {
|
||||||
//scroll up
|
//scroll up
|
||||||
scale += 0.01;
|
scale += 0.01;
|
||||||
}
|
}
|
||||||
|
|
||||||
// set modified scale
|
// set modified scale
|
||||||
transform[0] = scale;
|
transform[0] = scale;
|
||||||
transform[3] = scale;
|
transform[3] = scale;
|
||||||
$(this).find('svg').css({ transform: 'matrix(' + transform + ')' });
|
svg.css({ transform: 'matrix(' + transform + ')' });
|
||||||
|
|
||||||
// set scale caption text
|
// set scale caption text
|
||||||
$(this).find("span").text(parseInt(scale*100));
|
$(this).find("span").text(parseInt(scale*100));
|
||||||
|
@ -64,6 +79,18 @@ $(function() {
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/* Fit SVG */
|
||||||
|
$('button.svg-fit').click(function() {
|
||||||
|
var svgfigure = $(this).closest('figure');
|
||||||
|
scaleSVG(svgfigure, 'fit');
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Fit SVG */
|
||||||
|
$('button.svg-full').click(function() {
|
||||||
|
var svgfigure = $(this).closest('figure');
|
||||||
|
scaleSVG(svgfigure, '1');
|
||||||
|
});
|
||||||
|
|
||||||
/* Drag SVG */
|
/* Drag SVG */
|
||||||
$('figure.inksimulation').on('mousedown', function(e) {
|
$('figure.inksimulation').on('mousedown', function(e) {
|
||||||
$(this).data('p0', { x: e.pageX, y: e.pageY });
|
$(this).data('p0', { x: e.pageX, y: e.pageY });
|
||||||
|
@ -88,9 +115,21 @@ $(function() {
|
||||||
// set the same content to all fields with the same classname
|
// set the same content to all fields with the same classname
|
||||||
document.querySelectorAll('[contenteditable="true"]').forEach(function(elem) {
|
document.querySelectorAll('[contenteditable="true"]').forEach(function(elem) {
|
||||||
elem.addEventListener('focusout', function() {
|
elem.addEventListener('focusout', 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 + '"]').html(content);
|
$('[data-field-name="' + field_name + '"]').html(content);
|
||||||
|
|
||||||
|
/* change svg scale */
|
||||||
|
if(field_name == 'svg-scale') {
|
||||||
|
var scale = parseInt(content);
|
||||||
|
var svg = $(this).parent().siblings('svg');
|
||||||
|
var transform = svg.css('transform').match(/-?[\d\.]+/g);
|
||||||
|
|
||||||
|
transform[0] = scale / 100;
|
||||||
|
transform[3] = scale / 100;
|
||||||
|
svg.css({ transform: 'matrix(' + transform + ')' });
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -98,7 +137,6 @@ $(function() {
|
||||||
if (e.which == 13) {
|
if (e.which == 13) {
|
||||||
// pressing enter defocuses the element
|
// pressing enter defocuses the element
|
||||||
this.blur();
|
this.blur();
|
||||||
|
|
||||||
// also suppress the enter keystroke to avoid adding a new line
|
// also suppress the enter keystroke to avoid adding a new line
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
@ -145,7 +183,7 @@ $(function() {
|
||||||
$(':checkbox').change(function() {
|
$(':checkbox').change(function() {
|
||||||
$('.' + this.id).toggle();
|
$('.' + this.id).toggle();
|
||||||
setPageNumbers();
|
setPageNumbers();
|
||||||
scaleInksimulation();
|
scaleAllSvg();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -69,6 +69,10 @@
|
||||||
page-break-after: always;
|
page-break-after: always;
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
figure.inksimulation div {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.ui {
|
.ui {
|
||||||
display: none;
|
display: none;
|
||||||
|
@ -390,6 +394,13 @@ body {
|
||||||
line-height: 12pt;
|
line-height: 12pt;
|
||||||
margin: 2.5mm;
|
margin: 2.5mm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
figure.inksimulation div {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Color Swatches */
|
/* Color Swatches */
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,13 @@
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<main>
|
<main>
|
||||||
<figure class="inksimulation operator" style="height: 210mm;">
|
<figure class="inksimulation operator" style="height: 210mm;">
|
||||||
{{ svg_overview|safe }}
|
{{ svg_overview|safe }}
|
||||||
<figcaption>{{ _('Scale') }} <span>{{ svg_scale }}</span>%</figcaption>
|
<figcaption>{{ _('Scale') }} <span data-field-name="svg-scale" contenteditable="true" data-placeholder="Enter scale...">{{ svg_scale }}</span>%</figcaption>
|
||||||
|
<div>
|
||||||
|
<button class="svg-fit">Fit</button>
|
||||||
|
<button class="svg-full">100%</button>
|
||||||
|
</div>
|
||||||
</figure>
|
</figure>
|
||||||
</main>
|
</main>
|
||||||
{% include 'footer.html' %}
|
{% include 'footer.html' %}
|
||||||
|
|
|
@ -18,6 +18,10 @@
|
||||||
<figure class="inksimulation">
|
<figure class="inksimulation">
|
||||||
{{color_block.svg_preview|safe}}
|
{{color_block.svg_preview|safe}}
|
||||||
<figcaption>{{ _('Scale') }} <span>{{ svg_scale }}</span>%</figcaption>
|
<figcaption>{{ _('Scale') }} <span>{{ svg_scale }}</span>%</figcaption>
|
||||||
|
<div>
|
||||||
|
<button class="svg-fit">Fit</button>
|
||||||
|
<button class="svg-full">100%</button>
|
||||||
|
</div>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
<div class="color-palette detailed">
|
<div class="color-palette detailed">
|
||||||
|
|
|
@ -28,6 +28,10 @@
|
||||||
<figure class="inksimulation">
|
<figure class="inksimulation">
|
||||||
{{ svg_overview|safe }}
|
{{ svg_overview|safe }}
|
||||||
<figcaption>{{ _('Scale') }} <span>{{ svg_scale }}</span>%</figcaption>
|
<figcaption>{{ _('Scale') }} <span>{{ svg_scale }}</span>%</figcaption>
|
||||||
|
<div>
|
||||||
|
<button class="svg-fit">Fit</button>
|
||||||
|
<button class="svg-full">100%</button>
|
||||||
|
</div>
|
||||||
</figure>
|
</figure>
|
||||||
|
|
||||||
<div class="color-palette">
|
<div class="color-palette">
|
||||||
|
|
Ładowanie…
Reference in New Issue