<div id="pdledit_gui_offcanvas" class="offcanvas offcanvas-bottom shadow border rounded-top start-50 translate-middle-x" tabindex="-1" data-bs-backdrop="false" data-bs-scroll="true" style="min-width: 300px">
<div id="pdledit_gui_offcanvas_body" class="offcanvas-body"></div>
<div class="offcanvas-header">
<div class="offcanvas-title h3"></div>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
</div>
<div id="pdledit_gui_offcanvas_edit" class="offcanvas offcanvas-bottom shadow border rounded-top start-50 translate-middle-x" tabindex="-1" data-bs-backdrop="false" data-bs-scroll="true" style="min-width: 300px">
<div id="pdledit_gui_offcanvas_edit_body" class="offcanvas-body">
<textarea id="pdledit_gui_offcanvas_edit_textarea" class="form-control font-monospace h-100"></textarea>
</div>
<div class="offcanvas-header">
<button id="pdledit_gui_offcanvas_edit_submit" type="button" class="btn btn-primary">Submit</button>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
</div>
<div id="pdledit_gui_offcanvas_submit" class="offcanvas offcanvas-bottom shadow border rounded-top start-50 translate-middle-x" tabindex="-1" data-bs-backdrop="false" data-bs-scroll="true" style="min-width: 300px">
<div id="pdledit_gui_offcanvas_submit_body" class="offcanvas-body"></div>
<div class="offcanvas-header">
<button id="pdledit_gui_offcanvas_submit_submit" type="button" class="btn btn-primary">Submit</button>
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
</div>
<ul class="nav position-fixed bottom-0 start-50 bg-light translate-middle-x text-uppercase" style="min-width: 300px">
<li class="nav-item">
<a id="pdledit_gui_modules" class="nav-link" href="#">Modules</a>
</li>
<li class="nav-item">
<a id="pdledit_gui_templates" class="nav-link" href="#">Templates</a>
</li>
<li class="nav-item">
<a id="pdledit_gui_items" class="nav-link" href="#">Items</a>
</li>
<li class="nav-item">
<a id="pdledit_gui_src" class="nav-link" href="#">Source</a>
</li>
{{if $module_modified}}
<li class="nav-item">
<a id="pdledit_gui_reset" class="nav-link" href="#">Reset</a>
</li>
{{/if}}
<li class="nav-item">
<a id="pdledit_gui_save" class="nav-link" href="#">Apply</a>
</li>
</ul>
<script>
$(document).ready(function() {
let poi;
let regions = [];
let content_regions = [];
let page_src = atob('{{$page_src}}');
let offcanvas = new bootstrap.Offcanvas(document.getElementById('pdledit_gui_offcanvas'));
let edit_offcanvas = new bootstrap.Offcanvas(document.getElementById('pdledit_gui_offcanvas_edit'));
let submit_offcanvas = new bootstrap.Offcanvas(document.getElementById('pdledit_gui_offcanvas_submit'));
{{foreach $content_regions as $content_region}}
regions.push('{{$content_region.0}}');
content_regions.push('{{$content_region.1}}');
let sortable_{{$content_region.1}} = document.getElementById('{{$content_region.1}}');
new Sortable(sortable_{{$content_region.1}}, {
group: 'shared',
handle: '.pdledit_gui_item_handle',
animation: 150
});
{{/foreach}}
let sortable_items = document.getElementById('pdledit_gui_offcanvas_body');
new Sortable(sortable_items, {
group: {
name: 'shared',
pull: 'clone',
put: false
},
sort: false,
handle: '.pdledit_gui_item_handle',
animation: 150,
onEnd: function (e) {
$(e.item).find('button').removeClass('disabled');
}
});
$(document).on('click', '.pdledit_gui_item_src', function(e) {
poi = this.closest('.pdledit_gui_item');
let src = atob(poi.dataset.src);
$('#pdledit_gui_offcanvas_edit_textarea').val(src);
$('#pdledit_gui_offcanvas_edit_textarea').bbco_autocomplete('comanche');
edit_offcanvas.show();
});
$(document).on('click', '.pdledit_gui_item_remove', function(e) {
poi = this.closest('.pdledit_gui_item');
$(poi).remove();
});
$(document).on('click', '#pdledit_gui_offcanvas_edit_submit', function(e) {
let src = $('#pdledit_gui_offcanvas_edit_textarea').val();
if (poi) {
poi.dataset.src = btoa(src);
}
else {
$.post(
'pdledit_gui',
{
'save_src': 1,
'module': '{{$module}}',
'src': $('#pdledit_gui_offcanvas_edit_textarea').val()
}
)
.done(function(data) {
if (data.success) {
window.location.href = 'pdledit_gui/' + data.module;
}
});
}
edit_offcanvas.hide();
});
$(document).on('click', '#pdledit_gui_offcanvas_submit_submit', function(e) {
if ($('#pdledit_gui_templates_form').length) {
$.post(
'pdledit_gui',
{
'save_template': 1,
'module': '{{$module}}',
'data': $('#pdledit_gui_templates_form').serializeArray()
}
)
.done(function(data) {
if (data.success) {
window.location.href = 'pdledit_gui/' + data.module;
}
});
}
submit_offcanvas.hide();
});
$(document).on('click', '#pdledit_gui_src', function(e) {
e.preventDefault();
poi = null; // this is important!
let obj = {};
content_regions.forEach(function (content_region, i) {
let data_src = [];
$('#' + content_region + ' > .card').each(function () {
data_src.push(atob(this.dataset.src));
});
obj[regions[i]] = data_src;
});
for (let [region, entries] of Object.entries(obj)) {
let region_pdl = '';
entries.forEach(function (entry) {
region_pdl = region_pdl.concat(entry + "\r\n");
});
let regex_str = '\\[region=' + region + '\\](.*?)\\[\\/region\\]';
let replace_str = '[region=' + region + ']' + "\r\n" + region_pdl + "\r\n" + '[/region]'
let regex = new RegExp(regex_str, 'ism');
page_src = page_src.replace(regex, replace_str);
}
$('#pdledit_gui_offcanvas_edit_textarea').val(page_src);
$('#pdledit_gui_offcanvas_edit_textarea').bbco_autocomplete('comanche');
edit_offcanvas.show();
});
$(document).on('click', '#pdledit_gui_items', function(e) {
e.preventDefault();
$('#pdledit_gui_offcanvas_body').html(atob('{{$items}}'));
offcanvas.show();
});
$(document).on('click', '#pdledit_gui_templates', function(e) {
e.preventDefault();
$('#pdledit_gui_offcanvas_submit_body').html(atob('{{$templates}}'));
submit_offcanvas.show();
});
$(document).on('click', '#pdledit_gui_modules', function(e) {
e.preventDefault();
$('#pdledit_gui_offcanvas_body').html(atob('{{$modules}}'));
offcanvas.show();
});
$(document).on('click', '#pdledit_gui_save', function(e) {
e.preventDefault();
let obj = {};
content_regions.forEach(function (content_region, i) {
let data_src = [];
$('#' + content_region + ' > .card').each(function () {
data_src.push(this.dataset.src);
});
obj[regions[i]] = data_src;
});
$.post(
'pdledit_gui',
{
'save': 1,
'module': '{{$module}}',
'data': JSON.stringify(obj)
}
)
.done(function(data) {
if (data.success) {
window.location.href = 'pdledit_gui/' + data.module;
}
});
});
$(document).on('click', '#pdledit_gui_reset', function(e) {
e.preventDefault();
$.post(
'pdledit_gui',
{
'reset': 1,
'module': '{{$module}}'
}
)
.done(function(data) {
if (data.success) {
window.location.href = 'pdledit_gui/' + data.module;
}
});
});
});
</script>