mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2025-11-07 05:45:53 +01:00
Allow editing nested metadata
This commit is contained in:
@@ -9,7 +9,11 @@
|
|||||||
|
|
||||||
this.el.on('click', '[data-grav-array-action="add"]', this.add.bind(this));
|
this.el.on('click', '[data-grav-array-action="add"]', this.add.bind(this));
|
||||||
this.el.on('click', '[data-grav-array-action="rem"]', this.remove.bind(this));
|
this.el.on('click', '[data-grav-array-action="rem"]', this.remove.bind(this));
|
||||||
|
this.el.on('click', '[data-grav-array-action="addArrayItem"]', this.addArray.bind(this));
|
||||||
|
this.el.on('click', '[data-grav-array-action="remArrayItem"]', this.removeArray.bind(this));
|
||||||
this.el.on('keyup', '[data-grav-array-type="key"]', this.update.bind(this));
|
this.el.on('keyup', '[data-grav-array-type="key"]', this.update.bind(this));
|
||||||
|
this.el.on('keyup', '[data-grav-array-type="keyArray"]', this.updateArray.bind(this));
|
||||||
|
this.el.on('keyup', '[data-grav-array-type="keyArraySubelement"]', this.updateArraySubelement.bind(this));
|
||||||
};
|
};
|
||||||
|
|
||||||
ArrayField.getName = function () {
|
ArrayField.getName = function () {
|
||||||
@@ -103,6 +107,18 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ArrayField.prototype.addArray = function(event) {
|
||||||
|
$(this._getNewArrayField()).insertAfter($(event.target).closest('[data-grav-array-type="subrow"]'));
|
||||||
|
};
|
||||||
|
|
||||||
|
ArrayField.prototype.removeArray = function(event) {
|
||||||
|
if ($(event.target).closest('[data-grav-array-type="subrow"]').siblings().length == 0) {
|
||||||
|
//disable for the last item
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$(event.target).closest('[data-grav-array-type="subrow"]').remove();
|
||||||
|
};
|
||||||
|
|
||||||
ArrayField.prototype.update = function(event) {
|
ArrayField.prototype.update = function(event) {
|
||||||
var keyField = $(event.target),
|
var keyField = $(event.target),
|
||||||
valueField = keyField.closest('[data-grav-array-type="row"]').find('[data-grav-array-type="value"]');
|
valueField = keyField.closest('[data-grav-array-type="row"]').find('[data-grav-array-type="value"]');
|
||||||
@@ -110,6 +126,32 @@
|
|||||||
valueField.attr('name', this.getFieldName() + '[' + keyField.val() + ']');
|
valueField.attr('name', this.getFieldName() + '[' + keyField.val() + ']');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ArrayField.prototype.updateArray = function(event) {
|
||||||
|
var keyField = $(event.target),
|
||||||
|
row = keyField.closest('[data-grav-array-type="row"]'),
|
||||||
|
valueFields = row.find('[data-grav-array-type="value"]'),
|
||||||
|
keyArrayField = row.find('[data-grav-array-type="keyArray"]'),
|
||||||
|
fieldName = this.getFieldName();
|
||||||
|
|
||||||
|
valueFields.each(function() {
|
||||||
|
$(this).attr('name', fieldName + '[' + keyArrayField.val() + ']' + '[' + $(this).attr('subkey') + ']');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
ArrayField.prototype.updateArraySubelement = function(event) {
|
||||||
|
var keyField = $(event.target),
|
||||||
|
row = keyField.closest('[data-grav-array-type="row"]'),
|
||||||
|
subrow = keyField.closest('[data-grav-array-type="subrow"]'),
|
||||||
|
valueFields = subrow.find('[data-grav-array-type="value"]'),
|
||||||
|
keyArrayField = row.find('[data-grav-array-type="keyArray"]'),
|
||||||
|
fieldName = this.getFieldName();
|
||||||
|
|
||||||
|
valueFields.each(function() {
|
||||||
|
$(this).attr('name', fieldName + '[' + keyArrayField.val() + ']' + '[' + keyField.val() + ']');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
ArrayField.prototype.refreshAll = function() {
|
ArrayField.prototype.refreshAll = function() {
|
||||||
var that = this;
|
var that = this;
|
||||||
this.el.find('[data-grav-array-type="value"]').each(function(index, element){
|
this.el.find('[data-grav-array-type="value"]').each(function(index, element){
|
||||||
@@ -150,5 +192,17 @@
|
|||||||
return output;
|
return output;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ArrayField.prototype._getNewArrayField = function(key, value) {
|
||||||
|
var output = '<div class="form-row" data-grav-array-type="subrow">' + "\n" +
|
||||||
|
'<input data-grav-array-type="keyArraySubelement" type="text" value="" />' + "\n" +
|
||||||
|
'<input data-grav-array-type="value" type="text" name="" value="" />';
|
||||||
|
|
||||||
|
output += '<span data-grav-array-action="remArrayItem" class="fa fa-minus-square"></span>' + "\n" +
|
||||||
|
'<span data-grav-array-action="addArrayItem" class="fa fa-plus-square"></span>' + "\n" +
|
||||||
|
'</div>';
|
||||||
|
|
||||||
|
return output;
|
||||||
|
};
|
||||||
|
|
||||||
root.Array = ArrayField;
|
root.Array = ArrayField;
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -14,26 +14,38 @@
|
|||||||
<div class="form-row{% if field.value_only %} array-field-value_only{% endif %}" data-grav-array-type="row">
|
<div class="form-row{% if field.value_only %} array-field-value_only{% endif %}" data-grav-array-type="row">
|
||||||
|
|
||||||
{% if text is iterable %}
|
{% if text is iterable %}
|
||||||
<label>{{ key }}:</label>
|
<div class="grid" style="display: flex">
|
||||||
|
<div class="block size-1-4">
|
||||||
|
<input data-grav-array-type="keyArray" type="text" value="{{ key }}" placeholder="{{ field.placeholder_key|e|tu }}" style="float: none; width: 90%" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="block size-3-4">
|
||||||
{% for subkey, subtext in text -%}
|
{% for subkey, subtext in text -%}
|
||||||
{% if field.value_only != true %}
|
<div class="form-row" data-grav-array-type="subrow">
|
||||||
<input data-grav-array-type="key" type="text" value="{{ subkey }}" />
|
<input data-grav-array-type="keyArraySubelement" type="text" value="{{ subkey }}" />
|
||||||
{% endif %}
|
<input data-grav-array-type="value" type="text" subkey="{{ subkey }}" name="{{ (field.name|fieldName) ~ '[' ~ key ~ '][' ~ subkey ~ ']' }}" value="{{ subtext|join(', ') }}" />
|
||||||
|
|
||||||
<input data-grav-array-type="value" type="text" name="{{ (field.name|fieldName) ~ '[' ~ key ~ '][' ~ subkey ~ ']' }}" value="{{ subtext|join(', ') }}" />
|
<span data-grav-array-action="remArrayItem" class="fa fa-minus-square"></span>
|
||||||
|
<span data-grav-array-action="addArrayItem" class="fa fa-plus-square"></span>
|
||||||
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
<div class="form-row{% if field.value_only %} array-field-value_only{% endif %}" data-grav-array-type="subrow">
|
||||||
|
<span data-grav-array-action="rem" class="fa fa-minus"></span>
|
||||||
|
<span data-grav-array-action="add" class="fa fa-plus"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if field.value_only != true %}
|
{% if field.value_only != true %}
|
||||||
<input data-grav-array-type="key" type="text" value="{{ key }}" placeholder="{{ field.placeholder_key|e|tu }}" />
|
<input data-grav-array-type="key" type="text" value="{{ key }}" placeholder="{{ field.placeholder_key|e|tu }}" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<input data-grav-array-type="value" type="text" name="{{ (field.name|fieldName) ~ '[' ~ key ~ ']' }}" value="{{ text|join(', ') }}" placeholder="{{ field.placeholder_value|e|tu }}" />
|
<input data-grav-array-type="value" type="text" name="{{ (field.name|fieldName) ~ '[' ~ key ~ ']' }}" value="{{ text|join(', ') }}" placeholder="{{ field.placeholder_value|e|tu }}" />
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<span data-grav-array-action="rem" class="fa fa-minus"></span>
|
<span data-grav-array-action="rem" class="fa fa-minus"></span>
|
||||||
<span data-grav-array-action="add" class="fa fa-plus"></span>
|
<span data-grav-array-action="add" class="fa fa-plus"></span>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{%- else -%}
|
{%- else -%}
|
||||||
|
|||||||
Reference in New Issue
Block a user