forms-angular 0.12.0-beta.287 → 0.12.0-beta.289
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -4159,6 +4159,10 @@ var fng;
|
|
|
4159
4159
|
else {
|
|
4160
4160
|
for (var listElm in $scope.listSchema) {
|
|
4161
4161
|
if ($scope.listSchema.hasOwnProperty(listElm)) {
|
|
4162
|
+
var listVal = $scope.getListData($scope.record, $scope.listSchema[listElm].name);
|
|
4163
|
+
if (typeof listVal === "object") {
|
|
4164
|
+
return;
|
|
4165
|
+
}
|
|
4162
4166
|
title += $scope.getListData($scope.record, $scope.listSchema[listElm].name) + ' ';
|
|
4163
4167
|
}
|
|
4164
4168
|
}
|
|
@@ -4418,6 +4422,9 @@ var fng;
|
|
|
4418
4422
|
$scope.showError(data);
|
|
4419
4423
|
}
|
|
4420
4424
|
}, function (err) {
|
|
4425
|
+
if (err.data.message.match(/^No matching document found for id "[0-9a-f]{24}" version [\d]+ modifiedPaths "/)) {
|
|
4426
|
+
err.data.message = "This record has been modified by somebody else since it was read. To prevent your change overwriting theirs your update has been rejected. You will have to refresh the form and re-do your work. Sorry for the inconvenience.";
|
|
4427
|
+
}
|
|
4421
4428
|
$scope.handleHttpError(err);
|
|
4422
4429
|
});
|
|
4423
4430
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var __spreadArray=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,a=0,i=t.length;a<i;a++)!r&&a in t||((r=r||Array.prototype.slice.call(t,0,a))[a]=t[a]);return e.concat(r||Array.prototype.slice.call(t))};!function(s){var e;function t(n){return{restrict:"AE",replace:!0,link:function(e,t){t.replaceWith(n(' <a ng-show="choice.text || choice.textFunc" class="dropdown-option" ng-href="{{choice.url || choice.urlFunc()}}" ng-click="doClick($index, $event, choice)"> {{ choice.text || choice.textFunc() }} </a>')(e))}}}function n(a){return{restrict:"AE",replace:!0,link:function(e,t){var n=t[0].parentElement,r=a(' <a ng-show="choice.text || choice.textFunc" class="dropdown-option open-sub-menu" data-ng-mouseenter="mouseenter()"> {{ choice.text || choice.textFunc() }} </a> <ul class="uib-dropdown-menu dropdown-menu sub-menu"> <li ng-repeat="choice in choice.items" ng-attr-id="{{choice.id}}"> <drop-down-item data-ng-if="::!choice.items"></drop-down-item> <drop-down-sub-menu data-ng-if="::choice.items"></drop-down-sub-menu> </li> </ul>')(e);t.replaceWith(r),e.mouseenter=function(){var e=n.getBoundingClientRect(),t=r[2].getBoundingClientRect().height-5;t>e.top&&(t-=t-e.top+e.height),t-=e.height,r[2].style.top="-".concat(t,"px")}}}}function r(e){var t,n,r="isHidden($index)",a='ng-class="dropdownClass($index)"',i="normal"!==s.formsAngular.elemSecurityFuncBinding,o=i?"::":"";return e.canDoSecurity("hidden")?(t='ng-if="contextMenuId && !contextMenuHidden" '.concat(e.getHideableAttrs("{{ ::contextMenuId }}")),i?r='ng-if="::(choice.divider || !isSecurelyHidden(choice.id))" ng-hide="'.concat(r,'"'):"normal"===s.formsAngular.elemSecurityFuncBinding&&(r='ng-hide="'.concat(r,' || (!choice.divider && isSecurelyHidden(choice.id))"')),r+=" ".concat(e.getHideableAttrs("{{ ::choice.id }}"))):(t="",r='ng-hide="'.concat(r,'"')),e.canDoSecurity("disabled")?(n='disableable-link ng-disabled="contextMenuDisabled" '.concat(e.getDisableableAttrs("{{ ::contextMenuId }}")),a+=' class="{{ '.concat(o,"(!choice.divider && isSecurelyDisabled(choice.id)) ? 'disabled' : 'normal' }}\" ").concat(e.getDisableableAttrs("{{ ::choice.id }}"))):n="",{restrict:"AE",replace:!0,template:'<li id="{{ contextMenuId }}" ng-show="items.length > 0" class="mcdd" uib-dropdown '.concat(t," ").concat(n,">")+' <a href="#" id="context-menu-sel" uib-dropdown-toggle> {{contextMenu}} <b class="caret"></b> </a> <ul class="uib-dropdown-menu dropdown-menu">'+' <li ng-repeat="choice in items" ng-attr-id="{{choice.id}}" '.concat(r," ").concat(a,">")+' <drop-down-item data-ng-if="!choice.items"></drop-down-item> <drop-down-sub-menu data-ng-if="choice.items"></drop-down-sub-menu> </li> </ul></li>'}}e=s.directives||(s.directives={}),t.$inject=["$compile"],n.$inject=["$compile"],r.$inject=["SecurityService"],e.dropDownItem=t,e.dropDownSubMenu=n,e.modelControllerDropdown=r}(fng=fng||{}),function(e){var t;function n(e){return{restrict:"E",templateUrl:"error-display-"+e.framework()+".html"}}t=e.directives||(e.directives={}),n.$inject=["CssFrameworkService"],t.errorDisplay=n}(fng=fng||{}),function(e){var t;function n(a){a.checkNotModal=function(){for(var e,t=a.element[0],n=!1,r={preventDefault:angular.noop,stopPropagation:angular.noop,target:1,currentTarget:1};(e=t.parentNode)?"function"==typeof e.getAttribute&&e.getAttribute("uib-modal-window")?(angular.element(t).scope().close(r),n=!0):t=e:n=!0,!n;);}}t=e.controllers||(e.controllers={}),n.$inject=["$scope"],t.LinkCtrl=n}(fng=fng||{}),function(e){var t;function n(p,m){return{restrict:"E",scope:{dataSrc:"&model"},link:function(n,e,r){var a=r.ref,t=r.text&&unescape(r.text)!==r.text,i=r.form,o=r.linktab;if(n.readonly=r.readonly,n.element=e,i=i?i+"/":"",o=o?"/"+o:"",t){for(var s=n,l="";"function"!=typeof s.baseSchema&&s.$parent;){if(void 0!==s.$index)throw new Error("No support for $index at this level - "+l);s=s.$parent,l+="$parent."}var c,d=r.fld,u=d.split(".");c=n.$parent.subDoc&&(n.$parent.subDoc[d]||n.$parent.subDoc[u[u.length-1]])?n.$parent.subDoc[d]?l+"subDoc."+d:l+"subDoc."+u[u.length-1]:l+"record"+(d=void 0!==s.$index?(d=u.pop(),u.join(".")+"["+s.$index+"]."+d):"."+d),n.$watch(c,function(e){if(e){if(/^[a-f0-9]{24}/.test(e.toString()))e=e.slice(0,24);else if(e.id&&/^[a-f0-9]{24}/.test(e.id))e=e.id.slice(0,24);else if(n.$parent["f_"+r.fld+"Options"]){var t=n.$parent["f_"+r.fld+"Options"].indexOf(e);e=-1<t?n.$parent["f_"+r.fld+"_ids"][t]:void 0}else e=void 0;n.link=e?p.buildUrl(a+"/"+i+(e.id||e)+"/edit"+o):void 0}else n.link=void 0},!0)}else{r.text&&0<r.text.length&&(n.text=r.text);var f=n.$parent.$index;n.$watch("dataSrc()",function(e){e&&(void 0!==f&&angular.isArray(e)&&(e=e[f]),n.link=p.buildUrl(a+"/"+i+e+"/edit"+o),n.text||m.getListAttributes(a,e).then(function(e){var t=e.data;!1===t.success?n.text=t.err:n.text=t.list},function(e){n.text="Error "+e.status+": "+e.data}))},!0)}},controller:"LinkCtrl",template:function(e,t){function n(e){return'<a ng-click="checkNotModal()" ng-href="{{ link || \'#\' }}" class="fng-link">'.concat(e,"</a>")}return t.readonly?'<span class="fng-link">{{text}}</span>':t.text&&unescape(t.text)!==t.text?n(unescape(t.text)):n("{{text}}")}}}t=e.directives||(e.directives={}),n.$inject=["RoutingService","SubmissionsService"],t.fngLink=n}(fng=fng||{}),function(e){var t;function n(e){return{restrict:"A",templateUrl:"form-button-"+e.framework()+".html"}}t=e.directives||(e.directives={}),n.$inject=["CssFrameworkService"],t.formButtons=n}(fng=fng||{}),function(e){var t,P,n;function r(L,T,O,R,j,M,U,f){return{restrict:"EA",link:function(x,k,w){function D(t,e,n,r){function a(){var e;if(Array.isArray(x[t.options]))e={repeat:t.options,value:"option"};else{if(!x[t.options]||!Array.isArray(x[t.options].values))throw new Error("Invalid enumeration setup in field "+t.name);e=Array.isArray(x[t.options].labels)?{repeat:t.options+".values",value:t.options+".values[$index]",label:t.options+".labels[$index]"}:{repeat:t.options+".values",value:t.options+".values[$index]"}}return e}var i,o=t.id;if((t.array||r.subschema)&&(o=U.generateArrayElementIdString(o,t,r)),!e){var s=(r.model||"record")+".";if(e=s,r.subschema&&-1!==t.name.indexOf(".")){var l=t.name,c=r.subschemaroot,d=l.slice(c.length+1);r.index?o="f_"+(e+=c+"["+r.index+"]."+d).slice(s.length).replace(/(\.|\[|]\.)/g,"-"):(e+=c,r.subkey?(o=e.slice(s.length).replace(/\./g,"-")+"-subkey"+r.subkeyno+"-"+d,e+="[$_arrayOffset_"+c.replace(/\./g,"_")+"_"+r.subkeyno+"]."+d):(e+="[$index]."+d,i=l.replace(/\./g,"-")))}else e+=t.name}var u,f,p=U.allInputsVars(x,t,r,e,o,i),m=p.common,h=(n=n||t.required)?" required ":"";switch(t.type){case"select":t.select2?u='<input placeholder="fng-select2 has been removed" readonly>':(m+=U.handleReadOnlyDisabled(t,x).join(" "),m+=t.add?" "+t.add+" ":"",m+=' aria-label="'.concat(t.label&&""!==t.label?t.label:t.name,'" '),u="<select "+m+'class="'+p.formControl.trim()+p.compactClass+p.sizeClassBS2+'" '+h+">",n||(u+='<option value="">'+(t.placeHolder||"")+"</option>"),angular.isArray(t.options)?angular.forEach(t.options,function(e){_.isObject(e)?u+='<option value="'+(e.val||e.id)+'">'+(e.label||e.text)+"</option>":u+="<option>"+e+"</option>"}):(f=a(),u+='<option ng-repeat="option in '+f.repeat+'"',f.label?u+=' value="{{'+f.value+'}}"> {{ '+f.label+" }} </option> ":u+=">{{"+f.value+"}}</option> "),u+="</select>");break;case"link":u='<fng-link model="'+e+'" ref="'+t.ref+'"',t.form&&(u+=' form="'+t.form+'"'),t.linktab&&(u+=' linktab="'+t.linktab+'"'),t.linktext&&(u+=' text="'+t.linktext+'"'),t.readonly&&("boolean"==typeof t.readonly?u+=' readonly="true"':u+=' ng-readonly="'.concat(t.readonly,'"')),u+="></fng-link>";break;case"radio":u="",m+=h,m+=U.handleReadOnlyDisabled(t,x).join(" "),m+=t.add?" "+t.add+" ":"";var v="vertical"===r.formstyle||"inline"!==r.formstyle&&!t.inlineRadio;if(angular.isArray(t.options)){var g;r.subschema&&(m=(m=m.replace('name="','name="{{$index}}-')).replace('id="','id="{{$index}}-')),angular.forEach(t.options,function(e,t){g=m.replace('id="','id="'+t+"-"),u+="<input ".concat(g,' type="radio" aria-label="').concat(e,'" value="').concat(e,'">').concat(e),v&&(u+="<br />")})}else{var b=v?"div":"span";r.subschema&&(m=m.replace("$index","$parent.$index").replace('name="','name="{{$parent.$index}}-').replace('id="','id="{{$parent.$index}}-')),f=a(),u+="<"+b+' ng-repeat="option in '+f.repeat+'">',u+="<input ".concat(m.replace('id="','id="{{$index}}-'),' type="radio" aria-label="').concat(f.value,'" value="{{ ').concat(f.value,' }}"> {{ ').concat(f.label||f.value," }} </").concat(b,"> ")}break;case"checkbox":m+=h,m+=U.handleReadOnlyDisabled(t,x).join(" "),m+=t.add?" "+t.add+" ":"",u=U.generateSimpleInput(m,t,r),"bs3"===j.framework()&&(u='<div class="checkbox">'+u+"</div>");break;default:m+=U.addTextInputMarkup(p,t,h),m+=U.handleReadOnlyDisabled(t,x).join(" "),u="textarea"===t.type?(t.rows&&("auto"===t.rows?m+='msd-elastic="\n" class="ng-animate" ':m+='rows = "'+t.rows+'" '),"ckEditor"===t.editor&&(console.log('Deprecation Warning: "editor" property deprecated - use "add"'),m+='ckeditor = "" ',"bs3"===j.framework()&&(p.sizeClassBS3="col-xs-12")),"<textarea "+m+"></textarea>"):U.generateSimpleInput(m,t,r)}return U.inputChrome(u,t,r,p)}function $(e){var t;switch(e){case"horizontal":t="form-horizontal";break;case"vertical":t="";break;case"inline":t="form-inline";break;case"stacked":t="form-stacked";break;case"horizontalCompact":default:t="form-horizontal compact"}return t}function C(e){var t;if("function"==typeof e.containerType)t=e.containerType(e);else switch(t={},e.containerType){case"tab":for(var n=-1,r=0;r<x.tabs.length;r++)if(x.tabs[r].title===e.title){n=r;break}if(0<=n){var a="".concat(_.camelCase(e.title),"Tab"),i=f.considerVisibility(a,x);if(i.omit)t.omit=!0;else{var o='id="'.concat(a,'"');if(i.visibilityAttr&&(o+=" ".concat(i.visibilityAttr)),o+=f.generateDisabledAttr(a,x,{attr:"disable",attrRequiresValue:!0}),t.before="",e.hideable){var s="customTemplate_".concat(a,".html");t.before+='<script type="text/ng-template" id="'.concat(s,'">')+' <li ng-class="[{active: active, disabled: disabled}, classes]" class="uib-tab nav-item"> <div class="hideable-tab">'+' <span class="class="nav-link" data-ng-click="select($event)">'.concat(e.title,"</span> ")+' <button name="hide_'.concat(a,'_btn" data-ng-click="$parent.hideTab($event, \'').concat(e.title,"', '").concat(e.hiddenTabArrayProp,"')\"")+' style="position: relative; z-index: 20;" type="button" class="close pull-right"> <span aria-hidden="true">×</span><span class="sr-only">Close</span> </button> </div> </li><\/script>',o+=' template-url="'.concat(s,'"'),o+=' data-ng-show="!'.concat(e.hiddenTabArrayProp," || !").concat(e.hiddenTabArrayProp,".includes('").concat(e.title,"')\"")}else o+=' heading="'.concat(e.title,'"');0<n&&(o+=' active="tabs['.concat(n,'].active"')),t.before+="<uib-tab ".concat(o,' deselect="tabDeselect($event, $selectedIndex)" select="updateQueryForTab(\'').concat(e.title,"')\""),t.before+=">",t.after="</uib-tab>"}}else t.before="<p>Error! Tab ".concat(e.title," not found in tab list</p>"),t.after="";break;case"+tab":var l="addTabsTab",c="customTemplate_".concat(l,"_popover.html");t.before='<script type="text/ng-template" id="'.concat(c,'">')+' <div id="addableTabsList">'+' <div class="item" data-ng-repeat="tab in $parent.'.concat(e.hiddenTabArrayProp,'">')+' <button type="button" class="addTabButton btn" data-ng-click="$parent.addTab($event, tab, \''.concat(e.hiddenTabArrayProp,"')\">{{ tab }}")+" </div> </div><\/script>";var d="customTemplate_".concat(l,".html");t.before+='<script type="text/ng-template" id="'.concat(d,'">')+' <li class="uib-tab nav-item" data-ng-if="$parent.'.concat(e.hiddenTabArrayProp," && $parent.").concat(e.hiddenTabArrayProp,'.length > 0">')+' <div id="'.concat(l,'">')+' <button name="addTabsBtn" popover-trigger="\'outsideClick\'" popover-placement="bottom" popover-append-to-body="true" title="Reintroduce Optional Sections..." uib-popover-template="\''.concat(c,"'\"")+' style="position: relative; z-index: 20;" type="button" class="close pull-right"> <span aria-hidden="true">+</span><span class="sr-only">Add</span> </button> </div> </li><\/script>',t.before+='<uib-tab template-url="'.concat(d,'">'),t.after="</uib-tab>";break;case"tabset":t.before="<uib-tabset>",t.after="</uib-tabset>";break;case"well":t.before='<div class="well">',e.title&&(t.before+="<h4>"+e.title+"</h4>"),t.after="</div>";break;case"well-large":t.before='<div class="well well-lg well-large">',t.after="</div>";break;case"well-small":t.before='<div class="well well-sm well-small">',t.after="</div>";break;case"fieldset":t.before="<fieldset>",e.title&&(t.before+="<legend>"+e.title+"</legend>"),t.after="</fieldset>";break;case void 0:case null:case"":break;default:if(t.before='<div class="'+e.containerType+'">',e.title){var u=e.titleTagOrClass||"h4";u.match(/h[1-6]/)?t.before+="<"+u+">"+e.title+"</"+u+">":t.before+='<p class="'+u+'">'+e.title+"</p>"}t.after="</div>"}return t}function S(e,t){var n=U.fieldChrome(x,e,t);if(n.omit)return"";var r=n.template;if(e.schema){var a=e.name.replace(/\./g,"_"),i="$_schema_"+a;if(x[i]=e.schema,e.schema)if(e.subkey){e.subkey.path=e.name,x[i+"_subkey"]=e.subkey;for(var o=angular.isArray(e.subkey)?e.subkey:[e.subkey],s=0;s<o.length;s++){var l=C(o[s]);r+=l.before,r+=E(e.schema,null,{subschema:"true",formstyle:t.formstyle,subkey:i+"_subkey",subkeyno:s,subschemaroot:e.name,suppressNestingWarning:e.suppressNestingWarning}),r+=l.after}A.push(e)}else if(t.subschema)t.suppressNestingWarning||console.log("Attempts at supporting deep nesting have been removed - will hopefully be re-introduced at a later date");else{var c=(t.model||"record")+"."+e.name;if("string"==typeof e.customHeader)r+=e.customHeader;else{var d="";e.unshift&&(d='<button id="unshift_'+e.id+'_btn" class="add-btn btn btn-default btn-xs btn-mini form-btn" ng-click="unshift(\''+e.name+'\',$event)"><i class="'+U.glyphClass()+'-plus"></i> Add</button>'),"bs3"===j.framework()?r+='<div class="row schema-head"><div class="col-sm-offset-3">'+e.label+d+"</div></div>":r+='<div class="schema-head">'+e.label+d+"</div>"}"inline"===e.formStyle&&e.inlineHeaders&&(r+=function(e,t,n,r){for(var a=r?"":'ng-hide="!'.concat(n," || ").concat(n,'.length === 0"'),i='<div class="inline-col-headers" style="display:flex" '.concat(a,">"),o=0,s=e;o<s.length;o++){var l=s[o];N(l,t),i+="<div ",l.showWhen=l.showWhen||l.showwhen,l.showWhen&&("string"==typeof l.showWhen?i+='ng-show="'+l.showWhen+'"':i+='ng-show="'+U.generateNgShow(l.showWhen,n)+'"'),l.id&&"function"==typeof l.id.replace&&(i+=' id="col_label_'+l.id.replace(/\./g,"-")+'"'),i+=' class="inline-col-header"><label for="'.concat(l.id,'" class="control-label">').concat(l.label,"</label></div>")}return i+="</div>"}(e.schema,t,c,"always"===e.inlineHeaders));var u=U.handleReadOnlyDisabled(e,x)[0],f=e.sortable&&"disabled"!==u.trim().toLowerCase()?"".concat(u,' ui-sortable="sortableOptions" ng-model="').concat(c,'"'):"";r+='<ol class="sub-doc" '.concat(f,">");var p=U.genDisableableAncestorStr(e.id);r+='<li ng-form id="'.concat(e.id,'List_{{$index}}" name="form_').concat(a,'{{$index}}" ').concat(p)+' class="'.concat($(e.formStyle))+" ".concat("bs2"===j.framework()?"row-fluid":"")+" ".concat(e.inlineHeaders?"width-controlled":"")+" ".concat(e.ngClass?"ng-class:"+e.ngClass:"",'"')+' ng-repeat="subDoc in '.concat(c,' track by $index"')+" ".concat(e.filterable?'data-ng-hide="subDoc._hidden"':"")+">","bs2"===j.framework()&&(r+='<div class="row-fluid sub-doc">'),!0===e.noRemove&&!e.customSubDoc||(r+=' <div class="sub-doc-btns" '.concat(!0!==e.noRemove?p:"",">"),"string"==typeof e.customSubDoc&&(r+=e.customSubDoc),!0!==e.noRemove&&(r+="<button ".concat(u," ").concat(e.noRemove?'ng-hide="'+e.noRemove+'"':"",' name="remove_').concat(e.id,'_btn" ng-click="remove(\'').concat(e.name,"', $index, $event)\""),e.remove?r+=' class="remove-btn btn btn-mini btn-default btn-xs form-btn"><i class="'+U.glyphClass()+'-minus"></i> Remove':(r+=' style="position: relative; z-index: 20;" type="button" class="close pull-right">',"bs3"===j.framework()?r+='<span aria-hidden="true">×</span><span class="sr-only">Close</span>':r+="<span>×</span>"),r+="</button>"),r+="</div> ");var m=void 0;if(e.subDocContainerType){var h=x[e.subDocContainerType]||e.subDocContainerType,v=Object.assign({containerType:h},e.subDocContainerProps);m=C(v)}if(null!=m&&m.before&&(r+=m.before),r+=E(e.schema,!1,{subschema:"true",formstyle:e.formStyle,model:t.model,subschemaroot:e.name,suppressNestingWarning:e.suppressNestingWarning}),null!=m&&m.after&&(r+=m.after),"bs2"===j.framework()&&(r+=" </div>"),r+="</li>",r+="</ol>",!0!==e.noAdd||"string"==typeof e.customFooter||e.noneIndicator){var g="";"string"==typeof e.customFooter&&(g=e.customFooter);var b="",y="".concat(c,".length == 0");!0===e.noAdd?y='ng-show="'.concat(y,'"'):(b=e.noAdd?'ng-hide="'.concat(e.noAdd,'"'):"",y=e.noAdd?'ng-show="'.concat(e.noAdd," && ").concat(y,'"'):"",g+="<button ".concat(b," ").concat(u," ").concat(p,' id="add_').concat(e.id,'_btn" class="add-btn btn btn-default btn-xs btn-mini" ng-click="add(\'').concat(e.name,"',$event)\">")+' <i class="'.concat(U.glyphClass(),'-plus"></i> Add ')+"</button>"),e.noneIndicator&&(g+="<span ".concat(y,' class="none_indicator" id="no_').concat(e.id,'_indicator">None</span>'),b="".concat(c,".length > 0"),b=!0===e.noAdd?'ng-hide="'.concat(b,'"'):e.noAdd?'ng-hide="'.concat(e.noAdd," && ").concat(b,'"'):""),""!==g&&("bs3"===j.framework()?r+="<div ".concat(b,' class="row schema-foot"><div class="col-sm-offset-3">').concat(g,"</div></div>"):r+="<div ".concat(b,' class = "schema-foot ">').concat(g,"</div>"))}}}else{e.help=U.handlePseudos(x,e.help),e.label=U.handlePseudos(x,e.label),e.popup=U.handlePseudos(x,e.popup);var w=U.controlDivClasses(t,e);if(e.array){if(w.push("fng-array"),"inline"===t.formstyle||"stacked"===t.formstyle)throw new Error("Cannot use arrays in an inline or stacked form");r+=U.label(x,e,"link"!==e.type,t);var k=e.help;delete e.help;var S=D(e,"link"===e.type?null:"arrayItem.x",!0,t);e.help=k,r+=U.handleArrayInputAndControlDiv(S,w,x,e,t)}else r+=U.label(x,e,null,t),r+=U.handleInputAndControlDiv(D(e,null,t.required,t),w)}return r+=n.closeTag}var A=[],F=P.N,N=function(e,t){e.type=e.type||"text",e.id?"number"!=typeof e.id&&!e.id.match(/^[0-9]/)||(e.id="_"+e.id):t&&t.noid?e.id=null:e.id="f_"+e.name.replace(/\./g,"_"),e.label=void 0!==e.label?null===e.label?"":e.label:O("titleCase")(e.name.split(".").slice(-1)[0])},E=function(e,t,n){var r="";if(e)for(var a=0;a<e.length;a++){var i=e[a];n.viewform&&((i=angular.copy(i)).readonly=!0),0===a&&t&&!n.schema.match(/\$_schema_/)&&"object"!=typeof i.add&&(i.add=i.add?" "+i.add+" ":"",-1!==i.add.indexOf("ui-date")||n.noautofocus||i.containerType||(i.add=i.add+"autofocus "));var o=!0;if(i.directive){var s=i.directive,l=i.customHeader||"";l+="<"+s+' model="'+(n.model||"record")+'"';var c=k[0];N(i,n);for(var d=0;d<c.attributes.length;d++){var u=c.attributes[d];switch(u.nodeName){case"class":var f=u.value.replace("ng-scope","");0<f.length&&(l+=' class="'+f+'"');break;case"schema":var p=("bespoke_"+i.name).replace(/\./g,"_");x[p]=angular.copy(i),delete x[p].directive,l+=' schema="'+p+'"';break;default:l+=" "+u.nodeName+'="'+u.value+'"'}}l+=" ";var m=O("camelCase")(i.directive);for(var h in i)if(i.hasOwnProperty(h))switch(h){case"directive":case"schema":break;case"add":switch(typeof i.add){case"string":l+=" "+i.add;break;case"object":for(var v in i.add)i.add.hasOwnProperty(v)&&(l+=" "+v+'="'+i.add[v].toString().replace(/"/g,""")+'"');break;default:throw new Error("Invalid add property of type "+typeof i.add+" in directive "+i.name)}break;case m:for(var g in i[h])i[h].hasOwnProperty(g)&&(l+=" ".concat(i.directive,"-").concat(g,'="'),"string"==typeof i[h][g]?l+="".concat(i[h][g].replace(/"/g,"""),'"'):l+="".concat((JSON.stringify(i[h][g])||"").replace(/"/g,"""),'"'));break;default:i[h]&&("string"==typeof i[h]?l+=" fng-fld-"+h+'="'+i[h].replace(/"/g,""")+'"':l+=" fng-fld-"+h+'="'+(JSON.stringify(i[h])||"").replace(/"/g,""")+'"')}for(h in n)n.hasOwnProperty(h)&&"$"!==h[0]&&void 0!==n[h]&&(l+=" fng-opt-"+h+'="'+n[h].toString().replace(/"/g,""")+'"');l+='ng-model="'+i.name+'"></'+s+">",r+=l+=i.customFooter||"",o=!1}else if(i.containerType){var b=C(i);switch(i.containerType){case"tab":if(F===P.N){F=P.Forced,r+='<uib-tabset active="activeTabNo">';var y=_.findIndex(x.tabs,function(e){return e.active});x.activeTabNo=0<=y?y:0}b.omit||(r+=b.before,r+=E(i.content,null,n),r+=b.after);break;case"tabset":F=P.Y,r+=b.before,r+=E(i.content,null,n),r+=b.after;break;default:r+=b.before,r+=E(i.content,null,n),r+=b.after}o=!1}else if(n.subkey){var w=angular.isArray(x[n.subkey])?x[n.subkey][0].keyList:x[n.subkey].keyList;_.find(w,function(e,t){return x[n.subkey].path+"."+t===i.name})&&(o=!1)}o&&(N(i,n),r+=S(i,n))}else console.log("Empty array passed to processInstructions"),r="";return r};x.$on("regenerateFormMarkup",function(e,t){w.formid&&w.formid===t&&(F=P.N,r(x[w.schema]))});var I,n=x.$watch(w.schema,function(e){if(e){var t=angular.isArray(e)?e:[e];0<t.length&&"function"==typeof n&&(n(),n=null,r(t))}},!0),r=function(e){for(var t,n,r="",a=w.model||"record",g=x[a],i=e.filter(function(e){return e&&"tab"===e.containerType&&e.hideable}),o=0,s=i;o<s.length;o++){if((d=s[o]).hiddenTabArrayProp){if(t&&d.hiddenTabArrayProp!==t)throw new Error("Currently, tab sets with more than one value for hiddenTabArrayProp are not supported");t=d.hiddenTabArrayProp}if(d.hiddenTabReintroductionMethod){if(n&&d.hiddenTabReintroductionMethod!==n)throw new Error("Currently, tab sets with more than one value for hiddenTabReintroductionMethod are not supported");n=d.hiddenTabReintroductionMethod}}t=t||"record.hiddenTabs";for(var l=0,c=i;l<c.length;l++){var d;(d=c[l]).hiddenTabArrayProp=t}if("tab"===n&&e.push({containerType:"+tab",hiddenTabArrayProp:t,content:[]}),g=g||{},!w.subschema&&!w.model||w.forceform){x.topLevelFormName=w.name||"myForm";var u="";for(var f in w)w.hasOwnProperty(f)&&"$"!==f[0]&&-1===["name","formstyle","schema","subschema","model","viewform"].indexOf(f)&&(u+=" "+w.$attr[f]+'="'+w[f]+'"');var p=w.forceform?"ng-form":"form";r="<".concat(p,' name="').concat(x.topLevelFormName,'" class="').concat($(w.formstyle),'" novalidate ').concat(u,">")}else r="";if(g===x.topLevelFormName)throw new Error("Model and Name must be distinct - they are both "+g);r+=E(e,!0,w),F===P.Forced&&(r+="</uib-tabset>"),r+=w.subschema?"":"</form>";var m=L(r)(x);if(I){var h=x[x.topLevelFormName];I.replaceWith(m),x[x.topLevelFormName]=h}else k.replaceWith(m);I=m;var v=x[w.shared||"sharedData"],b=v?v.modelControllers:[];if((0<A.length||0<b.length)&&!x.phaseWatcher)var y=x.$watch("phase",function(e){if(x.phaseWatcher=!0,"ready"===e&&"function"==typeof y){y(),y=null;for(var t=0;t<b.length;t++)b[t].onAllReady&&b[t].onAllReady(x);for(var n=0;n<A.length;n++){for(var r,a,i=A[n],o=angular.isArray(i.subkey)?i.subkey:[i.subkey],s=i.name.split("."),l=g;1<s.length;)l=l[s.shift()]||{};l=l[s[0]]=l[s[0]]||[];for(var c=0;c<o.length;c++){if(o[c].selectFunc){if(!x[o[c].selectFunc]||"function"!=typeof x[o[c].selectFunc])throw new Error("Subkey function "+o[c].selectFunc+" is not properly set up");r=x[o[c].selectFunc](g,i)}else{if(!o[c].keyList)throw new Error("Invalid subkey setup for "+i.name);var d=o[c].keyList;for(r=0;r<l.length;r++){for(var u in a=!0,d)if(d.hasOwnProperty(u)&&l[r][u]!==d[u]&&(void 0===l[r][u]||!l[r][u].text||l[r][u].text!==d[u])){a=!1;break}if(a)break}if(!a)switch(o[c].onNotFound){case"error":var f="Cannot find matching "+(o[c].title||o[c].path);R(function(){x.showError(f,"Unable to set up form correctly")}),r=-1;break;case"create":default:var p=i.name.split("."),m=p.pop(),h=p.join("."),v=g;h&&(v=v[h]),r=v[m].push(d)-1}}x["$_arrayOffset_"+i.name.replace(/\./g,"_")+"_"+c]=r}}}});T.$broadcast("formInputDone",w.name),M.updateDataDependentDisplay&&g&&0<Object.keys(g).length&&M.updateDataDependentDisplay(g,null,!0,x)}}}}t=e.directives||(e.directives={}),r.$inject=["$compile","$rootScope","$filter","$timeout","CssFrameworkService","FormGeneratorService","FormMarkupHelperService","SecurityService"],(n=P=P||{})[n.Y=0]="Y",n[n.N=1]="N",n[n.Forced=2]="Forced",t.formInput=r}(fng=fng||{}),function(e){(e.directives||(e.directives={})).fngNakedDate=function(){return{restrict:"A",require:"ngModel",link:function(e,t,n,r){r.$parsers.push(function(e){if(e)return e.toString()}),r.$formatters.push(function(e){if(e)return new Date(e)})}}}}(fng=fng||{}),function(e){var t;function n(n,t,r,a){var i,e,o,s;s=!1,o=navigator.userAgent||navigator.vendor||window.opera,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(o)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(o.substr(0,4)))&&(s=!0),e=!s,n.searchPlaceholder=e?"Ctrl + / to Search":"Search",n.handleKey=function(e){if(27===e.keyCode&&n.searchTarget&&0<n.searchTarget.length)n.searchTarget="";else if(0<n.results.length)switch(e.keyCode){case 38:0<n.focus&&n.setFocus(n.focus-1),"function"==typeof e.preventDefault&&e.preventDefault();break;case 40:n.results.length>n.focus+1&&n.setFocus(n.focus+1),"function"==typeof e.preventDefault&&e.preventDefault();break;case 13:null!=n.focus&&r.url(c(n.results[n.focus]))}},n.setFocus=function(e){null!==n.focus&&delete n.results[n.focus].focussed,n.results[e].focussed=!0,n.focus=e},n.resultClass=function(e){var t="search-result";return n.results&&n.results[e].focussed&&(t+=" focus"),t};function l(){n.moreCount=0,n.errorClass="",n.results=[],n.focus=null}function c(e){return e.url?a.html5hash()+e.url.replace("|id|",e.id):a.buildOperationUrl("edit",e.resource,void 0,e.id,e.resourceTab)}n.$watch("searchTarget",function(e){e&&0<e.length?(i=n.testTime||(new Date).valueOf(),t.get("/api/search?q="+e.replaceAll("+","%2b")+"&sentAt="+i).then(function(e){var t=e.data;t.timestamps&&t.timestamps.sentAt&&Number.parseInt(t.timestamps.sentAt)!==i||(0<n.searchTarget.length?(n.results=t.results,n.results.forEach(function(e){e.href=a.html5hash()+c(e)}),n.moreCount=t.moreCount,0<t.results.length&&(n.errorClass="",n.setFocus(0)),n.errorClass=0===n.results.length?"error has-error":""):l())},function(e){console.log("Error in searchbox.js : "+e.data+" (status="+e.status+")")})):l()},!0),n.$on("$routeChangeStart",function(){n.searchTarget=""})}t=e.controllers||(e.controllers={}),n.$inject=["$scope","$http","$location","RoutingService"],t.SearchCtrl=n}(fng=fng||{}),function(t){var e;function n(e){return{restrict:"AE",templateUrl:"search-"+e.framework()+".html",controller:t.controllers.SearchCtrl}}e=t.directives||(t.directives={}),n.$inject=["CssFrameworkService"],e.globalSearch=n}(fng=fng||{}),function(e){(e.filters||(e.filters={})).camelCase=function(){return function(e){return e.replace(/([\:\-\_]+(.))/g,function(e,t,n,r){return r?n.toUpperCase():n})}}}(fng=fng||{}),function(e){(e.filters||(e.filters={})).extractTimestampFromMongoID=function(){return function(e){var t=e.substring(0,8);return new Date(1e3*parseInt(t,16))}}}(fng=fng||{}),function(e){(e.filters||(e.filters={})).titleCase=function(){return function(e,t){return e&&(e=e.replace(/(_|\.)/g," ").replace(/[A-Z]/g," $&").trim().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()}),e=t?e.replace(/\s/g,""):e.replace(/\s{2,}/g," ")),e}}}(fng=fng||{}),function(e){(e.services||(e.services={})).AddAllService=function(){function r(e,t,r,n){var a,i,o=[],s=[];if(r="addAll"+r,"string"==typeof n)for(a=n.split(" "),i=0;i<a.length;i++)s.push(a[i]);if(!function e(t){for(var n in t)n===r&&o.push(t[n]),"$parent"===n&&e(t[n])}(e),void 0!==t[r]&&"string"==typeof t[r])for(a=t[r].split(" "),i=0;i<a.length;i++)0===a[i].indexOf("class=")?s.push(a[i].substring(6,a[i].length)):o.push(a[i]);return(n=0<s.length?' class="'+s.join(" ")+'" ':" ")+(0<o.length?o.join(" ")+" ":"")}this.getAddAllGroupOptions=function(e,t,n){return r(e,t,"Group",n)},this.getAddAllFieldOptions=function(e,t,n){return r(e,t,"Field",n)},this.getAddAllLabelOptions=function(e,t,n){return r(e,t,"Label",n)},this.addAll=function(e,t,n,r){return this["getAddAll"+t+"Options"](e,r,n)||[]}}}(fng=fng||{}),function(e){(e.services||(e.services={})).CssFrameworkService=function(){var n={framework:"bs3"};return{setOptions:function(e){angular.extend(n,e)},$get:function(){return{framework:function(){return n.framework},setFrameworkForDemoWebsite:function(e){n.framework=e},span:function(e){var t;switch(n.framework){case"bs2":t="span"+Math.floor(e);break;case"bs3":t="col-xs-"+Math.floor(e)}return t},offset:function(e){var t;switch(n.framework){case"bs2":t="offset"+Math.floor(e);break;case"bs3":t="col-lg-offset-"+Math.floor(e)}return t},rowFluid:function(){var e;switch(n.framework){case"bs2":e="row-fluid";break;case"bs3":e="row"}return e}}}}}}(fng=fng||{}),function(e){function t(c){return{loadControllerAndMenu:function(e,t,n,r,a){var i,o={};t+="Ctrl",o.$scope=e.modelControllers[n]=a;var s=a.$parent;s.items=s.items||[];function l(e){angular.forEach(e,function(e){e.divider?r=!0:e[i]&&(r&&(r=!1,s.items.push({divider:!0})),e.id||(e.id=_.camelCase(e.text||e.textFunc()||"")),s.items.push(e))})}try{c(t,o),i=s.newRecord?"creating":s.id?"editing":"listing",angular.isObject(o.$scope.contextMenu)&&(l(o.$scope.contextMenu),o.$scope.contextMenuPromise&&o.$scope.contextMenuPromise.then(function(e){return l(e)})),e.modelNameDisplayPromise&&e.modelNameDisplayPromise.then(function(e){s.modelNameDisplay=e})}catch(e){/is not a function, got undefined/.test(e.message)||/\[\$controller:ctrlreg\] The controller with the name/.test(e.message)||console.log("Unable to instantiate "+t+" - "+e.message)}}}}((e.services||(e.services={})).FngModelCtrlService=t).$inject=["$controller"]}(fng=fng||{}),function(e){var t;function n(n,t){var a,r,s={hashPrefix:"",html5Mode:!1,routing:"ngroute",prefix:""},l=["edit","view"],i=[{route:"/analyse/:model/:reportSchemaName",state:"analyse::model::report",templateUrl:"base-analysis.html"},{route:"/analyse/:model",state:"analyse::model",templateUrl:"base-analysis.html"},{route:"/:model/:id/edit",state:"model::edit",templateUrl:"base-edit.html"},{route:"/:model/:id/edit/:tab",state:"model::edit::tab",templateUrl:"base-edit.html"},{route:"/:model/:id/view",state:"model::edit",templateUrl:"base-view.html"},{route:"/:model/:id/view/:tab",state:"model::view::tab",templateUrl:"base-view.html"},{route:"/:model/new",state:"model::new",templateUrl:"base-edit.html"},{route:"/:model",state:"model::list",templateUrl:"base-list.html"},{route:"/:model/viewonly",state:"model::view",templateUrl:"base-list-view.html"},{route:"/:model/:form/:id/edit",state:"model::form::edit",templateUrl:"base-edit.html"},{route:"/:model/:form/:id/edit/:tab",state:"model::form::edit::tab",templateUrl:"base-edit.html"},{route:"/:model/:form/:id/view",state:"model::form::view",templateUrl:"base-view.html"},{route:"/:model/:form/:id/view/:tab",state:"model::form::view::tab",templateUrl:"base-view.html"},{route:"/:model/:form/new",state:"model::form::new",templateUrl:"base-edit.html"},{route:"/:model/:form",state:"model::form::list",templateUrl:"base-list.html"},{route:"/:model/:form/viewonly",state:"model::form::list::view",templateUrl:"base-list-view.html"}],c=null,d={};function o(e){var t=e;return s.templateFolder&&(t="/"!==s.templateFolder[s.templateFolder.length-1]?s.templateFolder+"/"+t:s.templateFolder+t),t}function u(e,n,r){void 0===n&&(n=""),n=n||"",angular.forEach(e,function(e){a.when(n+e.route,angular.extend(e.options||{templateUrl:o(e.templateUrl)},r))}),s.variantsForDemoWebsite&&angular.forEach(s.variantsForDemoWebsite,function(t){angular.forEach(e,function(e){a.when(n+t+e.route,angular.extend(e.options||{templateUrl:o(e.templateUrl)},r))})})}function f(e,t,n){void 0===t&&(t=""),t=t||"",angular.forEach(e,function(e){r.state(e.state,angular.extend(e.options||{url:t+e.route,templateUrl:e.templateUrl},n))})}function p(e,t,n,r,a,i){var o,s=r?"/"+r:"",l=e+"/"+n,c=i?"/"+i:"";switch(t){case"list":o=l+s;break;case"edit":o=l+s+"/"+a+"/edit"+c;break;case"view":o=l+s+"/"+a+"/view"+c;break;case"read":o=l+s+"/"+a+"/read"+c;break;case"new":o=l+s+"/new"+c}return o}function m(e,t){switch(s.routing){case"ngroute":a=n.get("$routeProvider"),e&&u(e),u(t,s.prefix,s.add2fngRoutes);break;case"uirouter":r=n.get("$stateProvider"),e&&f(s.fixedRoutes),f(t,s.prefix,s.add2fngRoutes)}}return{start:function(e){angular.extend(s,e),s.prefix[0]&&"/"!==s.prefix[0]&&(s.prefix="/"+s.prefix),t.html5Mode(s.html5Mode),""!==s.hashPrefix?t.hashPrefix(s.hashPrefix):s.html5Mode||t.hashPrefix(""),m(s.fixedRoutes,i)},addRoutes:function(e,t){m(e,t)},registerAction:function(e){l.push(e)},$get:function(){return{router:function(){return s.routing},prefix:function(){return s.prefix},parsePathFunc:function(){return function(e){if(e!==c){c=e,d={newRecord:!1},0<s.prefix.length&&0===e.indexOf(s.prefix)&&(e=e.slice(s.prefix.length));var t=e.split("/");s.variants&&-1!==s.variants.indexOf(t[1])&&(d.variant=t[1],t.shift());var n=t.length;if("analyse"===t[1])d.analyse=!0,d.modelName=t[2],d.reportSchemaName=4<=n?t[3]:null;else{d.modelName=t[1];var r=[t[n-1],t[n-2]],a=r.indexOf("new"),i=r.indexOf("viewonly"),o=void 0;-1===a&&-1===i?-1!==(o=l.reduce(function(e,t){var n=r.indexOf(t);return-1<n?n:e},-1))&&(n-=2+o,d.id=t[n]):-1!==a?(d.newRecord=!0,n-=1+a):n-=1+i,1!==o&&1!==a||(d.tab=r[0]),2<n&&(d.formName=t[2])}}return d}},html5hash:function(){return s.html5Mode?"":"#"},buildUrl:function(e){var t=s.html5Mode?"":"#";return t+=s.hashPrefix,(t+=s.prefix)[0]&&(t+="/"),t+="/"===e[0]?e.slice(1):e},buildOperationUrl:function(e,t,n,r,a){return p(s.prefix,e,t,n,r,a)},redirectTo:function(){return function(e,t,n,r,a){var i;n.search({}),i="onDelete"===e?s.onDelete?"new"===s.onDelete?p(s.prefix,"new",t.modelName,t.formName,r,a):s.onDelete:p(s.prefix,"list",t.modelName,t.formName,r,a):p(s.prefix,e,t.modelName,t.formName,r,a),n.path(i)}}}}}}t=e.services||(e.services={}),n.$inject=["$injector","$locationProvider"],t.RoutingService=n}(fng=fng||{}),function(e){function t(l,n,c,r){function g(e,t,n,r,a,i,o,s){function l(e,t){var n=angular.copy(e),r=_.find(o.tabs,function(e){return e.title===n});if(!r){if(0===o.tabs.length&&0<o.formSchema.length){o.tabs.push({title:"Main",content:[],active:"Main"===o.tab||!o.tab}),r=o.tabs[0];for(var a=0;a<o.formSchema.length;a++)r.content.push(o.formSchema[a])}r=o.tabs[o.tabs.push({title:n,containerType:"tab",content:[],active:n===o.tab})-1]}r.content.push(t)}for(var c in"function"==typeof o.onSchemaFetch&&o.onSchemaFetch(e,t),t)if(t.hasOwnProperty(c))if("_id"===c)r&&t._id.options&&t._id.options.list&&w(r,t._id.options.list,c);else if(t.hasOwnProperty(c)){var d=t[c],u=d.options||{},f=u.form||{};if(d.schema&&!f.hidden){if(i&&n){var p=[];g("Nested "+c,d.schema,p,null,c+".",!0,o,s);var m=y(c,f,a);m.schema=p,f.tab&&l(f.tab,m),void 0!==f.order?n.splice(f.order,0,m):n.push(m)}}else{if(n&&!f.hidden){var h=y(c,f,a);if(S(h.showIf,h.name,o)&&"options"!==c){var v=b(h,d,u,o,s);v.tab&&l(v.tab,v),void 0!==f.order?n.splice(f.order,0,v):n.push(v)}}r&&u.list&&w(r,u.list,c)}}"function"==typeof o.onSchemaProcessed&&o.onSchemaProcessed(e,"Main "===e.slice(0,5)?o.baseSchema():n),r&&0===r.length&&k(e,r,n,t)}function b(t,e,n,r,a){var i;if(e.caster&&(t.array=!0,e=e.caster,angular.extend(n,e.options),e.options&&e.options.form&&angular.extend(t,e.options.form)),"String"===e.instance||"ObjectId"===e.instance&&t.asText)n.enum?(t.type=t.type||"select",t.select2?console.log("support for fng-select2 has been removed in 0.8.3 - please convert to fng-ui-select"):(t.options=c.suffixCleanId(t,"Options"),null!==(i=n.form)&&void 0!==i&&i.enumLabels?(t.ids=c.suffixCleanId(t,"_ids"),r[t.ids]=n.enum,r[t.options]=n.form.enumLabels):r[t.options]=n.enum)):(t.type||(t.type=-1!==t.name.toLowerCase().indexOf("password")?"password":"text"),n.match&&(t.add='pattern="'+n.match+'" '+(t.add||"")));else if("ObjectId"===e.instance)t.ref=n.ref,t.link&&(t.link.linkOnly?(t.type="link",t.linktext=t.link.text):t.link.label?t.linklabel=!0:console.log("Unsupported link setup"),t.form=t.link.form,t.linktab=t.link.linktab,delete t.link),"link"!==t.type&&(t.type="select",t.select2||n.form&&n.form.select2?console.log("support for fng-select2 has been removed in 0.8.3 - please convert to fng-ui-select"):t.directive&&(t.noLookup||t[l("camelCase")(t.directive)]&&t[l("camelCase")(t.directive)].fngAjax)||function(){if(t.options=c.suffixCleanId(t,"Options"),t.ids=c.suffixCleanId(t,"_ids"),!t.hidden)if(n.ref)c.setUpLookupOptions(n.ref,t,r,a,g);else if(n.lookupListRef)c.setUpLookupListOptions(n.lookupListRef,t,r,a),t.lookupListRef=n.lookupListRef;else if(n.internalRef)c.handleInternalLookup(r,t,n.internalRef),t.internalRef=n.internalRef;else if(!n.customLookupOptions)throw new Error("No supported select lookup type found in ".concat(t.name))}());else if("Date"===e.instance){if(!t.type)if(t.intType="date",t.readonly)t.type="text";else if(t.directive)t.type="text";else try{t.add=t.add||"",angular.module("ui.date").requires,t.type="text",t.add+=" ui-date ui-date-format "}catch(e){t.type="date",t.add+=' fng-naked-date="x" '}}else if("boolean"===e.instance.toLowerCase())t.type=t.type||"checkbox";else{if("Number"!==e.instance){var o="Field "+t.name+' has unsupported type "'+e.instance+'"';console.log(o);var s=" (typeof = "+typeof e.instance+")";throw console.log(s),new Error(o+s)}t.type=t.type||"number",void 0!==n.min&&(t.add='min="'+n.min+'" '+(t.add||"")),void 0!==n.max&&(t.add='max="'+n.max+'" '+(t.add||"")),t.step&&(t.add='step="'+t.step+'" '+(t.add||""))}return n.required&&(t.required=!0),n.readonly&&(t.readonly=!0),void 0!==e.defaultValue?t.defaultValue=e.defaultValue:e.options&&void 0!==e.options.default&&console.log("No support for default with no value, yet"),t}function d(e,t,n){for(var r=e.split("."),a=n||t.record,i=0,o=r.length;i<o;i++)a[r[i]]||(a[r[i]]=i===o-1?[]:{}),a=a[r[i]];return a}function v(e,r){function t(e){var t=e;if("string"==typeof e&&"$"===e.slice(0,1)){var n=e.split(".");switch(n.length){case 1:t=c.getListData(r,e.slice(1));break;case 2:t=c.getListData(r,n[1]);break;default:throw new Error("Unsupported showIf format")}}return t}var n,a=t(e.lhs),i=t(e.rhs);switch(e.comp){case"eq":n=a===i;break;case"ne":n=a!==i;break;default:throw new Error("Unsupported comparator "+e.comp)}return n}var y=function(e,t,n){return t.name=n+e,t},w=function(e,t,n){"object"==typeof t?(t.name=n,e.push(t)):e.push({name:n})},k=function(e,t,n,r){if(n){for(var a=0,i=n.length;a<i;a++)if("text"===n[a].type){t.push({name:n[a].name});break}0===t.length&&0!==n.length&&t.push({name:n[0].name})}if(0===t.length){for(var o in r)if("_id"!==o&&r.hasOwnProperty(o)){t.push({name:o});break}if(0===t.length)throw new Error("Unable to generate a title for "+e)}},S=function(e,r,a){var i=0;function t(e){if("string"==typeof e&&"$"===e.slice(0,1)){var t=e.slice(1),n=a.dataDependencies[t]||[];n.push(r),a.dataDependencies[t]=n,i+=1}}var n=!0;return e&&(t(e.lhs),t(e.rhs),0!==i||v(e,void 0)||(n=!1)),n};return{generateEditUrl:function(e,t){return n.buildUrl(t.modelName+"/"+(t.formName?t.formName+"/":"")+e._id+"/edit")},generateViewUrl:function(e,t){return n.buildUrl(t.modelName+"/"+(t.formName?t.formName+"/":"")+e._id+"/view")},generateNewUrl:function(e){return n.buildUrl(e.modelName+"/"+(e.formName?e.formName+"/":"")+"new")},handleFieldType:b,handleSchema:g,updateDataDependentDisplay:function(e,t,n,r){var a,i,o,s,l,c;for(var d in r.dataDependencies)if(r.dataDependencies.hasOwnProperty(d)){var u=d.split(".");if(1===u.length){if(n||!t||e[d]!==t[d])for(a=r.dataDependencies[d],i=0;i<a.length;i+=1){var f=a[i];for(o=0;o<r.formSchema.length;o+=1)r.formSchema[o].name===f&&(l=angular.element(document.querySelector("#cg_"+r.formSchema[o].id)),v(r.formSchema[o].showIf,e)?l.removeClass("ng-hide"):l.addClass("ng-hide"))}}else{if(2!==u.length)throw new Error("You can only go down one level of subdocument with showIf");if(void 0===c&&(c=!0),e[u[0]])for(s=0;s<e[u[0]].length;s++)if(n||!t||!t[u[0]]||!t[u[0]][s]||e[u[0]][s][u[1]]!==t[u[0]][s][u[1]])for(a=r.dataDependencies[d],i=0;i<a.length;i+=1){var p=a[i].split(".");if(2!==p.length)throw new Error("Conditional display must control dependent fields at same level ");for(o=0;o<r.formSchema.length;o+=1)if(r.formSchema[o].name===p[0])for(var m=r.formSchema[o].schema,h=0;h<m.length;h++)m[h].name===a[i]&&(0===(l=angular.element(document.querySelector("#f_"+p[0]+"List_"+s+" #cg_f_"+a[i].replace(".","_")))).length?l=angular.element(document.querySelector("#f_elements-"+s+"-"+p[1])):c=!1,0<l.length&&(v(r.formSchema[o].schema[h].showIf,e[u[0]][s])?l.show():l.hide()))}}}return c},add:function(t,e,n,r){var a,i;if(null!==(a=null==e?void 0:e.target)&&void 0!==a&&a.hasAttribute&&e.target.hasAttribute("disabled"))return e.preventDefault();if(e.target.offsetParent){var o=d(t,n,r),s=n.formSchema.find(function(e){return e.name===t}),l=s?s.schema:null,c=l?n.setDefaults(l,t+"."):{};"function"==typeof(null===(i=n.dataEventFunctions)||void 0===i?void 0:i.onInitialiseNewSubDoc)&&n.dataEventFunctions.onInitialiseNewSubDoc(t,l,c),o.push(c),n.setFormDirty(e)}},unshift:function(e,t,n,r){d(e,n,r).unshift({}),n.setFormDirty(t)},remove:function(t,e,n,r,a){var i;if(null!==(i=null==n?void 0:n.target)&&void 0!==i&&i.hasAttribute&&n.target.hasAttribute("disabled"))return n.preventDefault();var o,s=d(t,r,a);if("function"==typeof r.dataEventFunctions.onDeleteSubDoc){var l=r.formSchema.find(function(e){return e.name===t}),c=l?l.schema:null;o=r.dataEventFunctions.onDeleteSubDoc(t,c,s,e)}o?r.showError(o):(s.splice(e,1),r.setFormDirty(n))},hasError:function(e,t,n,r){var a=!1;if(r){var i=r[r.topLevelFormName];if("null"!==e&&(i=i[e.replace("$index",n)]),i){var o=i[t];o&&o.$invalid&&!o.$$attr.readonly&&(o.$dirty?a=!0:angular.forEach(o.$validators,function(e,t){"required"!==t&&o.$error[t]&&(a=!0)}))}}else console.log("hasError called with no scope! ",e,t,n);return a},decorateScope:function(s,a,l,e,t){function c(){for(var e=s.$$childHead;e;){if(e.tabset)return e.tabset;e=e.$$nextSibling}}s.record=e.record,s.phase="init",s.disableFunctions=e.disableFunctions,s.dataEventFunctions=e.dataEventFunctions,s.topLevelFormName=void 0,s.formSchema=[],s.tabs=[],s.listSchema=[],s.recordList=[],s.dataDependencies={},s.internalLookups=[],s.listLookups=[],s.conversions={},s.pageSize=60,s.pagesLoaded=0,e.baseScope=s,r.decorateSecurableScope(s,{pseudoUrl:t}),s.generateEditUrl=function(e){return a.generateEditUrl(e,s)},s.generateViewUrl=function(e){return a.generateViewUrl(e,s)},s.generateNewUrl=function(){return a.generateNewUrl(s)},s.scrollTheList=function(){var e;if(0<(null===(e=s.listSchema)||void 0===e?void 0:e.length))return l.scrollTheList(s);var t=s.$watchCollection("listSchema",function(e){if(0<(null==e?void 0:e.length))return t(),l.scrollTheList(s)})},s.getListData=function(e,t){return l.getListData(e,t,s.listSchema,s)},s.setPristine=function(e){e&&s.dismissError(),s[s.topLevelFormName]&&s[s.topLevelFormName].$setPristine()},s.skipCols=function(e){return 0<e?"col-md-offset-3":""},s.setFormDirty=function(e){e?angular.element(e.target).inheritedData("$formController").$setDirty():console.log("setFormDirty called without an event (fine in a unit test)")},s.add=function(e,t,n){return a.add(e,t,s,n)},s.hideTab=function(e,t,n){var r=l.getData(s,n);if(r&&Array.isArray(r)&&!r.includes(t)){var a=s.tabs[s.activeTabNo].title===t;r.push(t),r.sort();var i=s.baseForm;if(i&&i.$setDirty(),a){var o=c();o&&o.select(s.tabs.findIndex(function(e){return!r.includes(e.title)}))}}},s.addTab=function(e,t,n){var r=l.getData(s,n);if(r&&Array.isArray(r)){var a=r.findIndex(function(e){return e===t});if(-1===a)return;r.splice(a,1);var i=s.baseForm;i&&i.$setDirty();var o=c();o&&o.select(s.tabs.findIndex(function(e){return e.title===t}))}},s.hasError=function(e,t,n){return a.hasError(e,t,n,s)},s.unshift=function(e,t,n){return a.unshift(e,t,s,n)},s.remove=function(e,t,n,r){return a.remove(e,t,n,s,r)},s.baseSchema=function(){return s.tabs.length?s.tabs:s.formSchema}}}}((e.services||(e.services={})).FormGeneratorService=t).$inject=["$filter","RoutingService","RecordHandlerService","SecurityService"]}(fng=fng||{}),function(f){var e;function t(h,v,g,b,a){function y(e,a){function t(e){var t=e;if("string"==typeof e)if("$"===e.slice(0,1)){t=(a||"record")+".";var n=e.slice(1).split(".");if(1<n.length){var r=n.pop();t+=n.join(".")+"[$index]."+r}else t+=e.slice(1)}else t="'"+e+"'";return t}var n=["eq","ne","gt","gte","lt","lte"].indexOf(e.comp);if(-1===n)throw new Error("Invalid comparison in showWhen");return t(e.lhs)+["===","!==",">",">=","<","<="][n]+t(e.rhs)}function w(e,t){var n=["vertical","inline"];return t||n.push("stacked"),!e||"undefined"===e||!n.includes(e)}function d(){return"bs2"===h.framework()?"icon":"glyphicon glyphicon"}function u(c,d){var u=c.nonUniqueId||c.id;return[function(){if(c.readonly&&"boolean"==typeof c.readonly)return" disabled ";function e(){return c.readonly?' ng-disabled="'.concat(c.readonly,'" '):""}if(!u||!b.canDoSecurityNow(d,"disabled"))return e();var t=[];if(d.requiresDisabledChildren){var n=void 0;if(c.nonUniqueId)n=(s=c.nonUniqueId.startsWith("f_")?c.nonUniqueId.substring(2):c.nonUniqueId).split("_");else n=c.name.split(".");for(n.pop();0<n.length;)t.push("f_".concat(n.join("_"))),n.pop()}if("instant"===f.formsAngular.elemSecurityFuncBinding){if(d.isSecurelyDisabled(u))return" disabled ";for(var r=0,a=t;r<a.length;r++){var i=a[r];if(d.requiresDisabledChildren(i))return" disabled "}return e()}var o="isSecurelyDisabled('".concat(u,"')");if(0<t.length){var s=t.map(function(e){return"requiresDisabledChildren('".concat(e,"')")});o="(".concat(o," || ").concat(s.join(" || "),")")}var l="one-time"===f.formsAngular.elemSecurityFuncBinding;return c.readonly?l?e()+'ng-readonly="::'.concat(o,'" '):' ng-disabled="'.concat(o," || ").concat(c.readonly,'" '):' ng-disabled="'.concat(l?"::":"").concat(o,'" ')}(),b.getDisableableAttrs(u)]}function k(e,t,n){if(n.subschema&&n.model){for(var r=n.model,a=0,i="$parent.";r.startsWith(i);)a++,r=r.substring(i.length);return"".concat(e,"_{{").concat(i.repeat(a),"$index}}")}return"".concat(e,"_{{$index}}")}function S(e,t,n){return void 0!==e.$index||!!n.subschema}function i(e,t,n){for(;t.includes("@@");){var r=t.indexOf("@@")+2,a=t.indexOf("@@",r)-1,i=t.substring(r,1+a),o=i.endsWith("s");o&&(i=i.slice(0,-1));var s=i[0].toUpperCase()===i[0]?"true":"false";i=i.toLocaleLowerCase();var l=void 0;l="global"===n?f.formsAngular.pseudo(i,"true"==s):"scopeStatic"===n?e.sharedData.pseudo(i,"true"==s):"scopeDynamic"===n?"{{ sharedData.pseudo('".concat(i,"', ").concat(s,") }}"):"",t=t.substring(0,r-2)+l+(o?"s":"")+t.substring(3+a)}return t}return{isHorizontalStyle:w,isArrayElement:S,handlePseudos:function(e,t,n){var r,a;return null!=t&&t.includes("@@")?(a="function"==typeof(null===(r=null==e?void 0:e.sharedData)||void 0===r?void 0:r.pseudo)?n?(e[n]=function(){return i(e,t,"scopeStatic")},"none"):"scopeDynamic":"function"==typeof f.formsAngular.pseudo?"global":"none",i(e,t,a)):t},fieldChrome:function(e,t,n){var r="";if(t.id&&"function"==typeof t.id.replace){var a=t.nonUniqueId||t.nonuniqueid||t.id,i=void 0;if(t.id.includes(".")&&t.id.includes("{{"))for(var o=!(i="cg_"),s=0;s<t.id.length;s++)"{"===t.id[s]&&"{"===t.id[s-1]?o=!0:"}"===t.id[s]&&"}"===t.id[s-1]&&(o=!1),o||"."!==t.id[s]?i+=t.id[s]:i+="-";else i="cg_".concat(t.id.replace(/\./g,"-"));a="cg_".concat(a.replace(/\./g,"-"));var l=b.considerVisibility(a,e);if(l.omit)return{omit:!0};r+='id="'.concat(S(e,0,n)?k(i,0,n):i,'"'),l.visibilityAttr&&(r+=" ".concat(l.visibilityAttr))}var c=t.classes||"",d="",u="";if(t.showWhen=t.showWhen||t.showwhen,t.showWhen&&("string"==typeof t.showWhen?r+=' ng-show="'+t.showWhen+'"':r+=' ng-show="'+y(t.showWhen,n.model)+'"'),"bs3"===h.framework()){var f;c+=" form-group","vertical"===n.formstyle&&"block-level"!==t.size&&(d+='<div class="row">',c+=" col-sm-"+v.sizeAsNumber(t),u+="</div>");var p=null,m=t.name.split(".");f=n&&void 0!==n.subkeyno?n.subschemaroot.replace(/\./g,"-")+"-subkey"+n.subkeyno+"-"+m[m.length-1]:n.subschema?(p="form_"+m.slice(0,-1).join("_")+"$index",t.name.replace(/\./g,"-")):"f_"+t.name.replace(/\./g,"_"),d+="<div"+g.addAll(e,"Group",c,n)+" ng-class=\"{'has-error': hasError('"+p+"','"+f+"', $index)}\"",u+="</div>"}else u=w(n.formstyle,!0)?(d+="<div"+g.addAll(e,"Group","control-group",n),"</div>"):(d+="<span ","</span>");return{template:d+=(r||"")+">",closeTag:u}},label:function(e,t,n,r){var a="";if("bs3"===h.framework()||!["inline","stacked"].includes(r.formstyle)&&""!==t.label||n){a="<label";var i="control-label";if(w(r.formstyle,!1)?(t.linklabel||(a+=' for="'+t.id+'"'),void 0!==t.labelDefaultClass?i+=" "+t.labelDefaultClass:"bs3"===h.framework()&&(t.coloffset?i+=" col-sm-"+(3-t.coloffset).toString():i+=" col-sm-3")):["inline","stacked"].includes(r.formstyle)&&(a+=' for="'+t.id+'"',i+=" sr-only"),a+=g.addAll(e,"Label",null,r)+' class="'+i+'">'+t.label,n){var o=void 0,s=void 0;s=r.subschema?((o=t.name.replace(r.subschemaroot,"")).startsWith(".")&&(o=o.substring(1)),"subDoc"):(o=t.name,"record");var l=u(t,e);a+=" <i ".concat(l.join(" "),' id="add_').concat(t.id,'" ng-click="add(\'').concat(o,"', $event, ").concat(s,')" class="').concat(d(),'-plus-sign"></i>')}if(a+="</label>",t.linklabel){var c='<fng-link fld="'+t.name+'" ref="'+t.ref+'" text="'+escape(a)+'"';t.form&&(c+=' form="'+t.form+'"'),t.linktab&&(c+=' linktab="'+t.linktab+'"'),a=c+="></fng-link>"}}return a},glyphClass:d,allInputsVars:function(e,t,n,r,a,i){var o,s=t.placeHolder,l="",c="",d="",u="";return"bs3"===h.framework()?(l=-1===["horizontal","vertical","inline"].indexOf(n.formstyle)?" input-sm":"",c="col-sm-"+v.sizeAsNumber(t),u=" form-control"):d=t.size?" input-"+t.size:"",["inline","stacked"].includes(n.formstyle)&&(s=s||t.label),o='data-ng-model="'+r+'"',a&&(o+=' id="'.concat(a,'"')),i?o+=' name="'.concat(i,'"'):a&&(o+=' name="'.concat(a,'"')),s&&(o+=' placeholder="'.concat(s,'"')),t.popup&&(o+=' title="'.concat(t.popup,'"')),t.ariaLabel&&(o+=' aria-label="'.concat(t.ariaLabel,'"')),{common:o+=g.addAll(e,"Field",null,n),sizeClassBS3:c,sizeClassBS2:d,compactClass:l,formControl:u}},inputChrome:function(e,t,n,r){"bs3"===h.framework()&&w(n.formstyle,!0)&&"checkbox"!==t.type&&(e='<div class="bs3-input '+r.sizeClassBS3+'">'+e+"</div>");var a=(t.helpInline||"")+(t.helpinline||"");if(0<a.length){var i="bs2"===h.framework()?{el:"span",cl:"help-inline"}:{el:"div",cl:"help-block"};e+="<".concat(i.el,' class="').concat(i.cl,'">').concat(a,"</").concat(i.el,">")}return e+="<dms/>",n.noid||(e+='<div ng-if="'.concat(n.name||"myForm","['").concat(t.id,'\'].$dirty" class="help-block">')+' <div ng-messages="'.concat(n.name||"myForm","['").concat(t.id,"'].$error\">")+' <div ng-messages-include="error-messages.html"> </div> </div></div>'),t.help&&(e+='<div class="help-block">'+t.help+"</div>"),e},generateSimpleInput:function(e,t,n){var r="<input "+e+'type="'+t.type+'" ';return t.label||t.ariaLabel?n.subschema&&(r+='aria-label="'.concat(t.label?a("titleCase")(n.subschemaroot)+" "+t.label:t.popup||t.name.replace(/\./g," "),'" ')):r+='aria-label="'.concat(t.name.replace(/\./g," "),'" '),"inline"!==n.formstyle||"bs2"!==h.framework()||t.size||(r+='class="input-small"'),r+=" />"},controlDivClasses:function(e,t){var n=[];return w(e.formstyle,!1)&&("bs2"===h.framework()?n.push("controls"):t.coloffset?n.push("col-sm-"+(9+t.coloffset).toString()):n.push("col-sm-9")),n},handleInputAndControlDiv:function(e,t){return 0<t.length&&(e='<div class="'+t.join(" ")+'">'+e+"</div>"),e},handleArrayInputAndControlDiv:function(e,t,n,r,a){var i="bs3"===h.framework()?'ng-class="skipCols($index)" ':"",o=a.subschema?"subDoc"+r.name.replace(a.subschemaroot,""):(a.model||"record")+"."+r.name,s="";s+='<div id="'+r.id+'List" class="'+t.join(" ")+'" '+i+' ng-repeat="arrayItem in '+o+' track by $index">';var l=u(r,n),c="link"!==r.type?"<i ".concat(l.join(" ")," ng-click=\"remove('").concat(r.name,'\', $index, $event)" id="remove_').concat(r.id,'_{{$index}}" class="').concat(d(),'-minus-sign"></i>'):"";return s+=e.replace("<dms/>",c),s+="</div>",i="bs3"===h.framework()?'ng-class="skipCols('+o+'.length)" ':"",r.help&&(s+='<div class="array-help-block '+t.join(" ")+'" '+i+' id="empty'+r.id+'ListHelpBlock">'+r.help+"</div>"),s},addTextInputMarkup:function(e,t,n){var r="",a=e.formControl.trim()+e.compactClass+e.sizeClassBS2+(t.class?" "+t.class:"");return 0!==a.length&&(r+='class="'+a+'"'),t.add&&(r+=" "+t.add+" "),r+=n},handleReadOnlyDisabled:u,generateArrayElementIdString:k,genDisableableAncestorStr:function(e){return b.getDisableableAncestorAttrs(e)},generateNgShow:y}}e=f.services||(f.services={}),t.$inject=["CssFrameworkService","InputSizeHelperService","AddAllService","SecurityService","$filter"],e.FormMarkupHelperService=t}(fng=fng||{}),function(e){(e.services||(e.services={})).InputSizeHelperService=function(){var n=[1,2,4,6,8,10,12],r=["mini","small","medium","large","xlarge","xxlarge","block-level"];return{sizeMapping:n,sizeDescriptions:r,defaultSizeOffset:2,sizeAsNumber:function(e){var t=n[e.size?r.indexOf(e.size):2];return e.coloffset&&(t+=e.coloffset),t}}}}(fng=fng||{}),function(e){var t;function n(y){function s(e,t,n,r,a){var i=n.info.name;r&&(null!=a&&a.nonUniqueIdSuffix?(t=t.replace(r,a.nonUniqueIdSuffix),i+=".".concat(a.nonUniqueIdSuffix)):i+=".".concat(r));var o=y.handleReadOnlyDisabled({id:t,name:i,nonUniqueId:n.info.nonuniqueid,readonly:n.info.readonly},e);if(null!=a&&a.forceNg)for(var s=0;s<o.length;s++)"disabled"===o[s].toLowerCase().trim()&&(o[s]='ng-disabled="true"');return o}function o(e,t,n,r,a){return s(e,t,n,r,a).join(" ")}function p(e,t,n){return y.handlePseudos(e,t,n)}function l(e,t,n){return y.isArrayElement(e,t.info,t.options)?y.generateArrayElementIdString(n,t.info,t.options):n}function c(e,t,n,r){var a=t.info.id;return n&&(n.startsWith("_")||(a+="_"),a+=n),r&&(a=l(e,t,a)),a}function i(e,t,n,r){var a=s(e,r,t,n,{forceNg:!0}),i=a[0],o="";if(i){i=(i=(i=(i=i.replace("data-ng-disabled","ng-disabled")).replace("data-ng-readonly","ng-readonly")).replace("ng-disabled=",'"ng-disabled":')).replace("ng-readonly=",'"ng-readonly":');try{i="{ ".concat(i," }"),(i=JSON.parse(i)["ng-disabled"])&&(o='disabledDate="'.concat(i,'" readonlyTime="').concat(i,'"'))}catch(e){}}return o+" "+a[1]}function w(e,t,n,r){function a(e){var t=e.replace(/"/g,'"');if(""===t)return!0;if("true"===t)return!0;if("false"===t)return!1;var n=Number(t);return!isNaN(n)&&isFinite(n)?n:t}var i={},o={formStyle:e.formstyle},s={},l=t?t.length:0,c=null==t?void 0:t.toLowerCase();for(var d in e)if(e.hasOwnProperty(d)){var u=d.toLowerCase();"fngfld"===u.slice(0,6)?i[u.slice(6)]=a(e[d]):"fngopt"===u.slice(0,6)?o[u.slice(6)]=a(e[d]):t&&u.slice(0,l)===c&&(s[_.kebabCase(d.slice(l))]=a(e[d]))}var f={info:i,options:o,directiveOptions:s};return f.info.help=p(n,f.info.help,null!=r&&r.setUpDynamicHelpFunc?"help":void 0),f.info.label=p(n,f.info.label,null!=r&&r.setUpDynamicLabelFunc?"label":void 0),f.info.popup=p(n,f.info.popup),f}function r(e,t,n,r){var a=c(e,t,n,!1),i=l(e,t,a);return'id="'.concat(i,'" ').concat(o(e,a,t,n,r))}return{extractFromAttr:w,buildInputMarkup:function(e,t,n,r){var a=n.processedAttrs||w(t,"",e),i={};n.ignoreFieldInfoFromAttrs||Object.assign(i,a.info),n.fieldInfoOverrides&&Object.assign(i,n.fieldInfoOverrides);var o=Object.assign({},a.options,n.optionOverrides),s=y.fieldChrome(e,i,o);if(s.omit)return"";var l=y.controlDivClasses(o,i),c=s.template+y.label(e,i,n.addButtons,o),d=i.id;(i.array||o.subschema)&&(d=y.generateArrayElementIdString(d,i,o));var u=n.addButtons?"arrayItem"+(n.needsX?".x":""):t.model+"."+i.name,f=i.name;if(o.subschema&&-1!==i.name.indexOf(".")){var p=t.model+".",m=o.subschemaroot,h=i.name.slice(m.length+1);u=p+m,o.subkey?(d=u.slice(p.length).replace(/\./g,"-")+"-subkey"+o.subkeyno+"-"+h,u+="[$_arrayOffset_"+m.replace(/\./g,"_")+"_"+o.subkeyno+"]."+h):(u+="[$index]."+h,f=i.name.replace(/\./g,"-"))}var v=y.allInputsVars(e,i,o,u,d,f);v.modelString=u,v.disableableAncestorStr=y.genDisableableAncestorStr(i.id);var g=r(v),b=y.inputChrome(g,i,o,v);return n.addButtons?c+=y.handleArrayInputAndControlDiv(b,l,e,i,o):c+=y.handleInputAndControlDiv(b,l),c+=s.closeTag},genIdString:function(e,t,n){return c(e,t,n,!0)},genDisabledStr:function(e,t,n,r){return o(e,c(e,t,n,!1),t,n,r)},genIdAndDisabledStr:r,genDateTimePickerDisabledStr:function(e,t,n){return i(e,t,n,c(e,t,n,!1))},genDateTimePickerIdAndDisabledStr:function(e,t,n){var r=c(e,t,n,!1),a=l(e,t,r);return'id="'.concat(a,'" ').concat(i(e,t,n,r))},genUiSelectIdAndDisabledStr:function(e,t,n){return r(e,t,n,{forceNg:!0})},handlePseudos:p,genDisableableAncestorStr:function(e){return y.genDisableableAncestorStr(e.info.id)}}}t=e.services||(e.services={}),n.$inject=["FormMarkupHelperService"],t.PluginHelperService=n}(fng=fng||{}),function(O){var e;function t(c,d,i,u,o,s,f,m,e){var l=function(e){return void 0===e&&(e=function(e){return Math.floor(e).toString(16)}),e(Date.now()/1e3)+" ".repeat(16).replace(/./g,function(){return e(16*Math.random())})};function p(e){if(-1===["cancel","backdrop click","escape key press"].indexOf(e))throw e}function b(e,t){return(e.id||"f_"+e.name).replace(/\./g,"_")+t}function h(e,t,n,r){void 0===r&&(r=!1);for(var a=t.split("."),i=a.length-1,o=e,s=0;s<i;s++){if(!o)throw new Error("walkTree failed: Object = ".concat(e,", fieldname = ").concat(t,", i = ").concat(s));if(o=angular.isArray(o)?_.map(o,function(e){return e[a[s]]}):(r&&!o[a[s]]&&(o[a[s]]={}),o[a[s]]),angular.isArray(o)&&void 0!==n)if(n.scope&&"function"==typeof n.scope)o=o[n.scope().$index];else{if("number"!=typeof n)throw new Error("Unsupported element type in walkTree "+t);o=o[n]}if(!o)break}return{lastObject:o,key:o?a[i]:void 0}}function y(e,t,n,r){var a=h(e,t,n,!!r);if(a.lastObject&&a.key)if(r)if(angular.isArray(a.lastObject))for(var i=0;i<a.lastObject.length;i++)a.lastObject[i][a.key]=r[i];else a.lastObject[a.key]=r;else delete a.lastObject[a.key]}function v(t,n,e,r){if(void 0===r&&(r=!1),!n.topLevelFormName||n[n.topLevelFormName]&&(r||n[n.topLevelFormName].$pristine)){S(t.name,e.master,function(e){return"object"==typeof e&&e.id?e:C(t,e,n[b(t,"Options")],n[b(t,"_ids")])});var a=w(e.master,t.name);a&&y(n.record,t.name,void 0,a)}}var w=function(e,t,n){var r,a=h(e,t,n);return a.lastObject&&a.key&&(r=angular.isArray(a.lastObject)?_.map(a.lastObject,function(e){return e[a.key]}):a.lastObject[a.key]),r};function k(e,t,n,r){void 0===n&&(n=null);var a=w(e,t)||"";if(a&&n){var i=_.find(n,function(e){return e.name===t});if(i)switch(i.params){case void 0:break;case"timestamp":var o=a.toString().substring(0,8),s=new Date(1e3*parseInt(o,16));a=s.toLocaleDateString()+" "+s.toLocaleTimeString();break;default:a=r.dataEventFunctions[i.params](e)}}return a}function S(e,t,n){var r,a,i=(r=e.split("."),a=[r[0]],1<r.length&&a.push(r.slice(1).join(".")),a);if(1<i.length)!function(e,t,n){if(void 0!==t)if(angular.isArray(t))for(var r=0;r<t.length;r++)S(e,t[r],n);else S(e,t,n)}(i[1],t[i[0]],n);else if(t[i[0]]){var o=t[i[0]];if(angular.isArray(o))for(var s=o.length-1;0<=s;s--){var l=typeof o[s];("undefined"==l||"object"==l&&0===Object.keys(o[s]).length)&&o.splice(s,1)}t[i[0]]=n(o)}}function g(e,t,n,r,a){var i="string"==typeof t?e[t]:t,o="string"==typeof n?e[n]:n;i.length=0,o.length=0,r&&0<r.length&&r.forEach(function(e){var t=e[a];t&&0<t.length&&(i.push(t),e._id||(e._id=l()),o.push(e._id))})}var x=function(e){var t=!1;return e.needsX?t=!0:e.directive||("text"===e.type?t=!0:"select"!==e.type||e.ids||(t=!0)),t};function D(e,t,n){var r=e.conversions;return n&&(r=w(r,n)||{}),r[t]}var $=function(e,t,n,r,a,i,o){i=i||t;for(var s=0;s<e.length;s++){var l=e[s],c=l.name.slice(n);c.length||(c=l.name.split(".").pop());var d=w(t,c);if("date"===l.intType&&"string"==typeof d&&y(t,c,null,new Date(d)),l.schema){if(d)for(var u=0;u<d.length;u++)d[u]=$(l.schema,d[u],1+c.length,r,c,i,u)}else{l.internalRef&&g(r,l.options,l.ids,i[l.internalRef.property],l.internalRef.value);var f=k(t,c,null,r);if(l.array&&x(l)&&f&&!(0<f.length&&f[0].x))for(var p=0;p<f.length;p++)f[p]={x:f[p]};var m=r[b(l,"_ids")],h=void 0;d&&m&&0<m.length?c.includes(".")||!d.toString().match(/^[a-f0-9]{24}$/)||l.internalRef&&l.internalRef.noConvert||(t[c]=C(l,d,r[b(l,"Options")],m)):l.select2?(console.log("fng-select2 is deprecated - use fng-ui-select instead"),l.select2):d&&(h=D(r,c,a))&&h.fngajax&&"function"==typeof h.fngajax&&!h.noconvert&&h.fngajax(d,l,function(e,t){y(i,e.name,o,t),N(angular.element("#"+e.id),function(){y(r.record,e.name,o,t)})})}}return t};function C(e,t,n,r){if(e.array||angular.isArray(t)){for(var a=[],i=e.array&&(!e.directive||x(e)),o=0;o<t.length;o++){var s=t[o];s&&s.x&&(s=s.x);var l=E(s,r,n,e.name);i&&(l={x:l}),a.push(l)}return a}return e.select2?{id:t,text:E(t,r,n,e.name)}:E(t,r,n,e.name)}function A(e,t,n,r){var a=_.isObject(e)?e.x||e.text:e;if(a&&a.match(/^[0-9a-f]{24}$/))return a;var i=t.indexOf(a);if(-1===i)throw new Error("convertListValueToId: Invalid data - value "+a+" not found in "+t+" processing "+r);return n[i]}function F(e,t,n){n.master=$(t.formSchema,e,0,t),t.phase="ready",t.cancel()}var N=function(e,t){var n=e.inheritedData("$ngModelController"),r=n&&n.$pristine;r&&(n.$pristine=!1),t(),r&&(n.$pristine=!0)},E=function(e,t,n,r){"object"==typeof e&&(e=e.id);var a=t.indexOf(e);if(-1===a&&-1===(a=n.indexOf(e)))throw new Error("convertIdToListValue: Invalid data - id "+e+" not found in "+t+" processing "+r);return n[a]};function I(t,n,r,e,a){if(a&&0<a.length&&a.length===e.length&&n[r]){var i=a.findIndex(function(e){return e[t.value]===n[r]});if(-1<i){var o=e[i][t.value];o&&(n[r]=o)}}}function L(e,f,i,t,p){var n=!f.id&&!f.newRecord;function o(i,u){f.internalLookups.forEach(function(n){var r=i[n.ref.property],a=u[n.ref.property];g(f,n.lookupOptions,n.lookupIds,r,n.ref.value),(r&&0<r.length||a&&0<a.length)&&n.handlers.forEach(function(t){if(t.possibleArray){var e=w(f.record,t.possibleArray,null);e&&0<e.length&&e.forEach(function(e){return I(n.ref,e,t.lastPart,r,a)})}else angular.isArray(f.record[t.lastPart])?f.record[t.lastPart].forEach(function(e){I(n.ref,e,"x",r,a)}):I(n.ref,f.record,t.lastPart,r,a)})}),f.listLookups.forEach(function(c){function e(e,t){var n=e[t];return n&&n.id&&(n=n.id),n}function d(e){y(f.record,e.name)}var t=c.ref.id.slice(1);if(t.includes("."))throw new Error("No support for nested list lookups yet - ".concat(JSON.stringify(c.ref)));var n=e(i,t),r=e(u,t);n!==r&&(n?(r&&c.handlers.forEach(function(t){t.oldValue=w(f.record,t.formInstructions.name),angular.isArray(t.oldValue)?t.oldId=t.oldValue.map(function(e){return f[t.formInstructions.ids][f[t.formInstructions.options].indexOf(e)]}):t.oldId=f[t.formInstructions.ids][f[t.formInstructions.options].indexOf(t.oldValue)]}),m.readRecord(c.ref.collection,n).then(function(l){c.handlers.forEach(function(r){var a=f[r.formInstructions.options];a.length=0;var i=f[r.formInstructions.ids];i.length=0;for(var e=l.data[c.ref.property]||[],t=0;t<e.length;t++){var n=e[t][c.ref.value],o=_.sortedIndex(a,n);a[o]===n&&(n=n+" ("+e[t]._id+")",o=_.sortedIndex(a,n)),a.splice(o,0,n),i.splice(o,0,e[t]._id)}if(0===Object.keys(u).length)v(r.formInstructions,f,p,!0);else if(r.oldId)if(angular.isArray(r.oldId))r.oldId.forEach(function(e,t){var n=i.indexOf(e);y(f.record,r.formInstructions.name,t,-1===n?void 0:a[n])});else{var s=i.indexOf(r.oldId);-1!==s?y(f.record,r.formInstructions.name,void 0,a[s]):d(r.formInstructions)}else d(r.formInstructions)})})):c.handlers.forEach(function(e){f[e.formInstructions.options].length=0,f[e.formInstructions.ids].length=0,d(e.formInstructions)}))})}function r(){f.phase="ready",f.cancel(),o(f.record,{})}if(f.id&&"function"!=typeof f.dataEventFunctions.onBeforeRead&&t.beginReadingRecord(f),i.handleSchema("Main "+f.modelName,e,n?null:f.formSchema,f.listSchema,"",!0,f,p),n)p.allowLocationChange=!0;else{var s=!0;if(f.newRecord||(f.dropConversionWatcher=f.$watchCollection("conversions",function(e,t){e!==t&&f.originalData&&F(f.originalData,f,p)})),f.$watch("record",function(e,t){if(e!==t){if(0<Object.keys(t).length&&f.dropConversionWatcher){var n=f.dropConversionWatcher;f.dropConversionWatcher=null,u(function(){n()})}if(s=i.updateDataDependentDisplay(e,t,s,f),o(e,t),O.formsAngular.title){var r=O.formsAngular.title.prefix||"";if(f.editFormHeader)r+=f.editFormHeader();else for(var a in f.listSchema)f.listSchema.hasOwnProperty(a)&&(r+=f.getListData(f.record,f.listSchema[a].name)+" ");r=r.trimEnd()+(O.formsAngular.title.suffix||""),d.document.title=r.replace(/<\/?[^>]+(>|$)/g,"")}}},!0),f.id)"function"==typeof f.dataEventFunctions.onBeforeRead?f.dataEventFunctions.onBeforeRead(f.id,function(e){e?f.showError(e):(t.beginReadingRecord(f),t.finishReadingThenProcessRecord(f,p))}):t.finishReadingThenProcessRecord(f,p);else{p.allowLocationChange=!1,p.master=f.setDefaults(f.formSchema);var a=f.initialiseNewRecord||c.$$search.r;if(a)try{Object.assign(p.master,JSON.parse(a)),f.newRecordsStartPristine||f.$on("fngCancel",function(){u(function(){f[f.topLevelFormName]&&f[f.topLevelFormName].$setDirty()},1e3)})}catch(e){console.log("Error parsing specified record : "+e.message)}"function"==typeof f.dataEventFunctions.onInitialiseNewRecord&&(console.log("onInitialiseNewRecord is deprecated - use the async version - onNewRecordInit(data,cb)"),f.dataEventFunctions.onInitialiseNewRecord(p.master)),"function"==typeof f.dataEventFunctions.onNewRecordInit?f.dataEventFunctions.onNewRecordInit(p.master,function(e){e?f.showError(e):r()}):r()}}}function t(a){return function(e){if(-1!==[200,400,403].indexOf(e.status)){var t="";if(e.data&&e.data.errors)for(var n in e.data.errors)if(e.data.errors.hasOwnProperty(n)){switch(t+="<li><b>"+i("titleCase")(n)+": </b> ",e.data.errors[n].type){case"enum":t+="You need to select from the list of values";break;default:t+=e.data.errors[n].message}t+="</li>"}t=0<t.length?(e.data.message||e.data._message)+"<br /><ul>"+t+"</ul>":e.data.message||e.data._message||e.data.err||"Error! Sorry - No further details available.",a.phase="error",a.showError(t)}else if(404===e.status)c.search({}).path("/404");else{var r=e.data;"string"!=typeof r&&(r=JSON.stringify(r)),500!==e.status&&(r=e.status+" "+r),a.showError(r)}}}function T(e,t,n){n.allowLocationChange=!1,t.phase="reading","function"==typeof t.dataEventFunctions.onAfterRead&&t.dataEventFunctions.onAfterRead(e),t.originalData=e,F(e,t,n)}function r(e,t,n,r){var a=t.name.split("."),i=r.find(function(e){return e.ref.property===n.property&&e.ref.value===n.value}),o={formInstructions:t,lastPart:a.pop(),possibleArray:a.join(".")};i||(i={ref:n,lookupOptions:[],lookupIds:[],handlers:[]},r.push(i)),i.handlers.push(o),e[t.options]=i.lookupOptions,e[t.ids]=i.lookupIds}return{beginReadingRecord:function(e){e.readingRecord=m.readRecord(e.modelName,e.id,e.formName)},finishReadingThenProcessRecord:function(t,n){var r="function"==typeof O.formsAngular.beforeHandleIncomingDataPromises;(r?Promise.all(__spreadArray([t.readingRecord],O.formsAngular.beforeHandleIncomingDataPromises(),!0)):t.readingRecord).then(function(e){T(r?angular.copy(e[0].data):e.data,t,n)}).catch(function(e){t.dataEventFunctions.onReadError?t.dataEventFunctions.onReadError(t.id,e):404===e.status?c.search({}).path("/404"):t.handleHttpError(e)})},scrollTheList:function(n){var r=n.pagesLoaded;m.getPagedAndFilteredList(n.modelName,{aggregate:c.$$search.a,find:c.$$search.f,limit:n.pageSize,skip:r*n.pageSize,order:c.$$search.o,concatenate:!1}).then(function(e){var t=e.data;angular.isArray(t)?(!n.listSchema.find(function(e){return"disambiguation"===e.name})&&t.some(function(e){return e.disambiguation})&&n.listSchema.push({name:"disambiguation"}),r===n.pagesLoaded?(n.pagesLoaded++,n.recordList=n.recordList.concat(t)):console.log("DEBUG: infinite scroll component asked for a page twice - the model was "+n.modelName)):n.showError(t,"Invalid query")},n.handleHttpError)},deleteRecord:function(e,n,t){n.phase="deleting",m.deleteRecord(n.modelName,e,n.formName).then(function(){"function"==typeof n.dataEventFunctions.onAfterDelete&&n.dataEventFunctions.onAfterDelete(t.master),s.redirectTo()("onDelete",n,c)},function(e){var t;404===e.status?s.redirectTo()("onDelete",n,c):403===e.status?n.showError((null===(t=e.data)||void 0===t?void 0:t.message)||e.message||e.data||e,"Permission denied"):n.showError("".concat(e.statusText," (").concat(e.status,") while deleting record<br />").concat(e.data),"Error deleting record")})},updateDocument:function(e,n,r,a){r.phase="updating",m.updateRecord(r.modelName,r.id,e,r.formName).then(function(e){var t=e.data;!1!==t.success?("function"==typeof r.dataEventFunctions.onAfterUpdate&&r.dataEventFunctions.onAfterUpdate(t,a.master),n.redirect?(n.allowChange&&(a.allowLocationChange=!0),d.location=n.redirect):(T(t,r,a),r.setPristine(!1))):r.showError(t)},function(e){r.handleHttpError(e)})},createNew:function(e,n,r,a){m.createRecord(r.modelName,e,r.formName).then(function(e){var t=e.data;!1!==t.success?(a.allowLocationChange=!0,"function"==typeof r.dataEventFunctions.onAfterCreate&&r.dataEventFunctions.onAfterCreate(t),n.redirect?d.location=n.redirect:s.redirectTo()("edit",r,c,t._id)):r.showError(t)},r.handleHttpError)},getListData:k,suffixCleanId:b,getData:w,setData:y,setUpLookupOptions:function(e,i,o,s){var l=o[i.options]=[],c=o[i.ids]=[];(i.filter?m.getPagedAndFilteredList(e,Object.assign({concatenate:!0},i.filter)):m.getAllListAttributes(e)).then(function(e){var t=e.data;if(t){t.sort(function(e,t){return e.text.localeCompare(t.text)}),l.push.apply(l,t.map(function(e){return e.text})),c.push.apply(c,t.map(function(e){return e.id}));for(var n=new Set,r=0;r<l.length-1;r++)for(var a=r+1;a<l.length;a++)_.isEqual(l[r],l[a])&&n.add(l[r]);n.forEach(function(e){for(var t=0;t<l.length;t++)l[t]===e&&(l[t]+="("+c[t]+")")}),o.readingRecord&&o.readingRecord.then(function(){v(i,o,s)})}}).catch(function(e){o.handleHttpError(e)})},setUpLookupListOptions:function(i,o,s,l){var c=s[o.options]=[],d=s[o.ids]=[];"$"===i.id[0]?r(s,o,i,s.listLookups):m.readRecord(i.collection,s.$eval(i.id)).then(function(e){for(var t=e.data[i.property],n=0;n<t.length;n++){var r=t[n][i.value],a=_.sortedIndex(c,r);c[a]===r&&(r=r+" ("+t[n]._id+")",a=_.sortedIndex(c,r)),c.splice(a,0,r),d.splice(a,0,t[n]._id)}v(o,s,l)})},handleInternalLookup:function(e,t,n){r(e,t,n,e.internalLookups)},preservePristine:N,convertToMongoModel:function d(u,f,p,m,h){function v(e,t){var n;return t&&t.fngajax?e&&(n=e.id||e):e&&(n=e.text||(e.x?e.x.text:e)),n}function e(){var t=u[g],e=t.name.slice(p),n=k(f,e,null,m);if(t.schema){if(n)for(var r=0;r<n.length;r++)n[r]=d(t.schema,n[r],1+e.length,m,e)}else{if(t.array&&x(t)&&n)for(var a=0;a<n.length;a++)n[a]=n[a].x;var i=m[b(t,"_ids")];if(i&&0<i.length)S(e,f,function(e){return function(e,t,n,r){if(e.array){for(var a=[],i=0;i<t.length;i++)a.push(A(t[i],n,r,e.name));return a}return A(t,n,r,e.name)}(t,e,m[b(t,"Options")],i)});else{var o=D(m,e,h);if(o){var s=w(f,e,null),l=void 0;if(t.array){if(l=[],s)for(var c=0;c<s.length;c++)l[c]=v(s[c],o)}else l=v(s,o);y(f,e,null,l)}}}}for(var g=0;g<u.length;g++)e();return f},convertIdToListValue:E,handleError:t,decorateScope:function(l,n,r,a){l.handleHttpError=t(l),l.cancel=function(){angular.copy(a.master,l.record),l.$broadcast("fngCancel",l),u(l.setPristine)},l.$on("showErrorMessage",function(e,t){e.defaultPrevented||(e.defaultPrevented=!0,l.showError(t.body,t.title))}),l.showError=function(t,e){l.errorHideTimer&&l.clearTimeout(),l.errorMessage?l.errorMessage+="<br /><br />":l.errorMessage="",l.errorMessage+=function(){if(u(function(){l.phase="ready"},25),"string"==typeof t)return o.trustAsHtml(t);if(!t)return"An error occurred - that's all we got. Sorry.";if(t.message&&"string"==typeof t.message)return t.message;if(t.data&&t.data.message)return t.data.message;try{return JSON.stringify(t)}catch(e){return t}}(),l.alertTitle=e||"Error!",l.errorHideTimer=window.setTimeout(function(){l.dismissError(),l.$digest()},3500+1e3*(l.alertTitle+l.errorMessage).length/50),l.errorVisible=!0,window.setTimeout(function(){l.$digest()})},l.clearTimeout=function(){l.errorHideTimer&&(clearTimeout(l.errorHideTimer),delete l.errorHideTimer)},l.dismissError=function(){l.clearTimeout,l.errorVisible=!1,delete l.errorMessage,delete l.alertTitle},l.stickError=function(){clearTimeout(l.errorHideTimer)},l.prepareForSave=function(t){var n=r.convertToMongoModel(l.formSchema,angular.copy(l.record),0,l);l.id?"function"==typeof l.dataEventFunctions.onBeforeUpdate?l.dataEventFunctions.onBeforeUpdate(n,a.master,function(e){e?t(e):t(null,n)}):t(null,n):"function"==typeof l.dataEventFunctions.onBeforeCreate?l.dataEventFunctions.onBeforeCreate(n,function(e){e?t(e):t(null,n)}):t(null,n)},l.save=function(n){n=n||{},l.redirectOptions=n,l.prepareForSave(function(e,t){e?"_update_handled_"!==e&&u(function(){l.showError(e)}):l.id?r.updateDocument(t,n,l,a):r.createNew(t,n,l,a)})},l.newClick=function(){s.redirectTo()("new",l,c)},l.$on("$locationChangeStart",function(e,t){a.allowLocationChange||l.isCancelDisabled()||(e.preventDefault(),n.open({template:'<div class="modal-header">\n <h3>Record modified</h3>\n</div>\n<div class="modal-body">\n <p>Would you like to save your changes?</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-primary dlg-yes" ng-click="yes()">Yes</button>\n <button class="btn btn-warning dlg-no" ng-click="no()">No</button>\n <button class="btn dlg-cancel" ng-click="cancel()">Cancel</button>\n</div>',controller:"SaveChangesModalCtrl",backdrop:"static"}).result.then(function(e){e?l.save({redirect:t,allowChange:!0}):(a.allowLocationChange=!0,d.location=t)}).catch(p))}),l.deleteClick=function(){if(l.record._id){var e=void 0;if(l.unconfirmedDelete)e=Promise.resolve(!0);else e=n.open({template:'<div class="modal-header">\n <h3>Delete Item</h3>\n</div>\n<div class="modal-body">\n <p>Are you sure you want to delete this record?</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-primary dlg-no" ng-click="cancel()">No</button>\n <button class="btn btn-warning dlg-yes" ng-click="yes()">Yes</button>\n</div>',controller:"SaveChangesModalCtrl",backdrop:"static"}).result;e.then(function(e){function t(){r.deleteRecord(l.id,l,a)}e&&("function"==typeof l.dataEventFunctions.onBeforeDelete?l.dataEventFunctions.onBeforeDelete(a.master,function(e){e?"_delete_handled_"!==e&&l.showError(e):t()}):t())}).catch(p)}},l.isCancelDisabled=function(){var e;return!!(l[l.topLevelFormName]&&l[l.topLevelFormName].$pristine||"ready"!==l.phase)||"function"==typeof(null===(e=l.disableFunctions)||void 0===e?void 0:e.isCancelDisabled)&&l.disableFunctions.isCancelDisabled(l.record,a.master,l[l.topLevelFormName])},l.isSaveDisabled=function(){var e;l.whyDisabled=void 0;var t=!1;if(l[l.topLevelFormName]?l[l.topLevelFormName].$invalid?(l.whyDisabled="The form data is invalid:",function n(e,r){e.$$controls.forEach(function(e){if(e.$invalid)if(e.$$controls)n(e,e.$name);else if(l.whyDisabled+="<br /><strong>",r&&(l.whyDisabled+=r+" "),"bs2"===f.framework()&&e.$$element&&e.$$element.parent()&&e.$$element.parent().parent()&&e.$$element.parent().parent().find("label")&&e.$$element.parent().parent().find("label").text()?l.whyDisabled+=e.$$element.parent().parent().find("label").text():"bs3"===f.framework()&&e.$$element&&e.$$element.parent()&&e.$$element.parent().parent()&&e.$$element.parent().parent().parent()&&e.$$element.parent().parent().parent().find("label")&&e.$$element.parent().parent().parent().find("label").text()?l.whyDisabled+=e.$$element.parent().parent().parent().find("label").text():l.whyDisabled+=e.$name,l.whyDisabled+="</strong>: ",e.$error)for(var t in e.$error)if(e.$error.hasOwnProperty(t))switch(t){case"required":l.whyDisabled+="Field missing required value. ";break;case"pattern":l.whyDisabled+="Field does not match required pattern. ";break;default:l.whyDisabled+=t+". "}})}(l[l.topLevelFormName])):l[l.topLevelFormName].$pristine&&(t=!0):l.whyDisabled="Top level form name invalid",t||l.whyDisabled||"ready"!==l.phase)return!0;if("function"!=typeof(null===(e=l.disableFunctions)||void 0===e?void 0:e.isSaveDisabled))return!1;var n=l.disableFunctions.isSaveDisabled(l.record,a.master,l[l.topLevelFormName]);return l.whyDisabled="string"==typeof n?n:"An application level user-specified function is inhibiting saving the record",!!n},l.isDeleteDisabled=function(){var e;return!l.id||"ready"!==l.phase||"function"==typeof(null===(e=l.disableFunctions)||void 0===e?void 0:e.isDeleteDisabled)&&l.disableFunctions.isDeleteDisabled(l.record,a.master,l[l.topLevelFormName])},l.isNewDisabled=function(){var e;return"function"==typeof(null===(e=l.disableFunctions)||void 0===e?void 0:e.isNewDisabled)&&l.disableFunctions.isNewDisabled(l.record,a.master,l[l.topLevelFormName])},l.setDefaults=function(e,a){void 0===a&&(a="");var i={};return e.forEach(function(e){if(void 0!==e.defaultValue){for(var t=e.name.replace(a,"").split("."),n=i,r=0;r<t.length-1;r++)n[t[r]]||(n[t[r]]={}),n=n[t[r]];n[t[t.length-1]]=e.defaultValue}}),i},l.getVal=function(e,t){if(-1===e.indexOf("$index")||void 0!==t)return e=e.replace(/\$index/g,t),l.$eval("record."+e)},l.sortableOptions={update:function(e,t){e.target.hasAttribute("disabled")?t.item.sortable.cancel():l.topLevelFormName&&l[l.topLevelFormName].$setDirty()}},l.setUpCustomLookupOptions=function(e,t,n,r){for(var a=0,i=[l,r];a<i.length;a++){var o=i[a];o&&(o[e.ids]=t,o[e.options]=n)}var s=w(l.record,e.name);s&&(Array.isArray(s)&&(s=s.filter(function(e){return null!=e})),s=C(e,s,n,t),y(l.record,e.name,void 0,s))}},fillFormFromBackendCustomSchema:L,fillFormWithBackendSchema:function(t,n,r,a){e.getSchema(t.modelName,t.formName).then(function(e){L(e.data,t,n,r,a)},t.handleHttpError)}}}e=O.services||(O.services={}),t.$inject=["$location","$window","$filter","$timeout","$sce","RoutingService","CssFrameworkService","SubmissionsService","SchemasService"],e.RecordHandlerService=t}(fng=fng||{}),function(e){var t;function n(n){return{getSchema:function(e,t){return n.get("/api/schema/"+e+(t?"/"+t:""),{cache:!0})}}}t=e.services||(e.services={}),n.$inject=["$http"],t.SchemasService=n}(fng=fng||{}),function(d){var e;function t(r){function a(e){return!!d.formsAngular.elemSecurityFuncBinding&&("hidden"===e&&!!d.formsAngular.hiddenSecurityFuncName||"disabled"===e&&!!d.formsAngular.disabledSecurityFuncName)}function i(e,t){return a(t)&&("hidden"===t&&r[d.formsAngular.hiddenSecurityFuncName]&&(!e||!!e.isSecurelyHidden)||"disabled"===t&&r[d.formsAngular.disabledSecurityFuncName]&&(!e||!!e.isSecurelyDisabled))}function n(e,t){return r[d.formsAngular.hiddenSecurityFuncName](e,t)}function o(e,t){return r[d.formsAngular.disabledSecurityFuncName](e,t)}function s(e,t){return!!o(e,t)}function l(){return"one-time"===d.formsAngular.elemSecurityFuncBinding?"::":""}function t(e,t){return e&&t&&(n=e,null===(r=d.formsAngular.ignoreIdsForHideableOrDisableableAttrs)||void 0===r||!r.some(function(e){return n.includes(e)}))?" ".concat(t,' title="').concat(e,'"'):"";var n,r}function e(e){return t(e,d.formsAngular.disableableAttr)}function c(e){return t(e,d.formsAngular.hideableAttr)}return{canDoSecurity:a,canDoSecurityNow:i,isSecurelyHidden:n,isSecurelyDisabled:s,getHideableAttrs:c,getDisableableAttrs:e,getDisableableAncestorAttrs:function(e){return t(e,d.formsAngular.disableableAncestorAttr)},decorateSecurableScope:function(e,t){a("hidden")&&(!d.formsAngular.skipHiddenSecurityFuncName||null!=t&&t.overrideSkipping||"function"!=typeof r[d.formsAngular.skipHiddenSecurityFuncName]||!r[d.formsAngular.skipHiddenSecurityFuncName](null==t?void 0:t.pseudoUrl))&&(e.isSecurelyHidden=function(e){return n(e,null==t?void 0:t.pseudoUrl)}),a("disabled")&&(!d.formsAngular.skipDisabledSecurityFuncName||null!=t&&t.overrideSkipping||"function"!=typeof r[d.formsAngular.skipDisabledSecurityFuncName]||!r[d.formsAngular.skipDisabledSecurityFuncName](null==t?void 0:t.pseudoUrl))&&(e.isSecurelyDisabled=function(e){return s(e,null==t?void 0:t.pseudoUrl)},(!d.formsAngular.skipDisabledAncestorSecurityFuncName||null!=t&&t.overrideSkipping||(r[d.formsAngular.skipDisabledAncestorSecurityFuncName],1)||!r[d.formsAngular.skipDisabledAncestorSecurityFuncName](null==t?void 0:t.pseudoUrl))&&(e.requiresDisabledChildren=function(e){return"+"===o(e,null==t?void 0:t.pseudoUrl)}))},doSecurityWhenReady:function(t){if(i(void 0,"hidden"))t();else if(a("hidden"))var n=r.$watch(d.formsAngular.hiddenSecurityFuncName,function(e){e&&(n(),t())})},considerVisibility:function(e,t){var n=c(e);if(i(t,"hidden")){if("instant"!==d.formsAngular.elemSecurityFuncBinding)return{visibilityAttr:'data-ng-if="'.concat(l(),"!isSecurelyHidden('").concat(e,"')\"").concat(n)};if(t.isSecurelyHidden(e))return{omit:!0}}return{visibilityAttr:n}},considerContainerVisibility:function(e,t){if(i(t,"hidden")){if("instant"===d.formsAngular.elemSecurityFuncBinding)return e.some(function(e){return!t.isSecurelyHidden(e)})?{}:{omit:!0};var n=e.map(function(e){return"!isSecurelyHidden('".concat(e,"')")});return{visibilityAttr:'data-ng-if="'.concat(l(),"(").concat(n.join(" || "),')"')}}return{}},generateDisabledAttr:function(n,r,a){return function(){var e="";if(i(r,"disabled")){if((a=a||{}).attrRequiresValue&&a.forceNg)throw new Error("Invalid combination of parameters provided to generateDisabledAttr() [attrRequiresValue and forceNg]");var t=a.attr||"disabled";if("instant"===d.formsAngular.elemSecurityFuncBinding){if(r.isSecurelyDisabled(n)){if(a.attrRequiresValue)return" ".concat(t,'="true"');if(!a.forceNg)return" ".concat(t);e="true"}}else e="".concat(l(),"isSecurelyDisabled('").concat(n,"')");if(e)return"disabled"===t?' data-ng-disabled="'.concat(e,'"'):" data-ng-attr-".concat(t,'="').concat(e,'"')}return e}()+e(n)}}}e=d.services||(d.services={}),t.$inject=["$rootScope"],e.SecurityService=t}(fng=fng||{});var fng,ExpirationCache=function(){function e(e){void 0===e&&(e=6e4),this.store=new Map,this.timeout=e}return e.prototype.get=function(e){return this.store.get(e)},e.prototype.put=function(e,t){var n=this;this.store.set(e,t),setTimeout(function(){n.remove(e)},this.timeout)},e.prototype.remove=function(e){this.store.delete(e)},e.prototype.removeAll=function(){this.store=new Map},e.prototype.delete=function(){},e}();!function(e){var t;function n(i){function n(e){function t(e,t){void 0!==t&&""!==t&&("object"==typeof t&&(t=JSON.stringify(t)),""===n?n="?":n+="&",n+=e+"="+t)}var n="";return t("l",e.limit),t("f",e.find),t("p",e.projection),t("a",e.aggregate),t("o",e.order),t("s",e.skip),t("c",e.concatenate),n}var r=!0,o=new ExpirationCache;function s(e,t,n){var r="/api/".concat(e);return t&&(r+="/".concat(t)),n&&(r+="/".concat(n)),r}return{getListAttributes:function(e,t,n){var r="string"==typeof t?t:t.id||t._id||t.x||t;if("object"==typeof r)throw new Error("getListAttributes doesn't expect an object but was provided with ".concat(JSON.stringify(t)));var a=n?"?returnRaw=1":"";return i.get("/api/".concat(e,"/").concat(r,"/list").concat(a),{cache:o})},getAllListAttributes:function(e){return i.get("/api/".concat(e,"/listAll"),{cache:o})},getPagedAndFilteredList:function(e,t){if(t.projection)throw new Error("Cannot use projection option for getPagedAndFilteredList, because it only returns list fields");return void 0===t.concatenate&&(t.concatenate=!1),i.get("/api/".concat(e,"/listAll").concat(n(t)))},getPagedAndFilteredListFull:function(e,t){return i.get("/api/".concat(e).concat(n(t)))},readRecord:function(e,t,n){var r="string"==typeof t?t:t.id||t._id||t.x||t;if("object"==typeof r)throw new Error("readRecord doesn't expect an object but was provided with ".concat(JSON.stringify(t)));var a=s(e,n,r);return i.get(a)},getAll:function(e,t){var n=angular.extend({cache:!!r&&o},t);return i.get("/api/".concat(e),n)},deleteRecord:function(e,t,n){var r=s(e,n,t);return i.delete(r)},updateRecord:function(e,t,n,r){o.remove("/api/".concat(e));var a=s(e,r,t);return i.post(a,n)},createRecord:function(e,t,n){o.remove("/api/".concat(e));var r=s(e,n)+"/new";return i.post(r,t)},useCache:function(e){r=e},getCache:function(){return!!o},clearCache:function(){o.removeAll()}}}t=e.services||(e.services={}),n.$inject=["$http"],t.SubmissionsService=n}(fng=fng||{}),function(f){var e;function t(t,n,e,r,a,i,o,s,l){t.sharedData={record:{},disableFunctions:{},dataEventFunctions:{},modelControllers:[]};var c={master:{},fngInvalidRequired:"fng-invalid-required",allowLocationChange:!0};t.errorVisible=!1,angular.extend(t,o.parsePathFunc()(e.$$path));var d=r("titleCase")(t.modelName,!0);function u(){l.fillFormWithBackendSchema(t,s,l,c);for(var e=0;e<t.sharedData.modelControllers.length;e++)t.sharedData.modelControllers[e].onBaseCtrlReady&&t.sharedData.modelControllers[e].onBaseCtrlReady(t);t.$on("$destroy",function(){t.sharedData.modelControllers.forEach(function(e){return e.$destroy()}),n.$broadcast("fngControllersUnloaded")})}i.loadControllerAndMenu(t.sharedData,d,0,!1,t.$new()),t.formName&&i.loadControllerAndMenu(t.sharedData,d+r("titleCase")(t.formName,!0),1,!1,t.$new()),n.$broadcast("fngControllersLoaded",t.sharedData,t.modelName),t.modelNameDisplay=t.sharedData.modelNameDisplay||r("titleCase")(t.modelName),n.$broadcast("fngFormLoadStart",t),s.decorateScope(t,s,l,t.sharedData),l.decorateScope(t,a,l,c),"function"==typeof f.formsAngular.beforeProcess?f.formsAngular.beforeProcess(t,function(e){e?t.showError(e.message,"Error preparing to process form"):u()}):u()}e=f.controllers||(f.controllers={}),t.$inject=["$scope","$rootScope","$location","$filter","$uibModal","FngModelCtrlService","RoutingService","FormGeneratorService","RecordHandlerService"],e.BaseCtrl=t}(fng=fng||{}),function(e){var t;function n(e,t){e.yes=function(){t.close(!0)},e.no=function(){t.close(!1)},e.cancel=function(){t.dismiss("cancel")}}t=e.controllers||(e.controllers={}),n.$inject=["$scope","$uibModalInstance"],t.SaveChangesModalCtrl=n}(fng=fng||{}),function(e){var t;function n(t,e,n,r){t.models=[],e.get("/api/models").then(function(e){t.models=e.data},function(){n.search({}).path("/404")}),t.newUrl=function(e){return r.buildUrl(e+"/new")},t.listUrl=function(e){return r.buildUrl(e)}}t=e.controllers||(e.controllers={}),n.$inject=["$scope","$http","$location","RoutingService"],t.ModelCtrl=n}(fng=fng||{}),function(u){var e;function t(a,e,o,r,t,n,i){var s;function l(){o.items=[],o.contextMenu=void 0,o.contextMenuId=void 0,o.contextMenuHidden=void 0,o.contextMenuDisabled=void 0}function c(e){o.contextMenu=e;var t="".concat(_.camelCase(e),"ContextMenu");o.contextMenuId=void 0,i.doSecurityWhenReady(function(){o.contextMenuId=t,o.contextMenuHidden=i.isSecurelyHidden(o.contextMenuId),o.contextMenuDisabled=i.isSecurelyDisabled(o.contextMenuId)})}a.navScope=o,l(),o.toggleCollapsed=function(){o.collapsed=!o.collapsed},o.isCollapsed=!0,o.showShortcuts=!1,o.shortcuts=[{key:"?",act:"Show shortcuts"},{key:"/",act:"Jump to search"},{key:"Ctrl+Shift+S",act:"Save the current record"},{key:"Ctrl+Shift+Esc",act:"Cancel changes on the current record"},{key:"Ctrl+Shift+Ins",act:"Create a new record"},{key:"Ctrl+Shift+X",act:"Delete the current record"}],null!==(s=u.formsAngular.keyboardShortCuts)&&void 0!==s&&s.forEach(function(e){o.shortcuts.push({key:"Ctrl+Shift+"+e.letter,act:e.desc})}),o.markupShortcut=function(e){return'<span class="key">'+e.split("+").join('</span> + <span class="key">')+"</span>"},o.globalShortcuts=function(n){function t(e){var t=document.getElementById(e);t&&(t.disabled||setTimeout(function(){t.click()}),n.preventDefault())}var e,r,a=n.ctrlKey&&n.shiftKey&&!n.altKey&&!n.metaKey;if(191===n.keyCode&&(!("INPUT"==(r=(e=n).target.tagName)||"SELECT"==r||"TEXTAREA"==r||"DIV"==r&&e.target.classList.contains("ck-editor__editable"))||n.ctrlKey&&!n.altKey&&!n.metaKey))if(n.ctrlKey||!n.shiftKey){var i=document.getElementById("searchinput");i&&(i.focus(),n.preventDefault())}else o.showShortcuts=!0;else 27===n.keyCode&&(a||o.showShortcuts)?a?t("cancelButton"):o.showShortcuts=!1:a&&(83===n.keyCode?t("saveButton"):45===n.keyCode?t("newButton"):88===n.keyCode?t("deleteButton"):u.formsAngular.keyboardShortCuts&&u.formsAngular.keyboardShortCuts.forEach(function(e){n.keyCode===e.keycode&&t(e.id)}))},o.css=function(e,t){return"function"==typeof n[e]?n[e](t):"error text-error"},o.$on("fngControllersLoaded",function(e,t,n){c(t.dropDownDisplay||t.modelNameDisplay||r("titleCase")(n,!1)),t.dropDownDisplayPromise&&t.dropDownDisplayPromise.then(function(e){c(e)})}),o.$on("fngControllersUnloaded",function(e){l()}),o.doClick=function(e,t,n){var r=angular.element(t.target);if((n=n||o.items[e]).divider||r.parent().hasClass("disabled"))t.preventDefault();else if(n.broadcast)a.$broadcast.apply(a,__spreadArray([n.broadcast],n.args||[],!1));else if("function"==typeof n.fn)n.fn.apply(n,n.args||[]);else if(n.fn)throw new Error("Incorrect menu setup")},o.isHidden=function(e){function t(e){return!!e.isHidden&&e.isHidden()}var n=!1,r=o.items[e];if(r.divider)if(0===e)n=!0;else for(var a=!1,i=e-1;0<=i&&!n&&!a;)o.items[i].divider?n=!0:t(o.items[i])?--i:a=!0;return n||t(r)},o.isDisabled=function(e){return!!o.items[e].isDisabled&&o.items[e].isDisabled()},o.buildUrl=function(e){return t.buildUrl(e)},o.dropdownClass=function(e){var t="";return o.items[e].divider?t="divider":o.isDisabled(e)&&(t="disabled"),t};var d=e.document.title;o.$on("$routeChangeSuccess",function(){e.document.title=d})}e=u.controllers||(u.controllers={}),t.$inject=["$rootScope","$window","$scope","$filter","RoutingService","CssFrameworkService","SecurityService"],e.NavCtrl=t}(fng=fng||{}),function(e){e.formsAngular=angular.module("formsAngular",["ngSanitize","ngMessages","ui.bootstrap","infinite-scroll","monospaced.elastic"]).controller("BaseCtrl",e.controllers.BaseCtrl).controller("SaveChangesModalCtrl",e.controllers.SaveChangesModalCtrl).controller("LinkCtrl",e.controllers.LinkCtrl).controller("ModelCtrl",e.controllers.ModelCtrl).controller("NavCtrl",e.controllers.NavCtrl).directive("modelControllerDropdown",e.directives.modelControllerDropdown).directive("dropDownItem",e.directives.dropDownItem).directive("dropDownSubMenu",e.directives.dropDownSubMenu).directive("errorDisplay",e.directives.errorDisplay).directive("fngLink",e.directives.fngLink).directive("formInput",e.directives.formInput).directive("formButtons",e.directives.formButtons).directive("globalSearch",e.directives.globalSearch).directive("fngNakedDate",e.directives.fngNakedDate).filter("camelCase",e.filters.camelCase).filter("titleCase",e.filters.titleCase).filter("extractTimestampFromMongoID",e.filters.extractTimestampFromMongoID).service("AddAllService",e.services.AddAllService).provider("CssFrameworkService",e.services.CssFrameworkService).provider("RoutingService",e.services.RoutingService).factory("FngModelCtrlService",e.services.FngModelCtrlService).factory("FormGeneratorService",e.services.FormGeneratorService).factory("FormMarkupHelperService",e.services.FormMarkupHelperService).factory("InputSizeHelperService",e.services.InputSizeHelperService).factory("PluginHelperService",e.services.PluginHelperService).factory("RecordHandlerService",e.services.RecordHandlerService).factory("SchemasService",e.services.SchemasService).factory("SubmissionsService",e.services.SubmissionsService).factory("SecurityService",e.services.SecurityService)}(fng=fng||{});var formsAngular=fng.formsAngular;angular.module("formsAngular").run(["$templateCache",function(e){e.put("base-analysis.html",'<div ng-controller="AnalysisCtrl">\n <error-display></error-display>\n <div ng-hide="!showLoading" class="loading">Loading…</div>\n <div class="container-fluid page-header report-header">\n <div class="header-lhs">\n <h1>{{ titleWithSubstitutions }}</h1>\n </div>\n <div class="header-rhs">\n <form-input schema="paramSchema" name="paramForm" ng-show="paramSchema" formstyle="horizontalCompact"></form-input>\n </div>\n </div>\n <div class="container-fluid page-body report-body">\n <div class="row-fluid report-grow">\n <div class="gridStyle" style="height:100%;" ui-grid="gridOptions" ui-grid-selection ui-grid-resize-columns></div>\n </div>\n </div>\n</div>\n'),e.put("base-edit.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="phase == \'ready\' && !showLoading" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header edit-header">\n <div class="header-lhs col-sm-8 span8">\n <h1 id="header-text">{{modelNameDisplay}} :\n <span id="header-data-desc">\n <span ng-show="!!editFormHeader" >{{ editFormHeader() }}</span>\n <span ng-hide="!!editFormHeader" ng-repeat="field in listSchema" ng-bind-html="getListData(record, field.name) + \' \'"></span>\n </span>\n </h1>\n </div>\n <div class="header-rhs col-sm-2 span2">\n <div form-buttons></div>\n </div>\n </div>\n <div class="container-fluid page-body edit-body">\n <form-input name="baseForm" schema="baseSchema()" formstyle="compact"></form-input>\n </div>\n\x3c!-- <pre>--\x3e\n \x3c!--Record--\x3e\n \x3c!--{{ record | json }}--\x3e\n \x3c!--formSchema--\x3e\n \x3c!--{{ formSchema | json }}--\x3e\n\x3c!-- </pre>--\x3e\n</div>\n'),e.put("base-list-view.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="!showLoading" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header list-header">\n <div class="header-lhs col-sm-8 span8">\n <h1>{{modelNameDisplay}}</h1>\n </div>\n </div>\n <div class="page-body list-body">\n <div ng-class="css(\'rowFluid\')" infinite-scroll="scrollTheList()">\n <a ng-repeat="record in recordList" ng-href="{{generateViewUrl(record)}}">\n <div class="list-item">\n <div ng-class="css(\'span\',12/listSchema.length)" ng-repeat="field in listSchema">{{getListData(record, field.name)}} </div>\n </div>\n </a>\n </div>\n </div>\n</div>\n'),e.put("base-list.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="!showLoading" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header list-header">\n <div class="header-lhs col-sm-8 span8">\n <h1>{{modelNameDisplay}}</h1>\n </div>\n <div class="header-rhs col-sm-2 span2">\n <a ng-href="{{generateNewUrl()}}"><button id="newBtn" class="btn btn-default"><i class="icon-plus"></i> New</button></a>\n </div>\n </div>\n <div class="page-body list-body">\n <div ng-class="css(\'rowFluid\')" infinite-scroll="scrollTheList()">\n <a ng-repeat="record in recordList" ng-href="{{generateEditUrl(record)}}">\n <div class="list-item">\n <div ng-class="css(\'span\',12/listSchema.length)" ng-repeat="field in listSchema">{{getListData(record, field.name)}} </div>\n </div>\n </a>\n </div>\n </div>\n</div>\n'),e.put("base-view.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="phase == \'ready\' && !spinning" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header edit-header">\n <div class="header-lhs col-sm-8 span8">\n <h1 id="header-text">{{modelNameDisplay}} :\n <span ng-repeat="field in listSchema" ng-bind-html="getListData(record, field.name) + \' \'"></span>\n </h1>\n </div>\n </div>\n <div class="container-fluid page-body edit-body">\n <form-input name="baseForm" schema="baseSchema()" formstyle="compact" viewform="true"></form-input>\n </div>\n</div>\n'),e.put("error-display-bs2.html",'<div id="display-error" ng-show="errorVisible" class="row-fluid ng-hide">\n <div class="alert alert-error offset1 span10">\n <button type="button" id="err-hide" class="close" ng-click="dismissError()"><i class="icon-remove"></i></button>\n <button type="button" id="err-pin" class="close" ng-click="stickError()"><i class="icon-eye-open"></i></button>\n <h4 id="err-title">{{alertTitle}}</h4>\n <div id="err-msg" ng-bind-html="errorMessage"></div>\n </div>\n</div>\n'),e.put("error-display-bs3.html",'<div id="display-error" ng-show="errorVisible" class="row ng-hide">\n <div class="alert alert-error col-md-offset-1 col-md-10 alert-danger">\n <button type="button" id="err-hide" class="close" ng-click="dismissError()"><i class="glyphicon glyphicon-remove"></i></button>\n <button type="button" id="err-pin" class="close" ng-click="stickError()"><i class="glyphicon glyphicon-pushpin"></i></button>\n <h4 id="err-title">{{alertTitle}}</h4>\n <div id="err-msg" ng-bind-html="errorMessage"></div>\n </div>\n</div>\n'),e.put("error-messages.html",'<div ng-message="required">A value is required for this field</div>\n<div ng-message="minlength">Too few characters entered</div>\n<div ng-message="maxlength">Too many characters entered</div>\n<div ng-message="min">That value is too small</div>\n<div ng-message="max">That value is too large</div>\n<div ng-message="email">You need to enter a valid email address</div>\n<div ng-message="pattern">This field does not match the expected pattern</div>\n'),e.put("form-button-bs2.html",'<div class="form-btn-grp">\n <div class="btn-group pull-right">\n <button id="saveButton" class="btn btn-mini btn-primary form-btn" ng-click="save()" ng-disabled="isSaveDisabled()"><i class="icon-ok"></i> Save</button>\n <div id="why-disabled" ng-class="{showwhy:!!whyDisabled}" ng-bind-html="whyDisabled"></div>\n <button id="cancelButton" class="btn btn-mini btn-warning form-btn" ng-click="cancel()" ng-disabled="isCancelDisabled()"><i class="icon-remove"></i> Cancel</button>\n </div>\n <div class="btn-group pull-right">\n <button id="newButton" class="btn btn-mini btn-success form-btn" ng-click="newClick()" ng-disabled="isNewDisabled()"><i class="icon-plus"></i> New</button>\n <button id="deleteButton" class="btn btn-mini btn-danger form-btn" ng-click="deleteClick()" ng-disabled="isDeleteDisabled()"><i class="icon-minus"></i> Delete</button>\n </div>\n</div>\n'),e.put("form-button-bs3.html",'<div class="form-btn-grp">\n <div class="btn-group pull-right">\n <button id="saveButton" class="btn btn-primary form-btn btn-xs" ng-click="save()" ng-disabled="isSaveDisabled()"><i class="glyphicon glyphicon-ok"></i> Save</button>\n <div id="why-disabled" ng-class="{showwhy:!!whyDisabled}" ng-bind-html="whyDisabled"></div>\n <button id="cancelButton" class="btn btn-warning form-btn btn-xs" ng-click="cancel()" ng-disabled="isCancelDisabled()"><i class="glyphicon glyphicon-remove"></i> Cancel</button>\n </div>\n <div class="btn-group pull-right">\n <button id="newButton" class="btn btn-success form-btn btn-xs" ng-click="newClick()" ng-disabled="isNewDisabled()"><i class="glyphicon glyphicon-plus"></i> New</button>\n <button id="deleteButton" class="btn btn-danger form-btn btn-xs" ng-click="deleteClick()" ng-disabled="isDeleteDisabled()"><i class="glyphicon glyphicon-minus"></i> Delete</button>\n </div>\n</div>\n'),e.put("search-bs2.html",'<form class="navbar-search pull-right">\n <div id="search-cg" class="control-group" ng-class="errorClass">\n <input type="text" spellcheck="false" autocomplete="off" id="searchinput" ng-model="searchTarget" ng-model-options="{debounce:500}" class="search-query" placeholder="{{searchPlaceholder}}" ng-keyup="handleKey($event)">\n </div>\n</form>\n<div class="results-container" ng-show="results.length >= 1">\n <div class="search-results">\n <div ng-repeat="result in results">\n <a href="{{result.href}}" ng-class="resultClass($index)" title="{{result.additional}}">{{result.resourceText}} {{result.text}}</a>\n </div>\n <div ng-show="moreCount > 0">(plus more - continue typing to narrow down search...)\n </div>\n </div>\n</div>\n'),e.put("search-bs3.html",'<form class="pull-right navbar-form">\n <div id="search-cg" class="form-group" ng-class="errorClass">\n <input type="text" spellcheck="false" autocomplete="off" id="searchinput" ng-model="searchTarget" ng-model-options="{debounce:500}" class="search-query form-control" placeholder="{{searchPlaceholder}}" ng-keyup="handleKey($event)">\n </div>\n</form>\n<div class="results-container" ng-show="results.length >= 1">\n <div class="search-results">\n <div ng-repeat="result in results">\n <a href="{{result.href}}" ng-class="resultClass($index)" title="{{result.additional}}">{{result.resourceText}} {{result.text}}</a>\n </div>\n <div ng-show="moreCount > 0">(plus more - continue typing to narrow down search...)\n </div>\n </div>\n</div>\n')}]);
|
|
1
|
+
var __spreadArray=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,a=0,i=t.length;a<i;a++)!r&&a in t||((r=r||Array.prototype.slice.call(t,0,a))[a]=t[a]);return e.concat(r||Array.prototype.slice.call(t))};!function(s){var e;function t(n){return{restrict:"AE",replace:!0,link:function(e,t){t.replaceWith(n(' <a ng-show="choice.text || choice.textFunc" class="dropdown-option" ng-href="{{choice.url || choice.urlFunc()}}" ng-click="doClick($index, $event, choice)"> {{ choice.text || choice.textFunc() }} </a>')(e))}}}function n(a){return{restrict:"AE",replace:!0,link:function(e,t){var n=t[0].parentElement,r=a(' <a ng-show="choice.text || choice.textFunc" class="dropdown-option open-sub-menu" data-ng-mouseenter="mouseenter()"> {{ choice.text || choice.textFunc() }} </a> <ul class="uib-dropdown-menu dropdown-menu sub-menu"> <li ng-repeat="choice in choice.items" ng-attr-id="{{choice.id}}"> <drop-down-item data-ng-if="::!choice.items"></drop-down-item> <drop-down-sub-menu data-ng-if="::choice.items"></drop-down-sub-menu> </li> </ul>')(e);t.replaceWith(r),e.mouseenter=function(){var e=n.getBoundingClientRect(),t=r[2].getBoundingClientRect().height-5;t>e.top&&(t-=t-e.top+e.height),t-=e.height,r[2].style.top="-".concat(t,"px")}}}}function r(e){var t,n,r="isHidden($index)",a='ng-class="dropdownClass($index)"',i="normal"!==s.formsAngular.elemSecurityFuncBinding,o=i?"::":"";return e.canDoSecurity("hidden")?(t='ng-if="contextMenuId && !contextMenuHidden" '.concat(e.getHideableAttrs("{{ ::contextMenuId }}")),i?r='ng-if="::(choice.divider || !isSecurelyHidden(choice.id))" ng-hide="'.concat(r,'"'):"normal"===s.formsAngular.elemSecurityFuncBinding&&(r='ng-hide="'.concat(r,' || (!choice.divider && isSecurelyHidden(choice.id))"')),r+=" ".concat(e.getHideableAttrs("{{ ::choice.id }}"))):(t="",r='ng-hide="'.concat(r,'"')),e.canDoSecurity("disabled")?(n='disableable-link ng-disabled="contextMenuDisabled" '.concat(e.getDisableableAttrs("{{ ::contextMenuId }}")),a+=' class="{{ '.concat(o,"(!choice.divider && isSecurelyDisabled(choice.id)) ? 'disabled' : 'normal' }}\" ").concat(e.getDisableableAttrs("{{ ::choice.id }}"))):n="",{restrict:"AE",replace:!0,template:'<li id="{{ contextMenuId }}" ng-show="items.length > 0" class="mcdd" uib-dropdown '.concat(t," ").concat(n,">")+' <a href="#" id="context-menu-sel" uib-dropdown-toggle> {{contextMenu}} <b class="caret"></b> </a> <ul class="uib-dropdown-menu dropdown-menu">'+' <li ng-repeat="choice in items" ng-attr-id="{{choice.id}}" '.concat(r," ").concat(a,">")+' <drop-down-item data-ng-if="!choice.items"></drop-down-item> <drop-down-sub-menu data-ng-if="choice.items"></drop-down-sub-menu> </li> </ul></li>'}}e=s.directives||(s.directives={}),t.$inject=["$compile"],n.$inject=["$compile"],r.$inject=["SecurityService"],e.dropDownItem=t,e.dropDownSubMenu=n,e.modelControllerDropdown=r}(fng=fng||{}),function(e){var t;function n(e){return{restrict:"E",templateUrl:"error-display-"+e.framework()+".html"}}t=e.directives||(e.directives={}),n.$inject=["CssFrameworkService"],t.errorDisplay=n}(fng=fng||{}),function(e){var t;function n(a){a.checkNotModal=function(){for(var e,t=a.element[0],n=!1,r={preventDefault:angular.noop,stopPropagation:angular.noop,target:1,currentTarget:1};(e=t.parentNode)?"function"==typeof e.getAttribute&&e.getAttribute("uib-modal-window")?(angular.element(t).scope().close(r),n=!0):t=e:n=!0,!n;);}}t=e.controllers||(e.controllers={}),n.$inject=["$scope"],t.LinkCtrl=n}(fng=fng||{}),function(e){var t;function n(p,m){return{restrict:"E",scope:{dataSrc:"&model"},link:function(n,e,r){var a=r.ref,t=r.text&&unescape(r.text)!==r.text,i=r.form,o=r.linktab;if(n.readonly=r.readonly,n.element=e,i=i?i+"/":"",o=o?"/"+o:"",t){for(var s=n,l="";"function"!=typeof s.baseSchema&&s.$parent;){if(void 0!==s.$index)throw new Error("No support for $index at this level - "+l);s=s.$parent,l+="$parent."}var c,d=r.fld,u=d.split(".");c=n.$parent.subDoc&&(n.$parent.subDoc[d]||n.$parent.subDoc[u[u.length-1]])?n.$parent.subDoc[d]?l+"subDoc."+d:l+"subDoc."+u[u.length-1]:l+"record"+(d=void 0!==s.$index?(d=u.pop(),u.join(".")+"["+s.$index+"]."+d):"."+d),n.$watch(c,function(e){if(e){if(/^[a-f0-9]{24}/.test(e.toString()))e=e.slice(0,24);else if(e.id&&/^[a-f0-9]{24}/.test(e.id))e=e.id.slice(0,24);else if(n.$parent["f_"+r.fld+"Options"]){var t=n.$parent["f_"+r.fld+"Options"].indexOf(e);e=-1<t?n.$parent["f_"+r.fld+"_ids"][t]:void 0}else e=void 0;n.link=e?p.buildUrl(a+"/"+i+(e.id||e)+"/edit"+o):void 0}else n.link=void 0},!0)}else{r.text&&0<r.text.length&&(n.text=r.text);var f=n.$parent.$index;n.$watch("dataSrc()",function(e){e&&(void 0!==f&&angular.isArray(e)&&(e=e[f]),n.link=p.buildUrl(a+"/"+i+e+"/edit"+o),n.text||m.getListAttributes(a,e).then(function(e){var t=e.data;!1===t.success?n.text=t.err:n.text=t.list},function(e){n.text="Error "+e.status+": "+e.data}))},!0)}},controller:"LinkCtrl",template:function(e,t){function n(e){return'<a ng-click="checkNotModal()" ng-href="{{ link || \'#\' }}" class="fng-link">'.concat(e,"</a>")}return t.readonly?'<span class="fng-link">{{text}}</span>':t.text&&unescape(t.text)!==t.text?n(unescape(t.text)):n("{{text}}")}}}t=e.directives||(e.directives={}),n.$inject=["RoutingService","SubmissionsService"],t.fngLink=n}(fng=fng||{}),function(e){var t;function n(e){return{restrict:"A",templateUrl:"form-button-"+e.framework()+".html"}}t=e.directives||(e.directives={}),n.$inject=["CssFrameworkService"],t.formButtons=n}(fng=fng||{}),function(e){var t,P,n;function r(L,T,O,R,j,M,U,f){return{restrict:"EA",link:function(x,k,w){function D(t,e,n,r){function a(){var e;if(Array.isArray(x[t.options]))e={repeat:t.options,value:"option"};else{if(!x[t.options]||!Array.isArray(x[t.options].values))throw new Error("Invalid enumeration setup in field "+t.name);e=Array.isArray(x[t.options].labels)?{repeat:t.options+".values",value:t.options+".values[$index]",label:t.options+".labels[$index]"}:{repeat:t.options+".values",value:t.options+".values[$index]"}}return e}var i,o=t.id;if((t.array||r.subschema)&&(o=U.generateArrayElementIdString(o,t,r)),!e){var s=(r.model||"record")+".";if(e=s,r.subschema&&-1!==t.name.indexOf(".")){var l=t.name,c=r.subschemaroot,d=l.slice(c.length+1);r.index?o="f_"+(e+=c+"["+r.index+"]."+d).slice(s.length).replace(/(\.|\[|]\.)/g,"-"):(e+=c,r.subkey?(o=e.slice(s.length).replace(/\./g,"-")+"-subkey"+r.subkeyno+"-"+d,e+="[$_arrayOffset_"+c.replace(/\./g,"_")+"_"+r.subkeyno+"]."+d):(e+="[$index]."+d,i=l.replace(/\./g,"-")))}else e+=t.name}var u,f,p=U.allInputsVars(x,t,r,e,o,i),m=p.common,h=(n=n||t.required)?" required ":"";switch(t.type){case"select":t.select2?u='<input placeholder="fng-select2 has been removed" readonly>':(m+=U.handleReadOnlyDisabled(t,x).join(" "),m+=t.add?" "+t.add+" ":"",m+=' aria-label="'.concat(t.label&&""!==t.label?t.label:t.name,'" '),u="<select "+m+'class="'+p.formControl.trim()+p.compactClass+p.sizeClassBS2+'" '+h+">",n||(u+='<option value="">'+(t.placeHolder||"")+"</option>"),angular.isArray(t.options)?angular.forEach(t.options,function(e){_.isObject(e)?u+='<option value="'+(e.val||e.id)+'">'+(e.label||e.text)+"</option>":u+="<option>"+e+"</option>"}):(f=a(),u+='<option ng-repeat="option in '+f.repeat+'"',f.label?u+=' value="{{'+f.value+'}}"> {{ '+f.label+" }} </option> ":u+=">{{"+f.value+"}}</option> "),u+="</select>");break;case"link":u='<fng-link model="'+e+'" ref="'+t.ref+'"',t.form&&(u+=' form="'+t.form+'"'),t.linktab&&(u+=' linktab="'+t.linktab+'"'),t.linktext&&(u+=' text="'+t.linktext+'"'),t.readonly&&("boolean"==typeof t.readonly?u+=' readonly="true"':u+=' ng-readonly="'.concat(t.readonly,'"')),u+="></fng-link>";break;case"radio":u="",m+=h,m+=U.handleReadOnlyDisabled(t,x).join(" "),m+=t.add?" "+t.add+" ":"";var v="vertical"===r.formstyle||"inline"!==r.formstyle&&!t.inlineRadio;if(angular.isArray(t.options)){var g;r.subschema&&(m=(m=m.replace('name="','name="{{$index}}-')).replace('id="','id="{{$index}}-')),angular.forEach(t.options,function(e,t){g=m.replace('id="','id="'+t+"-"),u+="<input ".concat(g,' type="radio" aria-label="').concat(e,'" value="').concat(e,'">').concat(e),v&&(u+="<br />")})}else{var b=v?"div":"span";r.subschema&&(m=m.replace("$index","$parent.$index").replace('name="','name="{{$parent.$index}}-').replace('id="','id="{{$parent.$index}}-')),f=a(),u+="<"+b+' ng-repeat="option in '+f.repeat+'">',u+="<input ".concat(m.replace('id="','id="{{$index}}-'),' type="radio" aria-label="').concat(f.value,'" value="{{ ').concat(f.value,' }}"> {{ ').concat(f.label||f.value," }} </").concat(b,"> ")}break;case"checkbox":m+=h,m+=U.handleReadOnlyDisabled(t,x).join(" "),m+=t.add?" "+t.add+" ":"",u=U.generateSimpleInput(m,t,r),"bs3"===j.framework()&&(u='<div class="checkbox">'+u+"</div>");break;default:m+=U.addTextInputMarkup(p,t,h),m+=U.handleReadOnlyDisabled(t,x).join(" "),u="textarea"===t.type?(t.rows&&("auto"===t.rows?m+='msd-elastic="\n" class="ng-animate" ':m+='rows = "'+t.rows+'" '),"ckEditor"===t.editor&&(console.log('Deprecation Warning: "editor" property deprecated - use "add"'),m+='ckeditor = "" ',"bs3"===j.framework()&&(p.sizeClassBS3="col-xs-12")),"<textarea "+m+"></textarea>"):U.generateSimpleInput(m,t,r)}return U.inputChrome(u,t,r,p)}function $(e){var t;switch(e){case"horizontal":t="form-horizontal";break;case"vertical":t="";break;case"inline":t="form-inline";break;case"stacked":t="form-stacked";break;case"horizontalCompact":default:t="form-horizontal compact"}return t}function C(e){var t;if("function"==typeof e.containerType)t=e.containerType(e);else switch(t={},e.containerType){case"tab":for(var n=-1,r=0;r<x.tabs.length;r++)if(x.tabs[r].title===e.title){n=r;break}if(0<=n){var a="".concat(_.camelCase(e.title),"Tab"),i=f.considerVisibility(a,x);if(i.omit)t.omit=!0;else{var o='id="'.concat(a,'"');if(i.visibilityAttr&&(o+=" ".concat(i.visibilityAttr)),o+=f.generateDisabledAttr(a,x,{attr:"disable",attrRequiresValue:!0}),t.before="",e.hideable){var s="customTemplate_".concat(a,".html");t.before+='<script type="text/ng-template" id="'.concat(s,'">')+' <li ng-class="[{active: active, disabled: disabled}, classes]" class="uib-tab nav-item"> <div class="hideable-tab">'+' <span class="class="nav-link" data-ng-click="select($event)">'.concat(e.title,"</span> ")+' <button name="hide_'.concat(a,'_btn" data-ng-click="$parent.hideTab($event, \'').concat(e.title,"', '").concat(e.hiddenTabArrayProp,"')\"")+' style="position: relative; z-index: 20;" type="button" class="close pull-right"> <span aria-hidden="true">×</span><span class="sr-only">Close</span> </button> </div> </li><\/script>',o+=' template-url="'.concat(s,'"'),o+=' data-ng-show="!'.concat(e.hiddenTabArrayProp," || !").concat(e.hiddenTabArrayProp,".includes('").concat(e.title,"')\"")}else o+=' heading="'.concat(e.title,'"');0<n&&(o+=' active="tabs['.concat(n,'].active"')),t.before+="<uib-tab ".concat(o,' deselect="tabDeselect($event, $selectedIndex)" select="updateQueryForTab(\'').concat(e.title,"')\""),t.before+=">",t.after="</uib-tab>"}}else t.before="<p>Error! Tab ".concat(e.title," not found in tab list</p>"),t.after="";break;case"+tab":var l="addTabsTab",c="customTemplate_".concat(l,"_popover.html");t.before='<script type="text/ng-template" id="'.concat(c,'">')+' <div id="addableTabsList">'+' <div class="item" data-ng-repeat="tab in $parent.'.concat(e.hiddenTabArrayProp,'">')+' <button type="button" class="addTabButton btn" data-ng-click="$parent.addTab($event, tab, \''.concat(e.hiddenTabArrayProp,"')\">{{ tab }}")+" </div> </div><\/script>";var d="customTemplate_".concat(l,".html");t.before+='<script type="text/ng-template" id="'.concat(d,'">')+' <li class="uib-tab nav-item" data-ng-if="$parent.'.concat(e.hiddenTabArrayProp," && $parent.").concat(e.hiddenTabArrayProp,'.length > 0">')+' <div id="'.concat(l,'">')+' <button name="addTabsBtn" popover-trigger="\'outsideClick\'" popover-placement="bottom" popover-append-to-body="true" title="Reintroduce Optional Sections..." uib-popover-template="\''.concat(c,"'\"")+' style="position: relative; z-index: 20;" type="button" class="close pull-right"> <span aria-hidden="true">+</span><span class="sr-only">Add</span> </button> </div> </li><\/script>',t.before+='<uib-tab template-url="'.concat(d,'">'),t.after="</uib-tab>";break;case"tabset":t.before="<uib-tabset>",t.after="</uib-tabset>";break;case"well":t.before='<div class="well">',e.title&&(t.before+="<h4>"+e.title+"</h4>"),t.after="</div>";break;case"well-large":t.before='<div class="well well-lg well-large">',t.after="</div>";break;case"well-small":t.before='<div class="well well-sm well-small">',t.after="</div>";break;case"fieldset":t.before="<fieldset>",e.title&&(t.before+="<legend>"+e.title+"</legend>"),t.after="</fieldset>";break;case void 0:case null:case"":break;default:if(t.before='<div class="'+e.containerType+'">',e.title){var u=e.titleTagOrClass||"h4";u.match(/h[1-6]/)?t.before+="<"+u+">"+e.title+"</"+u+">":t.before+='<p class="'+u+'">'+e.title+"</p>"}t.after="</div>"}return t}function S(e,t){var n=U.fieldChrome(x,e,t);if(n.omit)return"";var r=n.template;if(e.schema){var a=e.name.replace(/\./g,"_"),i="$_schema_"+a;if(x[i]=e.schema,e.schema)if(e.subkey){e.subkey.path=e.name,x[i+"_subkey"]=e.subkey;for(var o=angular.isArray(e.subkey)?e.subkey:[e.subkey],s=0;s<o.length;s++){var l=C(o[s]);r+=l.before,r+=E(e.schema,null,{subschema:"true",formstyle:t.formstyle,subkey:i+"_subkey",subkeyno:s,subschemaroot:e.name,suppressNestingWarning:e.suppressNestingWarning}),r+=l.after}A.push(e)}else if(t.subschema)t.suppressNestingWarning||console.log("Attempts at supporting deep nesting have been removed - will hopefully be re-introduced at a later date");else{var c=(t.model||"record")+"."+e.name;if("string"==typeof e.customHeader)r+=e.customHeader;else{var d="";e.unshift&&(d='<button id="unshift_'+e.id+'_btn" class="add-btn btn btn-default btn-xs btn-mini form-btn" ng-click="unshift(\''+e.name+'\',$event)"><i class="'+U.glyphClass()+'-plus"></i> Add</button>'),"bs3"===j.framework()?r+='<div class="row schema-head"><div class="col-sm-offset-3">'+e.label+d+"</div></div>":r+='<div class="schema-head">'+e.label+d+"</div>"}"inline"===e.formStyle&&e.inlineHeaders&&(r+=function(e,t,n,r){for(var a=r?"":'ng-hide="!'.concat(n," || ").concat(n,'.length === 0"'),i='<div class="inline-col-headers" style="display:flex" '.concat(a,">"),o=0,s=e;o<s.length;o++){var l=s[o];N(l,t),i+="<div ",l.showWhen=l.showWhen||l.showwhen,l.showWhen&&("string"==typeof l.showWhen?i+='ng-show="'+l.showWhen+'"':i+='ng-show="'+U.generateNgShow(l.showWhen,n)+'"'),l.id&&"function"==typeof l.id.replace&&(i+=' id="col_label_'+l.id.replace(/\./g,"-")+'"'),i+=' class="inline-col-header"><label for="'.concat(l.id,'" class="control-label">').concat(l.label,"</label></div>")}return i+="</div>"}(e.schema,t,c,"always"===e.inlineHeaders));var u=U.handleReadOnlyDisabled(e,x)[0],f=e.sortable&&"disabled"!==u.trim().toLowerCase()?"".concat(u,' ui-sortable="sortableOptions" ng-model="').concat(c,'"'):"";r+='<ol class="sub-doc" '.concat(f,">");var p=U.genDisableableAncestorStr(e.id);r+='<li ng-form id="'.concat(e.id,'List_{{$index}}" name="form_').concat(a,'{{$index}}" ').concat(p)+' class="'.concat($(e.formStyle))+" ".concat("bs2"===j.framework()?"row-fluid":"")+" ".concat(e.inlineHeaders?"width-controlled":"")+" ".concat(e.ngClass?"ng-class:"+e.ngClass:"",'"')+' ng-repeat="subDoc in '.concat(c,' track by $index"')+" ".concat(e.filterable?'data-ng-hide="subDoc._hidden"':"")+">","bs2"===j.framework()&&(r+='<div class="row-fluid sub-doc">'),!0===e.noRemove&&!e.customSubDoc||(r+=' <div class="sub-doc-btns" '.concat(!0!==e.noRemove?p:"",">"),"string"==typeof e.customSubDoc&&(r+=e.customSubDoc),!0!==e.noRemove&&(r+="<button ".concat(u," ").concat(e.noRemove?'ng-hide="'+e.noRemove+'"':"",' name="remove_').concat(e.id,'_btn" ng-click="remove(\'').concat(e.name,"', $index, $event)\""),e.remove?r+=' class="remove-btn btn btn-mini btn-default btn-xs form-btn"><i class="'+U.glyphClass()+'-minus"></i> Remove':(r+=' style="position: relative; z-index: 20;" type="button" class="close pull-right">',"bs3"===j.framework()?r+='<span aria-hidden="true">×</span><span class="sr-only">Close</span>':r+="<span>×</span>"),r+="</button>"),r+="</div> ");var m=void 0;if(e.subDocContainerType){var h=x[e.subDocContainerType]||e.subDocContainerType,v=Object.assign({containerType:h},e.subDocContainerProps);m=C(v)}if(null!=m&&m.before&&(r+=m.before),r+=E(e.schema,!1,{subschema:"true",formstyle:e.formStyle,model:t.model,subschemaroot:e.name,suppressNestingWarning:e.suppressNestingWarning}),null!=m&&m.after&&(r+=m.after),"bs2"===j.framework()&&(r+=" </div>"),r+="</li>",r+="</ol>",!0!==e.noAdd||"string"==typeof e.customFooter||e.noneIndicator){var g="";"string"==typeof e.customFooter&&(g=e.customFooter);var b="",y="".concat(c,".length == 0");!0===e.noAdd?y='ng-show="'.concat(y,'"'):(b=e.noAdd?'ng-hide="'.concat(e.noAdd,'"'):"",y=e.noAdd?'ng-show="'.concat(e.noAdd," && ").concat(y,'"'):"",g+="<button ".concat(b," ").concat(u," ").concat(p,' id="add_').concat(e.id,'_btn" class="add-btn btn btn-default btn-xs btn-mini" ng-click="add(\'').concat(e.name,"',$event)\">")+' <i class="'.concat(U.glyphClass(),'-plus"></i> Add ')+"</button>"),e.noneIndicator&&(g+="<span ".concat(y,' class="none_indicator" id="no_').concat(e.id,'_indicator">None</span>'),b="".concat(c,".length > 0"),b=!0===e.noAdd?'ng-hide="'.concat(b,'"'):e.noAdd?'ng-hide="'.concat(e.noAdd," && ").concat(b,'"'):""),""!==g&&("bs3"===j.framework()?r+="<div ".concat(b,' class="row schema-foot"><div class="col-sm-offset-3">').concat(g,"</div></div>"):r+="<div ".concat(b,' class = "schema-foot ">').concat(g,"</div>"))}}}else{e.help=U.handlePseudos(x,e.help),e.label=U.handlePseudos(x,e.label),e.popup=U.handlePseudos(x,e.popup);var w=U.controlDivClasses(t,e);if(e.array){if(w.push("fng-array"),"inline"===t.formstyle||"stacked"===t.formstyle)throw new Error("Cannot use arrays in an inline or stacked form");r+=U.label(x,e,"link"!==e.type,t);var k=e.help;delete e.help;var S=D(e,"link"===e.type?null:"arrayItem.x",!0,t);e.help=k,r+=U.handleArrayInputAndControlDiv(S,w,x,e,t)}else r+=U.label(x,e,null,t),r+=U.handleInputAndControlDiv(D(e,null,t.required,t),w)}return r+=n.closeTag}var A=[],F=P.N,N=function(e,t){e.type=e.type||"text",e.id?"number"!=typeof e.id&&!e.id.match(/^[0-9]/)||(e.id="_"+e.id):t&&t.noid?e.id=null:e.id="f_"+e.name.replace(/\./g,"_"),e.label=void 0!==e.label?null===e.label?"":e.label:O("titleCase")(e.name.split(".").slice(-1)[0])},E=function(e,t,n){var r="";if(e)for(var a=0;a<e.length;a++){var i=e[a];n.viewform&&((i=angular.copy(i)).readonly=!0),0===a&&t&&!n.schema.match(/\$_schema_/)&&"object"!=typeof i.add&&(i.add=i.add?" "+i.add+" ":"",-1!==i.add.indexOf("ui-date")||n.noautofocus||i.containerType||(i.add=i.add+"autofocus "));var o=!0;if(i.directive){var s=i.directive,l=i.customHeader||"";l+="<"+s+' model="'+(n.model||"record")+'"';var c=k[0];N(i,n);for(var d=0;d<c.attributes.length;d++){var u=c.attributes[d];switch(u.nodeName){case"class":var f=u.value.replace("ng-scope","");0<f.length&&(l+=' class="'+f+'"');break;case"schema":var p=("bespoke_"+i.name).replace(/\./g,"_");x[p]=angular.copy(i),delete x[p].directive,l+=' schema="'+p+'"';break;default:l+=" "+u.nodeName+'="'+u.value+'"'}}l+=" ";var m=O("camelCase")(i.directive);for(var h in i)if(i.hasOwnProperty(h))switch(h){case"directive":case"schema":break;case"add":switch(typeof i.add){case"string":l+=" "+i.add;break;case"object":for(var v in i.add)i.add.hasOwnProperty(v)&&(l+=" "+v+'="'+i.add[v].toString().replace(/"/g,""")+'"');break;default:throw new Error("Invalid add property of type "+typeof i.add+" in directive "+i.name)}break;case m:for(var g in i[h])i[h].hasOwnProperty(g)&&(l+=" ".concat(i.directive,"-").concat(g,'="'),"string"==typeof i[h][g]?l+="".concat(i[h][g].replace(/"/g,"""),'"'):l+="".concat((JSON.stringify(i[h][g])||"").replace(/"/g,"""),'"'));break;default:i[h]&&("string"==typeof i[h]?l+=" fng-fld-"+h+'="'+i[h].replace(/"/g,""")+'"':l+=" fng-fld-"+h+'="'+(JSON.stringify(i[h])||"").replace(/"/g,""")+'"')}for(h in n)n.hasOwnProperty(h)&&"$"!==h[0]&&void 0!==n[h]&&(l+=" fng-opt-"+h+'="'+n[h].toString().replace(/"/g,""")+'"');l+='ng-model="'+i.name+'"></'+s+">",r+=l+=i.customFooter||"",o=!1}else if(i.containerType){var b=C(i);switch(i.containerType){case"tab":if(F===P.N){F=P.Forced,r+='<uib-tabset active="activeTabNo">';var y=_.findIndex(x.tabs,function(e){return e.active});x.activeTabNo=0<=y?y:0}b.omit||(r+=b.before,r+=E(i.content,null,n),r+=b.after);break;case"tabset":F=P.Y,r+=b.before,r+=E(i.content,null,n),r+=b.after;break;default:r+=b.before,r+=E(i.content,null,n),r+=b.after}o=!1}else if(n.subkey){var w=angular.isArray(x[n.subkey])?x[n.subkey][0].keyList:x[n.subkey].keyList;_.find(w,function(e,t){return x[n.subkey].path+"."+t===i.name})&&(o=!1)}o&&(N(i,n),r+=S(i,n))}else console.log("Empty array passed to processInstructions"),r="";return r};x.$on("regenerateFormMarkup",function(e,t){w.formid&&w.formid===t&&(F=P.N,r(x[w.schema]))});var I,n=x.$watch(w.schema,function(e){if(e){var t=angular.isArray(e)?e:[e];0<t.length&&"function"==typeof n&&(n(),n=null,r(t))}},!0),r=function(e){for(var t,n,r="",a=w.model||"record",g=x[a],i=e.filter(function(e){return e&&"tab"===e.containerType&&e.hideable}),o=0,s=i;o<s.length;o++){if((d=s[o]).hiddenTabArrayProp){if(t&&d.hiddenTabArrayProp!==t)throw new Error("Currently, tab sets with more than one value for hiddenTabArrayProp are not supported");t=d.hiddenTabArrayProp}if(d.hiddenTabReintroductionMethod){if(n&&d.hiddenTabReintroductionMethod!==n)throw new Error("Currently, tab sets with more than one value for hiddenTabReintroductionMethod are not supported");n=d.hiddenTabReintroductionMethod}}t=t||"record.hiddenTabs";for(var l=0,c=i;l<c.length;l++){var d;(d=c[l]).hiddenTabArrayProp=t}if("tab"===n&&e.push({containerType:"+tab",hiddenTabArrayProp:t,content:[]}),g=g||{},!w.subschema&&!w.model||w.forceform){x.topLevelFormName=w.name||"myForm";var u="";for(var f in w)w.hasOwnProperty(f)&&"$"!==f[0]&&-1===["name","formstyle","schema","subschema","model","viewform"].indexOf(f)&&(u+=" "+w.$attr[f]+'="'+w[f]+'"');var p=w.forceform?"ng-form":"form";r="<".concat(p,' name="').concat(x.topLevelFormName,'" class="').concat($(w.formstyle),'" novalidate ').concat(u,">")}else r="";if(g===x.topLevelFormName)throw new Error("Model and Name must be distinct - they are both "+g);r+=E(e,!0,w),F===P.Forced&&(r+="</uib-tabset>"),r+=w.subschema?"":"</form>";var m=L(r)(x);if(I){var h=x[x.topLevelFormName];I.replaceWith(m),x[x.topLevelFormName]=h}else k.replaceWith(m);I=m;var v=x[w.shared||"sharedData"],b=v?v.modelControllers:[];if((0<A.length||0<b.length)&&!x.phaseWatcher)var y=x.$watch("phase",function(e){if(x.phaseWatcher=!0,"ready"===e&&"function"==typeof y){y(),y=null;for(var t=0;t<b.length;t++)b[t].onAllReady&&b[t].onAllReady(x);for(var n=0;n<A.length;n++){for(var r,a,i=A[n],o=angular.isArray(i.subkey)?i.subkey:[i.subkey],s=i.name.split("."),l=g;1<s.length;)l=l[s.shift()]||{};l=l[s[0]]=l[s[0]]||[];for(var c=0;c<o.length;c++){if(o[c].selectFunc){if(!x[o[c].selectFunc]||"function"!=typeof x[o[c].selectFunc])throw new Error("Subkey function "+o[c].selectFunc+" is not properly set up");r=x[o[c].selectFunc](g,i)}else{if(!o[c].keyList)throw new Error("Invalid subkey setup for "+i.name);var d=o[c].keyList;for(r=0;r<l.length;r++){for(var u in a=!0,d)if(d.hasOwnProperty(u)&&l[r][u]!==d[u]&&(void 0===l[r][u]||!l[r][u].text||l[r][u].text!==d[u])){a=!1;break}if(a)break}if(!a)switch(o[c].onNotFound){case"error":var f="Cannot find matching "+(o[c].title||o[c].path);R(function(){x.showError(f,"Unable to set up form correctly")}),r=-1;break;case"create":default:var p=i.name.split("."),m=p.pop(),h=p.join("."),v=g;h&&(v=v[h]),r=v[m].push(d)-1}}x["$_arrayOffset_"+i.name.replace(/\./g,"_")+"_"+c]=r}}}});T.$broadcast("formInputDone",w.name),M.updateDataDependentDisplay&&g&&0<Object.keys(g).length&&M.updateDataDependentDisplay(g,null,!0,x)}}}}t=e.directives||(e.directives={}),r.$inject=["$compile","$rootScope","$filter","$timeout","CssFrameworkService","FormGeneratorService","FormMarkupHelperService","SecurityService"],(n=P=P||{})[n.Y=0]="Y",n[n.N=1]="N",n[n.Forced=2]="Forced",t.formInput=r}(fng=fng||{}),function(e){(e.directives||(e.directives={})).fngNakedDate=function(){return{restrict:"A",require:"ngModel",link:function(e,t,n,r){r.$parsers.push(function(e){if(e)return e.toString()}),r.$formatters.push(function(e){if(e)return new Date(e)})}}}}(fng=fng||{}),function(e){var t;function n(n,t,r,a){var i,e,o,s;s=!1,o=navigator.userAgent||navigator.vendor||window.opera,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(o)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(o.substr(0,4)))&&(s=!0),e=!s,n.searchPlaceholder=e?"Ctrl + / to Search":"Search",n.handleKey=function(e){if(27===e.keyCode&&n.searchTarget&&0<n.searchTarget.length)n.searchTarget="";else if(0<n.results.length)switch(e.keyCode){case 38:0<n.focus&&n.setFocus(n.focus-1),"function"==typeof e.preventDefault&&e.preventDefault();break;case 40:n.results.length>n.focus+1&&n.setFocus(n.focus+1),"function"==typeof e.preventDefault&&e.preventDefault();break;case 13:null!=n.focus&&r.url(c(n.results[n.focus]))}},n.setFocus=function(e){null!==n.focus&&delete n.results[n.focus].focussed,n.results[e].focussed=!0,n.focus=e},n.resultClass=function(e){var t="search-result";return n.results&&n.results[e].focussed&&(t+=" focus"),t};function l(){n.moreCount=0,n.errorClass="",n.results=[],n.focus=null}function c(e){return e.url?a.html5hash()+e.url.replace("|id|",e.id):a.buildOperationUrl("edit",e.resource,void 0,e.id,e.resourceTab)}n.$watch("searchTarget",function(e){e&&0<e.length?(i=n.testTime||(new Date).valueOf(),t.get("/api/search?q="+e.replaceAll("+","%2b")+"&sentAt="+i).then(function(e){var t=e.data;t.timestamps&&t.timestamps.sentAt&&Number.parseInt(t.timestamps.sentAt)!==i||(0<n.searchTarget.length?(n.results=t.results,n.results.forEach(function(e){e.href=a.html5hash()+c(e)}),n.moreCount=t.moreCount,0<t.results.length&&(n.errorClass="",n.setFocus(0)),n.errorClass=0===n.results.length?"error has-error":""):l())},function(e){console.log("Error in searchbox.js : "+e.data+" (status="+e.status+")")})):l()},!0),n.$on("$routeChangeStart",function(){n.searchTarget=""})}t=e.controllers||(e.controllers={}),n.$inject=["$scope","$http","$location","RoutingService"],t.SearchCtrl=n}(fng=fng||{}),function(t){var e;function n(e){return{restrict:"AE",templateUrl:"search-"+e.framework()+".html",controller:t.controllers.SearchCtrl}}e=t.directives||(t.directives={}),n.$inject=["CssFrameworkService"],e.globalSearch=n}(fng=fng||{}),function(e){(e.filters||(e.filters={})).camelCase=function(){return function(e){return e.replace(/([\:\-\_]+(.))/g,function(e,t,n,r){return r?n.toUpperCase():n})}}}(fng=fng||{}),function(e){(e.filters||(e.filters={})).extractTimestampFromMongoID=function(){return function(e){var t=e.substring(0,8);return new Date(1e3*parseInt(t,16))}}}(fng=fng||{}),function(e){(e.filters||(e.filters={})).titleCase=function(){return function(e,t){return e&&(e=e.replace(/(_|\.)/g," ").replace(/[A-Z]/g," $&").trim().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()}),e=t?e.replace(/\s/g,""):e.replace(/\s{2,}/g," ")),e}}}(fng=fng||{}),function(e){(e.services||(e.services={})).AddAllService=function(){function r(e,t,r,n){var a,i,o=[],s=[];if(r="addAll"+r,"string"==typeof n)for(a=n.split(" "),i=0;i<a.length;i++)s.push(a[i]);if(!function e(t){for(var n in t)n===r&&o.push(t[n]),"$parent"===n&&e(t[n])}(e),void 0!==t[r]&&"string"==typeof t[r])for(a=t[r].split(" "),i=0;i<a.length;i++)0===a[i].indexOf("class=")?s.push(a[i].substring(6,a[i].length)):o.push(a[i]);return(n=0<s.length?' class="'+s.join(" ")+'" ':" ")+(0<o.length?o.join(" ")+" ":"")}this.getAddAllGroupOptions=function(e,t,n){return r(e,t,"Group",n)},this.getAddAllFieldOptions=function(e,t,n){return r(e,t,"Field",n)},this.getAddAllLabelOptions=function(e,t,n){return r(e,t,"Label",n)},this.addAll=function(e,t,n,r){return this["getAddAll"+t+"Options"](e,r,n)||[]}}}(fng=fng||{}),function(e){(e.services||(e.services={})).CssFrameworkService=function(){var n={framework:"bs3"};return{setOptions:function(e){angular.extend(n,e)},$get:function(){return{framework:function(){return n.framework},setFrameworkForDemoWebsite:function(e){n.framework=e},span:function(e){var t;switch(n.framework){case"bs2":t="span"+Math.floor(e);break;case"bs3":t="col-xs-"+Math.floor(e)}return t},offset:function(e){var t;switch(n.framework){case"bs2":t="offset"+Math.floor(e);break;case"bs3":t="col-lg-offset-"+Math.floor(e)}return t},rowFluid:function(){var e;switch(n.framework){case"bs2":e="row-fluid";break;case"bs3":e="row"}return e}}}}}}(fng=fng||{}),function(e){function t(c){return{loadControllerAndMenu:function(e,t,n,r,a){var i,o={};t+="Ctrl",o.$scope=e.modelControllers[n]=a;var s=a.$parent;s.items=s.items||[];function l(e){angular.forEach(e,function(e){e.divider?r=!0:e[i]&&(r&&(r=!1,s.items.push({divider:!0})),e.id||(e.id=_.camelCase(e.text||e.textFunc()||"")),s.items.push(e))})}try{c(t,o),i=s.newRecord?"creating":s.id?"editing":"listing",angular.isObject(o.$scope.contextMenu)&&(l(o.$scope.contextMenu),o.$scope.contextMenuPromise&&o.$scope.contextMenuPromise.then(function(e){return l(e)})),e.modelNameDisplayPromise&&e.modelNameDisplayPromise.then(function(e){s.modelNameDisplay=e})}catch(e){/is not a function, got undefined/.test(e.message)||/\[\$controller:ctrlreg\] The controller with the name/.test(e.message)||console.log("Unable to instantiate "+t+" - "+e.message)}}}}((e.services||(e.services={})).FngModelCtrlService=t).$inject=["$controller"]}(fng=fng||{}),function(e){var t;function n(n,t){var a,r,s={hashPrefix:"",html5Mode:!1,routing:"ngroute",prefix:""},l=["edit","view"],i=[{route:"/analyse/:model/:reportSchemaName",state:"analyse::model::report",templateUrl:"base-analysis.html"},{route:"/analyse/:model",state:"analyse::model",templateUrl:"base-analysis.html"},{route:"/:model/:id/edit",state:"model::edit",templateUrl:"base-edit.html"},{route:"/:model/:id/edit/:tab",state:"model::edit::tab",templateUrl:"base-edit.html"},{route:"/:model/:id/view",state:"model::edit",templateUrl:"base-view.html"},{route:"/:model/:id/view/:tab",state:"model::view::tab",templateUrl:"base-view.html"},{route:"/:model/new",state:"model::new",templateUrl:"base-edit.html"},{route:"/:model",state:"model::list",templateUrl:"base-list.html"},{route:"/:model/viewonly",state:"model::view",templateUrl:"base-list-view.html"},{route:"/:model/:form/:id/edit",state:"model::form::edit",templateUrl:"base-edit.html"},{route:"/:model/:form/:id/edit/:tab",state:"model::form::edit::tab",templateUrl:"base-edit.html"},{route:"/:model/:form/:id/view",state:"model::form::view",templateUrl:"base-view.html"},{route:"/:model/:form/:id/view/:tab",state:"model::form::view::tab",templateUrl:"base-view.html"},{route:"/:model/:form/new",state:"model::form::new",templateUrl:"base-edit.html"},{route:"/:model/:form",state:"model::form::list",templateUrl:"base-list.html"},{route:"/:model/:form/viewonly",state:"model::form::list::view",templateUrl:"base-list-view.html"}],c=null,d={};function o(e){var t=e;return s.templateFolder&&(t="/"!==s.templateFolder[s.templateFolder.length-1]?s.templateFolder+"/"+t:s.templateFolder+t),t}function u(e,n,r){void 0===n&&(n=""),n=n||"",angular.forEach(e,function(e){a.when(n+e.route,angular.extend(e.options||{templateUrl:o(e.templateUrl)},r))}),s.variantsForDemoWebsite&&angular.forEach(s.variantsForDemoWebsite,function(t){angular.forEach(e,function(e){a.when(n+t+e.route,angular.extend(e.options||{templateUrl:o(e.templateUrl)},r))})})}function f(e,t,n){void 0===t&&(t=""),t=t||"",angular.forEach(e,function(e){r.state(e.state,angular.extend(e.options||{url:t+e.route,templateUrl:e.templateUrl},n))})}function p(e,t,n,r,a,i){var o,s=r?"/"+r:"",l=e+"/"+n,c=i?"/"+i:"";switch(t){case"list":o=l+s;break;case"edit":o=l+s+"/"+a+"/edit"+c;break;case"view":o=l+s+"/"+a+"/view"+c;break;case"read":o=l+s+"/"+a+"/read"+c;break;case"new":o=l+s+"/new"+c}return o}function m(e,t){switch(s.routing){case"ngroute":a=n.get("$routeProvider"),e&&u(e),u(t,s.prefix,s.add2fngRoutes);break;case"uirouter":r=n.get("$stateProvider"),e&&f(s.fixedRoutes),f(t,s.prefix,s.add2fngRoutes)}}return{start:function(e){angular.extend(s,e),s.prefix[0]&&"/"!==s.prefix[0]&&(s.prefix="/"+s.prefix),t.html5Mode(s.html5Mode),""!==s.hashPrefix?t.hashPrefix(s.hashPrefix):s.html5Mode||t.hashPrefix(""),m(s.fixedRoutes,i)},addRoutes:function(e,t){m(e,t)},registerAction:function(e){l.push(e)},$get:function(){return{router:function(){return s.routing},prefix:function(){return s.prefix},parsePathFunc:function(){return function(e){if(e!==c){c=e,d={newRecord:!1},0<s.prefix.length&&0===e.indexOf(s.prefix)&&(e=e.slice(s.prefix.length));var t=e.split("/");s.variants&&-1!==s.variants.indexOf(t[1])&&(d.variant=t[1],t.shift());var n=t.length;if("analyse"===t[1])d.analyse=!0,d.modelName=t[2],d.reportSchemaName=4<=n?t[3]:null;else{d.modelName=t[1];var r=[t[n-1],t[n-2]],a=r.indexOf("new"),i=r.indexOf("viewonly"),o=void 0;-1===a&&-1===i?-1!==(o=l.reduce(function(e,t){var n=r.indexOf(t);return-1<n?n:e},-1))&&(n-=2+o,d.id=t[n]):-1!==a?(d.newRecord=!0,n-=1+a):n-=1+i,1!==o&&1!==a||(d.tab=r[0]),2<n&&(d.formName=t[2])}}return d}},html5hash:function(){return s.html5Mode?"":"#"},buildUrl:function(e){var t=s.html5Mode?"":"#";return t+=s.hashPrefix,(t+=s.prefix)[0]&&(t+="/"),t+="/"===e[0]?e.slice(1):e},buildOperationUrl:function(e,t,n,r,a){return p(s.prefix,e,t,n,r,a)},redirectTo:function(){return function(e,t,n,r,a){var i;n.search({}),i="onDelete"===e?s.onDelete?"new"===s.onDelete?p(s.prefix,"new",t.modelName,t.formName,r,a):s.onDelete:p(s.prefix,"list",t.modelName,t.formName,r,a):p(s.prefix,e,t.modelName,t.formName,r,a),n.path(i)}}}}}}t=e.services||(e.services={}),n.$inject=["$injector","$locationProvider"],t.RoutingService=n}(fng=fng||{}),function(e){function t(l,n,c,r){function g(e,t,n,r,a,i,o,s){function l(e,t){var n=angular.copy(e),r=_.find(o.tabs,function(e){return e.title===n});if(!r){if(0===o.tabs.length&&0<o.formSchema.length){o.tabs.push({title:"Main",content:[],active:"Main"===o.tab||!o.tab}),r=o.tabs[0];for(var a=0;a<o.formSchema.length;a++)r.content.push(o.formSchema[a])}r=o.tabs[o.tabs.push({title:n,containerType:"tab",content:[],active:n===o.tab})-1]}r.content.push(t)}for(var c in"function"==typeof o.onSchemaFetch&&o.onSchemaFetch(e,t),t)if(t.hasOwnProperty(c))if("_id"===c)r&&t._id.options&&t._id.options.list&&w(r,t._id.options.list,c);else if(t.hasOwnProperty(c)){var d=t[c],u=d.options||{},f=u.form||{};if(d.schema&&!f.hidden){if(i&&n){var p=[];g("Nested "+c,d.schema,p,null,c+".",!0,o,s);var m=y(c,f,a);m.schema=p,f.tab&&l(f.tab,m),void 0!==f.order?n.splice(f.order,0,m):n.push(m)}}else{if(n&&!f.hidden){var h=y(c,f,a);if(S(h.showIf,h.name,o)&&"options"!==c){var v=b(h,d,u,o,s);v.tab&&l(v.tab,v),void 0!==f.order?n.splice(f.order,0,v):n.push(v)}}r&&u.list&&w(r,u.list,c)}}"function"==typeof o.onSchemaProcessed&&o.onSchemaProcessed(e,"Main "===e.slice(0,5)?o.baseSchema():n),r&&0===r.length&&k(e,r,n,t)}function b(t,e,n,r,a){var i;if(e.caster&&(t.array=!0,e=e.caster,angular.extend(n,e.options),e.options&&e.options.form&&angular.extend(t,e.options.form)),"String"===e.instance||"ObjectId"===e.instance&&t.asText)n.enum?(t.type=t.type||"select",t.select2?console.log("support for fng-select2 has been removed in 0.8.3 - please convert to fng-ui-select"):(t.options=c.suffixCleanId(t,"Options"),null!==(i=n.form)&&void 0!==i&&i.enumLabels?(t.ids=c.suffixCleanId(t,"_ids"),r[t.ids]=n.enum,r[t.options]=n.form.enumLabels):r[t.options]=n.enum)):(t.type||(t.type=-1!==t.name.toLowerCase().indexOf("password")?"password":"text"),n.match&&(t.add='pattern="'+n.match+'" '+(t.add||"")));else if("ObjectId"===e.instance)t.ref=n.ref,t.link&&(t.link.linkOnly?(t.type="link",t.linktext=t.link.text):t.link.label?t.linklabel=!0:console.log("Unsupported link setup"),t.form=t.link.form,t.linktab=t.link.linktab,delete t.link),"link"!==t.type&&(t.type="select",t.select2||n.form&&n.form.select2?console.log("support for fng-select2 has been removed in 0.8.3 - please convert to fng-ui-select"):t.directive&&(t.noLookup||t[l("camelCase")(t.directive)]&&t[l("camelCase")(t.directive)].fngAjax)||function(){if(t.options=c.suffixCleanId(t,"Options"),t.ids=c.suffixCleanId(t,"_ids"),!t.hidden)if(n.ref)c.setUpLookupOptions(n.ref,t,r,a,g);else if(n.lookupListRef)c.setUpLookupListOptions(n.lookupListRef,t,r,a),t.lookupListRef=n.lookupListRef;else if(n.internalRef)c.handleInternalLookup(r,t,n.internalRef),t.internalRef=n.internalRef;else if(!n.customLookupOptions)throw new Error("No supported select lookup type found in ".concat(t.name))}());else if("Date"===e.instance){if(!t.type)if(t.intType="date",t.readonly)t.type="text";else if(t.directive)t.type="text";else try{t.add=t.add||"",angular.module("ui.date").requires,t.type="text",t.add+=" ui-date ui-date-format "}catch(e){t.type="date",t.add+=' fng-naked-date="x" '}}else if("boolean"===e.instance.toLowerCase())t.type=t.type||"checkbox";else{if("Number"!==e.instance){var o="Field "+t.name+' has unsupported type "'+e.instance+'"';console.log(o);var s=" (typeof = "+typeof e.instance+")";throw console.log(s),new Error(o+s)}t.type=t.type||"number",void 0!==n.min&&(t.add='min="'+n.min+'" '+(t.add||"")),void 0!==n.max&&(t.add='max="'+n.max+'" '+(t.add||"")),t.step&&(t.add='step="'+t.step+'" '+(t.add||""))}return n.required&&(t.required=!0),n.readonly&&(t.readonly=!0),void 0!==e.defaultValue?t.defaultValue=e.defaultValue:e.options&&void 0!==e.options.default&&console.log("No support for default with no value, yet"),t}function d(e,t,n){for(var r=e.split("."),a=n||t.record,i=0,o=r.length;i<o;i++)a[r[i]]||(a[r[i]]=i===o-1?[]:{}),a=a[r[i]];return a}function v(e,r){function t(e){var t=e;if("string"==typeof e&&"$"===e.slice(0,1)){var n=e.split(".");switch(n.length){case 1:t=c.getListData(r,e.slice(1));break;case 2:t=c.getListData(r,n[1]);break;default:throw new Error("Unsupported showIf format")}}return t}var n,a=t(e.lhs),i=t(e.rhs);switch(e.comp){case"eq":n=a===i;break;case"ne":n=a!==i;break;default:throw new Error("Unsupported comparator "+e.comp)}return n}var y=function(e,t,n){return t.name=n+e,t},w=function(e,t,n){"object"==typeof t?(t.name=n,e.push(t)):e.push({name:n})},k=function(e,t,n,r){if(n){for(var a=0,i=n.length;a<i;a++)if("text"===n[a].type){t.push({name:n[a].name});break}0===t.length&&0!==n.length&&t.push({name:n[0].name})}if(0===t.length){for(var o in r)if("_id"!==o&&r.hasOwnProperty(o)){t.push({name:o});break}if(0===t.length)throw new Error("Unable to generate a title for "+e)}},S=function(e,r,a){var i=0;function t(e){if("string"==typeof e&&"$"===e.slice(0,1)){var t=e.slice(1),n=a.dataDependencies[t]||[];n.push(r),a.dataDependencies[t]=n,i+=1}}var n=!0;return e&&(t(e.lhs),t(e.rhs),0!==i||v(e,void 0)||(n=!1)),n};return{generateEditUrl:function(e,t){return n.buildUrl(t.modelName+"/"+(t.formName?t.formName+"/":"")+e._id+"/edit")},generateViewUrl:function(e,t){return n.buildUrl(t.modelName+"/"+(t.formName?t.formName+"/":"")+e._id+"/view")},generateNewUrl:function(e){return n.buildUrl(e.modelName+"/"+(e.formName?e.formName+"/":"")+"new")},handleFieldType:b,handleSchema:g,updateDataDependentDisplay:function(e,t,n,r){var a,i,o,s,l,c;for(var d in r.dataDependencies)if(r.dataDependencies.hasOwnProperty(d)){var u=d.split(".");if(1===u.length){if(n||!t||e[d]!==t[d])for(a=r.dataDependencies[d],i=0;i<a.length;i+=1){var f=a[i];for(o=0;o<r.formSchema.length;o+=1)r.formSchema[o].name===f&&(l=angular.element(document.querySelector("#cg_"+r.formSchema[o].id)),v(r.formSchema[o].showIf,e)?l.removeClass("ng-hide"):l.addClass("ng-hide"))}}else{if(2!==u.length)throw new Error("You can only go down one level of subdocument with showIf");if(void 0===c&&(c=!0),e[u[0]])for(s=0;s<e[u[0]].length;s++)if(n||!t||!t[u[0]]||!t[u[0]][s]||e[u[0]][s][u[1]]!==t[u[0]][s][u[1]])for(a=r.dataDependencies[d],i=0;i<a.length;i+=1){var p=a[i].split(".");if(2!==p.length)throw new Error("Conditional display must control dependent fields at same level ");for(o=0;o<r.formSchema.length;o+=1)if(r.formSchema[o].name===p[0])for(var m=r.formSchema[o].schema,h=0;h<m.length;h++)m[h].name===a[i]&&(0===(l=angular.element(document.querySelector("#f_"+p[0]+"List_"+s+" #cg_f_"+a[i].replace(".","_")))).length?l=angular.element(document.querySelector("#f_elements-"+s+"-"+p[1])):c=!1,0<l.length&&(v(r.formSchema[o].schema[h].showIf,e[u[0]][s])?l.show():l.hide()))}}}return c},add:function(t,e,n,r){var a,i;if(null!==(a=null==e?void 0:e.target)&&void 0!==a&&a.hasAttribute&&e.target.hasAttribute("disabled"))return e.preventDefault();if(e.target.offsetParent){var o=d(t,n,r),s=n.formSchema.find(function(e){return e.name===t}),l=s?s.schema:null,c=l?n.setDefaults(l,t+"."):{};"function"==typeof(null===(i=n.dataEventFunctions)||void 0===i?void 0:i.onInitialiseNewSubDoc)&&n.dataEventFunctions.onInitialiseNewSubDoc(t,l,c),o.push(c),n.setFormDirty(e)}},unshift:function(e,t,n,r){d(e,n,r).unshift({}),n.setFormDirty(t)},remove:function(t,e,n,r,a){var i;if(null!==(i=null==n?void 0:n.target)&&void 0!==i&&i.hasAttribute&&n.target.hasAttribute("disabled"))return n.preventDefault();var o,s=d(t,r,a);if("function"==typeof r.dataEventFunctions.onDeleteSubDoc){var l=r.formSchema.find(function(e){return e.name===t}),c=l?l.schema:null;o=r.dataEventFunctions.onDeleteSubDoc(t,c,s,e)}o?r.showError(o):(s.splice(e,1),r.setFormDirty(n))},hasError:function(e,t,n,r){var a=!1;if(r){var i=r[r.topLevelFormName];if("null"!==e&&(i=i[e.replace("$index",n)]),i){var o=i[t];o&&o.$invalid&&!o.$$attr.readonly&&(o.$dirty?a=!0:angular.forEach(o.$validators,function(e,t){"required"!==t&&o.$error[t]&&(a=!0)}))}}else console.log("hasError called with no scope! ",e,t,n);return a},decorateScope:function(s,a,l,e,t){function c(){for(var e=s.$$childHead;e;){if(e.tabset)return e.tabset;e=e.$$nextSibling}}s.record=e.record,s.phase="init",s.disableFunctions=e.disableFunctions,s.dataEventFunctions=e.dataEventFunctions,s.topLevelFormName=void 0,s.formSchema=[],s.tabs=[],s.listSchema=[],s.recordList=[],s.dataDependencies={},s.internalLookups=[],s.listLookups=[],s.conversions={},s.pageSize=60,s.pagesLoaded=0,e.baseScope=s,r.decorateSecurableScope(s,{pseudoUrl:t}),s.generateEditUrl=function(e){return a.generateEditUrl(e,s)},s.generateViewUrl=function(e){return a.generateViewUrl(e,s)},s.generateNewUrl=function(){return a.generateNewUrl(s)},s.scrollTheList=function(){var e;if(0<(null===(e=s.listSchema)||void 0===e?void 0:e.length))return l.scrollTheList(s);var t=s.$watchCollection("listSchema",function(e){if(0<(null==e?void 0:e.length))return t(),l.scrollTheList(s)})},s.getListData=function(e,t){return l.getListData(e,t,s.listSchema,s)},s.setPristine=function(e){e&&s.dismissError(),s[s.topLevelFormName]&&s[s.topLevelFormName].$setPristine()},s.skipCols=function(e){return 0<e?"col-md-offset-3":""},s.setFormDirty=function(e){e?angular.element(e.target).inheritedData("$formController").$setDirty():console.log("setFormDirty called without an event (fine in a unit test)")},s.add=function(e,t,n){return a.add(e,t,s,n)},s.hideTab=function(e,t,n){var r=l.getData(s,n);if(r&&Array.isArray(r)&&!r.includes(t)){var a=s.tabs[s.activeTabNo].title===t;r.push(t),r.sort();var i=s.baseForm;if(i&&i.$setDirty(),a){var o=c();o&&o.select(s.tabs.findIndex(function(e){return!r.includes(e.title)}))}}},s.addTab=function(e,t,n){var r=l.getData(s,n);if(r&&Array.isArray(r)){var a=r.findIndex(function(e){return e===t});if(-1===a)return;r.splice(a,1);var i=s.baseForm;i&&i.$setDirty();var o=c();o&&o.select(s.tabs.findIndex(function(e){return e.title===t}))}},s.hasError=function(e,t,n){return a.hasError(e,t,n,s)},s.unshift=function(e,t,n){return a.unshift(e,t,s,n)},s.remove=function(e,t,n,r){return a.remove(e,t,n,s,r)},s.baseSchema=function(){return s.tabs.length?s.tabs:s.formSchema}}}}((e.services||(e.services={})).FormGeneratorService=t).$inject=["$filter","RoutingService","RecordHandlerService","SecurityService"]}(fng=fng||{}),function(f){var e;function t(h,v,g,b,a){function y(e,a){function t(e){var t=e;if("string"==typeof e)if("$"===e.slice(0,1)){t=(a||"record")+".";var n=e.slice(1).split(".");if(1<n.length){var r=n.pop();t+=n.join(".")+"[$index]."+r}else t+=e.slice(1)}else t="'"+e+"'";return t}var n=["eq","ne","gt","gte","lt","lte"].indexOf(e.comp);if(-1===n)throw new Error("Invalid comparison in showWhen");return t(e.lhs)+["===","!==",">",">=","<","<="][n]+t(e.rhs)}function w(e,t){var n=["vertical","inline"];return t||n.push("stacked"),!e||"undefined"===e||!n.includes(e)}function d(){return"bs2"===h.framework()?"icon":"glyphicon glyphicon"}function u(c,d){var u=c.nonUniqueId||c.id;return[function(){if(c.readonly&&"boolean"==typeof c.readonly)return" disabled ";function e(){return c.readonly?' ng-disabled="'.concat(c.readonly,'" '):""}if(!u||!b.canDoSecurityNow(d,"disabled"))return e();var t=[];if(d.requiresDisabledChildren){var n=void 0;if(c.nonUniqueId)n=(s=c.nonUniqueId.startsWith("f_")?c.nonUniqueId.substring(2):c.nonUniqueId).split("_");else n=c.name.split(".");for(n.pop();0<n.length;)t.push("f_".concat(n.join("_"))),n.pop()}if("instant"===f.formsAngular.elemSecurityFuncBinding){if(d.isSecurelyDisabled(u))return" disabled ";for(var r=0,a=t;r<a.length;r++){var i=a[r];if(d.requiresDisabledChildren(i))return" disabled "}return e()}var o="isSecurelyDisabled('".concat(u,"')");if(0<t.length){var s=t.map(function(e){return"requiresDisabledChildren('".concat(e,"')")});o="(".concat(o," || ").concat(s.join(" || "),")")}var l="one-time"===f.formsAngular.elemSecurityFuncBinding;return c.readonly?l?e()+'ng-readonly="::'.concat(o,'" '):' ng-disabled="'.concat(o," || ").concat(c.readonly,'" '):' ng-disabled="'.concat(l?"::":"").concat(o,'" ')}(),b.getDisableableAttrs(u)]}function k(e,t,n){if(n.subschema&&n.model){for(var r=n.model,a=0,i="$parent.";r.startsWith(i);)a++,r=r.substring(i.length);return"".concat(e,"_{{").concat(i.repeat(a),"$index}}")}return"".concat(e,"_{{$index}}")}function S(e,t,n){return void 0!==e.$index||!!n.subschema}function i(e,t,n){for(;t.includes("@@");){var r=t.indexOf("@@")+2,a=t.indexOf("@@",r)-1,i=t.substring(r,1+a),o=i.endsWith("s");o&&(i=i.slice(0,-1));var s=i[0].toUpperCase()===i[0]?"true":"false";i=i.toLocaleLowerCase();var l=void 0;l="global"===n?f.formsAngular.pseudo(i,"true"==s):"scopeStatic"===n?e.sharedData.pseudo(i,"true"==s):"scopeDynamic"===n?"{{ sharedData.pseudo('".concat(i,"', ").concat(s,") }}"):"",t=t.substring(0,r-2)+l+(o?"s":"")+t.substring(3+a)}return t}return{isHorizontalStyle:w,isArrayElement:S,handlePseudos:function(e,t,n){var r,a;return null!=t&&t.includes("@@")?(a="function"==typeof(null===(r=null==e?void 0:e.sharedData)||void 0===r?void 0:r.pseudo)?n?(e[n]=function(){return i(e,t,"scopeStatic")},"none"):"scopeDynamic":"function"==typeof f.formsAngular.pseudo?"global":"none",i(e,t,a)):t},fieldChrome:function(e,t,n){var r="";if(t.id&&"function"==typeof t.id.replace){var a=t.nonUniqueId||t.nonuniqueid||t.id,i=void 0;if(t.id.includes(".")&&t.id.includes("{{"))for(var o=!(i="cg_"),s=0;s<t.id.length;s++)"{"===t.id[s]&&"{"===t.id[s-1]?o=!0:"}"===t.id[s]&&"}"===t.id[s-1]&&(o=!1),o||"."!==t.id[s]?i+=t.id[s]:i+="-";else i="cg_".concat(t.id.replace(/\./g,"-"));a="cg_".concat(a.replace(/\./g,"-"));var l=b.considerVisibility(a,e);if(l.omit)return{omit:!0};r+='id="'.concat(S(e,0,n)?k(i,0,n):i,'"'),l.visibilityAttr&&(r+=" ".concat(l.visibilityAttr))}var c=t.classes||"",d="",u="";if(t.showWhen=t.showWhen||t.showwhen,t.showWhen&&("string"==typeof t.showWhen?r+=' ng-show="'+t.showWhen+'"':r+=' ng-show="'+y(t.showWhen,n.model)+'"'),"bs3"===h.framework()){var f;c+=" form-group","vertical"===n.formstyle&&"block-level"!==t.size&&(d+='<div class="row">',c+=" col-sm-"+v.sizeAsNumber(t),u+="</div>");var p=null,m=t.name.split(".");f=n&&void 0!==n.subkeyno?n.subschemaroot.replace(/\./g,"-")+"-subkey"+n.subkeyno+"-"+m[m.length-1]:n.subschema?(p="form_"+m.slice(0,-1).join("_")+"$index",t.name.replace(/\./g,"-")):"f_"+t.name.replace(/\./g,"_"),d+="<div"+g.addAll(e,"Group",c,n)+" ng-class=\"{'has-error': hasError('"+p+"','"+f+"', $index)}\"",u+="</div>"}else u=w(n.formstyle,!0)?(d+="<div"+g.addAll(e,"Group","control-group",n),"</div>"):(d+="<span ","</span>");return{template:d+=(r||"")+">",closeTag:u}},label:function(e,t,n,r){var a="";if("bs3"===h.framework()||!["inline","stacked"].includes(r.formstyle)&&""!==t.label||n){a="<label";var i="control-label";if(w(r.formstyle,!1)?(t.linklabel||(a+=' for="'+t.id+'"'),void 0!==t.labelDefaultClass?i+=" "+t.labelDefaultClass:"bs3"===h.framework()&&(t.coloffset?i+=" col-sm-"+(3-t.coloffset).toString():i+=" col-sm-3")):["inline","stacked"].includes(r.formstyle)&&(a+=' for="'+t.id+'"',i+=" sr-only"),a+=g.addAll(e,"Label",null,r)+' class="'+i+'">'+t.label,n){var o=void 0,s=void 0;s=r.subschema?((o=t.name.replace(r.subschemaroot,"")).startsWith(".")&&(o=o.substring(1)),"subDoc"):(o=t.name,"record");var l=u(t,e);a+=" <i ".concat(l.join(" "),' id="add_').concat(t.id,'" ng-click="add(\'').concat(o,"', $event, ").concat(s,')" class="').concat(d(),'-plus-sign"></i>')}if(a+="</label>",t.linklabel){var c='<fng-link fld="'+t.name+'" ref="'+t.ref+'" text="'+escape(a)+'"';t.form&&(c+=' form="'+t.form+'"'),t.linktab&&(c+=' linktab="'+t.linktab+'"'),a=c+="></fng-link>"}}return a},glyphClass:d,allInputsVars:function(e,t,n,r,a,i){var o,s=t.placeHolder,l="",c="",d="",u="";return"bs3"===h.framework()?(l=-1===["horizontal","vertical","inline"].indexOf(n.formstyle)?" input-sm":"",c="col-sm-"+v.sizeAsNumber(t),u=" form-control"):d=t.size?" input-"+t.size:"",["inline","stacked"].includes(n.formstyle)&&(s=s||t.label),o='data-ng-model="'+r+'"',a&&(o+=' id="'.concat(a,'"')),i?o+=' name="'.concat(i,'"'):a&&(o+=' name="'.concat(a,'"')),s&&(o+=' placeholder="'.concat(s,'"')),t.popup&&(o+=' title="'.concat(t.popup,'"')),t.ariaLabel&&(o+=' aria-label="'.concat(t.ariaLabel,'"')),{common:o+=g.addAll(e,"Field",null,n),sizeClassBS3:c,sizeClassBS2:d,compactClass:l,formControl:u}},inputChrome:function(e,t,n,r){"bs3"===h.framework()&&w(n.formstyle,!0)&&"checkbox"!==t.type&&(e='<div class="bs3-input '+r.sizeClassBS3+'">'+e+"</div>");var a=(t.helpInline||"")+(t.helpinline||"");if(0<a.length){var i="bs2"===h.framework()?{el:"span",cl:"help-inline"}:{el:"div",cl:"help-block"};e+="<".concat(i.el,' class="').concat(i.cl,'">').concat(a,"</").concat(i.el,">")}return e+="<dms/>",n.noid||(e+='<div ng-if="'.concat(n.name||"myForm","['").concat(t.id,'\'].$dirty" class="help-block">')+' <div ng-messages="'.concat(n.name||"myForm","['").concat(t.id,"'].$error\">")+' <div ng-messages-include="error-messages.html"> </div> </div></div>'),t.help&&(e+='<div class="help-block">'+t.help+"</div>"),e},generateSimpleInput:function(e,t,n){var r="<input "+e+'type="'+t.type+'" ';return t.label||t.ariaLabel?n.subschema&&(r+='aria-label="'.concat(t.label?a("titleCase")(n.subschemaroot)+" "+t.label:t.popup||t.name.replace(/\./g," "),'" ')):r+='aria-label="'.concat(t.name.replace(/\./g," "),'" '),"inline"!==n.formstyle||"bs2"!==h.framework()||t.size||(r+='class="input-small"'),r+=" />"},controlDivClasses:function(e,t){var n=[];return w(e.formstyle,!1)&&("bs2"===h.framework()?n.push("controls"):t.coloffset?n.push("col-sm-"+(9+t.coloffset).toString()):n.push("col-sm-9")),n},handleInputAndControlDiv:function(e,t){return 0<t.length&&(e='<div class="'+t.join(" ")+'">'+e+"</div>"),e},handleArrayInputAndControlDiv:function(e,t,n,r,a){var i="bs3"===h.framework()?'ng-class="skipCols($index)" ':"",o=a.subschema?"subDoc"+r.name.replace(a.subschemaroot,""):(a.model||"record")+"."+r.name,s="";s+='<div id="'+r.id+'List" class="'+t.join(" ")+'" '+i+' ng-repeat="arrayItem in '+o+' track by $index">';var l=u(r,n),c="link"!==r.type?"<i ".concat(l.join(" ")," ng-click=\"remove('").concat(r.name,'\', $index, $event)" id="remove_').concat(r.id,'_{{$index}}" class="').concat(d(),'-minus-sign"></i>'):"";return s+=e.replace("<dms/>",c),s+="</div>",i="bs3"===h.framework()?'ng-class="skipCols('+o+'.length)" ':"",r.help&&(s+='<div class="array-help-block '+t.join(" ")+'" '+i+' id="empty'+r.id+'ListHelpBlock">'+r.help+"</div>"),s},addTextInputMarkup:function(e,t,n){var r="",a=e.formControl.trim()+e.compactClass+e.sizeClassBS2+(t.class?" "+t.class:"");return 0!==a.length&&(r+='class="'+a+'"'),t.add&&(r+=" "+t.add+" "),r+=n},handleReadOnlyDisabled:u,generateArrayElementIdString:k,genDisableableAncestorStr:function(e){return b.getDisableableAncestorAttrs(e)},generateNgShow:y}}e=f.services||(f.services={}),t.$inject=["CssFrameworkService","InputSizeHelperService","AddAllService","SecurityService","$filter"],e.FormMarkupHelperService=t}(fng=fng||{}),function(e){(e.services||(e.services={})).InputSizeHelperService=function(){var n=[1,2,4,6,8,10,12],r=["mini","small","medium","large","xlarge","xxlarge","block-level"];return{sizeMapping:n,sizeDescriptions:r,defaultSizeOffset:2,sizeAsNumber:function(e){var t=n[e.size?r.indexOf(e.size):2];return e.coloffset&&(t+=e.coloffset),t}}}}(fng=fng||{}),function(e){var t;function n(y){function s(e,t,n,r,a){var i=n.info.name;r&&(null!=a&&a.nonUniqueIdSuffix?(t=t.replace(r,a.nonUniqueIdSuffix),i+=".".concat(a.nonUniqueIdSuffix)):i+=".".concat(r));var o=y.handleReadOnlyDisabled({id:t,name:i,nonUniqueId:n.info.nonuniqueid,readonly:n.info.readonly},e);if(null!=a&&a.forceNg)for(var s=0;s<o.length;s++)"disabled"===o[s].toLowerCase().trim()&&(o[s]='ng-disabled="true"');return o}function o(e,t,n,r,a){return s(e,t,n,r,a).join(" ")}function p(e,t,n){return y.handlePseudos(e,t,n)}function l(e,t,n){return y.isArrayElement(e,t.info,t.options)?y.generateArrayElementIdString(n,t.info,t.options):n}function c(e,t,n,r){var a=t.info.id;return n&&(n.startsWith("_")||(a+="_"),a+=n),r&&(a=l(e,t,a)),a}function i(e,t,n,r){var a=s(e,r,t,n,{forceNg:!0}),i=a[0],o="";if(i){i=(i=(i=(i=i.replace("data-ng-disabled","ng-disabled")).replace("data-ng-readonly","ng-readonly")).replace("ng-disabled=",'"ng-disabled":')).replace("ng-readonly=",'"ng-readonly":');try{i="{ ".concat(i," }"),(i=JSON.parse(i)["ng-disabled"])&&(o='disabledDate="'.concat(i,'" readonlyTime="').concat(i,'"'))}catch(e){}}return o+" "+a[1]}function w(e,t,n,r){function a(e){var t=e.replace(/"/g,'"');if(""===t)return!0;if("true"===t)return!0;if("false"===t)return!1;var n=Number(t);return!isNaN(n)&&isFinite(n)?n:t}var i={},o={formStyle:e.formstyle},s={},l=t?t.length:0,c=null==t?void 0:t.toLowerCase();for(var d in e)if(e.hasOwnProperty(d)){var u=d.toLowerCase();"fngfld"===u.slice(0,6)?i[u.slice(6)]=a(e[d]):"fngopt"===u.slice(0,6)?o[u.slice(6)]=a(e[d]):t&&u.slice(0,l)===c&&(s[_.kebabCase(d.slice(l))]=a(e[d]))}var f={info:i,options:o,directiveOptions:s};return f.info.help=p(n,f.info.help,null!=r&&r.setUpDynamicHelpFunc?"help":void 0),f.info.label=p(n,f.info.label,null!=r&&r.setUpDynamicLabelFunc?"label":void 0),f.info.popup=p(n,f.info.popup),f}function r(e,t,n,r){var a=c(e,t,n,!1),i=l(e,t,a);return'id="'.concat(i,'" ').concat(o(e,a,t,n,r))}return{extractFromAttr:w,buildInputMarkup:function(e,t,n,r){var a=n.processedAttrs||w(t,"",e),i={};n.ignoreFieldInfoFromAttrs||Object.assign(i,a.info),n.fieldInfoOverrides&&Object.assign(i,n.fieldInfoOverrides);var o=Object.assign({},a.options,n.optionOverrides),s=y.fieldChrome(e,i,o);if(s.omit)return"";var l=y.controlDivClasses(o,i),c=s.template+y.label(e,i,n.addButtons,o),d=i.id;(i.array||o.subschema)&&(d=y.generateArrayElementIdString(d,i,o));var u=n.addButtons?"arrayItem"+(n.needsX?".x":""):t.model+"."+i.name,f=i.name;if(o.subschema&&-1!==i.name.indexOf(".")){var p=t.model+".",m=o.subschemaroot,h=i.name.slice(m.length+1);u=p+m,o.subkey?(d=u.slice(p.length).replace(/\./g,"-")+"-subkey"+o.subkeyno+"-"+h,u+="[$_arrayOffset_"+m.replace(/\./g,"_")+"_"+o.subkeyno+"]."+h):(u+="[$index]."+h,f=i.name.replace(/\./g,"-"))}var v=y.allInputsVars(e,i,o,u,d,f);v.modelString=u,v.disableableAncestorStr=y.genDisableableAncestorStr(i.id);var g=r(v),b=y.inputChrome(g,i,o,v);return n.addButtons?c+=y.handleArrayInputAndControlDiv(b,l,e,i,o):c+=y.handleInputAndControlDiv(b,l),c+=s.closeTag},genIdString:function(e,t,n){return c(e,t,n,!0)},genDisabledStr:function(e,t,n,r){return o(e,c(e,t,n,!1),t,n,r)},genIdAndDisabledStr:r,genDateTimePickerDisabledStr:function(e,t,n){return i(e,t,n,c(e,t,n,!1))},genDateTimePickerIdAndDisabledStr:function(e,t,n){var r=c(e,t,n,!1),a=l(e,t,r);return'id="'.concat(a,'" ').concat(i(e,t,n,r))},genUiSelectIdAndDisabledStr:function(e,t,n){return r(e,t,n,{forceNg:!0})},handlePseudos:p,genDisableableAncestorStr:function(e){return y.genDisableableAncestorStr(e.info.id)}}}t=e.services||(e.services={}),n.$inject=["FormMarkupHelperService"],t.PluginHelperService=n}(fng=fng||{}),function(O){var e;function t(c,d,i,u,o,s,f,m,e){var l=function(e){return void 0===e&&(e=function(e){return Math.floor(e).toString(16)}),e(Date.now()/1e3)+" ".repeat(16).replace(/./g,function(){return e(16*Math.random())})};function p(e){if(-1===["cancel","backdrop click","escape key press"].indexOf(e))throw e}function b(e,t){return(e.id||"f_"+e.name).replace(/\./g,"_")+t}function h(e,t,n,r){void 0===r&&(r=!1);for(var a=t.split("."),i=a.length-1,o=e,s=0;s<i;s++){if(!o)throw new Error("walkTree failed: Object = ".concat(e,", fieldname = ").concat(t,", i = ").concat(s));if(o=angular.isArray(o)?_.map(o,function(e){return e[a[s]]}):(r&&!o[a[s]]&&(o[a[s]]={}),o[a[s]]),angular.isArray(o)&&void 0!==n)if(n.scope&&"function"==typeof n.scope)o=o[n.scope().$index];else{if("number"!=typeof n)throw new Error("Unsupported element type in walkTree "+t);o=o[n]}if(!o)break}return{lastObject:o,key:o?a[i]:void 0}}function y(e,t,n,r){var a=h(e,t,n,!!r);if(a.lastObject&&a.key)if(r)if(angular.isArray(a.lastObject))for(var i=0;i<a.lastObject.length;i++)a.lastObject[i][a.key]=r[i];else a.lastObject[a.key]=r;else delete a.lastObject[a.key]}function v(t,n,e,r){if(void 0===r&&(r=!1),!n.topLevelFormName||n[n.topLevelFormName]&&(r||n[n.topLevelFormName].$pristine)){S(t.name,e.master,function(e){return"object"==typeof e&&e.id?e:C(t,e,n[b(t,"Options")],n[b(t,"_ids")])});var a=w(e.master,t.name);a&&y(n.record,t.name,void 0,a)}}var w=function(e,t,n){var r,a=h(e,t,n);return a.lastObject&&a.key&&(r=angular.isArray(a.lastObject)?_.map(a.lastObject,function(e){return e[a.key]}):a.lastObject[a.key]),r};function k(e,t,n,r){void 0===n&&(n=null);var a=w(e,t)||"";if(a&&n){var i=_.find(n,function(e){return e.name===t});if(i)switch(i.params){case void 0:break;case"timestamp":var o=a.toString().substring(0,8),s=new Date(1e3*parseInt(o,16));a=s.toLocaleDateString()+" "+s.toLocaleTimeString();break;default:a=r.dataEventFunctions[i.params](e)}}return a}function S(e,t,n){var r,a,i=(r=e.split("."),a=[r[0]],1<r.length&&a.push(r.slice(1).join(".")),a);if(1<i.length)!function(e,t,n){if(void 0!==t)if(angular.isArray(t))for(var r=0;r<t.length;r++)S(e,t[r],n);else S(e,t,n)}(i[1],t[i[0]],n);else if(t[i[0]]){var o=t[i[0]];if(angular.isArray(o))for(var s=o.length-1;0<=s;s--){var l=typeof o[s];("undefined"==l||"object"==l&&0===Object.keys(o[s]).length)&&o.splice(s,1)}t[i[0]]=n(o)}}function g(e,t,n,r,a){var i="string"==typeof t?e[t]:t,o="string"==typeof n?e[n]:n;i.length=0,o.length=0,r&&0<r.length&&r.forEach(function(e){var t=e[a];t&&0<t.length&&(i.push(t),e._id||(e._id=l()),o.push(e._id))})}var x=function(e){var t=!1;return e.needsX?t=!0:e.directive||("text"===e.type?t=!0:"select"!==e.type||e.ids||(t=!0)),t};function D(e,t,n){var r=e.conversions;return n&&(r=w(r,n)||{}),r[t]}var $=function(e,t,n,r,a,i,o){i=i||t;for(var s=0;s<e.length;s++){var l=e[s],c=l.name.slice(n);c.length||(c=l.name.split(".").pop());var d=w(t,c);if("date"===l.intType&&"string"==typeof d&&y(t,c,null,new Date(d)),l.schema){if(d)for(var u=0;u<d.length;u++)d[u]=$(l.schema,d[u],1+c.length,r,c,i,u)}else{l.internalRef&&g(r,l.options,l.ids,i[l.internalRef.property],l.internalRef.value);var f=k(t,c,null,r);if(l.array&&x(l)&&f&&!(0<f.length&&f[0].x))for(var p=0;p<f.length;p++)f[p]={x:f[p]};var m=r[b(l,"_ids")],h=void 0;d&&m&&0<m.length?c.includes(".")||!d.toString().match(/^[a-f0-9]{24}$/)||l.internalRef&&l.internalRef.noConvert||(t[c]=C(l,d,r[b(l,"Options")],m)):l.select2?(console.log("fng-select2 is deprecated - use fng-ui-select instead"),l.select2):d&&(h=D(r,c,a))&&h.fngajax&&"function"==typeof h.fngajax&&!h.noconvert&&h.fngajax(d,l,function(e,t){y(i,e.name,o,t),N(angular.element("#"+e.id),function(){y(r.record,e.name,o,t)})})}}return t};function C(e,t,n,r){if(e.array||angular.isArray(t)){for(var a=[],i=e.array&&(!e.directive||x(e)),o=0;o<t.length;o++){var s=t[o];s&&s.x&&(s=s.x);var l=E(s,r,n,e.name);i&&(l={x:l}),a.push(l)}return a}return e.select2?{id:t,text:E(t,r,n,e.name)}:E(t,r,n,e.name)}function A(e,t,n,r){var a=_.isObject(e)?e.x||e.text:e;if(a&&a.match(/^[0-9a-f]{24}$/))return a;var i=t.indexOf(a);if(-1===i)throw new Error("convertListValueToId: Invalid data - value "+a+" not found in "+t+" processing "+r);return n[i]}function F(e,t,n){n.master=$(t.formSchema,e,0,t),t.phase="ready",t.cancel()}var N=function(e,t){var n=e.inheritedData("$ngModelController"),r=n&&n.$pristine;r&&(n.$pristine=!1),t(),r&&(n.$pristine=!0)},E=function(e,t,n,r){"object"==typeof e&&(e=e.id);var a=t.indexOf(e);if(-1===a&&-1===(a=n.indexOf(e)))throw new Error("convertIdToListValue: Invalid data - id "+e+" not found in "+t+" processing "+r);return n[a]};function I(t,n,r,e,a){if(a&&0<a.length&&a.length===e.length&&n[r]){var i=a.findIndex(function(e){return e[t.value]===n[r]});if(-1<i){var o=e[i][t.value];o&&(n[r]=o)}}}function L(e,f,i,t,p){var n=!f.id&&!f.newRecord;function o(i,u){f.internalLookups.forEach(function(n){var r=i[n.ref.property],a=u[n.ref.property];g(f,n.lookupOptions,n.lookupIds,r,n.ref.value),(r&&0<r.length||a&&0<a.length)&&n.handlers.forEach(function(t){if(t.possibleArray){var e=w(f.record,t.possibleArray,null);e&&0<e.length&&e.forEach(function(e){return I(n.ref,e,t.lastPart,r,a)})}else angular.isArray(f.record[t.lastPart])?f.record[t.lastPart].forEach(function(e){I(n.ref,e,"x",r,a)}):I(n.ref,f.record,t.lastPart,r,a)})}),f.listLookups.forEach(function(c){function e(e,t){var n=e[t];return n&&n.id&&(n=n.id),n}function d(e){y(f.record,e.name)}var t=c.ref.id.slice(1);if(t.includes("."))throw new Error("No support for nested list lookups yet - ".concat(JSON.stringify(c.ref)));var n=e(i,t),r=e(u,t);n!==r&&(n?(r&&c.handlers.forEach(function(t){t.oldValue=w(f.record,t.formInstructions.name),angular.isArray(t.oldValue)?t.oldId=t.oldValue.map(function(e){return f[t.formInstructions.ids][f[t.formInstructions.options].indexOf(e)]}):t.oldId=f[t.formInstructions.ids][f[t.formInstructions.options].indexOf(t.oldValue)]}),m.readRecord(c.ref.collection,n).then(function(l){c.handlers.forEach(function(r){var a=f[r.formInstructions.options];a.length=0;var i=f[r.formInstructions.ids];i.length=0;for(var e=l.data[c.ref.property]||[],t=0;t<e.length;t++){var n=e[t][c.ref.value],o=_.sortedIndex(a,n);a[o]===n&&(n=n+" ("+e[t]._id+")",o=_.sortedIndex(a,n)),a.splice(o,0,n),i.splice(o,0,e[t]._id)}if(0===Object.keys(u).length)v(r.formInstructions,f,p,!0);else if(r.oldId)if(angular.isArray(r.oldId))r.oldId.forEach(function(e,t){var n=i.indexOf(e);y(f.record,r.formInstructions.name,t,-1===n?void 0:a[n])});else{var s=i.indexOf(r.oldId);-1!==s?y(f.record,r.formInstructions.name,void 0,a[s]):d(r.formInstructions)}else d(r.formInstructions)})})):c.handlers.forEach(function(e){f[e.formInstructions.options].length=0,f[e.formInstructions.ids].length=0,d(e.formInstructions)}))})}function r(){f.phase="ready",f.cancel(),o(f.record,{})}if(f.id&&"function"!=typeof f.dataEventFunctions.onBeforeRead&&t.beginReadingRecord(f),i.handleSchema("Main "+f.modelName,e,n?null:f.formSchema,f.listSchema,"",!0,f,p),n)p.allowLocationChange=!0;else{var s=!0;if(f.newRecord||(f.dropConversionWatcher=f.$watchCollection("conversions",function(e,t){e!==t&&f.originalData&&F(f.originalData,f,p)})),f.$watch("record",function(e,t){if(e!==t){if(0<Object.keys(t).length&&f.dropConversionWatcher){var n=f.dropConversionWatcher;f.dropConversionWatcher=null,u(function(){n()})}if(s=i.updateDataDependentDisplay(e,t,s,f),o(e,t),O.formsAngular.title){var r=O.formsAngular.title.prefix||"";if(f.editFormHeader)r+=f.editFormHeader();else for(var a in f.listSchema)if(f.listSchema.hasOwnProperty(a)){if("object"==typeof f.getListData(f.record,f.listSchema[a].name))return;r+=f.getListData(f.record,f.listSchema[a].name)+" "}r=r.trimEnd()+(O.formsAngular.title.suffix||""),d.document.title=r.replace(/<\/?[^>]+(>|$)/g,"")}}},!0),f.id)"function"==typeof f.dataEventFunctions.onBeforeRead?f.dataEventFunctions.onBeforeRead(f.id,function(e){e?f.showError(e):(t.beginReadingRecord(f),t.finishReadingThenProcessRecord(f,p))}):t.finishReadingThenProcessRecord(f,p);else{p.allowLocationChange=!1,p.master=f.setDefaults(f.formSchema);var a=f.initialiseNewRecord||c.$$search.r;if(a)try{Object.assign(p.master,JSON.parse(a)),f.newRecordsStartPristine||f.$on("fngCancel",function(){u(function(){f[f.topLevelFormName]&&f[f.topLevelFormName].$setDirty()},1e3)})}catch(e){console.log("Error parsing specified record : "+e.message)}"function"==typeof f.dataEventFunctions.onInitialiseNewRecord&&(console.log("onInitialiseNewRecord is deprecated - use the async version - onNewRecordInit(data,cb)"),f.dataEventFunctions.onInitialiseNewRecord(p.master)),"function"==typeof f.dataEventFunctions.onNewRecordInit?f.dataEventFunctions.onNewRecordInit(p.master,function(e){e?f.showError(e):r()}):r()}}}function t(a){return function(e){if(-1!==[200,400,403].indexOf(e.status)){var t="";if(e.data&&e.data.errors)for(var n in e.data.errors)if(e.data.errors.hasOwnProperty(n)){switch(t+="<li><b>"+i("titleCase")(n)+": </b> ",e.data.errors[n].type){case"enum":t+="You need to select from the list of values";break;default:t+=e.data.errors[n].message}t+="</li>"}t=0<t.length?(e.data.message||e.data._message)+"<br /><ul>"+t+"</ul>":e.data.message||e.data._message||e.data.err||"Error! Sorry - No further details available.",a.phase="error",a.showError(t)}else if(404===e.status)c.search({}).path("/404");else{var r=e.data;"string"!=typeof r&&(r=JSON.stringify(r)),500!==e.status&&(r=e.status+" "+r),a.showError(r)}}}function T(e,t,n){n.allowLocationChange=!1,t.phase="reading","function"==typeof t.dataEventFunctions.onAfterRead&&t.dataEventFunctions.onAfterRead(e),t.originalData=e,F(e,t,n)}function r(e,t,n,r){var a=t.name.split("."),i=r.find(function(e){return e.ref.property===n.property&&e.ref.value===n.value}),o={formInstructions:t,lastPart:a.pop(),possibleArray:a.join(".")};i||(i={ref:n,lookupOptions:[],lookupIds:[],handlers:[]},r.push(i)),i.handlers.push(o),e[t.options]=i.lookupOptions,e[t.ids]=i.lookupIds}return{beginReadingRecord:function(e){e.readingRecord=m.readRecord(e.modelName,e.id,e.formName)},finishReadingThenProcessRecord:function(t,n){var r="function"==typeof O.formsAngular.beforeHandleIncomingDataPromises;(r?Promise.all(__spreadArray([t.readingRecord],O.formsAngular.beforeHandleIncomingDataPromises(),!0)):t.readingRecord).then(function(e){T(r?angular.copy(e[0].data):e.data,t,n)}).catch(function(e){t.dataEventFunctions.onReadError?t.dataEventFunctions.onReadError(t.id,e):404===e.status?c.search({}).path("/404"):t.handleHttpError(e)})},scrollTheList:function(n){var r=n.pagesLoaded;m.getPagedAndFilteredList(n.modelName,{aggregate:c.$$search.a,find:c.$$search.f,limit:n.pageSize,skip:r*n.pageSize,order:c.$$search.o,concatenate:!1}).then(function(e){var t=e.data;angular.isArray(t)?(!n.listSchema.find(function(e){return"disambiguation"===e.name})&&t.some(function(e){return e.disambiguation})&&n.listSchema.push({name:"disambiguation"}),r===n.pagesLoaded?(n.pagesLoaded++,n.recordList=n.recordList.concat(t)):console.log("DEBUG: infinite scroll component asked for a page twice - the model was "+n.modelName)):n.showError(t,"Invalid query")},n.handleHttpError)},deleteRecord:function(e,n,t){n.phase="deleting",m.deleteRecord(n.modelName,e,n.formName).then(function(){"function"==typeof n.dataEventFunctions.onAfterDelete&&n.dataEventFunctions.onAfterDelete(t.master),s.redirectTo()("onDelete",n,c)},function(e){var t;404===e.status?s.redirectTo()("onDelete",n,c):403===e.status?n.showError((null===(t=e.data)||void 0===t?void 0:t.message)||e.message||e.data||e,"Permission denied"):n.showError("".concat(e.statusText," (").concat(e.status,") while deleting record<br />").concat(e.data),"Error deleting record")})},updateDocument:function(e,n,r,a){r.phase="updating",m.updateRecord(r.modelName,r.id,e,r.formName).then(function(e){var t=e.data;!1!==t.success?("function"==typeof r.dataEventFunctions.onAfterUpdate&&r.dataEventFunctions.onAfterUpdate(t,a.master),n.redirect?(n.allowChange&&(a.allowLocationChange=!0),d.location=n.redirect):(T(t,r,a),r.setPristine(!1))):r.showError(t)},function(e){e.data.message.match(/^No matching document found for id "[0-9a-f]{24}" version [\d]+ modifiedPaths "/)&&(e.data.message="This record has been modified by somebody else since it was read. To prevent your change overwriting theirs your update has been rejected. You will have to refresh the form and re-do your work. Sorry for the inconvenience."),r.handleHttpError(e)})},createNew:function(e,n,r,a){m.createRecord(r.modelName,e,r.formName).then(function(e){var t=e.data;!1!==t.success?(a.allowLocationChange=!0,"function"==typeof r.dataEventFunctions.onAfterCreate&&r.dataEventFunctions.onAfterCreate(t),n.redirect?d.location=n.redirect:s.redirectTo()("edit",r,c,t._id)):r.showError(t)},r.handleHttpError)},getListData:k,suffixCleanId:b,getData:w,setData:y,setUpLookupOptions:function(e,i,o,s){var l=o[i.options]=[],c=o[i.ids]=[];(i.filter?m.getPagedAndFilteredList(e,Object.assign({concatenate:!0},i.filter)):m.getAllListAttributes(e)).then(function(e){var t=e.data;if(t){t.sort(function(e,t){return e.text.localeCompare(t.text)}),l.push.apply(l,t.map(function(e){return e.text})),c.push.apply(c,t.map(function(e){return e.id}));for(var n=new Set,r=0;r<l.length-1;r++)for(var a=r+1;a<l.length;a++)_.isEqual(l[r],l[a])&&n.add(l[r]);n.forEach(function(e){for(var t=0;t<l.length;t++)l[t]===e&&(l[t]+="("+c[t]+")")}),o.readingRecord&&o.readingRecord.then(function(){v(i,o,s)})}}).catch(function(e){o.handleHttpError(e)})},setUpLookupListOptions:function(i,o,s,l){var c=s[o.options]=[],d=s[o.ids]=[];"$"===i.id[0]?r(s,o,i,s.listLookups):m.readRecord(i.collection,s.$eval(i.id)).then(function(e){for(var t=e.data[i.property],n=0;n<t.length;n++){var r=t[n][i.value],a=_.sortedIndex(c,r);c[a]===r&&(r=r+" ("+t[n]._id+")",a=_.sortedIndex(c,r)),c.splice(a,0,r),d.splice(a,0,t[n]._id)}v(o,s,l)})},handleInternalLookup:function(e,t,n){r(e,t,n,e.internalLookups)},preservePristine:N,convertToMongoModel:function d(u,f,p,m,h){function v(e,t){var n;return t&&t.fngajax?e&&(n=e.id||e):e&&(n=e.text||(e.x?e.x.text:e)),n}function e(){var t=u[g],e=t.name.slice(p),n=k(f,e,null,m);if(t.schema){if(n)for(var r=0;r<n.length;r++)n[r]=d(t.schema,n[r],1+e.length,m,e)}else{if(t.array&&x(t)&&n)for(var a=0;a<n.length;a++)n[a]=n[a].x;var i=m[b(t,"_ids")];if(i&&0<i.length)S(e,f,function(e){return function(e,t,n,r){if(e.array){for(var a=[],i=0;i<t.length;i++)a.push(A(t[i],n,r,e.name));return a}return A(t,n,r,e.name)}(t,e,m[b(t,"Options")],i)});else{var o=D(m,e,h);if(o){var s=w(f,e,null),l=void 0;if(t.array){if(l=[],s)for(var c=0;c<s.length;c++)l[c]=v(s[c],o)}else l=v(s,o);y(f,e,null,l)}}}}for(var g=0;g<u.length;g++)e();return f},convertIdToListValue:E,handleError:t,decorateScope:function(l,n,r,a){l.handleHttpError=t(l),l.cancel=function(){angular.copy(a.master,l.record),l.$broadcast("fngCancel",l),u(l.setPristine)},l.$on("showErrorMessage",function(e,t){e.defaultPrevented||(e.defaultPrevented=!0,l.showError(t.body,t.title))}),l.showError=function(t,e){l.errorHideTimer&&l.clearTimeout(),l.errorMessage?l.errorMessage+="<br /><br />":l.errorMessage="",l.errorMessage+=function(){if(u(function(){l.phase="ready"},25),"string"==typeof t)return o.trustAsHtml(t);if(!t)return"An error occurred - that's all we got. Sorry.";if(t.message&&"string"==typeof t.message)return t.message;if(t.data&&t.data.message)return t.data.message;try{return JSON.stringify(t)}catch(e){return t}}(),l.alertTitle=e||"Error!",l.errorHideTimer=window.setTimeout(function(){l.dismissError(),l.$digest()},3500+1e3*(l.alertTitle+l.errorMessage).length/50),l.errorVisible=!0,window.setTimeout(function(){l.$digest()})},l.clearTimeout=function(){l.errorHideTimer&&(clearTimeout(l.errorHideTimer),delete l.errorHideTimer)},l.dismissError=function(){l.clearTimeout,l.errorVisible=!1,delete l.errorMessage,delete l.alertTitle},l.stickError=function(){clearTimeout(l.errorHideTimer)},l.prepareForSave=function(t){var n=r.convertToMongoModel(l.formSchema,angular.copy(l.record),0,l);l.id?"function"==typeof l.dataEventFunctions.onBeforeUpdate?l.dataEventFunctions.onBeforeUpdate(n,a.master,function(e){e?t(e):t(null,n)}):t(null,n):"function"==typeof l.dataEventFunctions.onBeforeCreate?l.dataEventFunctions.onBeforeCreate(n,function(e){e?t(e):t(null,n)}):t(null,n)},l.save=function(n){n=n||{},l.redirectOptions=n,l.prepareForSave(function(e,t){e?"_update_handled_"!==e&&u(function(){l.showError(e)}):l.id?r.updateDocument(t,n,l,a):r.createNew(t,n,l,a)})},l.newClick=function(){s.redirectTo()("new",l,c)},l.$on("$locationChangeStart",function(e,t){a.allowLocationChange||l.isCancelDisabled()||(e.preventDefault(),n.open({template:'<div class="modal-header">\n <h3>Record modified</h3>\n</div>\n<div class="modal-body">\n <p>Would you like to save your changes?</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-primary dlg-yes" ng-click="yes()">Yes</button>\n <button class="btn btn-warning dlg-no" ng-click="no()">No</button>\n <button class="btn dlg-cancel" ng-click="cancel()">Cancel</button>\n</div>',controller:"SaveChangesModalCtrl",backdrop:"static"}).result.then(function(e){e?l.save({redirect:t,allowChange:!0}):(a.allowLocationChange=!0,d.location=t)}).catch(p))}),l.deleteClick=function(){if(l.record._id){var e=void 0;if(l.unconfirmedDelete)e=Promise.resolve(!0);else e=n.open({template:'<div class="modal-header">\n <h3>Delete Item</h3>\n</div>\n<div class="modal-body">\n <p>Are you sure you want to delete this record?</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-primary dlg-no" ng-click="cancel()">No</button>\n <button class="btn btn-warning dlg-yes" ng-click="yes()">Yes</button>\n</div>',controller:"SaveChangesModalCtrl",backdrop:"static"}).result;e.then(function(e){function t(){r.deleteRecord(l.id,l,a)}e&&("function"==typeof l.dataEventFunctions.onBeforeDelete?l.dataEventFunctions.onBeforeDelete(a.master,function(e){e?"_delete_handled_"!==e&&l.showError(e):t()}):t())}).catch(p)}},l.isCancelDisabled=function(){var e;return!!(l[l.topLevelFormName]&&l[l.topLevelFormName].$pristine||"ready"!==l.phase)||"function"==typeof(null===(e=l.disableFunctions)||void 0===e?void 0:e.isCancelDisabled)&&l.disableFunctions.isCancelDisabled(l.record,a.master,l[l.topLevelFormName])},l.isSaveDisabled=function(){var e;l.whyDisabled=void 0;var t=!1;if(l[l.topLevelFormName]?l[l.topLevelFormName].$invalid?(l.whyDisabled="The form data is invalid:",function n(e,r){e.$$controls.forEach(function(e){if(e.$invalid)if(e.$$controls)n(e,e.$name);else if(l.whyDisabled+="<br /><strong>",r&&(l.whyDisabled+=r+" "),"bs2"===f.framework()&&e.$$element&&e.$$element.parent()&&e.$$element.parent().parent()&&e.$$element.parent().parent().find("label")&&e.$$element.parent().parent().find("label").text()?l.whyDisabled+=e.$$element.parent().parent().find("label").text():"bs3"===f.framework()&&e.$$element&&e.$$element.parent()&&e.$$element.parent().parent()&&e.$$element.parent().parent().parent()&&e.$$element.parent().parent().parent().find("label")&&e.$$element.parent().parent().parent().find("label").text()?l.whyDisabled+=e.$$element.parent().parent().parent().find("label").text():l.whyDisabled+=e.$name,l.whyDisabled+="</strong>: ",e.$error)for(var t in e.$error)if(e.$error.hasOwnProperty(t))switch(t){case"required":l.whyDisabled+="Field missing required value. ";break;case"pattern":l.whyDisabled+="Field does not match required pattern. ";break;default:l.whyDisabled+=t+". "}})}(l[l.topLevelFormName])):l[l.topLevelFormName].$pristine&&(t=!0):l.whyDisabled="Top level form name invalid",t||l.whyDisabled||"ready"!==l.phase)return!0;if("function"!=typeof(null===(e=l.disableFunctions)||void 0===e?void 0:e.isSaveDisabled))return!1;var n=l.disableFunctions.isSaveDisabled(l.record,a.master,l[l.topLevelFormName]);return l.whyDisabled="string"==typeof n?n:"An application level user-specified function is inhibiting saving the record",!!n},l.isDeleteDisabled=function(){var e;return!l.id||"ready"!==l.phase||"function"==typeof(null===(e=l.disableFunctions)||void 0===e?void 0:e.isDeleteDisabled)&&l.disableFunctions.isDeleteDisabled(l.record,a.master,l[l.topLevelFormName])},l.isNewDisabled=function(){var e;return"function"==typeof(null===(e=l.disableFunctions)||void 0===e?void 0:e.isNewDisabled)&&l.disableFunctions.isNewDisabled(l.record,a.master,l[l.topLevelFormName])},l.setDefaults=function(e,a){void 0===a&&(a="");var i={};return e.forEach(function(e){if(void 0!==e.defaultValue){for(var t=e.name.replace(a,"").split("."),n=i,r=0;r<t.length-1;r++)n[t[r]]||(n[t[r]]={}),n=n[t[r]];n[t[t.length-1]]=e.defaultValue}}),i},l.getVal=function(e,t){if(-1===e.indexOf("$index")||void 0!==t)return e=e.replace(/\$index/g,t),l.$eval("record."+e)},l.sortableOptions={update:function(e,t){e.target.hasAttribute("disabled")?t.item.sortable.cancel():l.topLevelFormName&&l[l.topLevelFormName].$setDirty()}},l.setUpCustomLookupOptions=function(e,t,n,r){for(var a=0,i=[l,r];a<i.length;a++){var o=i[a];o&&(o[e.ids]=t,o[e.options]=n)}var s=w(l.record,e.name);s&&(Array.isArray(s)&&(s=s.filter(function(e){return null!=e})),s=C(e,s,n,t),y(l.record,e.name,void 0,s))}},fillFormFromBackendCustomSchema:L,fillFormWithBackendSchema:function(t,n,r,a){e.getSchema(t.modelName,t.formName).then(function(e){L(e.data,t,n,r,a)},t.handleHttpError)}}}e=O.services||(O.services={}),t.$inject=["$location","$window","$filter","$timeout","$sce","RoutingService","CssFrameworkService","SubmissionsService","SchemasService"],e.RecordHandlerService=t}(fng=fng||{}),function(e){var t;function n(n){return{getSchema:function(e,t){return n.get("/api/schema/"+e+(t?"/"+t:""),{cache:!0})}}}t=e.services||(e.services={}),n.$inject=["$http"],t.SchemasService=n}(fng=fng||{}),function(d){var e;function t(r){function a(e){return!!d.formsAngular.elemSecurityFuncBinding&&("hidden"===e&&!!d.formsAngular.hiddenSecurityFuncName||"disabled"===e&&!!d.formsAngular.disabledSecurityFuncName)}function i(e,t){return a(t)&&("hidden"===t&&r[d.formsAngular.hiddenSecurityFuncName]&&(!e||!!e.isSecurelyHidden)||"disabled"===t&&r[d.formsAngular.disabledSecurityFuncName]&&(!e||!!e.isSecurelyDisabled))}function n(e,t){return r[d.formsAngular.hiddenSecurityFuncName](e,t)}function o(e,t){return r[d.formsAngular.disabledSecurityFuncName](e,t)}function s(e,t){return!!o(e,t)}function l(){return"one-time"===d.formsAngular.elemSecurityFuncBinding?"::":""}function t(e,t){return e&&t&&(n=e,null===(r=d.formsAngular.ignoreIdsForHideableOrDisableableAttrs)||void 0===r||!r.some(function(e){return n.includes(e)}))?" ".concat(t,' title="').concat(e,'"'):"";var n,r}function e(e){return t(e,d.formsAngular.disableableAttr)}function c(e){return t(e,d.formsAngular.hideableAttr)}return{canDoSecurity:a,canDoSecurityNow:i,isSecurelyHidden:n,isSecurelyDisabled:s,getHideableAttrs:c,getDisableableAttrs:e,getDisableableAncestorAttrs:function(e){return t(e,d.formsAngular.disableableAncestorAttr)},decorateSecurableScope:function(e,t){a("hidden")&&(!d.formsAngular.skipHiddenSecurityFuncName||null!=t&&t.overrideSkipping||"function"!=typeof r[d.formsAngular.skipHiddenSecurityFuncName]||!r[d.formsAngular.skipHiddenSecurityFuncName](null==t?void 0:t.pseudoUrl))&&(e.isSecurelyHidden=function(e){return n(e,null==t?void 0:t.pseudoUrl)}),a("disabled")&&(!d.formsAngular.skipDisabledSecurityFuncName||null!=t&&t.overrideSkipping||"function"!=typeof r[d.formsAngular.skipDisabledSecurityFuncName]||!r[d.formsAngular.skipDisabledSecurityFuncName](null==t?void 0:t.pseudoUrl))&&(e.isSecurelyDisabled=function(e){return s(e,null==t?void 0:t.pseudoUrl)},(!d.formsAngular.skipDisabledAncestorSecurityFuncName||null!=t&&t.overrideSkipping||(r[d.formsAngular.skipDisabledAncestorSecurityFuncName],1)||!r[d.formsAngular.skipDisabledAncestorSecurityFuncName](null==t?void 0:t.pseudoUrl))&&(e.requiresDisabledChildren=function(e){return"+"===o(e,null==t?void 0:t.pseudoUrl)}))},doSecurityWhenReady:function(t){if(i(void 0,"hidden"))t();else if(a("hidden"))var n=r.$watch(d.formsAngular.hiddenSecurityFuncName,function(e){e&&(n(),t())})},considerVisibility:function(e,t){var n=c(e);if(i(t,"hidden")){if("instant"!==d.formsAngular.elemSecurityFuncBinding)return{visibilityAttr:'data-ng-if="'.concat(l(),"!isSecurelyHidden('").concat(e,"')\"").concat(n)};if(t.isSecurelyHidden(e))return{omit:!0}}return{visibilityAttr:n}},considerContainerVisibility:function(e,t){if(i(t,"hidden")){if("instant"===d.formsAngular.elemSecurityFuncBinding)return e.some(function(e){return!t.isSecurelyHidden(e)})?{}:{omit:!0};var n=e.map(function(e){return"!isSecurelyHidden('".concat(e,"')")});return{visibilityAttr:'data-ng-if="'.concat(l(),"(").concat(n.join(" || "),')"')}}return{}},generateDisabledAttr:function(n,r,a){return function(){var e="";if(i(r,"disabled")){if((a=a||{}).attrRequiresValue&&a.forceNg)throw new Error("Invalid combination of parameters provided to generateDisabledAttr() [attrRequiresValue and forceNg]");var t=a.attr||"disabled";if("instant"===d.formsAngular.elemSecurityFuncBinding){if(r.isSecurelyDisabled(n)){if(a.attrRequiresValue)return" ".concat(t,'="true"');if(!a.forceNg)return" ".concat(t);e="true"}}else e="".concat(l(),"isSecurelyDisabled('").concat(n,"')");if(e)return"disabled"===t?' data-ng-disabled="'.concat(e,'"'):" data-ng-attr-".concat(t,'="').concat(e,'"')}return e}()+e(n)}}}e=d.services||(d.services={}),t.$inject=["$rootScope"],e.SecurityService=t}(fng=fng||{});var fng,ExpirationCache=function(){function e(e){void 0===e&&(e=6e4),this.store=new Map,this.timeout=e}return e.prototype.get=function(e){return this.store.get(e)},e.prototype.put=function(e,t){var n=this;this.store.set(e,t),setTimeout(function(){n.remove(e)},this.timeout)},e.prototype.remove=function(e){this.store.delete(e)},e.prototype.removeAll=function(){this.store=new Map},e.prototype.delete=function(){},e}();!function(e){var t;function n(i){function n(e){function t(e,t){void 0!==t&&""!==t&&("object"==typeof t&&(t=JSON.stringify(t)),""===n?n="?":n+="&",n+=e+"="+t)}var n="";return t("l",e.limit),t("f",e.find),t("p",e.projection),t("a",e.aggregate),t("o",e.order),t("s",e.skip),t("c",e.concatenate),n}var r=!0,o=new ExpirationCache;function s(e,t,n){var r="/api/".concat(e);return t&&(r+="/".concat(t)),n&&(r+="/".concat(n)),r}return{getListAttributes:function(e,t,n){var r="string"==typeof t?t:t.id||t._id||t.x||t;if("object"==typeof r)throw new Error("getListAttributes doesn't expect an object but was provided with ".concat(JSON.stringify(t)));var a=n?"?returnRaw=1":"";return i.get("/api/".concat(e,"/").concat(r,"/list").concat(a),{cache:o})},getAllListAttributes:function(e){return i.get("/api/".concat(e,"/listAll"),{cache:o})},getPagedAndFilteredList:function(e,t){if(t.projection)throw new Error("Cannot use projection option for getPagedAndFilteredList, because it only returns list fields");return void 0===t.concatenate&&(t.concatenate=!1),i.get("/api/".concat(e,"/listAll").concat(n(t)))},getPagedAndFilteredListFull:function(e,t){return i.get("/api/".concat(e).concat(n(t)))},readRecord:function(e,t,n){var r="string"==typeof t?t:t.id||t._id||t.x||t;if("object"==typeof r)throw new Error("readRecord doesn't expect an object but was provided with ".concat(JSON.stringify(t)));var a=s(e,n,r);return i.get(a)},getAll:function(e,t){var n=angular.extend({cache:!!r&&o},t);return i.get("/api/".concat(e),n)},deleteRecord:function(e,t,n){var r=s(e,n,t);return i.delete(r)},updateRecord:function(e,t,n,r){o.remove("/api/".concat(e));var a=s(e,r,t);return i.post(a,n)},createRecord:function(e,t,n){o.remove("/api/".concat(e));var r=s(e,n)+"/new";return i.post(r,t)},useCache:function(e){r=e},getCache:function(){return!!o},clearCache:function(){o.removeAll()}}}t=e.services||(e.services={}),n.$inject=["$http"],t.SubmissionsService=n}(fng=fng||{}),function(f){var e;function t(t,n,e,r,a,i,o,s,l){t.sharedData={record:{},disableFunctions:{},dataEventFunctions:{},modelControllers:[]};var c={master:{},fngInvalidRequired:"fng-invalid-required",allowLocationChange:!0};t.errorVisible=!1,angular.extend(t,o.parsePathFunc()(e.$$path));var d=r("titleCase")(t.modelName,!0);function u(){l.fillFormWithBackendSchema(t,s,l,c);for(var e=0;e<t.sharedData.modelControllers.length;e++)t.sharedData.modelControllers[e].onBaseCtrlReady&&t.sharedData.modelControllers[e].onBaseCtrlReady(t);t.$on("$destroy",function(){t.sharedData.modelControllers.forEach(function(e){return e.$destroy()}),n.$broadcast("fngControllersUnloaded")})}i.loadControllerAndMenu(t.sharedData,d,0,!1,t.$new()),t.formName&&i.loadControllerAndMenu(t.sharedData,d+r("titleCase")(t.formName,!0),1,!1,t.$new()),n.$broadcast("fngControllersLoaded",t.sharedData,t.modelName),t.modelNameDisplay=t.sharedData.modelNameDisplay||r("titleCase")(t.modelName),n.$broadcast("fngFormLoadStart",t),s.decorateScope(t,s,l,t.sharedData),l.decorateScope(t,a,l,c),"function"==typeof f.formsAngular.beforeProcess?f.formsAngular.beforeProcess(t,function(e){e?t.showError(e.message,"Error preparing to process form"):u()}):u()}e=f.controllers||(f.controllers={}),t.$inject=["$scope","$rootScope","$location","$filter","$uibModal","FngModelCtrlService","RoutingService","FormGeneratorService","RecordHandlerService"],e.BaseCtrl=t}(fng=fng||{}),function(e){var t;function n(e,t){e.yes=function(){t.close(!0)},e.no=function(){t.close(!1)},e.cancel=function(){t.dismiss("cancel")}}t=e.controllers||(e.controllers={}),n.$inject=["$scope","$uibModalInstance"],t.SaveChangesModalCtrl=n}(fng=fng||{}),function(e){var t;function n(t,e,n,r){t.models=[],e.get("/api/models").then(function(e){t.models=e.data},function(){n.search({}).path("/404")}),t.newUrl=function(e){return r.buildUrl(e+"/new")},t.listUrl=function(e){return r.buildUrl(e)}}t=e.controllers||(e.controllers={}),n.$inject=["$scope","$http","$location","RoutingService"],t.ModelCtrl=n}(fng=fng||{}),function(u){var e;function t(a,e,o,r,t,n,i){var s;function l(){o.items=[],o.contextMenu=void 0,o.contextMenuId=void 0,o.contextMenuHidden=void 0,o.contextMenuDisabled=void 0}function c(e){o.contextMenu=e;var t="".concat(_.camelCase(e),"ContextMenu");o.contextMenuId=void 0,i.doSecurityWhenReady(function(){o.contextMenuId=t,o.contextMenuHidden=i.isSecurelyHidden(o.contextMenuId),o.contextMenuDisabled=i.isSecurelyDisabled(o.contextMenuId)})}a.navScope=o,l(),o.toggleCollapsed=function(){o.collapsed=!o.collapsed},o.isCollapsed=!0,o.showShortcuts=!1,o.shortcuts=[{key:"?",act:"Show shortcuts"},{key:"/",act:"Jump to search"},{key:"Ctrl+Shift+S",act:"Save the current record"},{key:"Ctrl+Shift+Esc",act:"Cancel changes on the current record"},{key:"Ctrl+Shift+Ins",act:"Create a new record"},{key:"Ctrl+Shift+X",act:"Delete the current record"}],null!==(s=u.formsAngular.keyboardShortCuts)&&void 0!==s&&s.forEach(function(e){o.shortcuts.push({key:"Ctrl+Shift+"+e.letter,act:e.desc})}),o.markupShortcut=function(e){return'<span class="key">'+e.split("+").join('</span> + <span class="key">')+"</span>"},o.globalShortcuts=function(n){function t(e){var t=document.getElementById(e);t&&(t.disabled||setTimeout(function(){t.click()}),n.preventDefault())}var e,r,a=n.ctrlKey&&n.shiftKey&&!n.altKey&&!n.metaKey;if(191===n.keyCode&&(!("INPUT"==(r=(e=n).target.tagName)||"SELECT"==r||"TEXTAREA"==r||"DIV"==r&&e.target.classList.contains("ck-editor__editable"))||n.ctrlKey&&!n.altKey&&!n.metaKey))if(n.ctrlKey||!n.shiftKey){var i=document.getElementById("searchinput");i&&(i.focus(),n.preventDefault())}else o.showShortcuts=!0;else 27===n.keyCode&&(a||o.showShortcuts)?a?t("cancelButton"):o.showShortcuts=!1:a&&(83===n.keyCode?t("saveButton"):45===n.keyCode?t("newButton"):88===n.keyCode?t("deleteButton"):u.formsAngular.keyboardShortCuts&&u.formsAngular.keyboardShortCuts.forEach(function(e){n.keyCode===e.keycode&&t(e.id)}))},o.css=function(e,t){return"function"==typeof n[e]?n[e](t):"error text-error"},o.$on("fngControllersLoaded",function(e,t,n){c(t.dropDownDisplay||t.modelNameDisplay||r("titleCase")(n,!1)),t.dropDownDisplayPromise&&t.dropDownDisplayPromise.then(function(e){c(e)})}),o.$on("fngControllersUnloaded",function(e){l()}),o.doClick=function(e,t,n){var r=angular.element(t.target);if((n=n||o.items[e]).divider||r.parent().hasClass("disabled"))t.preventDefault();else if(n.broadcast)a.$broadcast.apply(a,__spreadArray([n.broadcast],n.args||[],!1));else if("function"==typeof n.fn)n.fn.apply(n,n.args||[]);else if(n.fn)throw new Error("Incorrect menu setup")},o.isHidden=function(e){function t(e){return!!e.isHidden&&e.isHidden()}var n=!1,r=o.items[e];if(r.divider)if(0===e)n=!0;else for(var a=!1,i=e-1;0<=i&&!n&&!a;)o.items[i].divider?n=!0:t(o.items[i])?--i:a=!0;return n||t(r)},o.isDisabled=function(e){return!!o.items[e].isDisabled&&o.items[e].isDisabled()},o.buildUrl=function(e){return t.buildUrl(e)},o.dropdownClass=function(e){var t="";return o.items[e].divider?t="divider":o.isDisabled(e)&&(t="disabled"),t};var d=e.document.title;o.$on("$routeChangeSuccess",function(){e.document.title=d})}e=u.controllers||(u.controllers={}),t.$inject=["$rootScope","$window","$scope","$filter","RoutingService","CssFrameworkService","SecurityService"],e.NavCtrl=t}(fng=fng||{}),function(e){e.formsAngular=angular.module("formsAngular",["ngSanitize","ngMessages","ui.bootstrap","infinite-scroll","monospaced.elastic"]).controller("BaseCtrl",e.controllers.BaseCtrl).controller("SaveChangesModalCtrl",e.controllers.SaveChangesModalCtrl).controller("LinkCtrl",e.controllers.LinkCtrl).controller("ModelCtrl",e.controllers.ModelCtrl).controller("NavCtrl",e.controllers.NavCtrl).directive("modelControllerDropdown",e.directives.modelControllerDropdown).directive("dropDownItem",e.directives.dropDownItem).directive("dropDownSubMenu",e.directives.dropDownSubMenu).directive("errorDisplay",e.directives.errorDisplay).directive("fngLink",e.directives.fngLink).directive("formInput",e.directives.formInput).directive("formButtons",e.directives.formButtons).directive("globalSearch",e.directives.globalSearch).directive("fngNakedDate",e.directives.fngNakedDate).filter("camelCase",e.filters.camelCase).filter("titleCase",e.filters.titleCase).filter("extractTimestampFromMongoID",e.filters.extractTimestampFromMongoID).service("AddAllService",e.services.AddAllService).provider("CssFrameworkService",e.services.CssFrameworkService).provider("RoutingService",e.services.RoutingService).factory("FngModelCtrlService",e.services.FngModelCtrlService).factory("FormGeneratorService",e.services.FormGeneratorService).factory("FormMarkupHelperService",e.services.FormMarkupHelperService).factory("InputSizeHelperService",e.services.InputSizeHelperService).factory("PluginHelperService",e.services.PluginHelperService).factory("RecordHandlerService",e.services.RecordHandlerService).factory("SchemasService",e.services.SchemasService).factory("SubmissionsService",e.services.SubmissionsService).factory("SecurityService",e.services.SecurityService)}(fng=fng||{});var formsAngular=fng.formsAngular;angular.module("formsAngular").run(["$templateCache",function(e){e.put("base-analysis.html",'<div ng-controller="AnalysisCtrl">\n <error-display></error-display>\n <div ng-hide="!showLoading" class="loading">Loading…</div>\n <div class="container-fluid page-header report-header">\n <div class="header-lhs">\n <h1>{{ titleWithSubstitutions }}</h1>\n </div>\n <div class="header-rhs">\n <form-input schema="paramSchema" name="paramForm" ng-show="paramSchema" formstyle="horizontalCompact"></form-input>\n </div>\n </div>\n <div class="container-fluid page-body report-body">\n <div class="row-fluid report-grow">\n <div class="gridStyle" style="height:100%;" ui-grid="gridOptions" ui-grid-selection ui-grid-resize-columns></div>\n </div>\n </div>\n</div>\n'),e.put("base-edit.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="phase == \'ready\' && !showLoading" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header edit-header">\n <div class="header-lhs col-sm-8 span8">\n <h1 id="header-text">{{modelNameDisplay}} :\n <span id="header-data-desc">\n <span ng-show="!!editFormHeader" >{{ editFormHeader() }}</span>\n <span ng-hide="!!editFormHeader" ng-repeat="field in listSchema" ng-bind-html="getListData(record, field.name) + \' \'"></span>\n </span>\n </h1>\n </div>\n <div class="header-rhs col-sm-2 span2">\n <div form-buttons></div>\n </div>\n </div>\n <div class="container-fluid page-body edit-body">\n <form-input name="baseForm" schema="baseSchema()" formstyle="compact"></form-input>\n </div>\n\x3c!-- <pre>--\x3e\n \x3c!--Record--\x3e\n \x3c!--{{ record | json }}--\x3e\n \x3c!--formSchema--\x3e\n \x3c!--{{ formSchema | json }}--\x3e\n\x3c!-- </pre>--\x3e\n</div>\n'),e.put("base-list-view.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="!showLoading" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header list-header">\n <div class="header-lhs col-sm-8 span8">\n <h1>{{modelNameDisplay}}</h1>\n </div>\n </div>\n <div class="page-body list-body">\n <div ng-class="css(\'rowFluid\')" infinite-scroll="scrollTheList()">\n <a ng-repeat="record in recordList" ng-href="{{generateViewUrl(record)}}">\n <div class="list-item">\n <div ng-class="css(\'span\',12/listSchema.length)" ng-repeat="field in listSchema">{{getListData(record, field.name)}} </div>\n </div>\n </a>\n </div>\n </div>\n</div>\n'),e.put("base-list.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="!showLoading" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header list-header">\n <div class="header-lhs col-sm-8 span8">\n <h1>{{modelNameDisplay}}</h1>\n </div>\n <div class="header-rhs col-sm-2 span2">\n <a ng-href="{{generateNewUrl()}}"><button id="newBtn" class="btn btn-default"><i class="icon-plus"></i> New</button></a>\n </div>\n </div>\n <div class="page-body list-body">\n <div ng-class="css(\'rowFluid\')" infinite-scroll="scrollTheList()">\n <a ng-repeat="record in recordList" ng-href="{{generateEditUrl(record)}}">\n <div class="list-item">\n <div ng-class="css(\'span\',12/listSchema.length)" ng-repeat="field in listSchema">{{getListData(record, field.name)}} </div>\n </div>\n </a>\n </div>\n </div>\n</div>\n'),e.put("base-view.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="phase == \'ready\' && !spinning" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header edit-header">\n <div class="header-lhs col-sm-8 span8">\n <h1 id="header-text">{{modelNameDisplay}} :\n <span ng-repeat="field in listSchema" ng-bind-html="getListData(record, field.name) + \' \'"></span>\n </h1>\n </div>\n </div>\n <div class="container-fluid page-body edit-body">\n <form-input name="baseForm" schema="baseSchema()" formstyle="compact" viewform="true"></form-input>\n </div>\n</div>\n'),e.put("error-display-bs2.html",'<div id="display-error" ng-show="errorVisible" class="row-fluid ng-hide">\n <div class="alert alert-error offset1 span10">\n <button type="button" id="err-hide" class="close" ng-click="dismissError()"><i class="icon-remove"></i></button>\n <button type="button" id="err-pin" class="close" ng-click="stickError()"><i class="icon-eye-open"></i></button>\n <h4 id="err-title">{{alertTitle}}</h4>\n <div id="err-msg" ng-bind-html="errorMessage"></div>\n </div>\n</div>\n'),e.put("error-display-bs3.html",'<div id="display-error" ng-show="errorVisible" class="row ng-hide">\n <div class="alert alert-error col-md-offset-1 col-md-10 alert-danger">\n <button type="button" id="err-hide" class="close" ng-click="dismissError()"><i class="glyphicon glyphicon-remove"></i></button>\n <button type="button" id="err-pin" class="close" ng-click="stickError()"><i class="glyphicon glyphicon-pushpin"></i></button>\n <h4 id="err-title">{{alertTitle}}</h4>\n <div id="err-msg" ng-bind-html="errorMessage"></div>\n </div>\n</div>\n'),e.put("error-messages.html",'<div ng-message="required">A value is required for this field</div>\n<div ng-message="minlength">Too few characters entered</div>\n<div ng-message="maxlength">Too many characters entered</div>\n<div ng-message="min">That value is too small</div>\n<div ng-message="max">That value is too large</div>\n<div ng-message="email">You need to enter a valid email address</div>\n<div ng-message="pattern">This field does not match the expected pattern</div>\n'),e.put("form-button-bs2.html",'<div class="form-btn-grp">\n <div class="btn-group pull-right">\n <button id="saveButton" class="btn btn-mini btn-primary form-btn" ng-click="save()" ng-disabled="isSaveDisabled()"><i class="icon-ok"></i> Save</button>\n <div id="why-disabled" ng-class="{showwhy:!!whyDisabled}" ng-bind-html="whyDisabled"></div>\n <button id="cancelButton" class="btn btn-mini btn-warning form-btn" ng-click="cancel()" ng-disabled="isCancelDisabled()"><i class="icon-remove"></i> Cancel</button>\n </div>\n <div class="btn-group pull-right">\n <button id="newButton" class="btn btn-mini btn-success form-btn" ng-click="newClick()" ng-disabled="isNewDisabled()"><i class="icon-plus"></i> New</button>\n <button id="deleteButton" class="btn btn-mini btn-danger form-btn" ng-click="deleteClick()" ng-disabled="isDeleteDisabled()"><i class="icon-minus"></i> Delete</button>\n </div>\n</div>\n'),e.put("form-button-bs3.html",'<div class="form-btn-grp">\n <div class="btn-group pull-right">\n <button id="saveButton" class="btn btn-primary form-btn btn-xs" ng-click="save()" ng-disabled="isSaveDisabled()"><i class="glyphicon glyphicon-ok"></i> Save</button>\n <div id="why-disabled" ng-class="{showwhy:!!whyDisabled}" ng-bind-html="whyDisabled"></div>\n <button id="cancelButton" class="btn btn-warning form-btn btn-xs" ng-click="cancel()" ng-disabled="isCancelDisabled()"><i class="glyphicon glyphicon-remove"></i> Cancel</button>\n </div>\n <div class="btn-group pull-right">\n <button id="newButton" class="btn btn-success form-btn btn-xs" ng-click="newClick()" ng-disabled="isNewDisabled()"><i class="glyphicon glyphicon-plus"></i> New</button>\n <button id="deleteButton" class="btn btn-danger form-btn btn-xs" ng-click="deleteClick()" ng-disabled="isDeleteDisabled()"><i class="glyphicon glyphicon-minus"></i> Delete</button>\n </div>\n</div>\n'),e.put("search-bs2.html",'<form class="navbar-search pull-right">\n <div id="search-cg" class="control-group" ng-class="errorClass">\n <input type="text" spellcheck="false" autocomplete="off" id="searchinput" ng-model="searchTarget" ng-model-options="{debounce:500}" class="search-query" placeholder="{{searchPlaceholder}}" ng-keyup="handleKey($event)">\n </div>\n</form>\n<div class="results-container" ng-show="results.length >= 1">\n <div class="search-results">\n <div ng-repeat="result in results">\n <a href="{{result.href}}" ng-class="resultClass($index)" title="{{result.additional}}">{{result.resourceText}} {{result.text}}</a>\n </div>\n <div ng-show="moreCount > 0">(plus more - continue typing to narrow down search...)\n </div>\n </div>\n</div>\n'),e.put("search-bs3.html",'<form class="pull-right navbar-form">\n <div id="search-cg" class="form-group" ng-class="errorClass">\n <input type="text" spellcheck="false" autocomplete="off" id="searchinput" ng-model="searchTarget" ng-model-options="{debounce:500}" class="search-query form-control" placeholder="{{searchPlaceholder}}" ng-keyup="handleKey($event)">\n </div>\n</form>\n<div class="results-container" ng-show="results.length >= 1">\n <div class="search-results">\n <div ng-repeat="result in results">\n <a href="{{result.href}}" ng-class="resultClass($index)" title="{{result.additional}}">{{result.resourceText}} {{result.text}}</a>\n </div>\n <div ng-show="moreCount > 0">(plus more - continue typing to narrow down search...)\n </div>\n </div>\n</div>\n')}]);
|
package/dist/server/data_form.js
CHANGED
|
@@ -116,7 +116,6 @@ class FormsAngular {
|
|
|
116
116
|
let lookupResource = that.getResource(fieldOptions.ref);
|
|
117
117
|
if (lookupResource) {
|
|
118
118
|
let hiddenFields = that.generateHiddenFields(lookupResource, false);
|
|
119
|
-
hiddenFields.__v = false;
|
|
120
119
|
lookupResource.model
|
|
121
120
|
.findOne({ _id: doc[aField.field] })
|
|
122
121
|
.select(hiddenFields)
|
|
@@ -1572,7 +1571,6 @@ class FormsAngular {
|
|
|
1572
1571
|
*/
|
|
1573
1572
|
cleanseRequest(req) {
|
|
1574
1573
|
let reqData = req.body, resource = req.resource;
|
|
1575
|
-
delete reqData.__v; // Don't mess with Mongoose internal field (https://github.com/LearnBoost/mongoose/issues/1933)
|
|
1576
1574
|
if (typeof resource.options['hide'] === 'undefined') {
|
|
1577
1575
|
return reqData;
|
|
1578
1576
|
}
|
|
@@ -1590,7 +1588,6 @@ class FormsAngular {
|
|
|
1590
1588
|
generateQueryForEntity(req, resource, id, cb) {
|
|
1591
1589
|
let that = this;
|
|
1592
1590
|
let hiddenFields = this.generateHiddenFields(resource, false);
|
|
1593
|
-
hiddenFields.__v = false;
|
|
1594
1591
|
that.doFindFunc(req, resource, function (err, queryObj) {
|
|
1595
1592
|
if (err) {
|
|
1596
1593
|
cb(err);
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"author": "Mark Chapman <support@forms-angular.org>",
|
|
4
4
|
"description": "A form builder that sits on top of Angular.js, Twitter Bootstrap, jQuery UI, Angular-UI, Express and Mongoose. Opinionated or what?",
|
|
5
5
|
"homepage": "http://forms-angular.org",
|
|
6
|
-
"version": "0.12.0-beta.
|
|
6
|
+
"version": "0.12.0-beta.289",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": ">=8.x",
|
|
9
9
|
"npm": ">=5.x"
|