-{"version":3,"sources":["linkeditor.less"],"names":[],"mappings":"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","file":"linkeditor.css"}
\ No newline at end of file
+{"version":3,"sources":["linkeditor.less"],"names":[],"mappings":"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","file":"linkeditor.css"}
\ No newline at end of file
var zoom = 1;
var zoomdragging = false;
var dividers = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000];
+ var fluidbookRect, canvasRect, editorRect;
+
+ var movingRuler = null;
function init() {
$(window).on('hashchange', function () {
resetZoomDrag();
}
});
+
+ $("#linkeditor-ruler-x").on('mousedown', function (e) {
+ addRuler('y');
+ });
+
+ $("#linkeditor-ruler-y").on('mousedown', function (e) {
+ addRuler('x');
+ });
+
+ $(document).on('mousedown', ".ruler", function (e) {
+ movingRuler = $(this);
+
+ });
+
$(window).on('mousemove', function (e) {
if (!$("#linkeditor-canvas").hasClass('grab') || zoom === 1) {
resetZoomDrag();
if (zoomdragging !== false) {
moveZoomDrag(e);
}
+ stopMoveRuler();
resetZoomDrag();
});
$("#linkeditor-canvas").on('wheel', function (e) {
changePage();
}
+ function addRuler(axis) {
+ movingRuler = $('<div class="ruler" fb-ref="editor" data-axis="' + axis + '"></div>');
+ $("#linkeditor-editor").append(movingRuler);
+ moveRuler();
+ }
+
+ function deleteRuler(ruler) {
+ if (ruler === undefined) {
+ ruler = movingRuler;
+ }
+ $(ruler).remove();
+ movingRuler = null;
+ }
+
+ function moveRuler() {
+ if (movingRuler === null || movingRuler === undefined) {
+ return;
+ }
+ var editorMouse = globalToEditor(mx, my);
+ var fbMouse = globalToFluidbook(mx, my, false);
+ var css = {};
+ var attrs = {};
+ var v;
+ if ($(movingRuler).data('axis') === 'x') {
+ v = editorMouse.x;
+ attrs['fb-left'] = fbMouse.x;
+ } else {
+ v = editorMouse.y;
+ attrs['fb-top'] = fbMouse.y;
+ }
+ if (v < 16) {
+ $(movingRuler).addClass('pending-delete');
+ } else {
+ $(movingRuler).removeClass('pending-delete');
+ }
+ $(movingRuler).css(css).attr(attrs);
+ updateFBElements();
+ }
+
+ function updateFBElements() {
+ var dims = ['left', 'top', 'width', 'height'];
+ $('[fb-ref]').each(function () {
+ var e = $(this);
+ var rect = $(this).attr('fb-ref');
+ $.each(dims, function (k, dim) {
+ if ($(e).is('[fb-' + dim + ']')) {
+ var v = fluidbookTo(parseFloat($(e).attr('fb-' + dim)), dim, rect);
+ $(e).css(dim, v);
+ }
+ });
+ });
+ }
+
+ function fluidbookTo(dim, name, rect) {
+ switch (rect) {
+ case 'editor':
+ rect = editorRect;
+ break;
+ case 'canvas':
+ rect = canvasRect;
+ break;
+ }
+ return fluidbookToGlobal(dim, name) - rect[name];
+ }
+
+ function stopMoveRuler() {
+ moveRuler();
+ if ($(movingRuler).hasClass('pending-delete')) {
+ deleteRuler($(movingRuler));
+ }
+ movingRuler = null;
+ }
+
function updateMousePosition(e) {
mx = e.pageX;
my = e.pageY;
updateMousePositionRulers();
+ moveRuler();
}
function updateMousePositionRulers() {
var ry = my - rulersRect.y;
$("#linkeditor-ruler-x .info").css('left', rx);
$("#linkeditor-ruler-y .info").css('top', ry);
- var frect = $("#linkeditor-fluidbook").get(0).getBoundingClientRect();
+
var rrect = $("#linkeditor-rulers").get(0).getBoundingClientRect();
if (mx - rrect.x < 0 || my - rrect.y < 0 || mx - rrect.x > rrect.width || my - rrect.y > rrect.height) {
return;
}
- var x0 = frect.x;
- var y0 = frect.y;
-
- var mry = (my - y0);
- var mrx = (mx - x0);
-
- var vy = mry / (fs * zoom);
- $("#linkeditor-ruler-y .info span").text(vy.toFixed(2));
- var vx = mrx / (fs * zoom);
- if (!single) {
- if (vx >= pw) {
- vx -= pw;
- }
- }
- $("#linkeditor-ruler-x .info span").text(vx.toFixed(2));
+ var fb = globalToFluidbook(mx, my, true);
+ $("#linkeditor-ruler-y .info span").text(fb.y.toFixed(2));
+ $("#linkeditor-ruler-x .info span").text(fb.x.toFixed(2));
$("#linkeditor-rulers .info").css('display', 'inline-block');
}
resetZoomDrag();
}
updateRulers();
+
}, 10);
return true;
resize();
}
+ // Convert global coordinates to fluidbook ones
+ function globalToFluidbook(x, y, onePage) {
+ var res = _globalTo(x, y, fluidbookRect, 1 / (fs * zoom));
+ if (onePage) {
+ res.xside = 'left';
+ if (!single && res.x >= pw) {
+ res.xside = 'right';
+ res.x -= pw;
+ }
+ }
+ return res;
+ }
+
+ function fluidbookToGlobal(dim, name) {
+ return fluidbookRect[name] + (dim * fs * zoom);
+ }
+
+ function globalToCanvas(x, y) {
+ return _globalTo(x, y, canvasRect, 1);
+ }
+
+ function globalToEditor(x, y) {
+ return _globalTo(x, y, editorRect, 1);
+ }
+
+ function _globalTo(x, y, rect, multi) {
+ return {x: multi * (x - rect.x), y: multi * (y - rect.y)};
+ }
+
function loadPage(p, side) {
var container = $("#linkeditor-page-" + side);
if (p === 0 || p > FLUIDBOOK_DATA.settings.pages) {
}
function updateRulers() {
+ // Update rects
+ fluidbookRect = $("#linkeditor-fluidbook").get(0).getBoundingClientRect();
+
$("#linkeditor-ruler-y,#linkeditor-ruler-x").html('');
// Measure of visible fluidbook px at current zoom
- var crect = $("#linkeditor-canvas").get(0).getBoundingClientRect();
+
var factor = fs / zoom;
- var visible_w = crect.width * factor;
- var visible_h = crect.height * factor;
+ var visible_w = canvasRect.width * factor;
+ var visible_h = canvasRect.height * factor;
// Find the best divider to have around 10 main divisions
var divider = 0;
for (var i in dividers) {
}
}
- var rect = $("#linkeditor-fluidbook").get(0).getBoundingClientRect();
+
var divisionSize = divider * fs * zoom;
// Draw vertical ruler
var margin = 100;
var nbDivisions = Math.floor(visible_h / divider);
- var y0 = 16 + rect.y - crect.y;
+ var y0 = 16 + fluidbookRect.y - canvasRect.y;
var yruler = '<div class="info"><span>1234.12</span></div>';
for (var y = -margin; y <= nbDivisions + (margin * 2) + 1; y++) {
// Draw subdivision
var v = divider * y;
var ystart = y0 + (y * divisionSize);
- if (ystart + divisionSize < 0 || ystart > crect.height) {
+ if (ystart + divisionSize < 0 || ystart > canvasRect.height) {
continue;
}
yruler += '<div class="division" style="top:' + ystart + 'px;height:' + divisionSize + 'px;"><div class="value">' + Math.abs(v) + '</div>';
// Draw horizontal ruler
nbDivisions = Math.floor(visible_w / divider);
- var x0 = 16 + rect.x - crect.x;
+ var x0 = 16 + fluidbookRect.x - canvasRect.x;
var xruler = '<div class="info"><span></span></div>';
for (var x = -margin; x <= nbDivisions + (margin * 2) + 1; x++) {
// Draw subdivision
var v = divider * x;
var xstart = x0 + (x * divisionSize);
- if (xstart + divisionSize < 0 || xstart > crect.width) {
+ if (xstart + divisionSize < 0 || xstart > canvasRect.width) {
continue;
}
xruler += '<div class="division" style="left:' + xstart + 'px;width:' + divisionSize + 'px;"><div class="value">' + Math.abs(v) + '</div>';
// Draw subdivision
var v = divider * x;
var xstart = x0 + (x * divisionSize);
- if (xstart + divisionSize < 0 || xstart > crect.width) {
+ if (xstart + divisionSize < 0 || xstart > canvasRect.width) {
continue;
}
xruler += '<div class="division" style="left:' + xstart + 'px;width:' + divisionSize + 'px;"><div class="value">' + Math.abs(v) + '</div>';
}
}
$("#linkeditor-ruler-x").html(xruler);
+ updateFBElements()
updateMousePositionRulers();
}
function resizeCanvas() {
- var cw = $('#linkeditor-canvas').outerWidth();
- var ch = $('#linkeditor-canvas').outerHeight();
- var aw = cw - 30;
- var ah = ch - 30;
+ canvasRect = $("#linkeditor-canvas").get(0).getBoundingClientRect();
+ editorRect = $("#linkeditor-editor").get(0).getBoundingClientRect();
+ var aw = canvasRect.width - 30;
+ var ah = canvasRect.height - 30;
fs = Math.min(aw / fw, ah / fh);
- var left = (cw - fw * fs) / 2;
- var top = (ch - fh * fs) / 2;
+ var left = (canvasRect.width - fw * fs) / 2;
+ var top = (canvasRect.height - fh * fs) / 2;
$("#linkeditor-fluidbook").css({left: left, top: top, transform: 'scale(' + fs + ')'});
}