]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5443 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 9 Sep 2022 17:00:40 +0000 (19:00 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 9 Sep 2022 17:00:40 +0000 (19:00 +0200)
app/Models/FluidbookPublication.php
app/Util/FluidbookLinks.php
public/packages/fluidbook/toolbox/css/linkeditor.css
public/packages/fluidbook/toolbox/css/linkeditor.css.map
public/packages/fluidbook/toolbox/css/linkeditor.less
public/packages/fluidbook/toolbox/js/linkeditor.js
resources/views/fluidbook_publication/link_editor.blade.php

index b6015af20faae0d8403bc218f6dbafcffab16022..8a12f84ce1d9b67210fb73341c9242e8d509ee58 100644 (file)
@@ -16,6 +16,7 @@ use App\Http\Controllers\Admin\Operations\FluidbookPublication\EditOperation;
 use App\Models\Base\ToolboxSettingsModel;
 use App\Models\Traits\PublicationSettings;
 use App\Models\Traits\SCORMVersionTrait;
+use App\Util\FluidbookLinks;
 use Backpack\CRUD\app\Library\Widget;
 use Cubist\Backpack\Magic\Fields\FormBigSection;
 use Cubist\Backpack\Magic\Fields\FormSuperSection;
@@ -315,6 +316,11 @@ class FluidbookPublication extends ToolboxSettingsModel
         }
     }
 
