416 lines
10 KiB
PHP
416 lines
10 KiB
PHP
<?php if (!defined('HTMLY')) die('HTMLy'); ?>
|
|
<?php
|
|
$menu = '';
|
|
$filename = "content/data/menu.json";
|
|
if (file_exists($filename)) {
|
|
$json = json_decode(file_get_contents('content/data/menu.json', true));
|
|
$menus = json_decode($json);
|
|
if (!empty($menus)) {
|
|
$menu = parseMenus($menus);
|
|
}
|
|
}
|
|
|
|
function parseMenus($menus) {
|
|
$ol = '<ol class="dd-list">';
|
|
foreach ($menus as $menu) {
|
|
$ol .= parseMenu($menu);
|
|
}
|
|
$ol .= '</ol>';
|
|
return $ol;
|
|
}
|
|
|
|
function parseMenu($menu) {
|
|
$li = '<li class="dd-item" data-class="'. $menu->class .'" data-id="'. $menu->id .'" data-name="'.$menu->name.'" data-slug="'.htmlspecialchars($menu->slug, FILTER_SANITIZE_URL).'">';
|
|
$li .= '<div class="dd-handle">'.$menu->name.'</div>';
|
|
$li .= '<span class="button-delete btn btn-danger btn-xs" style="margin-right:0.5rem" data-owner-id="'.$menu->id.'">'.i18n('Delete').'</span>';
|
|
$li .= '<span class="button-edit btn btn-primary btn-xs" data-owner-id="'.$menu->id.'">'.i18n('Edit').'</span>';
|
|
if (isset($menu->children)) {
|
|
$li .= parseMenus($menu->children);
|
|
}
|
|
$li .= '</li>';
|
|
return $li;
|
|
}
|
|
|
|
?>
|
|
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="dd nestable"><?php if (!empty($menu)) {echo '<h2>Drag & Drop</h2><br>'. $menu;} else {echo '<span>'.i18n('At_the_moment_you_are_using_auto_generated_menu').'</span><ol class="dd-list"></ol>';}?></div>
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
<form id="menu-add">
|
|
<h4><?php echo i18n('Add_menu');?></h4>
|
|
<div class="form-group">
|
|
<label for="addInputName"><?php echo i18n('Name');?></label>
|
|
<input type="text" class="form-control" id="addInputName" placeholder="<?php echo i18n('Link_name')?>" required>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="addInputSlug"><?php echo i18n('Slug');?></label>
|
|
<input type="text" class="form-control" id="addInputSlug" placeholder="<?php echo i18n('item_slug');?>" required>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="addInputClass"><?php echo i18n('CSS_Class_Optional');?></label>
|
|
<input type="text" class="form-control" id="addInputClass" placeholder="<?php echo i18n('item_class');?>">
|
|
</div>
|
|
<button class="btn btn-primary btn-sm" id="addButton"><?php echo i18n('Add_link');?></button>
|
|
</form>
|
|
<form id="menu-editor" style="display: none;">
|
|
<h4>Editing <span id="currentEditName"></span></h4>
|
|
<div class="form-group">
|
|
<label for="addInputName"><?php echo i18n('Name')?></label>
|
|
<input type="text" class="form-control" id="editInputName" placeholder="<?php echo i18n('Link_name')?>" required>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="addInputSlug"><?php echo i18n('Slug');?></label>
|
|
<input type="text" class="form-control" id="editInputSlug" placeholder="<?php echo i18n('item_slug');?>">
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="addInputClass"><?php echo i18n('CSS_Class_Optional');?></label>
|
|
<input type="text" class="form-control" id="editInputClass" placeholder="<?php echo i18n('item_class');?>">
|
|
</div>
|
|
<button class="btn btn-primary btn-sm" id="editButton"><?php echo i18n('Save_Edit');?></button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="output-container">
|
|
<div class="col">
|
|
<button class="btn btn-primary" id="saveButton"><?php echo i18n('Save_Menu');?></button>
|
|
<form class="form" style="display:none;">
|
|
<textarea class="form-control" id="json-output" rows="5"></textarea>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script src="<?php echo site_url() ?>system/resources/js/jquery.nestable.js"></script>
|
|
<script src="<?php echo site_url() ?>system/resources/js/jquery.nestable++.js"></script>
|
|
<script>
|
|
$('.dd.nestable').nestable({
|
|
maxDepth: 2
|
|
})
|
|
.on('change', updateOutput);
|
|
|
|
|
|
$('#addMenu').click(function() {
|
|
$('#menu-add').fadeIn();
|
|
});
|
|
|
|
$("#saveButton").click(function(){
|
|
updateOutput($('.dd.nestable').data('output', $('#json-output')));
|
|
var js = $('#json-output').val();
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: '<?php echo site_url();?>admin/menu',
|
|
dataType: 'json',
|
|
data: {'json': js},
|
|
success: function (response) {
|
|
alert(response.message);
|
|
location.reload();
|
|
},
|
|
});
|
|
});
|
|
</script>
|
|
<style>
|
|
/**
|
|
* Nestable css
|
|
*/
|
|
.dd {
|
|
position: relative;
|
|
display: block;
|
|
margin: 0;
|
|
padding: 0;
|
|
max-width: 600px;
|
|
list-style: none;
|
|
font-size: 13px;
|
|
line-height: 20px;
|
|
}
|
|
|
|
.dd-list {
|
|
display: block;
|
|
position: relative;
|
|
margin: 0;
|
|
padding: 0;
|
|
list-style: none;
|
|
}
|
|
|
|
.dd-list .dd-list {
|
|
padding-left: 30px;
|
|
}
|
|
|
|
.dd-collapsed .dd-list {
|
|
display: none;
|
|
}
|
|
|
|
.dd-item,
|
|
.dd-empty,
|
|
.dd-placeholder {
|
|
display: block;
|
|
position: relative;
|
|
margin: 0;
|
|
padding: 0;
|
|
min-height: 20px;
|
|
font-size: 13px;
|
|
line-height: 20px;
|
|
}
|
|
|
|
.dd-handle {
|
|
display: block;
|
|
margin: 5px 0;
|
|
padding: 5px 10px;
|
|
color: #333;
|
|
text-decoration: none;
|
|
font-weight: bold;
|
|
border: 1px solid #ccc;
|
|
background: #fafafa;
|
|
background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%);
|
|
background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%);
|
|
background: linear-gradient(top, #fafafa 0%, #eee 100%);
|
|
-webkit-border-radius: 3px;
|
|
border-radius: 3px;
|
|
box-sizing: border-box;
|
|
-moz-box-sizing: border-box;
|
|
cursor: move;
|
|
}
|
|
|
|
.dd-handle:hover {
|
|
color: #2ea8e5;
|
|
background: #fff;
|
|
}
|
|
|
|
.dd-item > button {
|
|
display: block;
|
|
position: relative;
|
|
cursor: pointer;
|
|
float: left;
|
|
width: 25px;
|
|
height: 20px;
|
|
margin: 5px 0;
|
|
padding: 0;
|
|
text-indent: 100%;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
border: 0;
|
|
background: transparent;
|
|
font-size: 12px;
|
|
line-height: 1;
|
|
text-align: center;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.dd-item > button:before {
|
|
content: '+';
|
|
display: block;
|
|
position: absolute;
|
|
width: 100%;
|
|
text-align: center;
|
|
text-indent: 0;
|
|
}
|
|
|
|
.dd-item > button[data-action="collapse"]:before {
|
|
content: '-';
|
|
}
|
|
|
|
.dd-placeholder,
|
|
.dd-empty {
|
|
margin: 5px 0;
|
|
padding: 0;
|
|
min-height: 30px;
|
|
background: #f2fbff;
|
|
border: 1px dashed #b6bcbf;
|
|
box-sizing: border-box;
|
|
-moz-box-sizing: border-box;
|
|
}
|
|
|
|
.dd-empty {
|
|
border: 1px dashed #bbb;
|
|
min-height: 100px;
|
|
background-color: #e5e5e5;
|
|
background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
|
|
-webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
|
|
background-image: -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
|
|
-moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
|
|
background-image: linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
|
|
linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
|
|
background-size: 60px 60px;
|
|
background-position: 0 0, 30px 30px;
|
|
}
|
|
|
|
.dd-dragel {
|
|
position: absolute;
|
|
pointer-events: none;
|
|
z-index: 9999;
|
|
}
|
|
|
|
.dd-dragel > .dd-item .dd-handle {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.dd-dragel .dd-handle {
|
|
-webkit-box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, .1);
|
|
box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, .1);
|
|
}
|
|
|
|
/**
|
|
* Nestable Extras
|
|
*/
|
|
.nestable-lists {
|
|
display: block;
|
|
clear: both;
|
|
padding: 30px 0;
|
|
width: 100%;
|
|
border: 0;
|
|
border-top: 2px solid #ddd;
|
|
border-bottom: 2px solid #ddd;
|
|
}
|
|
|
|
#nestable-menu {
|
|
padding: 0;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
#nestable-output,
|
|
#nestable2-output {
|
|
width: 100%;
|
|
height: 7em;
|
|
font-size: 0.75em;
|
|
line-height: 1.333333em;
|
|
font-family: Consolas, monospace;
|
|
padding: 5px;
|
|
box-sizing: border-box;
|
|
-moz-box-sizing: border-box;
|
|
}
|
|
|
|
#nestable2 .dd-handle {
|
|
color: #fff;
|
|
border: 1px solid #999;
|
|
background: #bbb;
|
|
background: -webkit-linear-gradient(top, #bbb 0%, #999 100%);
|
|
background: -moz-linear-gradient(top, #bbb 0%, #999 100%);
|
|
background: linear-gradient(top, #bbb 0%, #999 100%);
|
|
}
|
|
|
|
#nestable2 .dd-handle:hover {
|
|
background: #bbb;
|
|
}
|
|
|
|
#nestable2 .dd-item > button:before {
|
|
color: #fff;
|
|
}
|
|
|
|
.dd {
|
|
// float: left;
|
|
// width: 48 %;
|
|
width: 80%;
|
|
}
|
|
|
|
.dd + .dd {
|
|
margin-left: 2%;
|
|
}
|
|
|
|
.dd-hover > .dd-handle {
|
|
background: #2ea8e5 !important;
|
|
}
|
|
|
|
/**
|
|
* Nestable Draggable Handles
|
|
*/
|
|
.dd3-content {
|
|
display: block;
|
|
height: 30px;
|
|
margin: 5px 0;
|
|
padding: 5px 10px 5px 40px;
|
|
color: #333;
|
|
text-decoration: none;
|
|
font-weight: bold;
|
|
border: 1px solid #ccc;
|
|
background: #fafafa;
|
|
background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%);
|
|
background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%);
|
|
background: linear-gradient(top, #fafafa 0%, #eee 100%);
|
|
-webkit-border-radius: 3px;
|
|
border-radius: 3px;
|
|
box-sizing: border-box;
|
|
-moz-box-sizing: border-box;
|
|
}
|
|
|
|
.dd3-content:hover {
|
|
color: #2ea8e5;
|
|
background: #fff;
|
|
}
|
|
|
|
.dd-dragel > .dd3-item > .dd3-content {
|
|
margin: 0;
|
|
}
|
|
|
|
.dd3-item > button {
|
|
margin-left: 30px;
|
|
}
|
|
|
|
.dd3-handle {
|
|
position: absolute;
|
|
margin: 0;
|
|
left: 0;
|
|
top: 0;
|
|
cursor: pointer;
|
|
width: 30px;
|
|
text-indent: 100%;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
border: 1px solid #aaa;
|
|
background: #ddd;
|
|
background: -webkit-linear-gradient(top, #ddd 0%, #bbb 100%);
|
|
background: -moz-linear-gradient(top, #ddd 0%, #bbb 100%);
|
|
background: linear-gradient(top, #ddd 0%, #bbb 100%);
|
|
border-top-right-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
}
|
|
|
|
.dd3-handle:before {
|
|
content: '≡';
|
|
display: block;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 3px;
|
|
width: 100%;
|
|
text-align: center;
|
|
text-indent: 0;
|
|
color: #fff;
|
|
font-size: 20px;
|
|
font-weight: normal;
|
|
}
|
|
|
|
.dd3-handle:hover {
|
|
background: #ddd;
|
|
}
|
|
|
|
|
|
/*
|
|
* Nestable++
|
|
*/
|
|
.button-delete {
|
|
position: absolute;
|
|
top: 4px;
|
|
right: 40px;
|
|
}
|
|
|
|
.button-edit {
|
|
position: absolute;
|
|
top: 4px;
|
|
right: 5px;
|
|
}
|
|
|
|
#saveButton {
|
|
padding-right: 30px;
|
|
padding-left: 30px;
|
|
}
|
|
|
|
.output-container {
|
|
margin-top: 20px;
|
|
}
|
|
|
|
#json-output {
|
|
margin-top: 20px;
|
|
}
|
|
</style>
|