]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5531 @3
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 14 Oct 2022 17:17:45 +0000 (19:17 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 14 Oct 2022 17:17:45 +0000 (19:17 +0200)
app/Http/Controllers/Admin/ToolboxSettingsController.php
resources/linkeditor/js/linkeditor.js
resources/linkeditor/js/linkeditor.panels.js [new file with mode: 0644]
resources/linkeditor/js/linkeditor.resize.js
resources/linkeditor/js/linkeditor.settings.js [new file with mode: 0644]
resources/linkeditor/style/panels.sass
resources/linkeditor/style/variables.sass
resources/views/fluidbook_publication/link_editor.blade.php
resources/views/vendor/backpack/base/inc/sidebar_content.blade.php

index d5f34eac3ea4b9cef9efa03f845b139bb84acf4f..e7924793654d979649b7dab5b17dc6f6acdf4d07 100644 (file)
@@ -7,7 +7,9 @@ class ToolboxSettingsController
     public function set()
     {
         $user = backpack_user();
-        $user->setToolboxSetting(request()->get('key'), request()->get('value'));
+        foreach (request('settings') as $key => $val) {
+            $user->setToolboxSetting($key, $val);
+        }
         $user->saveWithoutFlushingCache();
     }
 }
index 21e54b9461d4e6e34a7f964a0e3c2de632a38e2d..0c9c34be9d1c649d80c55fb4b52bb76ef87c5be0 100644 (file)
@@ -8,6 +8,8 @@ import LinkeditorToolbar from './linkeditor.toolbar';
 import LinkeditorUtils from './linkeditor.utils';
 import LinkeditorZoom from './linkeditor.zoom';
 import LinkeditorSave from './linkeditor.save';
+import LinkeditorSettings from './linkeditor.settings';
+import LinkeditorPanels from './linkeditor.panels';
 
 window.$ = window.jQuery = require('jquery');
 window.key = require('keymaster');
@@ -51,12 +53,15 @@ LinkEditor.prototype = {
         this.utils = new LinkeditorUtils(this);
         this.loader = new LinkeditorLoader(this);
         this.save = new LinkeditorSave(this);
+        this.panels = new LinkeditorPanels(this);
+        this.settings = new LinkeditorSettings(this);
 
         this.initEvents();
         this.initIcons();
+        this.panels.init();
     },
 
