122 lines
2.8 KiB
JavaScript
122 lines
2.8 KiB
JavaScript
(function ($) {
|
|
// jquery plugin for the multiple textstring
|
|
$.fn.MultipleTextstring = function (hiddenId, minimum, maximum) {
|
|
var $this = $(this),
|
|
$hidden = $(hiddenId),
|
|
$inputs = $this.find('.umbEditorTextField');
|
|
|
|
$this.sortable({
|
|
axis: 'y',
|
|
containment: $this.closest('.propertyItemContent'),
|
|
items: '.textstring-row',
|
|
handle: '.textstring-row-sort',
|
|
forcePlaceholderSize: true,
|
|
placeholder: 'textstring-row-placeholder',
|
|
stop: function (event, ui) {
|
|
// re-populate the hidden field
|
|
populateHiddenField();
|
|
}
|
|
});
|
|
|
|
$this.find('.add_row').click(function () {
|
|
var $parent = $(this).parent().parent();
|
|
var $row = $parent.clone(true); // clone the row
|
|
var $input = $row.find('.umbEditorTextField');
|
|
|
|
if ($inputs.length < maximum || maximum <= 0) {
|
|
|
|
// clear the text field
|
|
$input.val('');
|
|
|
|
// append the new row
|
|
$row.insertAfter($parent);
|
|
|
|
// set the focus
|
|
$input.focus();
|
|
|
|
// re-populate the hidden field
|
|
populateHiddenField();
|
|
}
|
|
|
|
return false;
|
|
});
|
|
|
|
$this.find('.remove_row').click(function () {
|
|
|
|
// make sure the user wants to remove the row
|
|
if (confirm('Are you sure you want to delete this row?')) {
|
|
|
|
//var $input = $this.find('.umbEditorTextField');
|
|
|
|
// check if this is the last row...
|
|
if ($inputs.length == 1) {
|
|
|
|
// ... if so, just clear it.
|
|
$inputs.val('').focus();
|
|
|
|
} else if ($inputs.length > minimum) {
|
|
|
|
var $parent = $(this).parent().parent();
|
|
|
|
// set the focus
|
|
$parent.prev().find('.umbEditorTextField').focus();
|
|
|
|
// remove the row
|
|
$parent.remove();
|
|
}
|
|
|
|
// re-populate the hidden field
|
|
populateHiddenField();
|
|
}
|
|
|
|
return false;
|
|
});
|
|
|
|
$inputs.blur(function () {
|
|
// re-populate the hidden field
|
|
populateHiddenField();
|
|
});
|
|
|
|
$inputs.keydown(function (e) {
|
|
var keyCode = e.keyCode || e.which;
|
|
|
|
// if ENTER is pressed
|
|
if (keyCode == 13) {
|
|
|
|
e.preventDefault();
|
|
|
|
// add a new row
|
|
return $(this).parent().find('.add_row').click();
|
|
}
|
|
|
|
// if BACKSPACE if pressed and the textstring value is empty
|
|
if (keyCode == 8 && $(this).val() == '') {
|
|
|
|
e.preventDefault();
|
|
|
|
// remove the row
|
|
return $(this).parent().find('.remove_row').click();
|
|
}
|
|
|
|
});
|
|
|
|
function populateHiddenField() {
|
|
var values = []; // initialise an array of values
|
|
|
|
// re-bind the text inputs
|
|
$inputs = $this.find('.umbEditorTextField');
|
|
|
|
// loop through each of the testxtring elements (needs to be a live query)
|
|
$inputs.each(function () {
|
|
|
|
// add the value to the array
|
|
values.push(this.value);
|
|
|
|
});
|
|
|
|
// implode the array into the hidden field
|
|
$hidden.val(values.join('\n'));
|
|
}
|
|
|
|
}
|
|
})(jQuery); |