Repeaters add Expand Collapse buttons see #2631
This commit is contained in:
parent
63c0aa5384
commit
4dbe172a43
|
|
@ -1,6 +1,27 @@
|
||||||
.field-repeater {
|
.field-repeater {
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
}
|
}
|
||||||
|
.field-repeater .field-repeater-buttons {
|
||||||
|
text-align: right;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
margin-top: -15px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
.field-repeater .field-repeater-buttons * {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.field-repeater .field-repeater-buttons .item {
|
||||||
|
color: #000000;
|
||||||
|
opacity: 0.5;
|
||||||
|
line-height: 20px;
|
||||||
|
margin: 0 10px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.field-repeater .field-repeater-buttons .item:hover,
|
||||||
|
.field-repeater .field-repeater-buttons .item:focus {
|
||||||
|
opacity: 0.7;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
.field-repeater ul.field-repeater-items,
|
.field-repeater ul.field-repeater-items,
|
||||||
.field-repeater li.field-repeater-item {
|
.field-repeater li.field-repeater-item {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
@ -45,6 +66,9 @@
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
border-left: 1px solid #dbdee0;
|
border-left: 1px solid #dbdee0;
|
||||||
|
min-height: 30px;
|
||||||
|
-webkit-transition: all 0.5s;
|
||||||
|
transition: all 0.5s;
|
||||||
}
|
}
|
||||||
.field-repeater li.field-repeater-item:before {
|
.field-repeater li.field-repeater-item:before {
|
||||||
color: #bdc3c7;
|
color: #bdc3c7;
|
||||||
|
|
@ -60,6 +84,45 @@
|
||||||
left: -4px;
|
left: -4px;
|
||||||
top: -2px;
|
top: -2px;
|
||||||
}
|
}
|
||||||
|
.field-repeater li.field-repeater-item.collapsed .field-repeater-form {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.field-repeater li.field-repeater-item.collapsed .repeater-item-collapse .repeater-item-collapse-one {
|
||||||
|
-webkit-transform: scale(1, -1);
|
||||||
|
-ms-transform: scale(1, -1);
|
||||||
|
transform: scale(1, -1);
|
||||||
|
}
|
||||||
|
.field-repeater li.field-repeater-item.collapsed .repeater-item-collapsed-title {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.field-repeater li.field-repeater-item .repeater-item-collapse {
|
||||||
|
position: absolute;
|
||||||
|
top: -10px;
|
||||||
|
right: 40px;
|
||||||
|
height: 20px;
|
||||||
|
z-index: 90;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
.field-repeater li.field-repeater-item .repeater-item-collapse a {
|
||||||
|
-webkit-transition: all 0.3s;
|
||||||
|
transition: all 0.3s;
|
||||||
|
color: #000000;
|
||||||
|
opacity: 0.5;
|
||||||
|
line-height: 20px;
|
||||||
|
margin: 0 10px;
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.field-repeater li.field-repeater-item .repeater-item-collapse a:hover,
|
||||||
|
.field-repeater li.field-repeater-item .repeater-item-collapse a:focus {
|
||||||
|
opacity: 0.7;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.field-repeater li.field-repeater-item .repeater-item-collapsed-title {
|
||||||
|
display: none;
|
||||||
|
top: -7px;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
.field-repeater li.field-repeater-item .field-repeater-form {
|
.field-repeater li.field-repeater-item .field-repeater-form {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -7px;
|
top: -7px;
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,11 @@
|
||||||
Repeater.prototype.init = function() {
|
Repeater.prototype.init = function() {
|
||||||
// Init with no arguments
|
// Init with no arguments
|
||||||
this.bindSorting()
|
this.bindSorting()
|
||||||
|
|
||||||
|
var self = this
|
||||||
|
this.$el.on('click', '.repeater-item-collapse-one', self.toggleCollapse)
|
||||||
|
this.$el.on('click', '.repeater-collapse-all', self.collapseAll)
|
||||||
|
this.$el.on('click', '.repeater-expand-all', self.expandAll)
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater.prototype.bindSorting = function() {
|
Repeater.prototype.bindSorting = function() {
|
||||||
|
|
@ -50,6 +55,46 @@
|
||||||
this.$el.removeData('oc.repeater')
|
this.$el.removeData('oc.repeater')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Repeater.prototype.toggleCollapse = function() {
|
||||||
|
var $item = $(this).closest('.field-repeater-item')
|
||||||
|
|
||||||
|
if ($item.hasClass('collapsed')) {
|
||||||
|
Repeater.prototype.expand($item)
|
||||||
|
} else {
|
||||||
|
Repeater.prototype.collapse($item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Repeater.prototype.collapseAll = function() {
|
||||||
|
var items = $(this).closest('.field-repeater').find('.field-repeater-item')
|
||||||
|
|
||||||
|
$.each(items, function(key, item){
|
||||||
|
Repeater.prototype.collapse($(item))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Repeater.prototype.expandAll = function() {
|
||||||
|
var items = $(this).closest('.field-repeater').find('.field-repeater-item')
|
||||||
|
|
||||||
|
$.each(items, function(key, item){
|
||||||
|
Repeater.prototype.expand($(item))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Repeater.prototype.collapse = function($item) {
|
||||||
|
$item.addClass('collapsed')
|
||||||
|
|
||||||
|
var $textInput = $item.find('input[type=text]').first()
|
||||||
|
if($textInput.length) {
|
||||||
|
$item.find('.repeater-item-collapsed-title').text($textInput.val());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Repeater.prototype.expand = function($item) {
|
||||||
|
$item.removeClass('collapsed')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// FIELD REPEATER PLUGIN DEFINITION
|
// FIELD REPEATER PLUGIN DEFINITION
|
||||||
// ============================
|
// ============================
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,30 @@
|
||||||
|
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
|
|
||||||
|
.field-repeater-buttons {
|
||||||
|
text-align: right;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
margin-top: -15px;
|
||||||
|
font-size: 12px;
|
||||||
|
|
||||||
|
* {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #000000;
|
||||||
|
opacity: 0.5;
|
||||||
|
line-height: 20px;
|
||||||
|
margin:0 10px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
opacity: 0.7;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ul.field-repeater-items,
|
ul.field-repeater-items,
|
||||||
li.field-repeater-item {
|
li.field-repeater-item {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
@ -48,6 +72,9 @@
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
border-left: 1px solid #dbdee0;
|
border-left: 1px solid #dbdee0;
|
||||||
|
min-height: 30px;
|
||||||
|
-webkit-transition: all 0.5s;
|
||||||
|
transition: all 0.5s;
|
||||||
|
|
||||||
&:before {
|
&:before {
|
||||||
color: #bdc3c7;
|
color: #bdc3c7;
|
||||||
|
|
@ -58,6 +85,55 @@
|
||||||
top: -2px;
|
top: -2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.collapsed {
|
||||||
|
.field-repeater-form {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.repeater-item-collapse {
|
||||||
|
.repeater-item-collapse-one {
|
||||||
|
.transform(scale(1,-1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.repeater-item-collapsed-title{
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.repeater-item-collapse {
|
||||||
|
position: absolute;
|
||||||
|
top: -10px;
|
||||||
|
right: 40px;
|
||||||
|
height: 20px;
|
||||||
|
z-index: 90;
|
||||||
|
font-size: 12px;
|
||||||
|
|
||||||
|
a,
|
||||||
|
button {
|
||||||
|
-webkit-transition: all 0.3s;
|
||||||
|
transition: all 0.3s;
|
||||||
|
color: #000000;
|
||||||
|
opacity: 0.5;
|
||||||
|
line-height: 20px;
|
||||||
|
margin:0 10px;
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
opacity: 0.7;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.repeater-item-collapsed-title{
|
||||||
|
display: none;
|
||||||
|
top: -7px;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
.field-repeater-form {
|
.field-repeater-form {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -7px;
|
top: -7px;
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,16 @@
|
||||||
data-sortable-container="#<?= $this->getId('items') ?>"
|
data-sortable-container="#<?= $this->getId('items') ?>"
|
||||||
data-sortable-handle=".<?= $this->getId('items') ?>-handle">
|
data-sortable-handle=".<?= $this->getId('items') ?>-handle">
|
||||||
|
|
||||||
|
<div class="field-repeater-buttons">
|
||||||
|
<a href="javascript:;" class="item repeater-collapse-all">
|
||||||
|
<?= e(trans('backend::lang.dashboard.collapse_all')) ?>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="javascript:;" class="item repeater-expand-all">
|
||||||
|
<?= e(trans('backend::lang.dashboard.expand_all')) ?>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
<ul id="<?= $this->getId('items') ?>" class="field-repeater-items">
|
<ul id="<?= $this->getId('items') ?>" class="field-repeater-items">
|
||||||
<?php foreach ($this->formWidgets as $index => $widget): ?>
|
<?php foreach ($this->formWidgets as $index => $widget): ?>
|
||||||
<?= $this->makePartial('repeater_item', [
|
<?= $this->makePartial('repeater_item', [
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,14 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="repeater-item-collapse">
|
||||||
|
<a href="javascript:;" class="repeater-item-collapse-one">
|
||||||
|
<i class="icon-chevron-up"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="repeater-item-collapsed-title"></div>
|
||||||
|
|
||||||
<div class="field-repeater-form"
|
<div class="field-repeater-form"
|
||||||
data-control="formwidget"
|
data-control="formwidget"
|
||||||
data-refresh-handler="<?= $this->getEventHandler('onRefresh') ?>"
|
data-refresh-handler="<?= $this->getEventHandler('onRefresh') ?>"
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,8 @@ return [
|
||||||
'make_default' => 'Make default',
|
'make_default' => 'Make default',
|
||||||
'make_default_confirm' => 'Set the current layout as the default?',
|
'make_default_confirm' => 'Set the current layout as the default?',
|
||||||
'make_default_success' => 'Current layout is now the default',
|
'make_default_success' => 'Current layout is now the default',
|
||||||
|
'collapse_all' => 'Collapse all',
|
||||||
|
'expand_all' => 'Expand all',
|
||||||
'status' => [
|
'status' => [
|
||||||
'widget_title_default' => 'System status',
|
'widget_title_default' => 'System status',
|
||||||
'update_available' => '{0} updates available!|{1} update available!|[2,Inf] updates available!',
|
'update_available' => '{0} updates available!|{1} update available!|[2,Inf] updates available!',
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue