From fd7917c7d10245f93bb851bc2dfb18cddbed79a7 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Wed, 20 Nov 2019 10:54:51 -0500 Subject: [PATCH] Fix issue processwire/processwire-issues#1012 --- .../InputfieldPageListSelectMultiple.js | 15 +++++++++++++-- .../InputfieldPageListSelectMultiple.min.js | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/wire/modules/Inputfield/InputfieldPageListSelect/InputfieldPageListSelectMultiple.js b/wire/modules/Inputfield/InputfieldPageListSelect/InputfieldPageListSelectMultiple.js index 029a7940..35ff2ddb 100644 --- a/wire/modules/Inputfield/InputfieldPageListSelect/InputfieldPageListSelectMultiple.js +++ b/wire/modules/Inputfield/InputfieldPageListSelect/InputfieldPageListSelectMultiple.js @@ -98,9 +98,20 @@ var InputfieldPageListSelectMultiple = { id = id.substring(0, id.lastIndexOf('_')); var $input = $('#' + id); var value = ''; + var selected = {}; $ol.children(':not(.itemTemplate)').each(function() { - if(value.length > 0) value += ','; - value += $(this).children('.itemValue').text(); + 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.change(); diff --git a/wire/modules/Inputfield/InputfieldPageListSelect/InputfieldPageListSelectMultiple.min.js b/wire/modules/Inputfield/InputfieldPageListSelect/InputfieldPageListSelectMultiple.min.js index d9e47f35..093d0f54 100644 --- a/wire/modules/Inputfield/InputfieldPageListSelect/InputfieldPageListSelectMultiple.min.js +++ b/wire/modules/Inputfield/InputfieldPageListSelect/InputfieldPageListSelectMultiple.min.js @@ -1 +1 @@ -var InputfieldPageListSelectMultiple={init:function(a){if(a.hasClass("InputfieldPageListSelectMultipleData")){var b=a}else{var b=a.find(".InputfieldPageListSelectMultipleData")}if(!b.length){return}if(b.hasClass("InputfieldPageListSelectMultipleInit")){return}b.ProcessPageList({mode:"select",rootPageID:b.attr("data-root"),selectShowPageHeader:false,selectSelectHref:b.attr("data-href"),selectStartLabel:b.attr("data-start"),selectCancelLabel:b.attr("data-cancel"),selectSelectLabel:b.attr("data-select"),selectUnselectLabel:b.attr("data-unselect"),moreLabel:b.attr("data-more"),labelName:b.attr("data-labelName")}).hide().addClass("InputfieldPageListSelectMultipleInit");b.bind("pageSelected",b,InputfieldPageListSelectMultiple.pageSelected);InputfieldPageListSelectMultiple.initList($("#"+b.attr("id")+"_items"))},initList:function(a){var b=function(c){c.sortable({axis:"y",update:function(f,d){InputfieldPageListSelectMultiple.rebuildInput($(this))},start:function(f,d){d.item.addClass("ui-state-highlight")},stop:function(f,d){d.item.removeClass("ui-state-highlight")}});c.addClass("InputfieldPageListSelectMultipleSortable")};$("#"+a.attr("id")).on("mouseover",">li",function(){$(this).removeClass("ui-state-default").addClass("ui-state-hover");if(!a.is(".InputfieldPageListSelectMultipleSortable")){b(a)}}).on("mouseout",">li",function(){$(this).removeClass("ui-state-hover").addClass("ui-state-default")});a.on("click","a.itemRemove",function(){var e=$(this).parent();var c=e.parent();var d=e.children(".itemValue").text();e.remove();InputfieldPageListSelectMultiple.rebuildInput(c);return false})},pageSelected:function(c,b){$input=c.data;var a=$("#"+$input.attr("id")+"_items");var d=a.children(".itemTemplate").clone();d.removeClass("itemTemplate");d.children(".itemValue").text(b.id);d.children(".itemLabel").text(b.title);a.append(d);InputfieldPageListSelectMultiple.rebuildInput(a)},rebuildInput:function(a){var d=a.attr("id");d=d.substring(0,d.lastIndexOf("_"));var c=$("#"+d);var b="";a.children(":not(.itemTemplate)").each(function(){if(b.length>0){b+=","}b+=$(this).children(".itemValue").text()});c.val(b);c.change()}};$(document).ready(function(){$(".InputfieldPageListSelectMultiple").each(function(){InputfieldPageListSelectMultiple.init($(this))});$(document).on("reloaded",".InputfieldPageListSelectMultiple, .InputfieldPage",function(){InputfieldPageListSelectMultiple.init($(this))})}); \ No newline at end of file +var InputfieldPageListSelectMultiple={init:function($inputfield){if($inputfield.hasClass("InputfieldPageListSelectMultipleData")){var $t=$inputfield}else{var $t=$inputfield.find(".InputfieldPageListSelectMultipleData")}if(!$t.length)return;if($t.hasClass("InputfieldPageListSelectMultipleInit"))return;$t.ProcessPageList({mode:"select",rootPageID:$t.attr("data-root"),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.bind("pageSelected",$t,InputfieldPageListSelectMultiple.pageSelected);InputfieldPageListSelectMultiple.initList($("#"+$t.attr("id")+"_items"))},initList:function($ol){var makeSortable=function($ol){$ol.sortable({axis:"y",update:function(e,data){InputfieldPageListSelectMultiple.rebuildInput($(this))},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();InputfieldPageListSelectMultiple.rebuildInput($ol);return false})},pageSelected:function(e,page){$input=e.data;var $ol=$("#"+$input.attr("id")+"_items");var $li=$ol.children(".itemTemplate").clone();$li.removeClass("itemTemplate");$li.children(".itemValue").text(page.id);$li.children(".itemLabel").text(page.title);$ol.append($li);InputfieldPageListSelectMultiple.rebuildInput($ol)},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"){if(jQuery.ui)selected[v].effect("highlight",1e3);$li.remove()}else{selected[v]=$li;if(value.length>0)value+=",";value+=v}});$input.val(value);$input.change()}};$(document).ready(function(){$(".InputfieldPageListSelectMultiple").each(function(){InputfieldPageListSelectMultiple.init($(this))});$(document).on("reloaded",".InputfieldPageListSelectMultiple, .InputfieldPage",function(){InputfieldPageListSelectMultiple.init($(this))})}); \ No newline at end of file