-    initIcons:function(){
+    initIcons: function () {
         $("#linkeditor [data-icon]").each(function () {
             $(this).append(getSpriteIcon('linkeditor-' + $(this).data('icon')));
         });
diff --git a/resources/linkeditor/js/linkeditor.panels.js b/resources/linkeditor/js/linkeditor.panels.js
new file mode 100644 (file)
index 0000000..694c382
--- /dev/null
@@ -0,0 +1,60 @@
+function LinkeditorPanels(linkeditor) {
+    this.linkeditor = linkeditor;
+    this.sides = ['left', 'right'];
+}
+
+LinkeditorPanels.prototype = {
+    init: function () {
+
+        var $this = this;
+        $.each(this.sides, function (k, side) {
+            var tool = $this.linkeditor.settings.get(side + '_tool');
+            var open = $this.linkeditor.settings.get(tool + '_open');
+            console.log(open);
+            var width = Math.min(70, Math.max(12, $this.linkeditor.settings.get(tool + '_width')));
+            var icon = $("#linkeditor-icon-" + tool);
+            var panelContainer = $("#linkeditor-" + side + '-panel')
+
+            $("#linkeditor-" + side + '-icons').append(icon);
+            panelContainer.append($("#linkeditor-panel-" + tool));
+            if (open) {
+                icon.addClass('active');
+                panelContainer.addClass('open');
+            }
+            panelContainer.attr('data-width', width);
+        });
+        this.linkeditor.resize.resize();
+    },
+
+    resize: function (ww) {
+        $('.linkeditor-panel.open').each(function () {
+            var dw = parseFloat($(this).data('width'));
+            if (isNaN(dw)) {
+                return;
+            }
+            var w = (ww / 100) * dw;
+            $(this).css('width', w);
+        });
+    },
+    toggleLayers: function () {
+        this.togglePanel('layers');
+    },
+    toggleForm: function () {
+        this.togglePanel('form');
+    },
+    togglePanel: function (panel) {
+        let container = $("#linkeditor-panel-" + panel).closest('.linkeditor-panel');
+        container.toggleClass('open');
+        var icon = $("#linkeditor-icon-" + panel);
+        var opened = container.hasClass('open');
+        if (opened) {
+            icon.addClass('active');
+        } else {
+            icon.removeClass('active');
+        }
+        this.linkeditor.settings.set(panel + '_open', opened);
+        this.linkeditor.resize.resize();
+    }
+
+};
+module.exports = LinkeditorPanels;
index bbde620d72ed7079f47c7619c92ca9220559cb0a..62b45c89662a0e42d6818c8d5b3b9950a06e85fa 100644 (file)
@@ -9,11 +9,18 @@ LinkeditorResize.prototype = {
         $(window).on('resize', function () {
             $this.resize();
         });
+        this.updateWindowDimensions();
     },
 
-    resize: function () {
+    updateWindowDimensions: function () {
         this.ww = $(window).outerWidth();
         this.hh = $(window).outerHeight();
+
+    },
+
+    resize: function () {
+        this.updateWindowDimensions();
+        this.linkeditor.panels.resize(this.ww);
         this.resizeMain();
         this.resizeCanvas();
         this.linkeditor.rulers.updateRulers();
diff --git a/resources/linkeditor/js/linkeditor.settings.js b/resources/linkeditor/js/linkeditor.settings.js
new file mode 100644 (file)
index 0000000..331b68a
--- /dev/null
@@ -0,0 +1,38 @@
+function LinkeditorSettings(linkeditor) {
+    this.linkeditor = linkeditor;
+    this.saveTimeout = null;
+}
+
+LinkeditorSettings.prototype = {
+    save: function () {
+        var data = {};
+        $.each(SETTINGS, function (k, v) {
+            data['linkeditor_' + k] = v;
+        });
+        Pace.ignore(function () {
+            $.ajax({
+                url: '/toolbox_setting', method: 'POST', data: {settings: data},
+            })
+        });
+    },
+
+    get: function (key) {
+        var res = SETTINGS[key];
+        if (res === 'true') {
+            res = true;
+        } else if (res === 'false') {
+            res = false;
+        }
+        return res;
+    },
+
+    set: function (key, value) {
+        let $this = this;
+        SETTINGS[key] = value;
+        clearTimeout(this.saveTimeout);
+        this.saveTimeout = setTimeout(function () {
+            $this.save();
+        }, 3000);
+    }
+};
+module.exports = LinkeditorSettings;
index 237a54dbdee66a09a9a14e00e0e0c02af50b3265..20f9aa00a6e06179ae996a9e590c80623943afc0 100644 (file)
@@ -8,6 +8,7 @@
 
     nav
         position: absolute
+        left: 0
         width: $sidebar-icons-width
         height: 100%
 
@@ -24,7 +25,7 @@
             @media (prefers-color-scheme: dark)
                 color: $toolbar-color-dark
 
-            &:hover, &.hover
+            &:hover, &.hover, &.active
                 background-color: #fff
                 @media (prefers-color-scheme: dark)
                     background-color: #000
 
     .handle
         position: absolute
+        top: 0
         right: 0
-        width: 2px
+        width: $sidebar-handle-width
         height: 100%
         background-color: #aaa
+        cursor: col-resize
+        z-index: 1
+
         @media (prefers-color-scheme: dark)
             background-color: #666
-        cursor: col-resize
+
 
     .linkeditor-panel
         display: none
         margin-left: $sidebar-icons-width
+        margin-right: $sidebar-handle-width
 
         background: $panel-background
         height: 100%
         @media (prefers-color-scheme: dark)
             background-color: #111
 
+        &.open
+            display: block
+
     &#linkeditor-right
         border-width: 0 0 0 2px
 
+        nav
+            left: auto
+            right: 0
+
         [data-icon]
             margin-left: 9px
 
@@ -66,5 +79,5 @@
             left: 0
 
         .linkeditor-panel
-            margin-left: 0
+            margin-left: $sidebar-handle-width
             margin-right: $sidebar-icons-width
index ab1fc21e221fb530f6ff29867e48a52f5f4e1d02..fdf756262a677403cf2e61643c636cddf9fde1b3 100644 (file)
@@ -1,5 +1,6 @@
 $font-size: 16px
 $sidebar-icons-width: 46px
+$sidebar-handle-width: 3px
 $rulers-size: 16px
 $ruler-margin: 2px
 
index 94232c4dcc0a848aa2228bc421db8a9de7b59701..b94d4c1f8524b649db82bd0e0b36ea42d024307d 100644 (file)
 
     $rulers=!count($rulers)?'{}':json_encode($rulers);
     $links=!count($links)?'{}':json_encode($links);
+    /** @var \App\Models\User $user */
+    $user=backpack_user();
+    $settings=['left_tool'=>'layers','layers_open'=>false,'layers_width'=>20,'right_tool'=>'form','form_open'=>true,'form_width'=>20];
+    foreach ($settings as $k=>$v) {
+        $settings[$k]=$user->getToolboxSetting('linkeditor_'.$k,$v);
+    }
 @endphp
 @extends('layouts.empty')
 
 @section('content')
     @include('fluidbook_publication.link_editor_icons')
     <div draggable="false" id="linkeditor">
+        <div style="display: none" id="panels-setups">
+            <a href="#" id="linkeditor-icon-layers" data-icon="layers" data-action="panels.toggleLayers"
+               data-tooltip="{{__('Liste des liens')}} (F7)"
+               data-key="f7"></a>
+            <a href="#" id="linkeditor-icon-form" data-icon="settings" data-action="panels.toggleForm"
+               data-tooltip="{{__('Afficher le formulaire')}} (F8)"
+               data-key="f8"></a>
+            <div id="linkeditor-panel-layers">
+            </div>
+            <div id="linkeditor-panel-form">
+            </div>
+        </div>
         <aside id="linkeditor-left" class="linkeditor-sidebar">
             <nav id="linkeditor-left-icons">
-                <a href="#" data-icon="layers" data-action="panel.toggle.layers" data-tooltip="{{__('Liste des liens')}} (F7)"
-                   data-key="F7"></a>
+
             </nav>
-            <div id="linkeditor-left-panel" class="linkeditor-panel open">
+            <div id="linkeditor-left-panel" class="linkeditor-panel">
 
             </div>
             <div class="handle"></div>
             </div>
         </div>
         <aside id="linkeditor-right" class="linkeditor-sidebar">
-            <nav id="linkeditor-left-icons">
-                <a href="#" data-icon="settings" data-action="panel.toggle.form" data-tooltip="{{__('Afficher le formulaire')}} (F8)"
-                   data-key="F8"></a>
-            </nav>
-            <div id="linkeditor-left-panel" class="linkeditor-panel open"></div>
+            <nav id="linkeditor-right-icons"></nav>
+            <div id="linkeditor-right-panel" class="linkeditor-panel"></div>
             <div class="handle"></div>
         </aside>
     </div>
         var FLUIDBOOK_DATA = @json($fbdata);
         var LINKS = {!! $links !!};
         var RULERS = {!! $rulers !!};
+        var SETTINGS = @json($settings);
     </script>
     <script
         src="/packages/linkeditor/js/linkeditor.js?v={{filemtime(public_path('packages/linkeditor/js/linkeditor.js'))}}"></script>
index 34f7a382d8d7b714742bff3505b7e951c192d7b8..89535bd57ea0e07490bab36fca8d7873afe0d4a9 100644 (file)
                 setTimeout(function () {
                     let newState = $(dropdown).hasClass('open') ? '1' : '0';
                     Pace.ignore(function () {
+                        var data = {};
+                        data['sidebar_' + $(dropdown).data('sidebar-id')] = newState;
                         $.ajax({
                             url: '{{ backpack_url('toolbox_setting') }}',
                             method: 'POST',
-                            data: {key: 'sidebar_' + $(dropdown).data('sidebar-id'), value: newState}
-                        })
+                            data: {settings: data},
+                        });
                     });
                 }, 500);
                 return true;