Files
Umbraco-CMS/components/editorControls/MultipleTextstring/MultipleTextstring.js

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);