167 lines
4.9 KiB
JavaScript
167 lines
4.9 KiB
JavaScript
|
|
||
|
var InputfieldPageListSelectMultiple = {
|
||
|
|
||
|
selectLabel: 'Select',
|
||
|
selectedLabel: 'Selected',
|
||
|
|
||
|
init: function($inputfield) {
|
||
|
var $t;
|
||
|
if($inputfield.hasClass('InputfieldPageListSelectMultipleData')) {
|
||
|
$t = $inputfield;
|
||
|
} else {
|
||
|
$t = $inputfield.find(".InputfieldPageListSelectMultipleData");
|
||
|
}
|
||
|
if(!$t.length) return;
|
||
|
if($t.hasClass('InputfieldPageListSelectMultipleInit')) return;
|
||
|
InputfieldPageListSelectMultiple.selectLabel = $t.attr('data-select');
|
||
|
InputfieldPageListSelectMultiple.selectedLabel = $t.attr('data-selected');
|
||
|
$t.ProcessPageList({
|
||
|
mode: 'select',
|
||
|
rootPageID: $t.attr('data-root'),
|
||
|
showRootPage: true,
|
||
|
selectMultiple: true,
|
||
|
selectShowPageHeader: false,
|
||
|
selectSelectHref: $t.attr('data-href'),
|
||
|
selectStartLabel: $t.attr('data-start'),
|
||
|
selectCancelLabel: $t.attr('data-cancel'),
|
||
|
selectSelectLabel: $t.attr('data-select'),
|
||
|
selectUnselectLabel: $t.attr('data-unselect'),
|
||
|
moreLabel: $t.attr('data-more'),
|
||
|
labelName: $t.attr('data-labelName')
|
||
|
}).hide().addClass('InputfieldPageListSelectMultipleInit');
|
||
|
$t.on('pageSelected', $t, InputfieldPageListSelectMultiple.pageSelected);
|
||
|
$t.on('pageListChildrenDone', $t, InputfieldPageListSelectMultiple.pageListChildrenDone);
|
||
|
InputfieldPageListSelectMultiple.initList($('#' + $t.attr('id') + '_items'));
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Initialize the given InputfieldPageListSelectMultiple OL by making it sortable
|
||
|
*
|
||
|
*/
|
||
|
initList: function($ol) {
|
||
|
|
||
|
var makeSortable = function($ol) {
|
||
|
$ol.sortable({
|
||
|
// items: '.InputfieldPageListSelectMultiple ol > li',
|
||
|
axis: 'y',
|
||
|
update: function(e, data) {
|
||
|
InputfieldPageListSelectMultiple.rebuildInput($(this));
|
||
|
$ol.trigger('sorted', [ data.item ]);
|
||
|
},
|
||
|
start: function(e, data) {
|
||
|
data.item.addClass('ui-state-highlight');
|
||
|
},
|
||
|
stop: function(e, data) {
|
||
|
data.item.removeClass('ui-state-highlight');
|
||
|
}
|
||
|
});
|
||
|
$ol.addClass('InputfieldPageListSelectMultipleSortable');
|
||
|
};
|
||
|
|
||
|
$('#' + $ol.attr('id')).on('mouseover', '>li', function() {
|
||
|
$(this).removeClass('ui-state-default').addClass('ui-state-hover');
|
||
|
if(!$ol.is(".InputfieldPageListSelectMultipleSortable")) makeSortable($ol);
|
||
|
}).on('mouseout', '>li', function() {
|
||
|
$(this).removeClass('ui-state-hover').addClass('ui-state-default');
|
||
|
});
|
||
|
|
||
|
$ol.on('click', 'a.itemRemove', function() {
|
||
|
var $li = $(this).parent();
|
||
|
var $ol = $li.parent();
|
||
|
var id = $li.children(".itemValue").text();
|
||
|
$li.remove();
|
||
|
$ol.closest('.InputfieldPageListSelectMultiple').find('.pw-iplsm-disabled-' + id)
|
||
|
.removeClass('ui-state-disabled pw-iplsm-disabled-' + id)
|
||
|
.text(InputfieldPageListSelectMultiple.selectLabel);
|
||
|
InputfieldPageListSelectMultiple.rebuildInput($ol);
|
||
|
return false;
|
||
|
});
|
||
|
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Callback when children have been listed in the pageList
|
||
|
*
|
||
|
* @param e
|
||
|
* @param data
|
||
|
*/
|
||
|
pageListChildrenDone: function(e, data) {
|
||
|
var $t = $(this);
|
||
|
var $inputfield = $t.closest('.Inputfield');
|
||
|
var ids = $t.val().split(',');
|
||
|
for(var n = 0; n < ids.length; n++) {
|
||
|
var id = ids[n];
|
||
|
var $item = $inputfield.find('.PageListID' + id);
|
||
|
// mark items already selected
|
||
|
if($item.length) $item.find('.PageListActionSelect').children('a')
|
||
|
.addClass('ui-state-disabled pw-iplsm-disabled-' + id)
|
||
|
.text(InputfieldPageListSelectMultiple.selectedLabel);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Callback function executed when a page is selected from PageList
|
||
|
*
|
||
|
*/
|
||
|
pageSelected: function(e, page) {
|
||
|
|
||
|
$input = e.data;
|
||
|
|
||
|
var $ol = $('#' + $input.attr('id') + '_items');
|
||
|
var $li = $ol.children(".itemTemplate").clone();
|
||
|
|
||
|
page.actionLink
|
||
|
.addClass('ui-state-disabled pw-iplsm-disabled-' + page.id)
|
||
|
.text(InputfieldPageListSelectMultiple.selectedLabel);
|
||
|
|
||
|
$li.removeClass("itemTemplate");
|
||
|
$li.children('.itemValue').text(page.id);
|
||
|
$li.children('.itemLabel').text(page.title);
|
||
|
|
||
|
$ol.append($li);
|
||
|
|
||
|
InputfieldPageListSelectMultiple.rebuildInput($ol);
|
||
|
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Rebuild the CSV values present in the hidden input[text] field
|
||
|
*
|
||
|
*/
|
||
|
rebuildInput: function($ol) {
|
||
|
var id = $ol.attr('id');
|
||
|
id = id.substring(0, id.lastIndexOf('_'));
|
||
|
var $input = $('#' + id);
|
||
|
var value = '';
|
||
|
var selected = {};
|
||
|
$ol.children(':not(.itemTemplate)').each(function() {
|
||
|
var $li = $(this);
|
||
|
var v = $li.children('.itemValue').text();
|
||
|
if(typeof selected[v] != "undefined") {
|
||
|
// item already in list
|
||
|
if(jQuery.ui) selected[v].effect('highlight', 1000);
|
||
|
$li.remove();
|
||
|
} else {
|
||
|
// add new item to list
|
||
|
selected[v] = $li;
|
||
|
if(value.length > 0) value += ',';
|
||
|
value += v;
|
||
|
}
|
||
|
});
|
||
|
$input.val(value);
|
||
|
$input.trigger('change');
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
$(document).ready(function() {
|
||
|
$(".InputfieldPageListSelectMultiple").each(function() {
|
||
|
InputfieldPageListSelectMultiple.init($(this));
|
||
|
});
|
||
|
$(document).on('reloaded', '.InputfieldPageListSelectMultiple, .InputfieldPage', function() {
|
||
|
InputfieldPageListSelectMultiple.init($(this));
|
||
|
});
|
||
|
|
||
|
});
|