From 6b20f429a9b5e4e27c311c84fed9ce2d9ff4b2b8 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Wed, 9 Oct 2019 11:52:36 -0400 Subject: [PATCH] Various minor updates and optimizations to several core classes --- wire/core/DatabaseQuerySelectFulltext.php | 31 ++++++++----- wire/core/Field.php | 2 +- wire/core/Fieldgroup.php | 2 +- wire/core/Fieldgroups.php | 11 +++-- wire/core/Template.php | 44 ++++++++++++++++++- .../ProcessTemplate/ProcessTemplate.module | 2 +- wire/templates-admin/scripts/inputfields.js | 6 ++- .../scripts/inputfields.min.js | 2 +- 8 files changed, 79 insertions(+), 21 deletions(-) diff --git a/wire/core/DatabaseQuerySelectFulltext.php b/wire/core/DatabaseQuerySelectFulltext.php index 071fe96b..8ea1cc11 100644 --- a/wire/core/DatabaseQuerySelectFulltext.php +++ b/wire/core/DatabaseQuerySelectFulltext.php @@ -20,7 +20,7 @@ * This file is licensed under the MIT license * https://processwire.com/about/license/mit/ * - * ProcessWire 3.x, Copyright 2016 by Ryan Cramer + * ProcessWire 3.x, Copyright 2019 by Ryan Cramer * https://processwire.com * * @@ -109,11 +109,12 @@ class DatabaseQuerySelectFulltext extends Wire { break; case '~=': + case '!~=': $words = preg_split('/[-\s,]/', $value, -1, PREG_SPLIT_NO_EMPTY); foreach($words as $word) { $len = function_exists('mb_strlen') ? mb_strlen($word) : strlen($word); if(DatabaseStopwords::has($word) || $len < $database->getVariable('ft_min_word_len')) { - $this->matchWordLIKE($tableName, $fieldName, $word); + $this->matchWordLIKE($tableName, $fieldName, $operator, $word); } else { $this->matchContains($tableName, $fieldName, $operator, $word); } @@ -192,26 +193,32 @@ class DatabaseQuerySelectFulltext extends Wire { $tableField = "$tableName.$fieldName"; $database = $this->wire('database'); $v = $database->escapeStr($value); + $not = strpos($operator, '!') === 0; + if($not) $operator = ltrim($operator, '!'); $n = 0; do { $scoreField = "_score_{$tableName}_{$fieldName}" . (++$n); } while(in_array($scoreField, self::$scoreFields)); self::$scoreFields[] = $scoreField; - - $query->select("MATCH($tableField) AGAINST('$v') AS $scoreField"); + + $match = $not ? 'NOT MATCH' : 'MATCH'; + $query->select("$match($tableField) AGAINST('$v') AS $scoreField"); $query->orderby($scoreField . " DESC"); - $partial = $operator != '~='; + $partial = $operator != '~=' && $operator != '!~='; $booleanValue = $database->escapeStr($this->getBooleanQueryValue($value, true, $partial)); - if($booleanValue) $j = "MATCH($tableField) AGAINST('$booleanValue' IN BOOLEAN MODE) "; - else $j = ''; + if($booleanValue) { + $j = "$match($tableField) AGAINST('$booleanValue' IN BOOLEAN MODE) "; + } else { + $j = ''; + } if($operator == '^=' || $operator == '$=' || ($operator == '*=' && (!$j || preg_match('/[-\s]/', $v)))) { // if $operator is a ^begin/$end, or if there are any word separators in a *= operator value if($operator == '^=' || $operator == '$=') { - $type = 'RLIKE'; + $type = $not ? 'NOT RLIKE' : 'RLIKE'; $v = $database->escapeStr(preg_quote($value)); // note $value not $v $like = "[[:space:]]*(<[^>]+>)*[[:space:]]*"; if($operator == '^=') { @@ -221,7 +228,7 @@ class DatabaseQuerySelectFulltext extends Wire { } } else { - $type = 'LIKE'; + $type = $not ? 'NOT LIKE' : 'LIKE'; $v = $this->escapeLIKE($v); $like = "%$v%"; } @@ -241,15 +248,17 @@ class DatabaseQuerySelectFulltext extends Wire { * * @param string $tableName * @param string $fieldName + * @param string $operator * @param $word * */ - protected function matchWordLIKE($tableName, $fieldName, $word) { + protected function matchWordLIKE($tableName, $fieldName, $operator, $word) { $tableField = "$tableName.$fieldName"; $database = $this->wire('database'); $v = $database->escapeStr(preg_quote($word)); $regex = "([[[:blank:][:punct:]]|^)$v([[:blank:][:punct:]]|$)"; - $where = "($tableField REGEXP '$regex')"; + $type = strpos($operator, '!') === 0 ? 'NOT REGEXP' : 'REGEXP'; + $where = "($tableField $type '$regex')"; $this->query->where($where); } diff --git a/wire/core/Field.php b/wire/core/Field.php index 4bf13bf1..ad3fffc1 100644 --- a/wire/core/Field.php +++ b/wire/core/Field.php @@ -20,7 +20,7 @@ * @property string $table Database table used by the field #pw-group-properties * @property string $prevTable Previously database table (if field was renamed) #pw-group-properties * @property Fieldtype|null $type Fieldtype module that represents the type of this field #pw-group-properties - * @property Fieldtype $prevFieldtype Previous Fieldtype, of type was changed #pw-group-properties + * @property Fieldtype|null $prevFieldtype Previous Fieldtype, if type was changed #pw-group-properties * @property int $flags Bitmask of flags used by this field #pw-group-properties * @property-read string $flagsStr Names of flags used by this field (readonly) #pw-group-properties * @property string $label Text string representing the label of the field #pw-group-properties diff --git a/wire/core/Fieldgroup.php b/wire/core/Fieldgroup.php index e34aa8b6..6bf3e4ca 100644 --- a/wire/core/Fieldgroup.php +++ b/wire/core/Fieldgroup.php @@ -631,7 +631,7 @@ class Fieldgroup extends WireArray implements Saveable, Exportable, HasLookupIte if(!$inputfield) continue; if($inputfield->collapsed == Inputfield::collapsedHidden) continue; - $inputfield->setAttribute('value', $page->get($field->name)); + if(!$page instanceof NullPage) $inputfield->setAttribute('value', $page->get($field->name)); if($multiMode) { $fieldInputfields[$field->id] = $inputfield; diff --git a/wire/core/Fieldgroups.php b/wire/core/Fieldgroups.php index 3669e697..14e374ee 100644 --- a/wire/core/Fieldgroups.php +++ b/wire/core/Fieldgroups.php @@ -467,9 +467,14 @@ class Fieldgroups extends WireSaveableItemsLookup { if(is_null($template)) $template = $this->wire('templates')->get($fieldgroup->name); if(($field->flags & Field::flagGlobal) && (!$template || !$template->noGlobal)) { - return - "Field '$field' may not be removed from fieldgroup '$fieldgroup->name' " . - "because it is globally required (Field::flagGlobal)."; + if($template && $template->getConnectedField()) { + // if template has a 1-1 relationship with a field, noGlobal is not enforced + return false; + } else { + return + "Field '$field' may not be removed from fieldgroup '$fieldgroup->name' " . + "because it is globally required (Field::flagGlobal)."; + } } if($field->flags & Field::flagPermanent) { diff --git a/wire/core/Template.php b/wire/core/Template.php index fed740fb..a05053e2 100644 --- a/wire/core/Template.php +++ b/wire/core/Template.php @@ -7,7 +7,7 @@ * #pw-body Template objects also maintain several properties which can affect the render behavior of pages using it. * #pw-order-groups identification,manipulation,family,URLs,access,files,cache,page-editor,behaviors,other * - * ProcessWire 3.x, Copyright 2016 by Ryan Cramer + * ProcessWire 3.x, Copyright 2019 by Ryan Cramer * https://processwire.com * * @todo add multi-language option for redirectLogin setting @@ -108,6 +108,11 @@ * @property string $tags Optional tags that can group this template with others in the admin templates list. #pw-group-other * @property string $pageLabelField CSV or space separated string of field names to be displayed by ProcessPageList (overrides those set with ProcessPageList config). #pw-group-other * @property int|bool $_importMode Internal use property set by template importer when importing #pw-internal + * @property int|null $connectedFieldID ID of connected field or null or 0 if not applicable. #pw-internal + * + * Hookable methods + * + * @method Field|null getConnectedField() Get Field object connected to this field, or null if not applicable. #pw-internal * * */ @@ -263,6 +268,7 @@ class Template extends WireData implements Saveable, Exportable { 'nameLabel' => '', // label for the "name" property of the page (if something other than "Name") 'contentType' => '', // Content-type header or index of header from $config->contentTypes 'errorAction' => 0, // action to take on save when required field on published page is empty (0=notify,1=restore,2=unpublish) + 'connectedFieldID' => null, // ID of connected field or null if not applicable 'ns' => '', // namespace found in the template file, or blank if not determined ); @@ -700,7 +706,10 @@ class Template extends WireData implements Saveable, Exportable { $this->setIcon($value); } else if($key == 'urlSegments') { - $this->urlSegments($value); + $this->urlSegments($value); + + } else if($key == 'connectedFieldID') { + parent::set($key, (int) $value); } else { parent::set($key, $value); @@ -1192,6 +1201,37 @@ class Template extends WireData implements Saveable, Exportable { return $this; } + /** + * Get Field object connected with this template + * + * #pw-internal + * + * @return Field|null Returns Field object or null if not applicable + * @since 3.0.142 + * + */ + public function ___getConnectedField() { + if($this->connectedFieldID) { + $field = $this->wire('fields')->get((int) $this->connectedFieldID); + } else { + $field = null; + } + if(!$field) { + $fieldName = ''; + $templateName = $this->name; + $prefixes = array('field-', 'field_', 'repeater_'); + foreach($prefixes as $prefix) { + if(strpos($templateName, $prefix) !== 0) continue; + list(,$fieldName) = explode($prefix, $templateName, 2); + break; + } + if($fieldName) { + $field = $this->wire('fields')->get($fieldName); + } + } + return $field; + } + /** * Ensures that isset() and empty() work for this classes properties. * diff --git a/wire/modules/Process/ProcessTemplate/ProcessTemplate.module b/wire/modules/Process/ProcessTemplate/ProcessTemplate.module index cc39b773..54ac7353 100644 --- a/wire/modules/Process/ProcessTemplate/ProcessTemplate.module +++ b/wire/modules/Process/ProcessTemplate/ProcessTemplate.module @@ -2724,7 +2724,7 @@ class ProcessTemplate extends Process { } if($isDeleted) { - if(($field->flags & Field::flagGlobal) && !$this->template->noGlobal) { + if(!$this->template->getConnectedField() && (($field->flags & Field::flagGlobal) && !$this->template->noGlobal)) { $this->error(sprintf($this->_('Field "%s" may not be removed because it is globally required by all fieldgroups'), $field)); } else { $removedFields->add($field); diff --git a/wire/templates-admin/scripts/inputfields.js b/wire/templates-admin/scripts/inputfields.js index 813ea4de..28bf1ec1 100644 --- a/wire/templates-admin/scripts/inputfields.js +++ b/wire/templates-admin/scripts/inputfields.js @@ -848,7 +848,11 @@ function InputfieldColumnWidths($target) { } colspacing = $form.attr('data-colspacing'); - if(typeof colspacing == 'undefined') colspacing = 1; + if(typeof colspacing == 'undefined') { + colspacing = 1; + } else { + colspacing = parseInt(colspacing); + } // if no borders, we don't worry about keeping heights aligned since they won't be seen useHeights = $form.hasClass('InputfieldFormNoHeights') ? false : true; diff --git a/wire/templates-admin/scripts/inputfields.min.js b/wire/templates-admin/scripts/inputfields.min.js index ffa68ec0..d4f0fe3b 100644 --- a/wire/templates-admin/scripts/inputfields.min.js +++ b/wire/templates-admin/scripts/inputfields.min.js @@ -1 +1 @@ -var InputfieldDebugMode=false;function consoleLog(note){if(InputfieldDebugMode)console.log(note)}var InputfieldDependenciesProcessing=false;function InputfieldDependencies($target){var $=jQuery;if(InputfieldDependenciesProcessing)return;if(typeof $target=="undefined"){var $target=$(".InputfieldForm:not(.InputfieldFormNoDependencies)")}else if($target.hasClass("InputfieldForm")){if($target.hasClass("InputfieldFormNoDependencies"))return}else{if($target.closest(".InputfieldFormNoDependencies").length>0)return}function trimValue(value){value=jQuery.trim(value);var first=value.substring(0,1);var last=value.substring(value.length-1,value.length);if((first=='"'||first=="'")&&first==last)value=value.substring(1,value.length-1);return value}function trimParseValue(value){return parseValue(trimValue(value))}function extractFieldAndSubfield(field){var subfield="";var dot=field.indexOf(".");if(dot>0){subfield=field.substring(dot+1);field=field.substring(0,dot)}return{field:field,subfield:subfield}}function parseValue(str,str2){str=jQuery.trim(str);if(str.length>0&&!jQuery.isNumeric(str)){return str}if(str.length==0){var t=typeof str2;if(t!="undefined"){if(t=="integer")return 0;if(t=="float")return 0;return str}else{return str}}var dot1=str.indexOf(".");var dot2=str.lastIndexOf(".");if(dot1==-1&&/^-?\d+$/.test(str)){return parseInt(str)}if(dot2>-1&&dot1!=dot2){return str}if(/^-?[\d.]+$/.test(str)){return parseFloat(str)}return str}function matchValue(field,operator,value,conditionValue){var matched=0;switch(operator){case"=":if(value==conditionValue)matched++;break;case"!=":if(value!=conditionValue)matched++;break;case">":if(value>conditionValue)matched++;break;case"<":if(value=":if(value>=conditionValue)matched++;break;case"<=":if(value<=conditionValue)matched++;break;case"*=":case"%=":if(value.indexOf(conditionValue)>-1)matched++;break}consoleLog("Field "+field+" - Current value: "+value);consoleLog("Field "+field+" - Matched? "+(matched>0?"YES":"NO"));return matched}function getCheckboxFieldAndValue(condition,conditionField,conditionSubfield){var $field=null;var value;consoleLog("getCheckboxFieldAndValue(see-next-line, "+conditionField+", "+conditionSubfield+")");consoleLog(condition);if(conditionSubfield=="count"||conditionSubfield=="count-checkbox"){consoleLog("Using count checkbox condition");$field=$("#wrap_Inputfield_"+conditionField+" :input");if($field.length){value=$("#wrap_Inputfield_"+conditionField+" :checked").length;condition.subfield="count-checkbox";return{field:$field,value:value,condition:condition}}return null}consoleLog("Using checkbox value or label comparison option");value=[];for(var i=0;i0)consoleLog("Subfield: "+condition.subfield);consoleLog("Operator: "+condition.operator);consoleLog("Required value: "+condition.value)}var matched=0;for(var fn=0;fn=numMatchesRequired)break}consoleLog("----");if(condition.type=="show"){if(matched>=numMatchesRequired){}else{show=false}}else if(condition.type=="required"){if(matched>0){requiredMatches++}else{notRequiredMatches++}}}var required=requiredMatches>0&¬RequiredMatches==0;if(show){consoleLog('Determined that field "'+fieldNameToShow+'" should be visible.');if($fieldToShow.is(".InputfieldStateHidden")){$fieldToShow.removeClass("InputfieldStateHidden").show();$(document).trigger("showInputfield",$fieldToShow);numVisibilityChanges++;consoleLog("Field is now visible.")}else{consoleLog("Field is already visible.")}}else{consoleLog('Determined that field "'+fieldNameToShow+'" should be hidden.');if(!$fieldToShow.is(".InputfieldStateHidden")){$fieldToShow.addClass("InputfieldStateHidden").hide();$(document).trigger("hideInputfield",$fieldToShow);consoleLog("Field is now hidden.");numVisibilityChanges++}else{consoleLog("Field is already hidden.")}if(required){consoleLog("Field is required but cancelling that since it is not visible.");required=false}}if(required&&requiredMatches>0){consoleLog('Determined that field "'+fieldNameToShow+'" should be required.');$fieldToShow.addClass("InputfieldStateRequired").find(":input:visible[type!=hidden]").addClass("required")}else if(!required&¬RequiredMatches>0){consoleLog('Determined that field "'+fieldNameToShow+'" should not be required.');$fieldToShow.removeClass("InputfieldStateRequired").find(":input.required").removeClass("required")}if(numVisibilityChanges>0){consoleLog(numVisibilityChanges+" visibility changes were made.");InputfieldColumnWidths();$(window).resize()}InputfieldDependenciesProcessing=false}function setupConditions(conditionType,conditions,$fieldToShow){var selector=$fieldToShow.attr("data-"+conditionType+"-if");if(!selector||selector.length<1){return conditions}selector=$("
").html(selector).text();consoleLog("-------------------------------------------------------------------");consoleLog('Analyzing "'+conditionType+'" selector: '+selector);var parts=selector.match(/(^|,)([^,]+)/g);for(var n=0;n=|<|>|%=)([^,]+),?$/);if(!match)continue;var field=match[1];var operator=match[2];var value=match[3];var subfield="";var fields=[];var values=[];if(field.indexOf("|")>-1){consoleLog("OR field dependency: "+field);fields=field.split("|")}else{fields=[field]}var fieldAndSubfield=extractFieldAndSubfield(field);field=fieldAndSubfield.field;subfield=fieldAndSubfield.subfield;if(InputfieldDebugMode){consoleLog("Field: "+field);if(subfield.length)consoleLog("Subfield: "+subfield);consoleLog("Operator: "+operator);consoleLog("value: "+value)}if(value.indexOf("|")>-1){consoleLog("OR value dependency: "+value);values=value.split("|");for(var i=0;i> "+maxColHeight+" ("+h+")");if(h==maxColHeight)return;if($item.hasClass("InputfieldStateCollapsed"))return;var pad=maxColHeight-h;if(pad<0)pad=0;var $container=$item.children(".InputfieldContent, .ui-widget-content");if(pad==0){}else{consoleLog("Adjusting "+$item.attr("id")+" from "+h+" to "+maxColHeight);var $spacer=$("
");$container.append($spacer);$spacer.height(pad)}}function updateInputfieldRow($firstItem){var $items=$firstItem.nextUntil(".InputfieldColumnWidthFirst",".InputfieldColumnWidth:not(.InputfieldStateHidden)");var rowWidth=$firstItem.is(".InputfieldStateHidden")?0:getWidth($firstItem);var $item=$firstItem.is(".InputfieldStateHidden")?null:$firstItem;var itemWidth=$item==null?0:rowWidth;var numItems=$items.length;if($firstItem.is(".InputfieldStateHidden")){numItems--;var $leadItem=$items.eq(0)}else{var $leadItem=$firstItem}if(useHeights){$leadItem.find(".maxColHeightSpacer").remove();$items.find(".maxColHeightSpacer").remove()}var maxRowWidth=100-numItems*colspacing;var maxColHeight=useHeights?getHeight($leadItem):0;$items.removeClass("InputfieldColumnWidthFirstTmp");$items.each(function(){$item=$(this);itemWidth=getWidth($item);rowWidth+=itemWidth;if(useHeights){var h=getHeight($item);if(h>maxColHeight)maxColHeight=h}});if(useHeights){if(InputfieldDebugMode){var lab=$leadItem.find("label").text();consoleLog("maxColHeight: "+lab+" = "+maxColHeight)}if(maxColHeight>0){setHeight($leadItem,maxColHeight);$items.each(function(){setHeight($(this),maxColHeight)})}}if(rowWidth0&&itemWidthmaxRowWidth){consoleLog("Reduce width of row because rowWidth > maxRowWidth ("+rowWidth+" > "+maxRowWidth+")");if(!$firstItem.is(".InputfieldStateHidden"))$items=$firstItem.add($items);rowWidth=0;$items.each(function(){$item=$(this);itemWidth=getOriginalWidth($item);if(itemWidth>0)setWidth($item,itemWidth,false);rowWidth+=itemWidth});var leftoverWidth=maxRowWidth-rowWidth;itemWidth+=leftoverWidth;var originalWidth=getOriginalWidth($item);if(originalWidth>0&&itemWidth=pageTop;if(!inView)setTimeout(function(){jQuery("html, body").animate({scrollTop:$inputfield.offset().top-10},100)},100)}}function InputfieldToggle($inputfield,open,duration,completedCallback){if(!$inputfield.length)return;if(!$inputfield.hasClass("Inputfield"))$inputfield=$inputfield.closest(".Inputfield");var $header=$inputfield.children(".InputfieldHeader, .ui-widget-header");var $content=$inputfield.children(".InputfieldContent, .ui-widget-content");var $toggleIcon=$header.find(".toggle-icon");var isCollapsed=$inputfield.hasClass("InputfieldStateCollapsed");if($inputfield.hasClass("InputfieldAjaxLoading"))return false;if($inputfield.hasClass("InputfieldStateToggling"))return false;if(typeof open=="undefined"||open===null)var open=isCollapsed;if(typeof duration=="undefined")var duration=100;function completed(){if(typeof completedCallback!="undefined")completedCallback($inputfield,open,duration)}function toggled(){if($inputfield.css("overflow")=="hidden")$inputfield.css("overflow","");$toggleIcon.toggleClass($toggleIcon.attr("data-to"));$inputfield.removeClass("InputfieldStateToggling");setTimeout("InputfieldColumnWidths()",500);completed()}function opened(){$inputfield.trigger("opened");if($inputfield.hasClass("InputfieldColumnWidth")){$inputfield.children(".InputfieldContent").show()}if(!$inputfield.hasClass("InputfieldNoFocus"))InputfieldFocus($inputfield);toggled()}function closed(){if($inputfield.css("overflow")=="hidden")$inputfield.css("overflow","");$inputfield.trigger("closed");if($inputfield.hasClass("InputfieldColumnWidth")){$inputfield.children(".InputfieldContent").hide()}toggled()}if(open&&!$inputfield.is(":visible")){var $tabContent=$inputfield.parents(".InputfieldWrapper").last();if($tabContent.length&&!$tabContent.is(":visible")){var $tabButton=jQuery("#_"+$tabContent.attr("id"));if($tabButton.length){$tabContent.show();setTimeout(function(){$tabButton.click()},25)}}var $collapsedParent=$inputfield.closest(".InputfieldStateCollapsed");if($collapsedParent.length){InputfieldToggle($collapsedParent,true,duration,function($in){InputfieldToggle($in,true,duration,completedCallback)})}}if(open&&!isCollapsed){completed();return}if(!open&&isCollapsed){completed();return}if(isCollapsed&&($inputfield.hasClass("collapsed10")||$inputfield.hasClass("collapsed11"))){$toggleIcon.click();return}if(open&&isCollapsed){$inputfield.addClass("InputfieldStateToggling").trigger("openReady");$inputfield.toggleClass("InputfieldStateCollapsed",duration,opened)}else if(!open&&!isCollapsed){$inputfield.addClass("InputfieldStateToggling").trigger("closeReady");$inputfield.toggleClass("InputfieldStateCollapsed",duration,closed)}}function InputfieldOpen($inputfield,duration){InputfieldToggle($inputfield,true,duration)}function InputfieldClose($inputfield,duration){InputfieldToggle($inputfield,false,duration)}function InputfieldStates($target){var hasTarget=true;var $=jQuery;if(typeof $target=="undefined"){$target=$("body");hasTarget=false}function InputfieldStateAjaxClick($li){function headerHighlightEffect($header,$li){var $spinner=$("");var offset=$header.offset();var interval;var maxRuns=10;var runs=0;var hAdjust=.8;$("body").append($spinner.hide());if($header.is("a")&&$header.closest("ul").hasClass("uk-tab"))hAdjust=.1;$spinner.css({position:"absolute",top:offset.top-($spinner.height()+5),left:offset.left+$header.width()/2+$spinner.width()*hAdjust}).fadeIn();interval=setInterval(function(){if(++runs>maxRuns||!$li.hasClass("InputfieldAjaxLoading")){clearInterval(interval);$spinner.fadeOut("normal",function(){$spinner.remove()})}},500)}var $parent=$li.children(".InputfieldContent").children(".renderInputfieldAjax");var isTab=false;if(!$parent.length){$parent=$li.children(".renderInputfieldAjax");isTab=true}var ajaxURL=$parent.children("input").attr("value");if(typeof ajaxURL=="undefined"||ajaxURL.length<1)return false;var $spinner=null;if(isTab){var $header=$("#_"+$li.attr("id"));headerHighlightEffect($header,$li)}else{var $header=$li.children(".InputfieldHeader");$spinner=$("");$spinner.css("margin-left","0.5em");$header.append($spinner)}$li.removeClass("collapsed10 collapsed11").addClass("InputfieldAjaxLoading");$.get(ajaxURL,function(data){$li.removeClass("InputfieldAjaxLoading InputfieldStateCollapsed");var $icon=$li.children(".InputfieldHeader").find(".toggle-icon");if($icon.length)$icon.toggleClass($icon.attr("data-to"));$parent.replaceWith($(data)).hide();$parent.slideDown();var $inputfields=$li.find(".Inputfield");if($inputfields.length){$inputfields.trigger("reloaded",["InputfieldAjaxLoad"]);InputfieldStates($li);InputfieldRequirements($li);InputfieldColumnWidths()}else{$li.trigger("reloaded",["InputfieldAjaxLoad"]);InputfieldColumnWidths()}if($li.closest(".InputfieldFormNoDependencies").length==0){InputfieldDependencies($li.parent())}setTimeout(function(){if($spinner)$spinner.fadeOut("fast",function(){$spinner.remove()});if(isTab){$header.effect("highlight",500)}else{$header.click()}},500)},"html");return true}$(".Inputfield:not(.collapsed9) > .InputfieldHeader, .Inputfield:not(.collapsed9) > .ui-widget-header",$target).addClass("InputfieldStateToggle");var $icon=$(".Inputfields .InputfieldStateCollapsed > .InputfieldHeader i.toggle-icon, .Inputfields .InputfieldStateCollapsed > .ui-widget-header i.toggle-icon",$target);$icon.toggleClass($icon.attr("data-to"));if(typeof ProcessWire!="undefined"){var config=ProcessWire.config}if(typeof config!=="undefined"&&config.debug){$("label.InputfieldHeader > i.toggle-icon",$target).hover(function(){var $label=$(this).parent("label");if($label.length==0)return;var text=$label.attr("for").replace(/^Inputfield_/,"");if(text.length){var $tip=$(" "+text+" ");$tip.css("float","right");$label.append($tip)}},function(){var $label=$(this).parent("label");if($label.length==0)return;$label.find(".InputfieldNameTip").remove()})}if(hasTarget)return;$(document).on("wiretabclick",function(e,$newTab,$oldTab){if($newTab.hasClass("collapsed10"))InputfieldStateAjaxClick($newTab)});$(document).on("click",".InputfieldStateToggle, .toggle-icon",function(event,data){var $t=$(this);var $li=$t.closest(".Inputfield");var isIcon=$t.hasClass("toggle-icon");var $icon=isIcon?$t:$li.children(".InputfieldHeader, .ui-widget-header").find(".toggle-icon");var isCollapsed=$li.hasClass("InputfieldStateCollapsed");var wasCollapsed=$li.hasClass("InputfieldStateWasCollapsed");var duration=100;if(!$li.length)return;if($li.hasClass("InputfieldAjaxLoading"))return false;if($li.hasClass("InputfieldStateToggling"))return false;if(typeof data!="undefined"){if(typeof data.duration!="undefined")duration=data.duration}if(isCollapsed&&($li.hasClass("collapsed10")||$li.hasClass("collapsed11"))){if(InputfieldStateAjaxClick($li))return false}if(isCollapsed||wasCollapsed||isIcon){$li.addClass("InputfieldStateWasCollapsed");InputfieldToggle($li,null,duration)}else{if(typeof jQuery.ui!="undefined"){var color1=$icon.css("color");var color2=$li.children(".InputfieldHeader, .ui-widget-header").css("color");$icon.css("color",color2);$icon.effect("pulsate",300,function(){$icon.css("color",color1)})}InputfieldFocus($li)}return false});$("#content .InputfieldFormFocusFirst:not(.InputfieldFormNoFocus)").find("input[type=text]:enabled:first:not(.hasDatepicker):not(.InputfieldNoFocus)").each(function(){var $t=$(this);if($t.val())return;if($t.offset().top<$(window).height()){window.setTimeout(function(){if($t.is(":visible"))$t.focus()},250)}});$(document).on("change",".InputfieldFormConfirm :input, .InputfieldFormConfirm .Inputfield",function(){var $this=$(this);if($this.hasClass("Inputfield")){if(!$this.hasClass("InputfieldIgnoreChanges"))$this.addClass("InputfieldStateChanged");return false}else{if($this.hasClass("InputfieldIgnoreChanges")||$this.closest(".InputfieldIgnoreChanges").length)return false;$this.closest(".Inputfield").addClass("InputfieldStateChanged")}});$(document).on("submit",".InputfieldFormConfirm",function(){$(this).addClass("InputfieldFormSubmitted")});$(document).on("dragenter",".InputfieldHasUpload.InputfieldStateCollapsed",function(e){var dt=e.originalEvent.dataTransfer;if(dt.types&&(dt.types.indexOf?dt.types.indexOf("Files")!==-1:dt.types.contains("Files"))){InputfieldOpen($(this))}});window.addEventListener("beforeunload",InputfieldFormBeforeUnloadEvent)}function InputfieldIntentions(){var $=jQuery;$(".InputfieldForm").each(function(){var $form=$(this);var numButtons=null;var $input=null;$form.submit(function(){if(!$(this).hasClass("nosubmit"))return;if(!$input)return;var $buttons=null;var $inputfields=$input.closest(".Inputfields");do{$buttons=$inputfields.find("input[type=submit]:visible, button[type=submit]:visible");if($buttons.length>0)break;$inputfields=$inputfields.parent().closest(".Inputfields")}while($inputfields.length>0);if($buttons.length>0){var $button=$buttons.eq(0);$("html, body").animate({scrollTop:$button.offset().top},"fast");$button.focus()}return false}).on("focus","input, select",function(){if(numButtons===null)numButtons=$form.find("input[type=submit], button[type=submit]").length;if(numButtons<2)return;$form.addClass("nosubmit");$input=$(this)}).on("blur","input, select",function(){$form.removeClass("nosubmit")})});if($("input[type=file]").length){$(document).on({dragover:function(){if($(this).is("input[type=file]"))return;return false},drop:function(){if($(this).is("input[type=file]"))return;return false}})}}var InputfieldWindowResizeQueued=false;function InputfieldWindowResizeActions1(){consoleLog("InputfieldWindowResizeActions1()");jQuery(".Inputfield").trigger("resized")}function InputfieldWindowResizeActions2(){consoleLog("InputfieldWindowResizeActions2()");InputfieldColumnWidths();InputfieldWindowResizeQueued=false}function InputfieldRequirements($target){jQuery(":input[required]",$target).on("invalid",function(){var $input=jQuery(this);InputfieldFocus(jQuery(this))})}function InputfieldReloadEvent(event,extraData){var $t=$(this);var $form=$t.closest("form");var fieldName=$t.attr("id").replace("wrap_Inputfield_","");var fnsx="";var url=$form.attr("action");if(fieldName.indexOf("_repeater")>0){var $repeaterItem=$t.closest(".InputfieldRepeaterItem");var pageID=$repeaterItem.attr("data-page");url=url.replace(/\?id=\d+/,"?id="+pageID);fnsx=$repeaterItem.attr("data-fnsx");fieldName=fieldName.replace(/_repeater\d+$/,"")}url+=url.indexOf("?")>-1?"&":"?";url+="field="+fieldName+"&reloadInputfieldAjax="+fieldName;if(fnsx.length)url+="&fnsx="+fnsx;if(typeof extraData!="undefined"){if(typeof extraData["queryString"]!="undefined"){url+="&"+extraData["queryString"]}}consoleLog("Inputfield reload: "+fieldName);$.get(url,function(data){var id=$t.attr("id");var $content=jQuery(data).find("#"+id).children(".InputfieldContent");if(!$content.length&&id.indexOf("_repeater")>-1){id="wrap_Inputfield_"+fieldName;$content=jQuery(data).find("#"+id).children(".InputfieldContent");if(!$content.length){console.log("Unable to find #"+$t.attr("id")+" in response from "+url)}}$t.children(".InputfieldContent").html($content.html());$t.trigger("reloaded",["reload"])});event.stopPropagation()}function InputfieldsInit($target){InputfieldStates($target);InputfieldDependencies($target);InputfieldRequirements($target);setTimeout(function(){InputfieldColumnWidths()},100)}jQuery(document).ready(function($){InputfieldStates();InputfieldDependencies($(".InputfieldForm:not(.InputfieldFormNoDependencies)"));InputfieldIntentions();setTimeout(function(){InputfieldColumnWidths()},100);var windowResized=function(){if(InputfieldWindowResizeQueued)return;InputfieldWindowResizeQueued=true;setTimeout("InputfieldWindowResizeActions1()",1e3);setTimeout("InputfieldWindowResizeActions2()",2e3)};$(window).resize(windowResized);$("ul.WireTabs > li > a").click(function(){if(InputfieldWindowResizeQueued)return;InputfieldWindowResizeQueued=true;setTimeout("InputfieldWindowResizeActions1()",250);setTimeout("InputfieldWindowResizeActions2()",500);return true});InputfieldRequirements($(".InputfieldForm"));$(document).on("reload",".Inputfield",InputfieldReloadEvent);if($(".InputfieldForm:not(.InputfieldFormNoWidths)").length){$(document).on("change",".InputfieldColumnWidth :input",function(){InputfieldColumnWidths();setTimeout(InputfieldColumnWidths,300)});$(document).on("AjaxUploadDone",".InputfieldFileList",function(){InputfieldColumnWidths()});$(document).on("heightChanged",".InputfieldColumnWidth",function(){InputfieldColumnWidths()})}}); \ No newline at end of file +var InputfieldDebugMode=false;function consoleLog(note){if(InputfieldDebugMode)console.log(note)}var InputfieldDependenciesProcessing=false;function InputfieldDependencies($target){var $=jQuery;if(InputfieldDependenciesProcessing)return;if(typeof $target=="undefined"){var $target=$(".InputfieldForm:not(.InputfieldFormNoDependencies)")}else if($target.hasClass("InputfieldForm")){if($target.hasClass("InputfieldFormNoDependencies"))return}else{if($target.closest(".InputfieldFormNoDependencies").length>0)return}function trimValue(value){value=jQuery.trim(value);var first=value.substring(0,1);var last=value.substring(value.length-1,value.length);if((first=='"'||first=="'")&&first==last)value=value.substring(1,value.length-1);return value}function trimParseValue(value){return parseValue(trimValue(value))}function extractFieldAndSubfield(field){var subfield="";var dot=field.indexOf(".");if(dot>0){subfield=field.substring(dot+1);field=field.substring(0,dot)}return{field:field,subfield:subfield}}function parseValue(str,str2){str=jQuery.trim(str);if(str.length>0&&!jQuery.isNumeric(str)){return str}if(str.length==0){var t=typeof str2;if(t!="undefined"){if(t=="integer")return 0;if(t=="float")return 0;return str}else{return str}}var dot1=str.indexOf(".");var dot2=str.lastIndexOf(".");if(dot1==-1&&/^-?\d+$/.test(str)){return parseInt(str)}if(dot2>-1&&dot1!=dot2){return str}if(/^-?[\d.]+$/.test(str)){return parseFloat(str)}return str}function matchValue(field,operator,value,conditionValue){var matched=0;switch(operator){case"=":if(value==conditionValue)matched++;break;case"!=":if(value!=conditionValue)matched++;break;case">":if(value>conditionValue)matched++;break;case"<":if(value=":if(value>=conditionValue)matched++;break;case"<=":if(value<=conditionValue)matched++;break;case"*=":case"%=":if(value.indexOf(conditionValue)>-1)matched++;break}consoleLog("Field "+field+" - Current value: "+value);consoleLog("Field "+field+" - Matched? "+(matched>0?"YES":"NO"));return matched}function getCheckboxFieldAndValue(condition,conditionField,conditionSubfield){var $field=null;var value;consoleLog("getCheckboxFieldAndValue(see-next-line, "+conditionField+", "+conditionSubfield+")");consoleLog(condition);if(conditionSubfield=="count"||conditionSubfield=="count-checkbox"){consoleLog("Using count checkbox condition");$field=$("#wrap_Inputfield_"+conditionField+" :input");if($field.length){value=$("#wrap_Inputfield_"+conditionField+" :checked").length;condition.subfield="count-checkbox";return{field:$field,value:value,condition:condition}}return null}consoleLog("Using checkbox value or label comparison option");value=[];for(var i=0;i0)consoleLog("Subfield: "+condition.subfield);consoleLog("Operator: "+condition.operator);consoleLog("Required value: "+condition.value)}var matched=0;for(var fn=0;fn=numMatchesRequired)break}consoleLog("----");if(condition.type=="show"){if(matched>=numMatchesRequired){}else{show=false}}else if(condition.type=="required"){if(matched>0){requiredMatches++}else{notRequiredMatches++}}}var required=requiredMatches>0&¬RequiredMatches==0;if(show){consoleLog('Determined that field "'+fieldNameToShow+'" should be visible.');if($fieldToShow.is(".InputfieldStateHidden")){$fieldToShow.removeClass("InputfieldStateHidden").show();$(document).trigger("showInputfield",$fieldToShow);numVisibilityChanges++;consoleLog("Field is now visible.")}else{consoleLog("Field is already visible.")}}else{consoleLog('Determined that field "'+fieldNameToShow+'" should be hidden.');if(!$fieldToShow.is(".InputfieldStateHidden")){$fieldToShow.addClass("InputfieldStateHidden").hide();$(document).trigger("hideInputfield",$fieldToShow);consoleLog("Field is now hidden.");numVisibilityChanges++}else{consoleLog("Field is already hidden.")}if(required){consoleLog("Field is required but cancelling that since it is not visible.");required=false}}if(required&&requiredMatches>0){consoleLog('Determined that field "'+fieldNameToShow+'" should be required.');$fieldToShow.addClass("InputfieldStateRequired").find(":input:visible[type!=hidden]").addClass("required")}else if(!required&¬RequiredMatches>0){consoleLog('Determined that field "'+fieldNameToShow+'" should not be required.');$fieldToShow.removeClass("InputfieldStateRequired").find(":input.required").removeClass("required")}if(numVisibilityChanges>0){consoleLog(numVisibilityChanges+" visibility changes were made.");InputfieldColumnWidths();$(window).resize()}InputfieldDependenciesProcessing=false}function setupConditions(conditionType,conditions,$fieldToShow){var selector=$fieldToShow.attr("data-"+conditionType+"-if");if(!selector||selector.length<1){return conditions}selector=$("
").html(selector).text();consoleLog("-------------------------------------------------------------------");consoleLog('Analyzing "'+conditionType+'" selector: '+selector);var parts=selector.match(/(^|,)([^,]+)/g);for(var n=0;n=|<|>|%=)([^,]+),?$/);if(!match)continue;var field=match[1];var operator=match[2];var value=match[3];var subfield="";var fields=[];var values=[];if(field.indexOf("|")>-1){consoleLog("OR field dependency: "+field);fields=field.split("|")}else{fields=[field]}var fieldAndSubfield=extractFieldAndSubfield(field);field=fieldAndSubfield.field;subfield=fieldAndSubfield.subfield;if(InputfieldDebugMode){consoleLog("Field: "+field);if(subfield.length)consoleLog("Subfield: "+subfield);consoleLog("Operator: "+operator);consoleLog("value: "+value)}if(value.indexOf("|")>-1){consoleLog("OR value dependency: "+value);values=value.split("|");for(var i=0;i> "+maxColHeight+" ("+h+")");if(h==maxColHeight)return;if($item.hasClass("InputfieldStateCollapsed"))return;var pad=maxColHeight-h;if(pad<0)pad=0;var $container=$item.children(".InputfieldContent, .ui-widget-content");if(pad==0){}else{consoleLog("Adjusting "+$item.attr("id")+" from "+h+" to "+maxColHeight);var $spacer=$("
");$container.append($spacer);$spacer.height(pad)}}function updateInputfieldRow($firstItem){var $items=$firstItem.nextUntil(".InputfieldColumnWidthFirst",".InputfieldColumnWidth:not(.InputfieldStateHidden)");var rowWidth=$firstItem.is(".InputfieldStateHidden")?0:getWidth($firstItem);var $item=$firstItem.is(".InputfieldStateHidden")?null:$firstItem;var itemWidth=$item==null?0:rowWidth;var numItems=$items.length;if($firstItem.is(".InputfieldStateHidden")){numItems--;var $leadItem=$items.eq(0)}else{var $leadItem=$firstItem}if(useHeights){$leadItem.find(".maxColHeightSpacer").remove();$items.find(".maxColHeightSpacer").remove()}var maxRowWidth=100-numItems*colspacing;var maxColHeight=useHeights?getHeight($leadItem):0;$items.removeClass("InputfieldColumnWidthFirstTmp");$items.each(function(){$item=$(this);itemWidth=getWidth($item);rowWidth+=itemWidth;if(useHeights){var h=getHeight($item);if(h>maxColHeight)maxColHeight=h}});if(useHeights){if(InputfieldDebugMode){var lab=$leadItem.find("label").text();consoleLog("maxColHeight: "+lab+" = "+maxColHeight)}if(maxColHeight>0){setHeight($leadItem,maxColHeight);$items.each(function(){setHeight($(this),maxColHeight)})}}if(rowWidth0&&itemWidthmaxRowWidth){consoleLog("Reduce width of row because rowWidth > maxRowWidth ("+rowWidth+" > "+maxRowWidth+")");if(!$firstItem.is(".InputfieldStateHidden"))$items=$firstItem.add($items);rowWidth=0;$items.each(function(){$item=$(this);itemWidth=getOriginalWidth($item);if(itemWidth>0)setWidth($item,itemWidth,false);rowWidth+=itemWidth});var leftoverWidth=maxRowWidth-rowWidth;itemWidth+=leftoverWidth;var originalWidth=getOriginalWidth($item);if(originalWidth>0&&itemWidth=pageTop;if(!inView)setTimeout(function(){jQuery("html, body").animate({scrollTop:$inputfield.offset().top-10},100)},100)}}function InputfieldToggle($inputfield,open,duration,completedCallback){if(!$inputfield.length)return;if(!$inputfield.hasClass("Inputfield"))$inputfield=$inputfield.closest(".Inputfield");var $header=$inputfield.children(".InputfieldHeader, .ui-widget-header");var $content=$inputfield.children(".InputfieldContent, .ui-widget-content");var $toggleIcon=$header.find(".toggle-icon");var isCollapsed=$inputfield.hasClass("InputfieldStateCollapsed");if($inputfield.hasClass("InputfieldAjaxLoading"))return false;if($inputfield.hasClass("InputfieldStateToggling"))return false;if(typeof open=="undefined"||open===null)var open=isCollapsed;if(typeof duration=="undefined")var duration=100;function completed(){if(typeof completedCallback!="undefined")completedCallback($inputfield,open,duration)}function toggled(){if($inputfield.css("overflow")=="hidden")$inputfield.css("overflow","");$toggleIcon.toggleClass($toggleIcon.attr("data-to"));$inputfield.removeClass("InputfieldStateToggling");setTimeout("InputfieldColumnWidths()",500);completed()}function opened(){$inputfield.trigger("opened");if($inputfield.hasClass("InputfieldColumnWidth")){$inputfield.children(".InputfieldContent").show()}if(!$inputfield.hasClass("InputfieldNoFocus"))InputfieldFocus($inputfield);toggled()}function closed(){if($inputfield.css("overflow")=="hidden")$inputfield.css("overflow","");$inputfield.trigger("closed");if($inputfield.hasClass("InputfieldColumnWidth")){$inputfield.children(".InputfieldContent").hide()}toggled()}if(open&&!$inputfield.is(":visible")){var $tabContent=$inputfield.parents(".InputfieldWrapper").last();if($tabContent.length&&!$tabContent.is(":visible")){var $tabButton=jQuery("#_"+$tabContent.attr("id"));if($tabButton.length){$tabContent.show();setTimeout(function(){$tabButton.click()},25)}}var $collapsedParent=$inputfield.closest(".InputfieldStateCollapsed");if($collapsedParent.length){InputfieldToggle($collapsedParent,true,duration,function($in){InputfieldToggle($in,true,duration,completedCallback)})}}if(open&&!isCollapsed){completed();return}if(!open&&isCollapsed){completed();return}if(isCollapsed&&($inputfield.hasClass("collapsed10")||$inputfield.hasClass("collapsed11"))){$toggleIcon.click();return}if(open&&isCollapsed){$inputfield.addClass("InputfieldStateToggling").trigger("openReady");$inputfield.toggleClass("InputfieldStateCollapsed",duration,opened)}else if(!open&&!isCollapsed){$inputfield.addClass("InputfieldStateToggling").trigger("closeReady");$inputfield.toggleClass("InputfieldStateCollapsed",duration,closed)}}function InputfieldOpen($inputfield,duration){InputfieldToggle($inputfield,true,duration)}function InputfieldClose($inputfield,duration){InputfieldToggle($inputfield,false,duration)}function InputfieldStates($target){var hasTarget=true;var $=jQuery;if(typeof $target=="undefined"){$target=$("body");hasTarget=false}function InputfieldStateAjaxClick($li){function headerHighlightEffect($header,$li){var $spinner=$("");var offset=$header.offset();var interval;var maxRuns=10;var runs=0;var hAdjust=.8;$("body").append($spinner.hide());if($header.is("a")&&$header.closest("ul").hasClass("uk-tab"))hAdjust=.1;$spinner.css({position:"absolute",top:offset.top-($spinner.height()+5),left:offset.left+$header.width()/2+$spinner.width()*hAdjust}).fadeIn();interval=setInterval(function(){if(++runs>maxRuns||!$li.hasClass("InputfieldAjaxLoading")){clearInterval(interval);$spinner.fadeOut("normal",function(){$spinner.remove()})}},500)}var $parent=$li.children(".InputfieldContent").children(".renderInputfieldAjax");var isTab=false;if(!$parent.length){$parent=$li.children(".renderInputfieldAjax");isTab=true}var ajaxURL=$parent.children("input").attr("value");if(typeof ajaxURL=="undefined"||ajaxURL.length<1)return false;var $spinner=null;if(isTab){var $header=$("#_"+$li.attr("id"));headerHighlightEffect($header,$li)}else{var $header=$li.children(".InputfieldHeader");$spinner=$("");$spinner.css("margin-left","0.5em");$header.append($spinner)}$li.removeClass("collapsed10 collapsed11").addClass("InputfieldAjaxLoading");$.get(ajaxURL,function(data){$li.removeClass("InputfieldAjaxLoading InputfieldStateCollapsed");var $icon=$li.children(".InputfieldHeader").find(".toggle-icon");if($icon.length)$icon.toggleClass($icon.attr("data-to"));$parent.replaceWith($(data)).hide();$parent.slideDown();var $inputfields=$li.find(".Inputfield");if($inputfields.length){$inputfields.trigger("reloaded",["InputfieldAjaxLoad"]);InputfieldStates($li);InputfieldRequirements($li);InputfieldColumnWidths()}else{$li.trigger("reloaded",["InputfieldAjaxLoad"]);InputfieldColumnWidths()}if($li.closest(".InputfieldFormNoDependencies").length==0){InputfieldDependencies($li.parent())}setTimeout(function(){if($spinner)$spinner.fadeOut("fast",function(){$spinner.remove()});if(isTab){$header.effect("highlight",500)}else{$header.click()}},500)},"html");return true}$(".Inputfield:not(.collapsed9) > .InputfieldHeader, .Inputfield:not(.collapsed9) > .ui-widget-header",$target).addClass("InputfieldStateToggle");var $icon=$(".Inputfields .InputfieldStateCollapsed > .InputfieldHeader i.toggle-icon, .Inputfields .InputfieldStateCollapsed > .ui-widget-header i.toggle-icon",$target);$icon.toggleClass($icon.attr("data-to"));if(typeof ProcessWire!="undefined"){var config=ProcessWire.config}if(typeof config!=="undefined"&&config.debug){$("label.InputfieldHeader > i.toggle-icon",$target).hover(function(){var $label=$(this).parent("label");if($label.length==0)return;var text=$label.attr("for").replace(/^Inputfield_/,"");if(text.length){var $tip=$(" "+text+" ");$tip.css("float","right");$label.append($tip)}},function(){var $label=$(this).parent("label");if($label.length==0)return;$label.find(".InputfieldNameTip").remove()})}if(hasTarget)return;$(document).on("wiretabclick",function(e,$newTab,$oldTab){if($newTab.hasClass("collapsed10"))InputfieldStateAjaxClick($newTab)});$(document).on("click",".InputfieldStateToggle, .toggle-icon",function(event,data){var $t=$(this);var $li=$t.closest(".Inputfield");var isIcon=$t.hasClass("toggle-icon");var $icon=isIcon?$t:$li.children(".InputfieldHeader, .ui-widget-header").find(".toggle-icon");var isCollapsed=$li.hasClass("InputfieldStateCollapsed");var wasCollapsed=$li.hasClass("InputfieldStateWasCollapsed");var duration=100;if(!$li.length)return;if($li.hasClass("InputfieldAjaxLoading"))return false;if($li.hasClass("InputfieldStateToggling"))return false;if(typeof data!="undefined"){if(typeof data.duration!="undefined")duration=data.duration}if(isCollapsed&&($li.hasClass("collapsed10")||$li.hasClass("collapsed11"))){if(InputfieldStateAjaxClick($li))return false}if(isCollapsed||wasCollapsed||isIcon){$li.addClass("InputfieldStateWasCollapsed");InputfieldToggle($li,null,duration)}else{if(typeof jQuery.ui!="undefined"){var color1=$icon.css("color");var color2=$li.children(".InputfieldHeader, .ui-widget-header").css("color");$icon.css("color",color2);$icon.effect("pulsate",300,function(){$icon.css("color",color1)})}InputfieldFocus($li)}return false});$("#content .InputfieldFormFocusFirst:not(.InputfieldFormNoFocus)").find("input[type=text]:enabled:first:not(.hasDatepicker):not(.InputfieldNoFocus)").each(function(){var $t=$(this);if($t.val())return;if($t.offset().top<$(window).height()){window.setTimeout(function(){if($t.is(":visible"))$t.focus()},250)}});$(document).on("change",".InputfieldFormConfirm :input, .InputfieldFormConfirm .Inputfield",function(){var $this=$(this);if($this.hasClass("Inputfield")){if(!$this.hasClass("InputfieldIgnoreChanges"))$this.addClass("InputfieldStateChanged");return false}else{if($this.hasClass("InputfieldIgnoreChanges")||$this.closest(".InputfieldIgnoreChanges").length)return false;$this.closest(".Inputfield").addClass("InputfieldStateChanged")}});$(document).on("submit",".InputfieldFormConfirm",function(){$(this).addClass("InputfieldFormSubmitted")});$(document).on("dragenter",".InputfieldHasUpload.InputfieldStateCollapsed",function(e){var dt=e.originalEvent.dataTransfer;if(dt.types&&(dt.types.indexOf?dt.types.indexOf("Files")!==-1:dt.types.contains("Files"))){InputfieldOpen($(this))}});window.addEventListener("beforeunload",InputfieldFormBeforeUnloadEvent)}function InputfieldIntentions(){var $=jQuery;$(".InputfieldForm").each(function(){var $form=$(this);var numButtons=null;var $input=null;$form.submit(function(){if(!$(this).hasClass("nosubmit"))return;if(!$input)return;var $buttons=null;var $inputfields=$input.closest(".Inputfields");do{$buttons=$inputfields.find("input[type=submit]:visible, button[type=submit]:visible");if($buttons.length>0)break;$inputfields=$inputfields.parent().closest(".Inputfields")}while($inputfields.length>0);if($buttons.length>0){var $button=$buttons.eq(0);$("html, body").animate({scrollTop:$button.offset().top},"fast");$button.focus()}return false}).on("focus","input, select",function(){if(numButtons===null)numButtons=$form.find("input[type=submit], button[type=submit]").length;if(numButtons<2)return;$form.addClass("nosubmit");$input=$(this)}).on("blur","input, select",function(){$form.removeClass("nosubmit")})});if($("input[type=file]").length){$(document).on({dragover:function(){if($(this).is("input[type=file]"))return;return false},drop:function(){if($(this).is("input[type=file]"))return;return false}})}}var InputfieldWindowResizeQueued=false;function InputfieldWindowResizeActions1(){consoleLog("InputfieldWindowResizeActions1()");jQuery(".Inputfield").trigger("resized")}function InputfieldWindowResizeActions2(){consoleLog("InputfieldWindowResizeActions2()");InputfieldColumnWidths();InputfieldWindowResizeQueued=false}function InputfieldRequirements($target){jQuery(":input[required]",$target).on("invalid",function(){var $input=jQuery(this);InputfieldFocus(jQuery(this))})}function InputfieldReloadEvent(event,extraData){var $t=$(this);var $form=$t.closest("form");var fieldName=$t.attr("id").replace("wrap_Inputfield_","");var fnsx="";var url=$form.attr("action");if(fieldName.indexOf("_repeater")>0){var $repeaterItem=$t.closest(".InputfieldRepeaterItem");var pageID=$repeaterItem.attr("data-page");url=url.replace(/\?id=\d+/,"?id="+pageID);fnsx=$repeaterItem.attr("data-fnsx");fieldName=fieldName.replace(/_repeater\d+$/,"")}url+=url.indexOf("?")>-1?"&":"?";url+="field="+fieldName+"&reloadInputfieldAjax="+fieldName;if(fnsx.length)url+="&fnsx="+fnsx;if(typeof extraData!="undefined"){if(typeof extraData["queryString"]!="undefined"){url+="&"+extraData["queryString"]}}consoleLog("Inputfield reload: "+fieldName);$.get(url,function(data){var id=$t.attr("id");var $content=jQuery(data).find("#"+id).children(".InputfieldContent");if(!$content.length&&id.indexOf("_repeater")>-1){id="wrap_Inputfield_"+fieldName;$content=jQuery(data).find("#"+id).children(".InputfieldContent");if(!$content.length){console.log("Unable to find #"+$t.attr("id")+" in response from "+url)}}$t.children(".InputfieldContent").html($content.html());$t.trigger("reloaded",["reload"])});event.stopPropagation()}function InputfieldsInit($target){InputfieldStates($target);InputfieldDependencies($target);InputfieldRequirements($target);setTimeout(function(){InputfieldColumnWidths()},100)}jQuery(document).ready(function($){InputfieldStates();InputfieldDependencies($(".InputfieldForm:not(.InputfieldFormNoDependencies)"));InputfieldIntentions();setTimeout(function(){InputfieldColumnWidths()},100);var windowResized=function(){if(InputfieldWindowResizeQueued)return;InputfieldWindowResizeQueued=true;setTimeout("InputfieldWindowResizeActions1()",1e3);setTimeout("InputfieldWindowResizeActions2()",2e3)};$(window).resize(windowResized);$("ul.WireTabs > li > a").click(function(){if(InputfieldWindowResizeQueued)return;InputfieldWindowResizeQueued=true;setTimeout("InputfieldWindowResizeActions1()",250);setTimeout("InputfieldWindowResizeActions2()",500);return true});InputfieldRequirements($(".InputfieldForm"));$(document).on("reload",".Inputfield",InputfieldReloadEvent);if($(".InputfieldForm:not(.InputfieldFormNoWidths)").length){$(document).on("change",".InputfieldColumnWidth :input",function(){InputfieldColumnWidths();setTimeout(InputfieldColumnWidths,300)});$(document).on("AjaxUploadDone",".InputfieldFileList",function(){InputfieldColumnWidths()});$(document).on("heightChanged",".InputfieldColumnWidth",function(){InputfieldColumnWidths()})}}); \ No newline at end of file