function LinkeditorPanels(linkeditor) {
this.linkeditor = linkeditor;
- this.sides = ['left', 'right'];
+
this.maxWidth = 70;
this.minWidth = 7;
+ this.defaultWidth = 15;
this.thresholdToggle = 3;
}
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');
- var width = $this.normalizeWidth($this.linkeditor.settings.get(tool + '_width'));
- var icon = $("#linkeditor-icon-" + tool);
- var panelContainer = $("#linkeditor-" + side + '-panel').data('tool', tool);
- panelContainer.append($("#linkeditor-panel-" + tool));
+ //this.linkeditor.settings.set('panels_layout', {left: ['layers', 'versions'], right: ['form']})
+ this.sides = this.linkeditor.settings.get('panels_layout', {left: ['layers', 'versions'], right: ['form']});
+ $.each(this.sides, function (side, panels) {
+ var panelsContainer = $("#linkeditor-" + side + '-panel');
+ panelsContainer.data('width', $this.normalizeWidth($this.linkeditor.settings.get(side + '_width', $this.defaultWidth)));
+
+ $.each(panels, function (k, panel) {
+ $("#linkeditor-" + side + " nav").append($("#linkeditor-icon-" + panel));
+ panelsContainer.append('<div id="linkeditor-panel-' + panel + '" data-panel="' + panel + '" class="linkeditor-panel"></div>');
+ });
+
+ var tool = $this.linkeditor.settings.get(side + '_tool', panels[0]);
+ var open = $this.linkeditor.settings.get(side + '_open', side === 'right');
+
if (open) {
- icon.addClass('active');
- panelContainer.addClass('open');
+ $this.setPanelState(tool, true);
}
- panelContainer.attr('data-width', width);
});
this.linkeditor.resize.resize();
$(document).on('mousedown', ".linkeditor-sidebar .handle", function (e) {
$(".linkeditor-sidebar .handle.dragging").each(function () {
let cssWidth;
let sidebar = $(this).closest('.linkeditor-sidebar');
- if (sidebar.data('side') === 'left') {
+ let side = sidebar.data('side');
+ if (side === 'left') {
cssWidth = $this.linkeditor.mx - 49;
} else {
cssWidth = $this.linkeditor.resize.ww - 49 - $this.linkeditor.mx;
}
- let panel = $(sidebar).find('.linkeditor-panel');
+ let panel = $(sidebar).find('.linkeditor-panel-side');
let relativeWidth = 100 * (cssWidth / $this.linkeditor.resize.ww);
- let tool = panel.data('tool');
+ let tool = $this.linkeditor.settings.get(side + '_tool');
// Open/close when drag&drop
if (relativeWidth < $this.thresholdToggle) {
// Close
let width = $this.normalizeWidth(relativeWidth);
panel.data('width', width);
- $this.linkeditor.settings.set(tool + '_width', width);
+ $this.linkeditor.settings.set(side + '_width', width);
$this.linkeditor.resize.resize();
});
},
normalizeWidth: function (w) {
+ if (w === undefined || w === null || w === '') {
+ w = this.defaultWidth;
+ }
return Math.max(this.minWidth, Math.min(w, this.maxWidth));
},
},
resize: function (ww) {
- $('.linkeditor-panel.open').each(function () {
+ $('.linkeditor-panel-side.open').each(function () {
var dw = parseFloat($(this).data('width'));
if (isNaN(dw)) {
return;
});
},
+ toggleVersions: function () {
+ this.togglePanel('versions');
+ },
toggleLayers: function () {
this.togglePanel('layers');
},
this.setPanelState(panel, 'toggle');
},
setPanelState: function (panel, newState) {
- let container = $("#linkeditor-panel-" + panel).closest('.linkeditor-panel');
- var currentState = container.hasClass('open');
+ var $this = this;
+ var panelDiv = $('#linkeditor-panel-' + panel);
+ let container = panelDiv.closest('.linkeditor-panel-side');
+ let side = panelDiv.closest('[data-side]').data('side');
+ var currentState = panelDiv.hasClass('open');
if (currentState === newState) {
return;
}
newState = !currentState;
}
var icon = $("#linkeditor-icon-" + panel);
+
+
if (newState) {
- container.addClass('open');
icon.addClass('active');
+ panelDiv.addClass('open');
} else {
- container.removeClass('open');
icon.removeClass('active');
+ panelDiv.removeClass('open');
+ }
+
+ // Close panels on the same side
+ if (newState) {
+ $(icon).closest('nav').find('[data-panel]').each(function () {
+ if ($(this).data('panel') === panel) {
+ return;
+ }
+ $this.setPanelState($(this).data('panel'), false);
+ });
+ }
+
+ // Check if a panel is open on this side, if not, hide the panel
+ let sideOpen = $(container).children('.open').length > 0;
+ if (sideOpen) {
+ container.addClass('open');
+ } else {
+ container.removeClass('open');
+ }
+
+ if (newState) {
+ this.linkeditor.settings.set(side + '_tool', panel);
}
- this.linkeditor.settings.set(panel + '_open', newState);
+ this.linkeditor.settings.set(side + '_open', newState);
this.linkeditor.resize.resize();
},
$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];
+ $settings=[
+ 'left_open'=>false, 'left_width'=>20,'left_tool'=>'layers',
+ 'right_open'=>true,'right_width'=>20,'right_tool'=>'form',
+ 'panels_layout'=>['left'=>['layers','versions'],'right'=>['form']]
+ ];
foreach ($settings as $k=>$v) {
$settings[$k]=$user->getToolboxSetting('linkeditor_'.$k,$v);
}
@include('fluidbook_publication.link_editor_icons')
<div draggable="false" id="linkeditor">
<div style="display: none" id="panels-setups">
- <div id="linkeditor-panel-layers">
- </div>
- <div id="linkeditor-panel-form">
- </div>
+ <a href="#" id="linkeditor-icon-layers" data-panel="layers" data-icon="layers"
+ data-action="panels.toggleLayers"
+ data-tooltip="{{__('Liste des liens')}} (F7)"
+ data-key="f7"></a>
+ <a href="#" id="linkeditor-icon-versions" data-panel="versions" data-action="panels.toggleVersions"
+ data-icon="wayback-machine"
+ data-tooltip="{{__('Restaurer une version précédente')}} (F6)" data-key="f6"></a>
+ <a href="#" id="linkeditor-icon-form" data-panel="form" data-icon="settings"
+ data-action="panels.toggleForm"
+ data-tooltip="{{__('Paramètres du lien')}} (F8)" data-key="f8"></a>
</div>
<aside id="linkeditor-left" class="linkeditor-sidebar" data-side="left">
<nav id="linkeditor-left-icons">
- <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-versions" data-action="panels.toggleVersions" data-icon="wayback-machine"
- data-tooltip="{{__('Restaurer une version précédente')}} (F6)" data-key="f6"></a>
+
</nav>
- <div id="linkeditor-left-panel" class="linkeditor-panel">
+ <div id="linkeditor-left-panel" class="linkeditor-panel-side">
</div>
<div class="handle"></div>
</div>
</div>
<aside id="linkeditor-right" class="linkeditor-sidebar" data-side="right">
- <nav id="linkeditor-right-icons"> <a href="#" id="linkeditor-icon-form" data-icon="settings" data-action="panels.toggleForm"
- data-tooltip="{{__('Paramètres du lien')}} (F8)"
- data-key="f8"></a></nav>
- <div id="linkeditor-right-panel" class="linkeditor-panel"></div>
+ <nav id="linkeditor-right-icons">
+
+ </nav>
+ <div id="linkeditor-right-panel" class="linkeditor-panel-side"></div>
<div class="handle"></div>
</aside>
</div>
var SETTINGS = @json($settings);
</script>
<script
- src="/packages/linkeditor/js/linkeditor.js?v={{filemtime(public_path('packages/linkeditor/js/linkeditor.js'))}}"></script>
+ src="/packages/linkeditor/js/linkeditor.js?v={{filemtime(public_path('packages/linkeditor/js/linkeditor.js'))}}"></script>
@endpush
@push('linkeditor_styles')
<script>window._skipAutoTriggers = true;</script>