You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
276 lines
7.8 KiB
276 lines
7.8 KiB
<?php |
|
|
|
use zertex\gridstack\Gridstack; |
|
use kartik\dialog\Dialog; |
|
use yii\web\JsExpression; |
|
use yii\helpers\Url; |
|
|
|
/* @var $this yii\web\View */ |
|
|
|
$this->title = Yii::t('dashboard', 'Dashboard'); |
|
|
|
$css = ' |
|
.grid-stack { |
|
margin: 0 !important; |
|
padding: 0 !important; |
|
/*border: solid 1px red;*/ |
|
} |
|
.grid-stack-item { |
|
margin: 0 !important; |
|
padding: 0 !important; |
|
/*border: solid 1px green;*/ |
|
overflow: hidden; |
|
} |
|
.grid-stack-item-content { |
|
margin: 0 !important; |
|
padding: 0 !important; |
|
overflow: hidden !important; |
|
left: 0 !important; |
|
right: 15px !important; |
|
/*bottom: 40px !important;*/ |
|
/*bottom: auto !important;*/ |
|
} |
|
|
|
.moveButton { |
|
font-size:12px; |
|
color:#999; |
|
cursor: pointer; |
|
margin-right:5px; |
|
display: inline-block; |
|
} |
|
.moveButton:hover { |
|
color:#333; |
|
} |
|
|
|
.user128 { |
|
width: 128px; |
|
height: 128px; |
|
} |
|
|
|
.big_drop .select2-results ul { |
|
max-height: 500px !important; |
|
min-height: 500px !important; |
|
height: 500px !important; |
|
} |
|
'; |
|
$this->registerCss($css); |
|
|
|
$addWidgetUrl = Url::toRoute('/site/add-widget'); |
|
$removeWidgetUrl = Url::toRoute('/site/remove-widget'); |
|
$js = <<<JS |
|
var AddWidgetDialog; |
|
var RemoveWidgetDialog; |
|
|
|
function addWidget(itemIdx, colorId) |
|
{ |
|
var color = $("#"+colorId).val(); |
|
$.ajax({ |
|
method: "GET", |
|
data: {itemIdx: itemIdx, color: color}, |
|
url: "{$addWidgetUrl}" |
|
}) |
|
.done(function(data){ |
|
AddWidgetDialog.close(); |
|
document.location.reload(); |
|
}); |
|
return false; |
|
} |
|
|
|
function removeWidget(idx) |
|
{ |
|
$.ajax({ |
|
method: "GET", |
|
data: {idx: idx}, |
|
url: "{$removeWidgetUrl}" |
|
}) |
|
.done(function(data){ |
|
RemoveWidgetDialog.close(); |
|
document.location.reload(); |
|
}); |
|
return false; |
|
} |
|
JS; |
|
|
|
$this->registerJs($js, $this::POS_HEAD); |
|
|
|
$saveWidgetsUrl = Url::toRoute('/site/save-widgets'); |
|
$js2 = ' |
|
$("#addWidgetButton").on("click", function() { |
|
krajeeDialog.dialog( |
|
"", |
|
function (result) {alert(result);} |
|
); |
|
}); |
|
|
|
$("#removeWidgetButton").on("click", function() { |
|
krajeeDialogRemove.dialog( |
|
"", |
|
function (result) {alert(result);} |
|
); |
|
}); |
|
|
|
$(".grid-stack").on("change", function(event, items) { |
|
var widgets = []; |
|
|
|
$(".grid-stack-item.ui-draggable").each(function () { |
|
var $this = $(this); |
|
widgets.push({ |
|
x: $this.attr("data-gs-x"), |
|
y: $this.attr("data-gs-y"), |
|
w: $this.attr("data-gs-width"), |
|
h: $this.attr("data-gs-height"), |
|
c: $this.attr("data-color"), |
|
title: $this.attr("data-title"), |
|
name: $this.attr("data-name"), |
|
method: $this.attr("data-method"), |
|
resize: $this.attr("data-resize"), |
|
widget: $this.attr("data-widget"), |
|
icon: $this.attr("data-icon"), |
|
}); |
|
}); |
|
var widgetsJson = JSON.stringify(widgets); |
|
$.ajax({ |
|
method: "POST", |
|
data: {widgets: widgetsJson}, |
|
url: "' . $saveWidgetsUrl . '", |
|
}) |
|
.done(function(data){ |
|
}); |
|
}); |
|
'; |
|
|
|
$this->registerJs($js2, $this::POS_READY); |
|
|
|
$formatJs = <<<JS |
|
var formatRepo = function (repo) { |
|
if (repo.loading) { |
|
return repo.text; |
|
} |
|
var markup = |
|
'<div class="row">' + |
|
'<div class="col-sm-12">' + |
|
'<b style="margin-left:5px">' + repo.text + '</b>' + |
|
'</div>' + |
|
'</div>'; |
|
if (repo.description) { |
|
markup += '<h5>' + repo.description + '</h5>'; |
|
} |
|
return '<div style="overflow:hidden;">' + markup + '</div>'; |
|
}; |
|
var formatRepoSelection = function (repo) { |
|
return repo.full_name || repo.text; |
|
} |
|
JS; |
|
$this->registerJs($formatJs, $this::POS_HEAD); |
|
?> |
|
|
|
<div class="site-index"> |
|
|
|
<?= Dialog::widget([ |
|
'options' => [ |
|
'title' => Yii::t('main', 'Add widget'), |
|
'buttons' => [ |
|
[ |
|
'id' => 'cancel-1', |
|
'label' => Yii::t('main', 'Cancel'), |
|
'action' => new JsExpression('function(dialog) { |
|
dialog.close(); |
|
}') |
|
], |
|
], |
|
'onshown' => new JsExpression("function(dialog){ |
|
var url = '" . Url::toRoute('/site/get-widgets-list') . "'; |
|
$.ajax({ |
|
method: 'POST', |
|
url: url, |
|
}) |
|
.done(function(data){ |
|
dialog.getModalBody().html(data); |
|
AddWidgetDialog = dialog; |
|
}); |
|
}"), |
|
], |
|
]); ?> |
|
|
|
<?= Dialog::widget([ |
|
'libName' => 'krajeeDialogRemove', |
|
'options' => [ |
|
'title' => Yii::t('main', 'Remove widget'), |
|
'type' => Dialog::TYPE_DANGER, |
|
'buttons' => [ |
|
[ |
|
'id' => 'cancel-1', |
|
'label' => Yii::t('main', 'Cancel'), |
|
'action' => new JsExpression('function(dialog) { |
|
dialog.close(); |
|
}') |
|
], |
|
], |
|
'onshown' => new JsExpression("function(dialog){ |
|
var url = '" . Url::toRoute('/site/get-selected-widgets-list') . "'; |
|
$.ajax({ |
|
method: 'POST', |
|
url: url, |
|
}) |
|
.done(function(data){ |
|
dialog.getModalBody().html(data); |
|
RemoveWidgetDialog = dialog; |
|
}); |
|
}"), |
|
], |
|
]); ?> |
|
|
|
<?php |
|
$gridStack = Gridstack::begin([ |
|
'options' => ['class' => 'grid-stack'], |
|
'clientOptions' => [ |
|
'cellHeight' => 22, |
|
'verticalMargin' => 15, |
|
'handle' => '.moveHandle', |
|
], |
|
]); |
|
$widgets = \core\helpers\UserHelper::getSetting('widgetsLayout', []); |
|
foreach ($widgets as $widget) { |
|
$widgetData = [ |
|
'class'=>'grid-stack-item', |
|
'data-gs-width'=>$widget['w'], |
|
'data-gs-height'=>$widget['h'], |
|
'data-gs-x'=>$widget['x'], |
|
'data-gs-y'=>$widget['y'], |
|
'data-method' => $widget['method'], |
|
'data-title' => $widget['title'], |
|
'data-color' => $widget['c'], |
|
'data-resize' => $widget['resize'], |
|
'data-widget' => $widget['widget'], |
|
'data-icon' => $widget['icon'], |
|
'data-name' => $widget['name'], |
|
]; |
|
// Disable resize if need |
|
if ($widget['resize'] == 0) { |
|
$widgetData['data-gs-no-resize'] = 'y'; |
|
} |
|
|
|
if (isset($widget['auto']) && $widget['auto'] == 1) { |
|
$widgetData['data-gs-auto-position'] = 'y'; |
|
} |
|
|
|
// Remove (), if exists |
|
$widget['method'] = str_replace('()', '', $widget['method']); |
|
// Echo widget data |
|
echo $gridStack->beginWidget($widgetData); |
|
echo call_user_func($widget['widget'] . '::' . $widget['method'], $widget['c']); |
|
echo $gridStack->endWidget(); |
|
} |
|
?> |
|
|
|
<?php Gridstack::end(); ?> |
|
|
|
<div class="clearfix"></div> |
|
<hr> |
|
|
|
<div class="row" style="text-align: right; padding-right:15px;"> |
|
<button class="btn btn-default" id="addWidgetButton"><i class="fa fa-plus"></i></button> |
|
<button class="btn btn-default" id="removeWidgetButton"><i class="fa fa-minus"></i></button> |
|
</div> |
|
|
|
</div>
|
|
|