From: Vincent Vanwaelscappel Date: Tue, 20 Sep 2022 09:34:08 +0000 (+0200) Subject: wip #5467 @1.5 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=6a31cc1b369c3dfa49146f432d2bc94e1ac8326d;p=fluidbook-toolbox.git wip #5467 @1.5 --- diff --git a/package.json b/package.json index c917d86dc..f215d0034 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,12 @@ "quiz-development": "cross-env process.env.section=quiz NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "quiz-watch": "cross-env process.env.section=quiz NODE_OPTIONS=--openssl-legacy-provider NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "quiz-prod": "npm run quiz-production", - "quiz-production": "cross-env process.env.section=quiz NODE_OPTIONS=--openssl-legacy-provider NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" + "quiz-production": "cross-env process.env.section=quiz NODE_OPTIONS=--openssl-legacy-provider NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "linkeditor-dev": "npm run linkeditor-development", + "linkeditor-development": "cross-env process.env.section=linkeditor NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "linkeditor-watch": "cross-env process.env.section=linkeditor NODE_OPTIONS=--openssl-legacy-provider NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "linkeditor-prod": "npm run linkeditor-production", + "linkeditor-production": "cross-env process.env.section=linkeditor NODE_OPTIONS=--openssl-legacy-provider NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" }, "devDependencies": { "axios": "^0.19", @@ -40,11 +45,13 @@ "dependencies": { "command-line-args": "^5.2.1", "jquery.scrollto": "^2.1.3", + "keymaster": "^1.6.2", "lz4js": "^0.2.0", "pako": "^2.0.4", "pdfjs-dist": "^2.14.305", "pipwerks-scorm-api-wrapper": "^0.1.2", "plyr": "^3.7.2", - "puppeteer": "^17.0.0" + "puppeteer": "^17.0.0", + "tippy.js": "^6.3.7" } } diff --git a/public/packages/fluidbook/toolbox/css/linkeditor.css.map b/public/packages/fluidbook/toolbox/css/linkeditor.css.map index 1fe9fc5f0..e8ef77f43 100644 --- a/public/packages/fluidbook/toolbox/css/linkeditor.css.map +++ b/public/packages/fluidbook/toolbox/css/linkeditor.css.map @@ -1 +1 @@ -{"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 diff --git a/public/packages/fluidbook/toolbox/css/linkeditor.less b/public/packages/fluidbook/toolbox/css/linkeditor.less index ed16bc61e..f21e16873 100644 --- a/public/packages/fluidbook/toolbox/css/linkeditor.less +++ b/public/packages/fluidbook/toolbox/css/linkeditor.less @@ -120,6 +120,7 @@ body, #linkeditor, html { margin: 0 8px; font-weight: 600; + input { vertical-align: top; text-align: right; diff --git a/resources/linkeditor/js/linkeditor.js b/resources/linkeditor/js/linkeditor.js new file mode 100644 index 000000000..33c5153c5 --- /dev/null +++ b/resources/linkeditor/js/linkeditor.js @@ -0,0 +1,775 @@ +window.$ = window.jQuery = require('jquery'); +import tippy from 'tippy.js'; +import 'tippy.js/dist/tippy.css'; +import key from 'keymaster'; +require('jquery.scrollto'); +require('jquery-contextmenu'); + +var single = ['mobilefirst', 'portrait'].indexOf(FLUIDBOOK_DATA.settings.mobileNavigationType) >= 0; +var pw = FLUIDBOOK_DATA.settings.width; +var ph = FLUIDBOOK_DATA.settings.height; +var fw = pw * (single ? 1 : 2); +var fh = ph; +var fs = 1; +var mx = 0, my = 0; +var zoom = 1; +var zoomdragging = false; +var dividers = [1, 2, 5, 10, 20, 50, 100, 200]; +var fluidbookRect, canvasRect, editorRect; +var currentPage; +var movingRuler = null; +var rasterizePages = splitPages(FLUIDBOOK_DATA.settings.rasterizePages); +var vectorPages = splitPages(FLUIDBOOK_DATA.settings.vectorPages); +var unsavedChanges = false; +var automaticSaveTimeout; +var runningAutomaticSaveTimeout = false; +var dimensionProperties = ['left', 'top', 'width', 'height']; +var rulersMagnetValuesX = []; +var rulersMagnetValuesY = []; +var currentSelection = []; + +$(function () { + init(); +}); + + +function init() { + $(window).on('hashchange', function () { + changePage(); + }); + $(window).on('resize', function () { + resize(); + }); + $(window).on('beforeunload', function () { + if (unsavedChanges) { + return TRANSLATIONS.warning_unsaved_changes; + } + }) + // Disable scroll by spacebar + $(window).on('keydown', function (e) { + if (e.keyCode == 32) { + $("#linkeditor-main").addClass('grab'); + return false; + } + moveRuler(); + }); + $(window).on('keyup', function (e) { + if (e.keyCode == 32) { + resetZoomDrag(); + } + moveRuler(); + }); + + $("#linkeditor-canvas").on('scroll', function () { + updateRulers(); + }); + $("#linkeditor-main").on('mousedown', function (e) { + if ($(this).hasClass('grab') && zoom > 1) { + zoomdragging = { + x: e.pageX, + y: e.pageY, + scrollX: $("#linkeditor-canvas").scrollLeft(), + scrollY: $("#linkeditor-canvas").scrollTop() + }; + $(this).addClass('grabbing'); + } else { + resetZoomDrag(); + } + deselectAllLinks(); + }); + + $(document).on('mousedown', '.link', function (e) { + if (!e.ctrlKey) { + deselectAllLinks(); + } + selectLink($(this)); + }); + + $("#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-main").hasClass('grab') || zoom === 1) { + resetZoomDrag(); + } + if (zoomdragging !== false) { + moveZoomDrag(e); + } + updateMousePosition(e); + }); + $(window).on('mouseup', function (e) { + if (zoomdragging !== false) { + moveZoomDrag(e); + } + stopMoveRuler(); + resetZoomDrag(); + }); + $("#linkeditor-main").on('wheel', function (e) { + var delta = e.originalEvent.deltaY; + if (delta == 0) { + return true; + } + e.stopPropagation(); + e.stopImmediatePropagation(); + e.preventDefault(); + if (delta < 0) { + if (setZoom(zoom + 0.25)) { + moveZoom(e); + } + } else { + setZoom(zoom - 0.25); + } + return false; + }); + + if (single) { + $("#linkeditor").addClass('single'); + } else { + $("#linkeditor").addClass('double'); + } + $('.linkeditor-page').css({ + width: pw, height: ph + }); + $("#linkeditor-page-right").css({left: pw}) + $('#linkeditor-fluidbook').css({ + width: fw, height: ph + }); + initToolbar(); + resize(); + changePage(); +} + +function selectLink(l) { + if ($(l).find('.corners').length === 0) { + $(l).append('
') + } + $(l).addClass('selected'); + currentSelection.push(l); +} + +function deselectAllLinks() { + currentSelection = []; + $(".link.selected").removeClass('selected'); +} + +function initToolbar() { + $("#linkeditor-page-field input").on('change', function () { + changePage($(this).val()); + $(this).blur(); + return false; + }); + + $("#linkeditor-toolbar [data-icon]").each(function () { + $(this).append(getSpriteIcon('linkeditor-' + $(this).data('icon'))); + }); + + $("[data-key]").each(function () { + var e = $(this); + key($(this).data('key'), function () { + $(e).addClass('hover'); + runAction($(e).data('action')); + setTimeout(function () { + $(e).removeClass('hover') + }, 150); + return false; + }); + }); + + $('[data-action]').click(function () { + runAction($(this).data('action')); + return false; + }); + + $('[data-tooltip]').each(function () { + tippy($(this).get(0), {content: $(this).data('tooltip')}); + }); +} + +function runAction(act) { + eval(act+'()'); +} + +function saveLinks(message) { + if (message === undefined) { + message = TRANSLATIONS.manual_save_message; + } + $.ajax({ + url: '/fluidbook-publication/' + FLUIDBOOK_DATA.id + '/save/links', method: 'post', data: { + _method: 'put', 'message': message, rulers: window.RULERS, links: window.LINKS, + }, success: function (data) { + new Noty({ + type: "success", text: TRANSLATIONS.success_save, + }).show(); + clearTimeout(automaticSaveTimeout); + unsavedChanges = false; + runningAutomaticSaveTimeout = false; + }, error: function (jqXHR, status, error) { + hasChanged(); + new Noty({ + type: "error", text: TRANSLATIONS.error_save + ' : ' + error, + }).show(); + }, + }); +} + +function automaticSaveLinks() { + saveLinks(TRANSLATIONS.automatic_save_message); +} + +function firstPage() { + changePage(1); +} + +function nextPage() { + changePage(currentPage + (single ? 1 : 2)); +} + +function previousPage() { + changePage(currentPage - (single ? 1 : 2)); +} + +function lastPage() { + changePage(FLUIDBOOK_DATA.settings.pages); +} + +function focusPageField() { + var i = $("#linkeditor-page-field input").get(0); + i.focus(); + i.select(); +} + +function zoomReset() { + setZoom(1); + resetZoomDrag(); +} + +function generateUID() { + var length = 12; + var result = ''; + var characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; + var charactersLength = characters.length; + for (var i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + return result; +} + +function addRuler(axis, pos, uid) { + if (undefined === uid) { + uid = generateUID(); + RULERS[uid] = {page: currentPage, type: axis, uid: uid}; + hasChanged(); + } + var ruler = $('
'); + if (pos === undefined) { + movingRuler = ruler; + } else { + var dim = axis == 'x' ? 'left' : 'top'; + $(ruler).attr('fb-' + dim, pos); + } + $("#linkeditor-editor").append(ruler); + moveRuler(); +} + +function deleteRuler(ruler) { + if (ruler === undefined) { + ruler = movingRuler; + } + var uid = $(ruler).data('uid'); + delete RULERS[uid]; + $(ruler).remove(); + movingRuler = null; + hasChanged(); +} + +function hasChanged() { + unsavedChanges = true; + if (runningAutomaticSaveTimeout === false) { + runningAutomaticSaveTimeout = true; + automaticSaveTimeout = setTimeout(function () { + automaticSaveLinks(); + }, 1000 * 5 * 60); + } +} + +function moveRuler() { + if (movingRuler === null || movingRuler === undefined) { + return; + } + var magnet = !key.ctrl; + var editorMouse = globalToEditor(mx, my); + var fbMouse = globalToFluidbook(mx, my, false); + var css = {}; + var attrs = {}; + var v, fbv; + if ($(movingRuler).data('axis') === 'x') { + v = editorMouse.x; + fbv = attrs['fb-left'] = magnet ? magnetize(fbMouse.x, rulersMagnetValuesX) : fbMouse.x; + } else { + v = editorMouse.y; + fbv = attrs['fb-top'] = magnet ? magnetize(fbMouse.y, rulersMagnetValuesY) : fbMouse.y; + } + if (v < 16) { + $(movingRuler).addClass('pending-delete'); + } else { + $(movingRuler).removeClass('pending-delete'); + } + $(movingRuler).css(css).attr(attrs); + RULERS[$(movingRuler).data('uid')].pos = fbv; + updateFBElements(); +} + +function magnetize(value, values) { + var sensibility = 8 / (zoom * fs); + var min = 100000; + var magnetValue; + if (values.length === 0) { + return value; + } + + for (var i in values) { + var v = values[i]; + var diff = Math.abs(v - value); + if (diff < min) { + min = diff; + magnetValue = v; + } + } + + if (min > sensibility) { + return value; + } + return magnetValue; +} + +function getLinksOfPage(p) { + let pages = []; + if (!single) { + if (p % 2 === 1) { + p--; + } + pages.push(p); + pages.push(p + 1); + } else { + pages.push(p); + } + let res = {}; + $.each(LINKS, function (uid, link) { + if (pages.indexOf(parseInt(link.page)) >= 0) { + res[uid] = link; + } + }); + return res; +} + +function updateFBElements() { + $('[fb-ref]').each(function () { + var e = $(this); + var rect = $(this).attr('fb-ref'); + var css = {}; + $.each(dimensionProperties, function (k, dim) { + if ($(e).is('[fb-' + dim + ']')) { + var v = parseFloat($(e).attr('fb-' + dim)); + if (dim === 'width' || dim === 'height') { + css[dim] = v * (fs * zoom); + } else { + css[dim] = fluidbookTo(v, dim, rect); + } + } + }); + $(e).css(css); + }); +} + +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 rulersRect = $("#linkeditor-rulers").get(0).getBoundingClientRect(); + var rx = mx - rulersRect.x; + var ry = my - rulersRect.y; + $("#linkeditor-ruler-x .info").css('left', rx); + $("#linkeditor-ruler-y .info").css('top', ry); + + 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) { + $("#linkeditor-rulers .info").hide(); + return; + } + + 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'); +} + +function resetZoomDrag() { + $("#linkeditor-main").removeClass('grab').removeClass('grabbing'); + if (zoom === 1) { + $("#linkeditor-canvas").scrollTo({left: 0, top: 0}); + } + zoomdragging = false; +} + +function moveZoomDrag(e) { + var deltaX = e.pageX - zoomdragging.x; + var deltaY = e.pageY - zoomdragging.y; + $("#linkeditor-canvas").scrollTo({ + top: zoomdragging.scrollY - deltaY, left: zoomdragging.scrollX - deltaX + }); + updateRulers(); +} + +function moveZoom(e) { + var rect = $("#linkeditor-zoom").get(0).getBoundingClientRect(); + var lx = (e.originalEvent.pageX - rect.x) / rect.width; + var ly = (e.originalEvent.pageY - rect.y) / rect.height; + $("#linkeditor-canvas").scrollTo({left: pct(lx), top: pct(ly)}); + updateRulers(); +} + +function pct(v) { + return (v * 100) + '%'; +} + +function setZoom(z) { + z = Math.max(1, Math.min(6, z)); + if (z === zoom) { + return false; + } + zoom = z; + $("#linkeditor-canvas").attr('data-z', zoom); + $("#linkeditor-zoom").css({transform: 'scale(' + zoom + ')', overflow: 'visible'}); + + setTimeout(function () { + $("#linkeditor-zoom").css({overflow: 'hidden'}); + if (zoom === 1) { + resetZoomDrag(); + } + updateRulers(); + + }, 10); + + return true; +} + +function changePage(page) { + if (page === undefined) { + var h = window.location.hash; + if (h.length === 0) { + page = 0; + } else { + page = window.location.hash.substring(1); + } + } + page = parseInt(page); + if (page % 2 === 1 && !single) { + page--; + } + var normPage = Math.max(0, Math.min(page, FLUIDBOOK_DATA.settings.pages)); + if (normPage === currentPage) { + return; + } + currentPage = normPage; + + window.location.hash = '#' + currentPage; + clearLinksAndRulers(); + loadPage(currentPage, 'left'); + if (!single) { + loadPage(currentPage + 1, 'right'); + } + $("#linkeditor-page-field input").val(currentPage); + updateRulersMagnetValues(); + resize(); + preloadPages(); +} + +function updateRulersMagnetValues() { + rulersMagnetValuesX = [0, pw, pw * 2]; + rulersMagnetValuesY = [0, ph]; + $.each(getLinksOfPage(currentPage), function (uid, link) { + const left = parseFloat(link.left); + const top = parseFloat(link.top); + const width = parseFloat(link.width); + const height = parseFloat(link.height); + rulersMagnetValuesX.push(left, left + width); + rulersMagnetValuesY.push(top, top + height); + }); +} + +// 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); + $(container).attr('data-page', p); + + if (p === 0 || p > FLUIDBOOK_DATA.settings.pages) { + $(container).html(''); + } else { + _loadPage(p, container); + } + + loadLinks(p, side); + loadRulers(p, side); +} + +function preloadPages() { + let j = 1; + for (let i = Math.max(1, currentPage - 4); i <= Math.min(currentPage + 16, FLUIDBOOK_DATA.settings.pages); i++) { + if ($('.preload[data-page="' + i + '"]').length >= 1) { + continue; + } + setTimeout(function () { + var c = $('
'); + $("#linkeditor-preload").append(c); + _loadPage(i, c); + }, j * 500); + j++; + } +} + +function _loadPage(p, container) { + var imageFormat = FLUIDBOOK_DATA.settings.imageFormat; + var c = '
'; + if (rasterizePages.indexOf(p) >= 0) { + c += ''; + } else if (vectorPages.indexOf(p) >= 0) { + c += ''; + } else { + c += ''; + c += ''; + } + c += '
'; + $(container).html(c); +} + +function loadLinks(page, side) { + $.each(LINKS, function (uid, link) { + if (link.page != page) { + return; + } + if (side === 'right') { + link.left = parseInt(link.left) + pw; + } + addLink(link, side); + }); +} + +function addLink(link) { + if (link.uid === undefined) { + link.uid = generateUID(); + LINKS[link.uid] = link; + updateRulersMagnetValues(); + hasChanged(); + } + + var attrs = {}; + $.each(link, function (k, v) { + if (dimensionProperties.indexOf(k) >= 0) { + attrs['fb-' + k] = v; + } else { + attrs['data-' + k] = v; + } + }); + + var e = $(''); + $(e).attr(attrs); + $("#linkeditor-links").append(e); +} + +function clearLinksAndRulers() { + $('#linkeditor-editor .ruler').remove(); +} + +function loadRulers(page, side) { + $.each(RULERS, function (uid, ruler) { + if (ruler.page != page) { + return; + } + addRuler(ruler.type, ruler.pos, ruler.uid); + }); +} + + +function resize() { + resizeCanvas(); + updateRulers(); +} + +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 factor = fs / zoom; + var visible_w = (canvasRect.width / fs) / zoom; + var visible_h = (canvasRect.height / fs) / zoom; + + // Find the best divider to have around 10 main divisions + var divider = 0; + for (var i in dividers) { + divider = dividers[i]; + var v = visible_h / divider; + if (v <= 10) { + break; + } + } + + var divisionSize = divider * fs * zoom; + // Draw vertical ruler + var margin = 100; + var nbDivisions = Math.floor(visible_h / divider); + var y0 = 16 + fluidbookRect.y - canvasRect.y; + + var yruler = '
1234.12
'; + 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 > canvasRect.height) { + continue; + } + yruler += '
' + Math.abs(v) + '
'; + for (var i = 1; i <= 9; i++) { + yruler += '
'; + } + yruler += '
'; + } + $("#linkeditor-ruler-y").html(yruler); + + // Draw horizontal ruler + nbDivisions = Math.floor(visible_w / divider); + var x0 = 16 + fluidbookRect.x - canvasRect.x; + var xruler = '
'; + + 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 > canvasRect.width) { + continue; + } + xruler += '
' + Math.abs(v) + '
'; + for (var i = 1; i <= 9; i++) { + var cls = ''; + if (i === 5) { + cls += ' middle'; + } + xruler += '
'; + } + xruler += '
'; + } + // Draw right page horizontal ruler + if (!single) { + x0 = x0 + pw * fs * zoom; + for (var x = 0; x <= nbDivisions + margin + 1; x++) { + // Draw subdivision + var v = divider * x; + var xstart = x0 + (x * divisionSize); + if (xstart + divisionSize < 0 || xstart > canvasRect.width) { + continue; + } + xruler += '
' + Math.abs(v) + '
'; + for (var i = 1; i <= 9; i++) { + var cls = ''; + if (i === 5) { + cls += ' middle'; + } + xruler += '
'; + } + xruler += '
'; + } + } + $("#linkeditor-ruler-x").html(xruler); + updateFBElements() + updateMousePositionRulers(); +} + +function resizeCanvas() { + 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 = (canvasRect.width - fw * fs) / 2; + var top = (canvasRect.height - fh * fs) / 2; + $("#linkeditor-fluidbook").css({left: left, top: top, transform: 'scale(' + fs + ')'}); +} + + +function splitPages(str) { + str = str.toString(); + var res = []; + if (str == '') { + return res; + } + var pages = str.split(','); + for (var p in pages) { + res.push(parseInt(pages[p])); + } + return res; +} diff --git a/resources/linkeditor/style/links.sass b/resources/linkeditor/style/links.sass new file mode 100644 index 000000000..e69de29bb diff --git a/resources/linkeditor/style/style.sass b/resources/linkeditor/style/style.sass new file mode 100644 index 000000000..512a2567f --- /dev/null +++ b/resources/linkeditor/style/style.sass @@ -0,0 +1,566 @@ +* + margin: 0 + padding: 0 + box-sizing: border-box + + +$font-size: 16px + +body + background-color: #ebecee + @media (prefers-color-scheme: dark) + background-color: #333 + + +img, .division, .info + user-select: none + user-drag: none + + +body, #linkeditor, html + height: 100% + width: 100% + overflow: hidden + + +#linkeditor + $sidebar-width: 40px + $rulers-size: 16px + white-space: nowrap + font-size: 0 + overflow: hidden + + aside, #linkeditor-main + display: inline-block + height: 100% + vertical-align: top + text-align: left + + + aside + width: $sidebar-width + background-color: #EBECEE + @media (prefers-color-scheme: dark) + background-color: #333 + + + #linkeditor-main + $toolbar-height: 40px + + width: calc(100% - $sidebar-width - $sidebar-width) + + &.grab + cursor: grab + + + &.grabbing + cursor: grabbing + + + #linkeditor-toolbar + + $toolbar-color: #5d5d5d + $toolbar-color-dark: #bbb + background-color: #dbdddf + + @media (prefers-color-scheme: dark) + background-color: #444 + + color: $toolbar-color + @media (prefers-color-scheme: dark) + color: $toolbar-color-dark + + height: $toolbar-height + padding: 5px + + nav + padding: 2px + display: inline-block + height: 26px + vertical-align: top + width: 33% + + &#linkeditor-toolbar-center + text-align: center + + + &#linkeditor-toolbar-right + + + div + display: inline-block + font-size: $font-size + + + .separator + width: 0 + height: 26px + margin: 0 2px + border-left: 1px solid $toolbar-color + + + #linkeditor-page-field + padding: 2px 10px + background-color: #fff + @media (prefers-color-scheme: dark) + background-color: #000 + border-color: #333 + + border: 1px solid #ccc + border-radius: 5px + cursor: text + font-size: 13px + position: relative + top: -9px + user-select: none + margin: 0 8px + font-weight: 600 + + + input + vertical-align: top + text-align: right + border: 0 + background-color: transparent + width: 20px + color: $toolbar-color + @media (prefers-color-scheme: dark) + color: $toolbar-color-dark + + font-size: 13px + appearance: textfield + + &::-webkit-outer-adjust-hue-button, &::-webkit-inner-adjust-hue-button + -webkit-appearance: none + margin: 0 + + + font-weight: 600 + position: relative + + + &:hover, &:focus + outline: 0 + border: 0 + + + [data-icon] + display: inline-block + vertical-align: top + height: 26px + min-width: 26px + padding: 3px + border-radius: 5px + margin: 0 3px + text-align: center + color: $toolbar-color + @media (prefers-color-scheme: dark) + color: $toolbar-color-dark + + + &:hover, &.hover + background-color: #fff + @media (prefers-color-scheme: dark) + background-color: #000 + + + &.arrow + padding: 1px + + svg + height: 16px + + + svg + position: relative + top: 1px + height: 18px + width: auto + + + #linkeditor-editor + position: relative + height: calc( 100% - $toolbar-height) + width: 100% + overflow: hidden + + $ruler-margin: 2px + + #linkeditor-links + .link + position: absolute + outline: 1px solid currentColor + cursor: cell + + &.selected + .corners + visibility: visible + + + .corners + visibility: hidden + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + + > div + position: absolute + outline: 1px solid currentColor + background-color: #fff + width: 8px + height: 8px + + &.nw + cursor: nw-resize + + + &.n + cursor: n-resize + + + &.ne + cursor: ne-resize + + + &.e + cursor: e-resize + + + &.se + cursor: se-resize + + + &.s + cursor: s-resize + + + &.sw + cursor: sw-resize + + + &.w + cursor: w-resize + + + &.n, &.nw, &.ne + top: -4px + + + &.e, &.w + top: calc(50% - 4px) + + + &.sw, &.s, &.se + bottom: -4px + + + &.nw, &.w, &.sw + left: -4px + + + &.ne, &.e, &.se + right: -4px + + + &.n, &.s + left: calc(50% - 4px) + + + position: relative + z-index: 500 + + + .ruler + position: absolute + top: 0 + left: 0 + z-index: 600 + border-width: 0 + border-color: #0f0 + border-style: solid + + &:after + position: absolute + content: "" + display: block + height: 100% + width: 100% + + + &.pending-delete + border-color: #f00 !important + z-index: 1100 + + + &:hover + border-color: #0ff + + + &[data-axis="x"] + width: 0px + height: calc( 100% - $rulers-size) + border-left-width: 1px + cursor: col-resize + top: $rulers-size + + &:after + left: $ruler-margin*-1 + width: $ruler-margin*2 + + + &[data-axis="y"] + border-bottom-width: 1px + height: 0px + width: calc( 100% - $rulers-size) + left: $rulers-size + + &:after + top: $ruler-margin*-1 + height: $ruler-margin*2 + cursor: row-resize + + + #linkeditor-rulers + $rulers-color: #333 + $rulers-color-dark: #eee + + @media (prefers-color-scheme: dark) + color: $rulers-color-dark + + + color: $rulers-color + position: absolute + top: 0px + left: 0px + width: 100% + height: 100% + + #linkeditor-ruler-corner + position: absolute + top: 0px + left: 0px + width: $rulers-size + height: $rulers-size + z-index: 5 + background-color: #aaa + @media (prefers-color-scheme: dark) + background-color: #666 + + + .ruler-bar + overflow: hidden + position: absolute + left: 0 + top: 0 + z-index: 1000 + + .info + position: absolute + top: 0 + left: 0 + z-index: 3 + font-size: 12px + line-height: 8px + display: none + + span + display: block + position: absolute + top: 0 + left: 0 + background-color: #fff + color: #000 + @media (prefers-color-scheme: dark) + background-color: #000 + color: #fff + + padding: 3px + + + .division + pointer-events: none + position: absolute + background: #fff + @media (prefers-color-scheme: dark) + background-color: #000 + + + .value + position: absolute + font-size: 12px + + + .subdivision + position: absolute + + + #linkeditor-ruler-x + height: $rulers-size + width: 100% + + .info + height: $rulers-size + border-left: 1px dotted $rulers-color + @media (prefers-color-scheme: dark) + border-color: $rulers-color-dark + + + .division, .subdivision + width: 0px + border-left: 1px solid $rulers-color + @media (prefers-color-scheme: dark) + border-color: $rulers-color-dark + + + .division + height: $rulers-size + + .value + bottom: 0px + left: 3px + + + .subdivision + bottom: 0 + height: 2px + + &.middle + height: 5px + + + #linkeditor-ruler-y + width: $rulers-size + height: 100% + + .info + width: $rulers-size + border-bottom: 1px dotted $rulers-color + @media (prefers-color-scheme: dark) + border-color: $rulers-color-dark + + + span + transform-origin: 0 0 + transform: rotate(270deg) + + + .division, .subdivision + height: 0px + border-bottom: 1px solid $rulers-color + @media (prefers-color-scheme: dark) + border-color: $rulers-color-dark + + + .division + width: $rulers-size + + .value + text-align: center + max-width: $rulers-size + word-wrap: break-word + white-space: normal + line-height: 10px + letter-spacing: 30px + top: 3px + left: 3px + + + .subdivision + right: 0 + width: 2px + + &.middle + width: 5px + + + #linkeditor-zoom + width: 100% + height: 100% + max-width: 100% + max-height: 100% + min-height: 100% + min-width: 100% + transform-origin: 0 0 + overflow: hidden + + + #linkeditor-canvas + background-color: #505050 + @media (prefers-color-scheme: dark) + background-color: #222 + + + position: relative + z-index: 1 + top: $rulers-size + left: $rulers-size + height: calc( 100% - $rulers-size) + max-height: calc( 100% - $rulers-size) + width: calc( 100% - $rulers-size) + max-width: calc( 100% - $rulers-size) + overflow: auto + + &::-webkit-scrollbar + width: 6px + height: 6px + + + &::-webkit-scrollbar-track + background: transparent + + &:hover + background-color: #000 + + + &::-webkit-scrollbar-thumb + background-color: #aaa + border: 1px solid #333 + border-radius: 20px + + + #linkeditor-fluidbook + transform-origin: 0 0 + position: absolute + top: 0 + left: 0 + + .linkeditor-page + position: absolute + top: 0px + left: 0px + background-color: rgba(255, 255, 255, 0.2) + @media (prefers-color-scheme: dark) + background-color: rgba(0, 0, 0, 0.2) + + + .contents + background-color: #fff + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + + img + display: block + position: absolute + top: 0 + left: 0 + width: 100% + height: auto + z-index: 1 + + &.texts + z-index: 2 + + + &#linkeditor-page-right + .simple & + display: none + + +#linkeditor-preload + display: none + diff --git a/resources/linkeditor/webpack.mix.js b/resources/linkeditor/webpack.mix.js new file mode 100644 index 000000000..423b5efba --- /dev/null +++ b/resources/linkeditor/webpack.mix.js @@ -0,0 +1,4 @@ +const mix = require("laravel-mix"); + +mix.setPublicPath('public/packages/linkeditor').js('resources/linkeditor/js/linkeditor.js', 'js') + .sass('resources/linkeditor/style/style.sass', 'css').options({processCssUrls: false}).version(); diff --git a/resources/views/fluidbook_publication/link_editor.blade.php b/resources/views/fluidbook_publication/link_editor.blade.php index a74e145bf..49f809b89 100644 --- a/resources/views/fluidbook_publication/link_editor.blade.php +++ b/resources/views/fluidbook_publication/link_editor.blade.php @@ -90,20 +90,8 @@ var LINKS =@json($links); var RULERS =@json($rulers); - - - - + src="/packages/linkeditor/js/linkeditor.js?v={{filemtime(public_path('packages/linkeditor/js/linkeditor.js'))}}"> @endpush @push('after_styles') - + href="/packages/linkeditor/css/style.css?v={{filemtime(public_path('packages/linkeditor/css/style.css'))}}"/> @endpush diff --git a/scripts/updatenpm b/scripts/updatenpm index 43fe54792..ceeb091fc 100644 --- a/scripts/updatenpm +++ b/scripts/updatenpm @@ -4,3 +4,4 @@ npm update npm run elearningmedia-prod npm run elearningpackage-prod npm run quiz-prod +npm run linkeditor-prod