+    public function getLinksAndRulers(&$links, &$rulers)
+    {
+        FluidbookLinks::getLinksAndRulers($this->id,$links,$rulers);
+    }
+
 
     /**
      * @return array
index d73baf39734c443f9053ff150ca228478a1c976a..23569a361505d4f0e39724410f378b1e1a8ebb98 100644 (file)
@@ -6,6 +6,7 @@ use Cubist\Util\ArrayUtil;
 use Cubist\Util\Crypt;
 use Cubist\Util\Files\Files;
 use Cubist\Util\ObjectUtil;
+use Cubist\Util\Str;
 use SodiumException;
 
 class FluidbookLinks
@@ -148,11 +149,27 @@ class FluidbookLinks
 
         $r = json_decode(gzdecode(file_get_contents($file)), true);
         $links = $r['links'];
-        $rulers = $r['rulers'];
-
+        $rulers = self::_rulersUID($r['rulers']);
         self::_correctImageSpecialLinks($links);
     }
 
+    protected static function _rulersUID($rulers)
+    {
+        $res = [];
+        foreach ($rulers as $ruler) {
+            if (!isset($ruler['uid'])) {
+                $ruler['uid'] = self::uid();
+            }
+            $res[$ruler['uid']] = $ruler;
+        }
+        return $res;
+    }
+
+    protected static function uid()
+    {
+        return Str::lower(Str::random(12));
+    }
+
     protected static function _correctImageSpecialLinks(&$links)
     {
         foreach ($links as $k => $link) {
index cd15033e7a6d268cb6e81c9bd3441eea33ec3bc0..557bcd3be5ec31403d9379b3fde58e96b34f0b70 100644 (file)
@@ -68,22 +68,24 @@ html {
 }
 #linkeditor #linkeditor-main #linkeditor-editor .ruler[data-axis="x"] {
   width: 0px;
-  height: 100%;
+  height: calc( 100% - 16px);
   border-left-width: 1px;
   cursor: col-resize;
+  top: 16px;
 }
 #linkeditor #linkeditor-main #linkeditor-editor .ruler[data-axis="x"]:after {
-  left: -5px;
-  width: 10px;
+  left: -2px;
+  width: 4px;
 }
 #linkeditor #linkeditor-main #linkeditor-editor .ruler[data-axis="y"] {
   border-bottom-width: 1px;
   height: 0px;
-  width: 100%;
+  width: calc( 100% - 16px);
+  left: 16px;
 }
 #linkeditor #linkeditor-main #linkeditor-editor .ruler[data-axis="y"]:after {
-  top: -5px;
-  height: 10px;
+  top: -2px;
+  height: 4px;
   cursor: row-resize;
 }
 #linkeditor #linkeditor-main #linkeditor-editor #linkeditor-rulers {
index 9496d2a241ea86dc22216c8dd8411bb681d25a18..c2388b4fbbda5f4d3c30a56fb4853084399dbbe6 100644 (file)
@@ -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
index d7e47608986f53ac93c0387f87519ad87a540b5e..a36e6745c9e3e5efdc6487300f8389c8a1672b5c 100644 (file)
@@ -47,6 +47,7 @@ body, #linkeditor, html {
             height: ~"calc( 100% - 51px)";
             width: 100%;
 
+            @ruler-margin: 2px;
 
             .ruler {
                 position: absolute;
@@ -57,11 +58,11 @@ body, #linkeditor, html {
                 border-color: #0f0;
                 border-style: solid;
 
-                &:after{
+                &:after {
                     position: absolute;
                     content: "";
                     display: block;
-                    height:100%;
+                    height: 100%;
                     width: 100%;
                 }
 
@@ -75,22 +76,26 @@ body, #linkeditor, html {
 
                 &[data-axis="x"] {
                     width: 0px;
-                    height: 100%;
+                    height: ~"calc( 100% - @{rulers-size})";
                     border-left-width: 1px;
                     cursor: col-resize;
-                    &:after{
-                        left:-5px;
-                        width: 10px;
+                    top:@rulers-size;
+
+                    &:after {
+                        left: @ruler-margin*-1;
+                        width: @ruler-margin*2;
                     }
                 }
 
                 &[data-axis="y"] {
                     border-bottom-width: 1px;
                     height: 0px;
-                    width: 100%;
-                    &:after{
-                        top:-5px;
-                        height: 10px;
+                    width: ~"calc( 100% - @{rulers-size})";
+                    left:@rulers-size;
+
+                    &:after {
+                        top: @ruler-margin*-1;
+                        height: @ruler-margin*2;
                         cursor: row-resize;
                     }
                 }
index 4a20f0f2ef37c67ef7a36908092d30729ba60c89..28f49fd6c56c51c32427e157093c5fee59a2bee3 100644 (file)
@@ -10,6 +10,7 @@ $(function () {
     var zoomdragging = false;
     var dividers = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000];
     var fluidbookRect, canvasRect, editorRect;
+    var currentPage;
 
     var movingRuler = null;
 
@@ -30,11 +31,13 @@ $(function () {
                 $("#linkeditor-canvas").addClass('grab');
                 return false;
             }
+            moveRuler();
         });
         $(window).on('keyup', function (e) {
             if (e.keyCode == 32) {
                 resetZoomDrag();
             }
+            moveRuler();
         });
 
         $("#linkeditor-canvas").on('scroll', function () {
@@ -117,9 +120,30 @@ $(function () {
         changePage();
     }
 
-    function addRuler(axis) {
-        movingRuler = $('<div class="ruler" fb-ref="editor" data-axis="' + axis + '"></div>');
-        $("#linkeditor-editor").append(movingRuler);
+    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};
+        }
+        var ruler = $('<div class="ruler" data-uid="' + uid + '" fb-ref="editor" data-axis="' + axis + '"></div>');
+        if (pos === undefined) {
+            movingRuler = ruler;
+        } else {
+            var dim = axis == 'x' ? 'left' : 'top';
+            $(ruler).attr('fb-' + dim, pos);
+        }
+        $("#linkeditor-editor").append(ruler);
         moveRuler();
     }
 
@@ -127,6 +151,8 @@ $(function () {
         if (ruler === undefined) {
             ruler = movingRuler;
         }
+        var uid = $(ruler).data('uid');
+        delete RULERS[uid];
         $(ruler).remove();
         movingRuler = null;
     }
@@ -135,17 +161,18 @@ $(function () {
         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;
+        var v, fbv;
         if ($(movingRuler).data('axis') === 'x') {
             v = editorMouse.x;
-            attrs['fb-left'] = fbMouse.x;
+            fbv = attrs['fb-left'] = magnet ? magnetize(fbMouse.x, getRulersMagnetValues('x')) : fbMouse.x;
         } else {
             v = editorMouse.y;
-            attrs['fb-top'] = fbMouse.y;
+            fbv = attrs['fb-top'] = magnet ? magnetize(fbMouse.y, getRulersMagnetValues('y')) : fbMouse.y;
         }
         if (v < 16) {
             $(movingRuler).addClass('pending-delete');
@@ -153,9 +180,44 @@ $(function () {
             $(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 getRulersMagnetValues(axis) {
+        var res = [0];
+        if (axis === 'x') {
+            res.push(pw);
+            res.push(pw * 2);
+        } else {
+            res.push(ph);
+        }
+        return res;
+    }
+
     function updateFBElements() {
         var dims = ['left', 'top', 'width', 'height'];
         $('[fb-ref]').each(function () {
@@ -280,6 +342,7 @@ $(function () {
         if (page % 2 === 1 && !single) {
             page--;
         }
+        currentPage = page;
         loadPage(page, 'left');
         if (!single) {
             loadPage(page + 1, 'right');
@@ -318,11 +381,28 @@ $(function () {
 
     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 {
             $(container).html('<img draggable="false" src="link_' + p + '.jpg" />')
         }
+        loadLinks(p, side);
+        loadRulers(p, side);
+    }
+
+    function loadLinks(page, side) {
+
+    }
+
+    function loadRulers(page, side) {
+        $.each(RULERS, function (uid, ruler) {
+            if (ruler.page != page) {
+                return;
+            }
+            addRuler(ruler.type, ruler.pos, ruler.uid);
+        });
     }
 
     function resize() {
index e40fdad5d9ad0465961d5f89bc09aa8bceebc07c..d2f69a6f04fa02587b5345b0df7aa1e67ff808b5 100644 (file)
@@ -1,5 +1,6 @@
 @php
     $title='#'.$id.' - '.__('Editeur de liens');
+    $fluidbook->getLinksAndRulers($links,$rulers);
 @endphp
 @extends('layouts.empty')
 
@@ -30,6 +31,8 @@
 @push('after_scripts')
     <script>
         var FLUIDBOOK_DATA = @json($fluidbook->getPageData()->getRawData());
+        var LINKS =@json($links);
+        var RULERS =@json($rulers);
     </script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-scrollTo/2.1.3/jquery.scrollTo.min.js"
             integrity="sha512-PsJ1f4lw0Jrga4wbDOvdWs9DFl88C1vlcH2VQYqgljHBmzmqtGivUkzRHWx2ZxFlnysKUcROqLeuOpYh9q4YNg=="