diff --git a/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.js b/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.js
index 03dba21e..9fef2e05 100644
--- a/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.js
+++ b/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.js
@@ -3,7 +3,7 @@
*
* This Inputfield connects the jQuery UI Autocomplete widget with the ProcessWire ProcessPageSearch AJAX API.
*
- * ProcessWire 3.x (development), Copyright 2015 by Ryan Cramer
+ * ProcessWire 3.x (development), Copyright 2023 by Ryan Cramer
* https://processwire.com
*
*/
@@ -142,6 +142,15 @@ var InputfieldPageAutocomplete = {
}
event.stopPropagation();
return false;
+ },
+ open: function(event, ui) {
+ var $items = $('.ui-autocomplete.ui-front');
+ if(!$items.find('a').length) {
+ // newer jQuery UI versions use
rather than
, but we prefer to keep
+ $items.find('div').each(function() {
+ $(this).parent().html('' + $(this).html() + '');
+ });
+ }
}
}).on('blur', function() {
diff --git a/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.min.js b/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.min.js
index ea6939a3..ec76eafb 100644
--- a/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.min.js
+++ b/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.min.js
@@ -1 +1 @@
-var InputfieldPageAutocomplete={init:function(id,url,labelField,searchField,operator){var $value=$("#"+id);var $ol=$("#"+id+"_items");var $input=$("#"+id+"_input");var $icon=$input.parent().find(".InputfieldPageAutocompleteStatus");var $note=$input.parent().find(".InputfieldPageAutocompleteNote");var numAdded=0;var numFound=0;var disableChars=$input.attr("data-disablechars");var noList=$input.hasClass("no_list");function hasDisableChar(str){if(!disableChars||!disableChars.length)return false;var disable=false;for(var n=0;n
-1){disable=true;break}}return disable}InputfieldPageAutocomplete.setIconPosition($icon,"left");if(noList){$input.attr("data-selectedLabel",$input.val());var $remove=$input.siblings(".InputfieldPageAutocompleteRemove");InputfieldPageAutocomplete.setIconPosition($remove,"right");$remove.on("click",function(){$value.val("").trigger("change");$input.val("").attr("placeholder","").attr("data-selectedLabel","").trigger("change").trigger("focus");$input.trigger("keydown")});$input.on("change",function(){if($(this).val().length==0){$remove.hide()}else{$remove.show()}});$input.on("focus",function(){var val=$value.val();if(!val.length)return;if(hasDisableChar(val))return;if($(this).hasClass("added_item"))return;$(this).attr("placeholder",$(this).attr("data-selectedLabel"));$(this).val("")}).on("blur",function(){setTimeout(function(){},200)})}$icon.on("click",function(){$input.trigger("focus")});$icon.attr("data-class",$icon.attr("class"));function isAddAllowed(){var allowed=$("#_"+id.replace("Inputfield_","")+"_add_items").length>0;return allowed}$input.one("focus",function(){InputfieldPageAutocomplete.updateIcons($input.closest(".InputfieldContent"));$input.autocomplete({minLength:2,source:function(request,response){var term=request.term;if(hasDisableChar(term)){response([]);return}$icon.attr("class","fa fa-fw fa-spin fa-spinner");if($input.hasClass("and_words")&&term.indexOf(" ")>0){term=term.replace(/\s+/,",")}term=encodeURIComponent(term);var ajaxURL=url+"&"+searchField+operator+term;$.getJSON(ajaxURL,function(data){$icon.attr("class",$icon.attr("data-class"));numFound=data.total;if(data.total>0){$icon.attr("class","fa fa-fw fa-angle-double-down")}else if(isAddAllowed()){$icon.attr("class","fa fa-fw fa-plus-circle");$note.show()}else{$icon.attr("class","fa fa-fw fa-frown-o")}response($.map(data.matches,function(item){return{label:item[labelField],value:item[labelField],page_id:item.id}}))})},select:function(event,ui){if(!ui.item)return;var $t=$(this);if($t.hasClass("no_list")){$t.val(ui.item.label).trigger("change");$t.attr("data-selectedLabel",ui.item.label);$t.closest(".InputfieldPageAutocomplete").find(".InputfieldPageAutocompleteData").val(ui.item.page_id).trigger("change");$t.trigger("blur")}else{InputfieldPageAutocomplete.pageSelected($ol,ui.item);$t.val("").trigger("focus")}event.stopPropagation();return false}}).on("blur",function(){var $input=$(this);$icon.attr("class",$icon.attr("data-class"));$note.hide();if($input.hasClass("no_list")){if($value.val().length||$input.val().length){if($input.hasClass("allow_any")||$input.hasClass("added_item")){}else{$input.val($input.attr("data-selectedLabel")).attr("placeholder","")}}else{$input.val("").attr("placeholder","").attr("data-selectedLabel","")}}if($input.hasClass("focus-after-blur")){$input.removeClass("focus-after-blur");setTimeout(function(){$input.trigger("focus")},250)}}).on("keyup",function(){$icon.attr("class",$icon.attr("data-class"))}).on("keydown",function(event){var $addNote;if(event.keyCode==13){event.preventDefault();if(isAddAllowed()){if($input.val().trim().length<1){$input.trigger("blur");return false}numAdded++;var page={page_id:-1*numAdded,label:$input.val()};if(noList){$value.val(page.page_id);$("#_"+id.replace("Inputfield_","")+"_add_items").val(page.label);$input.addClass("added_item").trigger("blur");$addNote=$note.siblings(".InputfieldPageAutocompleteNoteAdd");if(!$addNote.length){$addNote=$("");$note.after($addNote)}$addNote.text($note.attr("data-adding")+" "+page.label);$addNote.show()}else{InputfieldPageAutocomplete.pageSelected($ol,page);$input.val("").trigger("blur").trigger("focus")}$note.hide()}else{$(this).addClass("focus-after-blur").trigger("blur")}return false}if(numAdded&&noList){$addNote=$note.siblings(".InputfieldPageAutocompleteNoteAdd");var $addText=$("#_"+id.replace("Inputfield_","")+"_add_items");if($addNote.length&&$addText.val()!=$(this).val()){$addNote.remove();$value.val("");$addText.val("");$("#_"+id.replace("Inputfield_","")+"_add_items").val("");numAdded--}}})});var makeSortable=function($ol){$ol.sortable({axis:"y",update:function(e,data){InputfieldPageAutocomplete.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("InputfieldPageAutocompleteSortable")};$("#"+$ol.attr("id")).on("mouseover",">li",function(){$(this).removeClass("ui-state-default").addClass("ui-state-hover");makeSortable($ol)}).on("mouseout",">li",function(){$(this).removeClass("ui-state-hover").addClass("ui-state-default")})},initFromInputfield:function($inputfield){var $a=$inputfield.find(".InputfieldPageAutocompleteData");if(!$a.length)return;if($a.hasClass("InputfieldPageAutocompleteInit"))return;InputfieldPageAutocomplete.init($a.attr("id"),$a.attr("data-url"),$a.attr("data-label"),$a.attr("data-search"),$a.attr("data-operator"));$a.addClass("InputfieldPageAutocompleteInit")},setIconPosition:function($icon,side){if($icon.hasClass("PageAutocompleteIconHidden")){$icon.removeClass("PageAutocompleteIconHidden").show()}var iconHeight=$icon.height();if(iconHeight){var pHeight=$icon.parent().height();var iconTop=(pHeight-iconHeight)/2;$icon.css("top",iconTop+"px");if(side=="left"){$icon.css("left",iconTop/2+"px")}else if(side=="right"){$icon.css("right",iconTop/4+"px")}}else{$icon.hide().addClass("PageAutocompleteIconHidden")}},pageSelected:function($ol,page){var dup=false;$ol.children("li:not(.itemTemplate)").each(function(){var v=parseInt($(this).children(".itemValue").text());if(v==page.page_id)dup=$(this)});var $inputText=$("#"+$ol.attr("data-id")+"_input");$inputText.trigger("blur");if(dup){dup.effect("highlight");return}var $li=$ol.children(".itemTemplate").clone();$li.removeClass("itemTemplate");$li.children(".itemValue").text(page.page_id);$li.children(".itemLabel").text(page.label);$ol.append($li);InputfieldPageAutocomplete.rebuildInput($ol);InputfieldPageAutocomplete.triggerChange($ol)},triggerChange:function($item){var $input;if($item.hasClass("InputfieldPageAutocompleteData")){$input=$item}else{if(!$item.hasClass("Inputfield"))$item=$item.closest(".Inputfield");$input=$item.find(".InputfieldPageAutocompleteData")}$input.trigger("change")},rebuildInput:function($ol){var id=$ol.attr("data-id");var name=$ol.attr("data-name");var $input=$("#"+id);var value="";var addValue="";var max=parseInt($input.attr("data-max"));var $children=$ol.children(":not(.itemTemplate)");if(max>0&&$children.length>max){while($children.length>max)$children=$children.slice(1);$ol.children(":not(.itemTemplate)").replaceWith($children)}$children.each(function(){var v=parseInt($(this).children(".itemValue").text());if(v>0){value+=","+v}else if(v<0){value+=","+v;addValue+=$(this).children(".itemLabel").text()+"\n"}});$input.val(value);var $addItems=$("#_"+name+"_add_items");if($addItems.length>0)$addItems.val(addValue)},updateIcons:function($target){var $icons=$target.find(".InputfieldPageAutocompleteStatus");$icons.each(function(){InputfieldPageAutocomplete.setIconPosition($(this),"left")});$icons=$target.find(".InputfieldPageAutocompleteRemove");$icons.each(function(){InputfieldPageAutocomplete.setIconPosition($(this),"right")})}};$(document).ready(function(){$(".InputfieldPageAutocomplete").each(function(){InputfieldPageAutocomplete.initFromInputfield($(this))});$(document).on("reloaded",".InputfieldPageAutocomplete, .InputfieldPage",function(){InputfieldPageAutocomplete.initFromInputfield($(this))});$(document).on("click",".InputfieldPageAutocomplete ol a.itemRemove",function(){var $li=$(this).parent();var $ol=$li.parent();var id=$li.children(".itemValue").text();$li.remove();InputfieldPageAutocomplete.rebuildInput($ol);InputfieldPageAutocomplete.triggerChange($ol);return false});$(document).on("wiretabclick",function(a,$tab){InputfieldPageAutocomplete.updateIcons($tab)})});
\ No newline at end of file
+var InputfieldPageAutocomplete={init:function(id,url,labelField,searchField,operator){var $value=$("#"+id);var $ol=$("#"+id+"_items");var $input=$("#"+id+"_input");var $icon=$input.parent().find(".InputfieldPageAutocompleteStatus");var $note=$input.parent().find(".InputfieldPageAutocompleteNote");var numAdded=0;var numFound=0;var disableChars=$input.attr("data-disablechars");var noList=$input.hasClass("no_list");function hasDisableChar(str){if(!disableChars||!disableChars.length)return false;var disable=false;for(var n=0;n-1){disable=true;break}}return disable}InputfieldPageAutocomplete.setIconPosition($icon,"left");if(noList){$input.attr("data-selectedLabel",$input.val());var $remove=$input.siblings(".InputfieldPageAutocompleteRemove");InputfieldPageAutocomplete.setIconPosition($remove,"right");$remove.on("click",function(){$value.val("").trigger("change");$input.val("").attr("placeholder","").attr("data-selectedLabel","").trigger("change").trigger("focus");$input.trigger("keydown")});$input.on("change",function(){if($(this).val().length==0){$remove.hide()}else{$remove.show()}});$input.on("focus",function(){var val=$value.val();if(!val.length)return;if(hasDisableChar(val))return;if($(this).hasClass("added_item"))return;$(this).attr("placeholder",$(this).attr("data-selectedLabel"));$(this).val("")}).on("blur",function(){setTimeout(function(){},200)})}$icon.on("click",function(){$input.trigger("focus")});$icon.attr("data-class",$icon.attr("class"));function isAddAllowed(){var allowed=$("#_"+id.replace("Inputfield_","")+"_add_items").length>0;return allowed}$input.one("focus",function(){InputfieldPageAutocomplete.updateIcons($input.closest(".InputfieldContent"));$input.autocomplete({minLength:2,source:function(request,response){var term=request.term;if(hasDisableChar(term)){response([]);return}$icon.attr("class","fa fa-fw fa-spin fa-spinner");if($input.hasClass("and_words")&&term.indexOf(" ")>0){term=term.replace(/\s+/,",")}term=encodeURIComponent(term);var ajaxURL=url+"&"+searchField+operator+term;$.getJSON(ajaxURL,function(data){$icon.attr("class",$icon.attr("data-class"));numFound=data.total;if(data.total>0){$icon.attr("class","fa fa-fw fa-angle-double-down")}else if(isAddAllowed()){$icon.attr("class","fa fa-fw fa-plus-circle");$note.show()}else{$icon.attr("class","fa fa-fw fa-frown-o")}response($.map(data.matches,function(item){return{label:item[labelField],value:item[labelField],page_id:item.id}}))})},select:function(event,ui){if(!ui.item)return;var $t=$(this);if($t.hasClass("no_list")){$t.val(ui.item.label).trigger("change");$t.attr("data-selectedLabel",ui.item.label);$t.closest(".InputfieldPageAutocomplete").find(".InputfieldPageAutocompleteData").val(ui.item.page_id).trigger("change");$t.trigger("blur")}else{InputfieldPageAutocomplete.pageSelected($ol,ui.item);$t.val("").trigger("focus")}event.stopPropagation();return false},open:function(event,ui){var $items=$(".ui-autocomplete.ui-front");if(!$items.find("a").length){$items.find("div").each(function(){$(this).parent().html(""+$(this).html()+"")})}}}).on("blur",function(){var $input=$(this);$icon.attr("class",$icon.attr("data-class"));$note.hide();if($input.hasClass("no_list")){if($value.val().length||$input.val().length){if($input.hasClass("allow_any")||$input.hasClass("added_item")){}else{$input.val($input.attr("data-selectedLabel")).attr("placeholder","")}}else{$input.val("").attr("placeholder","").attr("data-selectedLabel","")}}if($input.hasClass("focus-after-blur")){$input.removeClass("focus-after-blur");setTimeout(function(){$input.trigger("focus")},250)}}).on("keyup",function(){$icon.attr("class",$icon.attr("data-class"))}).on("keydown",function(event){var $addNote;if(event.keyCode==13){event.preventDefault();if(isAddAllowed()){if($input.val().trim().length<1){$input.trigger("blur");return false}numAdded++;var page={page_id:-1*numAdded,label:$input.val()};if(noList){$value.val(page.page_id);$("#_"+id.replace("Inputfield_","")+"_add_items").val(page.label);$input.addClass("added_item").trigger("blur");$addNote=$note.siblings(".InputfieldPageAutocompleteNoteAdd");if(!$addNote.length){$addNote=$("");$note.after($addNote)}$addNote.text($note.attr("data-adding")+" "+page.label);$addNote.show()}else{InputfieldPageAutocomplete.pageSelected($ol,page);$input.val("").trigger("blur").trigger("focus")}$note.hide()}else{$(this).addClass("focus-after-blur").trigger("blur")}return false}if(numAdded&&noList){$addNote=$note.siblings(".InputfieldPageAutocompleteNoteAdd");var $addText=$("#_"+id.replace("Inputfield_","")+"_add_items");if($addNote.length&&$addText.val()!=$(this).val()){$addNote.remove();$value.val("");$addText.val("");$("#_"+id.replace("Inputfield_","")+"_add_items").val("");numAdded--}}})});var makeSortable=function($ol){$ol.sortable({axis:"y",update:function(e,data){InputfieldPageAutocomplete.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("InputfieldPageAutocompleteSortable")};$("#"+$ol.attr("id")).on("mouseover",">li",function(){$(this).removeClass("ui-state-default").addClass("ui-state-hover");makeSortable($ol)}).on("mouseout",">li",function(){$(this).removeClass("ui-state-hover").addClass("ui-state-default")})},initFromInputfield:function($inputfield){var $a=$inputfield.find(".InputfieldPageAutocompleteData");if(!$a.length)return;if($a.hasClass("InputfieldPageAutocompleteInit"))return;InputfieldPageAutocomplete.init($a.attr("id"),$a.attr("data-url"),$a.attr("data-label"),$a.attr("data-search"),$a.attr("data-operator"));$a.addClass("InputfieldPageAutocompleteInit")},setIconPosition:function($icon,side){if($icon.hasClass("PageAutocompleteIconHidden")){$icon.removeClass("PageAutocompleteIconHidden").show()}var iconHeight=$icon.height();if(iconHeight){var pHeight=$icon.parent().height();var iconTop=(pHeight-iconHeight)/2;$icon.css("top",iconTop+"px");if(side=="left"){$icon.css("left",iconTop/2+"px")}else if(side=="right"){$icon.css("right",iconTop/4+"px")}}else{$icon.hide().addClass("PageAutocompleteIconHidden")}},pageSelected:function($ol,page){var dup=false;$ol.children("li:not(.itemTemplate)").each(function(){var v=parseInt($(this).children(".itemValue").text());if(v==page.page_id)dup=$(this)});var $inputText=$("#"+$ol.attr("data-id")+"_input");$inputText.trigger("blur");if(dup){dup.effect("highlight");return}var $li=$ol.children(".itemTemplate").clone();$li.removeClass("itemTemplate");$li.children(".itemValue").text(page.page_id);$li.children(".itemLabel").text(page.label);$ol.append($li);InputfieldPageAutocomplete.rebuildInput($ol);InputfieldPageAutocomplete.triggerChange($ol)},triggerChange:function($item){var $input;if($item.hasClass("InputfieldPageAutocompleteData")){$input=$item}else{if(!$item.hasClass("Inputfield"))$item=$item.closest(".Inputfield");$input=$item.find(".InputfieldPageAutocompleteData")}$input.trigger("change")},rebuildInput:function($ol){var id=$ol.attr("data-id");var name=$ol.attr("data-name");var $input=$("#"+id);var value="";var addValue="";var max=parseInt($input.attr("data-max"));var $children=$ol.children(":not(.itemTemplate)");if(max>0&&$children.length>max){while($children.length>max)$children=$children.slice(1);$ol.children(":not(.itemTemplate)").replaceWith($children)}$children.each(function(){var v=parseInt($(this).children(".itemValue").text());if(v>0){value+=","+v}else if(v<0){value+=","+v;addValue+=$(this).children(".itemLabel").text()+"\n"}});$input.val(value);var $addItems=$("#_"+name+"_add_items");if($addItems.length>0)$addItems.val(addValue)},updateIcons:function($target){var $icons=$target.find(".InputfieldPageAutocompleteStatus");$icons.each(function(){InputfieldPageAutocomplete.setIconPosition($(this),"left")});$icons=$target.find(".InputfieldPageAutocompleteRemove");$icons.each(function(){InputfieldPageAutocomplete.setIconPosition($(this),"right")})}};$(document).ready(function(){$(".InputfieldPageAutocomplete").each(function(){InputfieldPageAutocomplete.initFromInputfield($(this))});$(document).on("reloaded",".InputfieldPageAutocomplete, .InputfieldPage",function(){InputfieldPageAutocomplete.initFromInputfield($(this))});$(document).on("click",".InputfieldPageAutocomplete ol a.itemRemove",function(){var $li=$(this).parent();var $ol=$li.parent();var id=$li.children(".itemValue").text();$li.remove();InputfieldPageAutocomplete.rebuildInput($ol);InputfieldPageAutocomplete.triggerChange($ol);return false});$(document).on("wiretabclick",function(a,$tab){InputfieldPageAutocomplete.updateIcons($tab)})});
\ No newline at end of file
diff --git a/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.module b/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.module
index aaef4aba..a56a6e11 100644
--- a/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.module
+++ b/wire/modules/Inputfield/InputfieldPageAutocomplete/InputfieldPageAutocomplete.module
@@ -5,7 +5,7 @@
*
* This Inputfield connects the jQuery UI Autocomplete widget with the ProcessWire ProcessPageSearch AJAX API.
*
- * ProcessWire 3.x, Copyright 2022 by Ryan Cramer
+ * ProcessWire 3.x, Copyright 2023 by Ryan Cramer
* https://processwire.com
*
* @property int $parent_id Limit results to this parent, or if combined with findPagesSelector, the search is performed as $pages->get($parent_id)->find() rather than $pages->find().
@@ -25,6 +25,7 @@
*
* @method string renderList()
* @method string renderListItem($label, $value, $class = '')
+ * @method string getAjaxUrl() Hookable since 3.0.223
*
*/
class InputfieldPageAutocomplete extends Inputfield implements InputfieldHasArrayValue, InputfieldHasSortableValue {
@@ -33,7 +34,7 @@ class InputfieldPageAutocomplete extends Inputfield implements InputfieldHasArra
return array(
'title' => __('Page Auto Complete', __FILE__), // Module Title
'summary' => __('Multiple Page selection using auto completion and sorting capability. Intended for use as an input field for Page reference fields.', __FILE__), // Module Summary
- 'version' => 112,
+ 'version' => 113,
);
}
@@ -108,10 +109,10 @@ class InputfieldPageAutocomplete extends Inputfield implements InputfieldHasArra
$label = $this->wire()->sanitizer->entities($label);
$out =
"" .
- " " .
- "$value" .
- "$label " .
- "" .
+ " " .
+ "$value" .
+ "$label " .
+ "" .
"";
return $out;
}
@@ -123,13 +124,14 @@ class InputfieldPageAutocomplete extends Inputfield implements InputfieldHasArra
*
*/
protected function ___renderList() {
-
- $out = "" .
- $this->renderListItem("Label", "1", "itemTemplate");
- foreach($this->value as $page_id) {
- if(!$page_id) continue;
- $page = $this->pages->get((int) $page_id);
+ $pages = $this->wire()->pages;
+
+ $out = $this->renderListItem('Label', '1', 'itemTemplate');
+
+ foreach($this->val() as $pageId) {
+ if(!$pageId) continue;
+ $page = $pages->get((int) $pageId);
if(!$page || !$page->id) continue;
$value = $this->labelFieldFormat ? $page->getText($this->labelFieldFormat, true, false) : $page->get($this->labelFieldName);
$value = strip_tags($value);
@@ -137,8 +139,7 @@ class InputfieldPageAutocomplete extends Inputfield implements InputfieldHasArra
$out .= $this->renderListItem($value, $page->id);
}
- $out .= "
";
- return $out;
+ return "$out
";
}
/**
@@ -198,7 +199,7 @@ class InputfieldPageAutocomplete extends Inputfield implements InputfieldHasArra
"data-max='$max' " .
"data-url='" . $sanitizer->entities($url) . "' " .
"data-label='" . $sanitizer->entities($labelField) . "' " .
- "data-search='$searchField' " .
+ "data-search='" . $sanitizer->entities($searchField) . "' " .
"data-operator='$operator'";
$textValue = '';
@@ -220,26 +221,16 @@ class InputfieldPageAutocomplete extends Inputfield implements InputfieldHasArra
$addingLabel = $sanitizer->entities1($this->_('New item:'));
$dataClass = $sanitizer->entities(trim('InputfieldPageAutocompleteData ' . $this->attr('class')));
- $out .= <<< _OUT
-
-
-
-
-
- $remove
-
$addNote
-
-
-_OUT;
+ $out .= "
+
+
+
+
+ $remove
+
$addNote
+
+ ";
- /*
-
- */
return $out;
}
@@ -258,9 +249,13 @@ _OUT;
if(is_array($value)) $value = reset($value);
$value = trim($value);
- if(strpos($value, ",") !== false) $value = explode(",", $value);
- else if($value) $value = array($value);
- else $value = array();
+ if(strpos($value, ',') !== false) {
+ $value = explode(',', $value);
+ } else if($value) {
+ $value = array($value);
+ } else {
+ $value = array();
+ }
foreach($value as $k => $v) {
if(empty($v)) {
@@ -281,29 +276,31 @@ _OUT;
* This URL is focused on using the AJAX API from ProcessPageSearch
*
*/
- protected function getAjaxUrl() {
+ protected function ___getAjaxUrl() {
$pipe = '%7C'; // encoded pipe "|"
- $selector = (string) $this->findPagesSelector;
-
+ $selector = (string) $this->findPagesSelector;
+ $selectorLength = strlen($selector);
+ $name = 'autocomplete_' . $this->attr('name');
+ $queryStrings = array();
+
+ /** @var ProcessPageSearch $pps */
+ $pps = $this->wire()->modules->get('ProcessPageSearch');
+
if($this->parent_id) {
- if($selector) {
+ if($selectorLength) {
// if a selector was specified, AND a parent, then we'll use the parent as a root
- $selector .= ",has_parent={$this->parent_id}";
+ $selector .= 'has_parent=' . (int) $this->parent_id;
} else {
// otherwise matches must be direct children of the parent
- $selector = "parent_id={$this->parent_id}";
+ $selector = 'parent_id=' . (int) $this->parent_id;
}
}
if(count($this->template_ids)) {
- $selector .= ",templates_id=" . implode($pipe, $this->template_ids);
+ $selector .= ',templates_id=' . implode($pipe, $this->template_ids);
} else if($this->template_id) {
- $selector .= ",templates_id={$this->template_id}";
- }
-
- if($this->lang_id) {
- $selector .= ",lang_id=" . (int) $this->lang_id;
+ $selector .= ',templates_id=' . (int) $this->template_id;
}
$allowUnpub = $this->getSetting('allowUnpub');
@@ -313,32 +310,30 @@ _OUT;
// allow for full site matches
if(!strlen($selector)) $selector = "id>0";
+
+ // include language
+ if($this->lang_id) $queryStrings[] = 'lang_id=' . (int) $this->lang_id;
// match no more than 50, unless selector specifies it's own limit
- if(strpos($selector, 'limit=') === false) $selector .= ",limit=50";
-
- // replace non-escaped commas with ampersands
- $selector = preg_replace('/(?labelFieldFormat) {
- $name = "autocomplete_" . $this->attr('name');
- /** @var ProcessPageSearch $pps */
- $pps = $this->wire()->modules->get('ProcessPageSearch');
$pps->setDisplayFormat($name, $this->labelFieldFormat, true);
- $selector .= "&format_name=$name";
+ $queryStrings[] = "format_name=$name";
}
- $selector .= "&get=" . urlencode($this->labelFieldName);
+
+ $queryStrings[] = 'get=' . urlencode($this->labelFieldName);
+
+ // tell ProcessPageSearch to store this selector which we can tell it to use
+ // by setting $_GET['for_selector_name'] = $name
+ $url = $pps->setForSelector($name, trim($selector, ', '));
+ if(count($queryStrings)) $url .= '&' . implode('&', $queryStrings);
// replace any pipes with encoded version
- if(strpos($selector, '|') !== false) $selector = str_replace('|', $pipe, $selector);
+ if(strpos($url, '|') !== false) $url = str_replace('|', $pipe, $url);
- return $this->config->urls->admin . "page/search/for?" . $selector;
+ return $url;
}
/**
@@ -348,9 +343,9 @@ _OUT;
*
*/
public function ___install() {
- $data = $this->wire('modules')->getModuleConfigData('InputfieldPage');
+ $data = $this->wire()->modules->getConfig('InputfieldPage');
$data['inputfieldClasses'][] = $this->className();
- $this->wire('modules')->saveModuleConfigData('InputfieldPage', $data);
+ $this->wire()->modules->saveConfig('InputfieldPage', $data);
}
/**
@@ -360,11 +355,11 @@ _OUT;
*
*/
public function ___uninstall() {
- $data = $this->wire('modules')->getModuleConfigData('InputfieldPage');
+ $data = $this->wire()->modules->getConfig('InputfieldPage');
foreach($data['inputfieldClasses'] as $key => $value) {
if($value == $this->className()) unset($data['inputfieldClasses'][$key]);
}
- $this->wire('modules')->saveModuleConfigData('InputfieldPage', $data);
+ $this->wire()->modules->saveConfig('InputfieldPage', $data);
}
/**