forms-angular 0.12.0-beta.315 → 0.12.0-beta.316

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.
@@ -963,7 +963,8 @@ var fng;
963
963
  /* Array footer */
964
964
  if (info.noAdd !== true || typeof info.customFooter == 'string' || info.noneIndicator) {
965
965
  var footer = '';
966
- if (typeof info.customFooter == 'string') {
966
+ var hasCustomFooter = typeof info.customFooter == 'string';
967
+ if (hasCustomFooter) {
967
968
  footer = info.customFooter;
968
969
  }
969
970
  var hideCond = '';
@@ -983,13 +984,15 @@ var fng;
983
984
  }
984
985
  if (info.noneIndicator) {
985
986
  footer += "<span ".concat(indicatorShowCond, " class=\"none_indicator\" id=\"no_").concat(info.id, "_indicator\">None</span>");
986
- // hideCond for the schema-foot is if there's no add button and no indicator
987
- hideCond = "".concat(model, ".length > 0");
988
- if (info.noAdd === true) {
989
- hideCond = "ng-hide=\"".concat(hideCond, "\"");
990
- }
991
- else {
992
- hideCond = info.noAdd ? "ng-hide=\"".concat(info.noAdd, " && ").concat(hideCond, "\"") : '';
987
+ // hideCond for the schema-foot is if there's no add button, no custom footer and no indicator
988
+ if (!hasCustomFooter) {
989
+ hideCond = "".concat(model, ".length > 0");
990
+ if (info.noAdd === true) {
991
+ hideCond = "ng-hide=\"".concat(hideCond, "\"");
992
+ }
993
+ else {
994
+ hideCond = info.noAdd ? "ng-hide=\"".concat(info.noAdd, " && ").concat(hideCond, "\"") : '';
995
+ }
993
996
  }
994
997
  }
995
998
  if (footer !== '') {
@@ -1 +1 @@
1
- var fng,__awaiter=this&&this.__awaiter||function(e,i,s,l){return new(s=s||Promise)(function(n,t){function r(e){try{a(l.next(e))}catch(e){t(e)}}function o(e){try{a(l.throw(e))}catch(e){t(e)}}function a(e){var t;e.done?n(e.value):((t=e.value)instanceof s?t:new s(function(e){e(t)})).then(r,o)}a((l=l.apply(e,i||[])).next())})},__generator=this&&this.__generator||function(r,o){var a,i,s,l={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]},c={next:e(0),throw:e(1),return:e(2)};return"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function e(n){return function(e){var t=[n,e];if(a)throw new TypeError("Generator is already executing.");for(;l=c&&t[c=0]?0:l;)try{if(a=1,i&&(s=2&t[0]?i.return:t[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,t[1])).done)return s;switch(i=0,(t=s?[2&t[0],s.value]:t)[0]){case 0:case 1:s=t;break;case 4:return l.label++,{value:t[1],done:!1};case 5:l.label++,i=t[1],t=[0];continue;case 7:t=l.ops.pop(),l.trys.pop();continue;default:if(!(s=0<(s=l.trys).length&&s[s.length-1])&&(6===t[0]||2===t[0])){l=0;continue}if(3===t[0]&&(!s||t[1]>s[0]&&t[1]<s[3]))l.label=t[1];else if(6===t[0]&&l.label<s[1])l.label=s[1],s=t;else{if(!(s&&l.label<s[2])){s[2]&&l.ops.pop(),l.trys.pop();continue}l.label=s[2],l.ops.push(t)}}t=o.call(r,l)}catch(e){t=[6,e],i=0}finally{a=s=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}}},__spreadArray=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||((r=r||Array.prototype.slice.call(t,0,o))[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},ExpirationCache=((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(o){return{restrict:"AE",replace:!0,link:function(e,t){var n=t[0].parentElement,r=o(' <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)",o='ng-class="dropdownClass($index)"',a="normal"!==s.formsAngular.elemSecurityFuncBinding,i=a?"::":"";return e.canDoSecurity("hidden")?(t='ng-if="contextMenuId && !contextMenuHidden" '.concat(e.getHideableAttrs("{{ ::contextMenuId }}")),a?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 }}")),o+=' class="{{ '.concat(i,"(!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(o,">")+' <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||{}),(e=>{function t(e){return{restrict:"E",templateUrl:"error-display-"+e.framework()+".html"}}e=e.directives||(e.directives={}),t.$inject=["CssFrameworkService"],e.errorDisplay=t})(fng=fng||{}),(e=>{function t(o){o.checkNotModal=function(){for(var e,t=o.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;);}}e=e.controllers||(e.controllers={}),t.$inject=["$scope"],e.LinkCtrl=t})(fng=fng||{}),(e=>{function t(d,u){return{restrict:"E",scope:{dataSrc:"&model"},link:function(n,e,r){var o=r.ref,t=r.text&&unescape(r.text)!==r.text,a=r.form,i=r.linktab;if(n.readonly=r.readonly,n.element=e,a=a?a+"/":"",i=i?"/"+i:"",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."}e=r.fld,t=e.split("."),t=n.$parent.subDoc&&(n.$parent.subDoc[e]||n.$parent.subDoc[t[t.length-1]])?n.$parent.subDoc[e]?l+"subDoc."+e:l+"subDoc."+t[t.length-1]:l+"record"+(e=void 0!==s.$index?(e=t.pop(),t.join(".")+"["+s.$index+"]."+e):"."+e);n.$watch(t,function(e){var t;e?(e=/^[a-f0-9]{24}/.test(e.toString())?e.slice(0,24):e.id&&/^[a-f0-9]{24}/.test(e.id)?e.id.slice(0,24):n.$parent["f_"+r.fld+"Options"]&&-1<(t=n.$parent["f_"+r.fld+"Options"].indexOf(e))?n.$parent["f_"+r.fld+"_ids"][t]:void 0,n.link=e?d.buildUrl(o+"/"+a+(e.id||e)+"/edit"+i):void 0):n.link=void 0},!0)}else{r.text&&0<r.text.length&&(n.text=r.text);var c=n.$parent.$index;n.$watch("dataSrc()",function(e){e&&(void 0!==c&&angular.isArray(e)&&(e=e[c]),n.link=d.buildUrl(o+"/"+a+e+"/edit"+i),n.text||u.getListAttributes(o,e).then(function(e){e=e.data;!1===e.success?n.text=e.err:n.text=e.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>")}t=t.readonly?'<span class="fng-link">{{text}}</span>':t.text&&unescape(t.text)!==t.text?n(unescape(t.text)):n("{{text}}");return t}}}e=e.directives||(e.directives={}),t.$inject=["RoutingService","SubmissionsService"],e.fngLink=t})(fng=fng||{}),(e=>{function t(e){return{restrict:"A",templateUrl:"form-button-"+e.framework()+".html"}}e=e.directives||(e.directives={}),t.$inject=["CssFrameworkService"],e.formButtons=t})(fng=fng||{}),(e=>{var O,t;function n(A,F,N,E,L,I,T,l){return{restrict:"EA",link:function(y,w,f){var p,b=[],k=O.N,m=function(t,e,n,r){function o(){var e;if(Array.isArray(y[t.options]))e={repeat:t.options,value:"option"};else{if(!y[t.options]||!Array.isArray(y[t.options].values))throw new Error("Invalid enumeration setup in field "+t.name);e=Array.isArray(y[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 a,i,s,l,c,d,u=t.id,f=((t.array||r.subschema)&&(u=T.generateArrayElementIdString(u,t,r)),e||(e=i=(r.model||"record")+".",r.subschema&&-1!==t.name.indexOf(".")?(s=t.name,l=r.subschemaroot,c=s.slice(l.length+1),r.index?u="f_"+(e+=l+"["+r.index+"]."+c).slice(i.length).replace(/(\.|\[|]\.)/g,"-"):(e+=l,r.subkey?(u=e.slice(i.length).replace(/\./g,"-")+"-subkey"+r.subkeyno+"-"+c,e+="[$_arrayOffset_"+l.replace(/\./g,"_")+"_"+r.subkeyno+"]."+c):(e+="[$index]."+c,a=s.replace(/\./g,"-")))):e+=t.name),T.allInputsVars(y,t,r,e,u,a)),p=f.common,m=(n=n||t.required)?" required ":"";switch(t.type){case"select":t.select2?v='<input placeholder="fng-select2 has been removed" readonly>':(p=(p=(p+=T.handleReadOnlyDisabled(t,y).join(" "))+(t.add?" "+t.add+" ":""))+' aria-label="'.concat(t.label&&""!==t.label?t.label:t.name,'" '),v="<select "+p+'class="'+f.formControl.trim()+f.compactClass+f.sizeClassBS2+'" '+m+">",n||(v+='<option value="">'+(t.placeHolder||"")+"</option>"),angular.isArray(t.options)?angular.forEach(t.options,function(e){_.isObject(e)?v+='<option value="'+(e.val||e.id)+'">'+(e.label||e.text)+"</option>":v+="<option>"+e+"</option>"}):(d=o(),v=(v+='<option ng-repeat="option in '+d.repeat+'"')+(d.label?' value="{{'+d.value+'}}"> {{ '+d.label+" }} </option> ":">{{"+d.value+"}}</option> ")),v+="</select>");break;case"link":v='<fng-link model="'+e+'" ref="'+t.ref+'"',t.form&&(v+=' form="'+t.form+'"'),t.linktab&&(v+=' linktab="'+t.linktab+'"'),t.linktext&&(v+=' text="'+t.linktext+'"'),t.readonly&&("boolean"==typeof t.readonly?v+=' readonly="true"':v+=' ng-readonly="'.concat(t.readonly,'"')),v+="></fng-link>";break;case"radio":var h,g,v="",p=(p=(p+=m)+T.handleReadOnlyDisabled(t,y).join(" "))+(t.add?" "+t.add+" ":""),b="vertical"===r.formstyle||"inline"!==r.formstyle&&!t.inlineRadio;angular.isArray(t.options)?(r.subschema&&(p=(p=p.replace('name="','name="{{$index}}-')).replace('id="','id="{{$index}}-')),angular.forEach(t.options,function(e,t){h=p.replace('id="','id="'+t+"-"),v+="<input ".concat(h,' type="radio" aria-label="').concat(e,'" value="').concat(e,'">').concat(e),b&&(v+="<br />")})):(g=b?"div":"span",r.subschema&&(p=p.replace("$index","$parent.$index").replace('name="','name="{{$parent.$index}}-').replace('id="','id="{{$parent.$index}}-')),d=o(),v=(v+="<"+g+' ng-repeat="option in '+d.repeat+'">')+"<input ".concat(p.replace('id="','id="{{$index}}-'),' type="radio" aria-label="').concat(d.value,'" value="{{ ').concat(d.value,' }}"> {{ ').concat(d.label||d.value," }} </").concat(g,"> "));break;case"checkbox":p=(p=(p+=m)+T.handleReadOnlyDisabled(t,y).join(" "))+(t.add?" "+t.add+" ":""),v=T.generateSimpleInput(p,t,r),"bs3"===L.framework()&&(v='<div class="checkbox">'+v+"</div>");break;default:p=(p+=T.addTextInputMarkup(f,t,m))+T.handleReadOnlyDisabled(t,y).join(" "),v="textarea"===t.type?(t.rows&&("auto"===t.rows?p+='msd-elastic="\n" class="ng-animate" ':p+='rows = "'+t.rows+'" '),"ckEditor"===t.editor&&(console.log('Deprecation Warning: "editor" property deprecated - use "add"'),p+='ckeditor = "" ',"bs3"===L.framework())&&(f.sizeClassBS3="col-xs-12"),"<textarea "+p+"></textarea>"):T.generateSimpleInput(p,t,r)}return T.inputChrome(v,t,r,f)},S=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;default:t="form-horizontal compact"}return t},x=function(e){var t;if("function"==typeof e.containerType)t=e.containerType(e);else switch(t={},e.containerType){case"tab":for(var n,r=-1,o=0;o<y.tabs.length;o++)if(y.tabs[o].title===e.title){r=o;break}0<=r?(a="".concat(_.camelCase(e.title),"Tab"),(n=l.considerVisibility(a,y)).omit?t.omit=!0:(s='id="'.concat(a,'"'),n.visibilityAttr&&(s+=" ".concat(n.visibilityAttr)),s+=l.generateDisabledAttr(a,y,{attr:"disable",attrRequiresValue:!0}),t.before="",n=e.title.replace(/["']/g,""),e.hideable?(i="customTemplate_".concat(a,".html"),t.before+='<script type="text/ng-template" id="'.concat(i,'">')+' <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(n,"</span>&nbsp;")+' <button name="hide_'.concat(a,'_btn" data-ng-click="$parent.hideTab($event, \'').concat(n,"', '").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>',s=(s+=' template-url="'.concat(i,'"'))+' data-ng-show="!'.concat(e.hiddenTabArrayProp," || !").concat(e.hiddenTabArrayProp,".includes('").concat(n,"')\"")):s+=' heading="'.concat(n,'"'),0<r&&(s+=' active="tabs['.concat(r,'].active"')),t.before+="<uib-tab ".concat(s,' deselect="tabDeselect($event, $selectedIndex)" select="updateQueryForTab(\'').concat(n,"')\""),t.before+=">",t.after="</uib-tab>")):(t.before="<p>Error! Tab ".concat(e.title," not found in tab list</p>"),t.after="");break;case"+tab":var a="addTabsTab",i="customTemplate_".concat(a,"_popover.html"),s=(t.before='<script type="text/ng-template" id="'.concat(i,'">')+' <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>","customTemplate_".concat(a,".html"));t.before+='<script type="text/ng-template" id="'.concat(s,'">')+' <li class="uib-tab nav-item" data-ng-if="$parent.'.concat(e.hiddenTabArrayProp," && $parent.").concat(e.hiddenTabArrayProp,'.length > 0">')+' <div id="'.concat(a,'">')+' <button name="addTabsBtn" popover-trigger="\'outsideClick\'" popover-placement="bottom" popover-append-to-body="true" title="Reintroduce Optional Sections..." uib-popover-template="\''.concat(i,"'\"")+' 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(s,'">'),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:t.before='<div class="'+e.containerType+'">',e.title&&((n=e.titleTagOrClass||"h4").match(/h[1-6]/)?t.before+="<"+n+">"+e.title+"</"+n+">":t.before+='<p class="'+n+'">'+e.title+"</p>"),t.after="</div>"}return t},h=function(e,t,n,r){for(var r=r?"":'ng-hide="!'.concat(n," || ").concat(n,'.length === 0"'),o='<div class="inline-col-headers" style="display:flex" '.concat(r,">"),a=0,i=e;a<i.length;a++){var s=i[a];$(s,t),o+="<div ",s.showWhen=s.showWhen||s.showwhen,s.showWhen&&("string"==typeof s.showWhen?o+='ng-show="'+s.showWhen+'"':o+='ng-show="'+T.generateNgShow(s.showWhen,n)+'"'),s.id&&"function"==typeof s.id.replace&&(o+=' id="col_label_'+s.id.replace(/\./g,"-")+'"'),o+=' class="inline-col-header"><label for="'.concat(s.id,'" class="control-label">').concat(s.label,"</label></div>")}return o+="</div>"},D=function(e,t){var n=T.fieldChrome(y,e,t);if(n.omit)return"";var r=n.template;if(e.schema){var o,a,i=e.name.replace(/\./g,"_"),s="$_schema_"+i;if(y[s]=e.schema,e.schema)if(e.subkey){e.subkey.path=e.name,y[s+"_subkey"]=e.subkey;for(var l=angular.isArray(e.subkey)?e.subkey:[e.subkey],c=0;c<l.length;c++)var d=x(l[c]),r=(r=(r+=d.before)+C(e.schema,null,{subschema:"true",formstyle:t.formstyle,subkey:s+"_subkey",subkeyno:c,subschemaroot:e.name,suppressNestingWarning:e.suppressNestingWarning}))+d.after;b.push(e)}else t.subschema?t.suppressNestingWarning||console.log("Attempts at supporting deep nesting have been removed - will hopefully be re-introduced at a later date"):(o=(t.model||"record")+"."+e.name,"string"==typeof e.customHeader?r+=e.customHeader:(u="",e.unshift&&(u='<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="'+T.glyphClass()+'-plus"></i> Add</button>'),"bs3"===L.framework()?r+='<div class="row schema-head"><div class="col-sm-offset-3">'+e.label+u+"</div></div>":r+='<div class="schema-head">'+e.label+u+"</div>"),"inline"===e.formStyle&&e.inlineHeaders&&(r+=h(e.schema,t,o,"always"===e.inlineHeaders)),u=T.handleReadOnlyDisabled(e,y)[0],f=e.sortable&&"disabled"!==u.trim().toLowerCase()?"".concat(u,' ui-sortable="sortableOptions" ng-model="').concat(o,'"'):"",r+='<ol class="sub-doc" '.concat(f,">"),f=T.genDisableableAncestorStr(e.id),r+='<li ng-form id="'.concat(e.id,'List_{{$index}}" name="form_').concat(i,'{{$index}}" ').concat(f)+' class="'.concat(S(e.formStyle))+" ".concat("bs2"===L.framework()?"row-fluid":"")+" ".concat(e.inlineHeaders?"width-controlled":"")+" ".concat(e.ngClass?"ng-class:"+e.ngClass:"",'"')+' ng-repeat="subDoc in '.concat(o,' track by $index"')+" ".concat(e.filterable?'data-ng-hide="subDoc._hidden"':"")+">","bs2"===L.framework()&&(r+='<div class="row-fluid sub-doc">'),i=void(!0===e.noRemove&&!e.customSubDoc||(r+=' <div class="sub-doc-btns" '.concat(!0!==e.noRemove?f:"",">"),"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="'+T.glyphClass()+'-minus"></i> Remove':(r+=' style="position: relative; z-index: 20;" type="button" class="close pull-right">',"bs3"===L.framework()?r+='<span aria-hidden="true">×</span><span class="sr-only">Close</span>':r+="<span>×</span>"),r+="</button>"),r+="</div> ")),e.subDocContainerType&&(a=y[e.subDocContainerType]||e.subDocContainerType,a=Object.assign({containerType:a},e.subDocContainerProps),i=x(a)),null!=i&&i.before&&(r+=i.before),r+=C(e.schema,!1,{subschema:"true",formstyle:e.formStyle,model:t.model,subschemaroot:e.name,suppressNestingWarning:e.suppressNestingWarning}),null!=i&&i.after&&(r+=i.after),"bs2"===L.framework()&&(r+=" </div>"),r+="</li></ol>",!0===e.noAdd&&"string"!=typeof e.customFooter&&!e.noneIndicator||(a="","string"==typeof e.customFooter&&(a=e.customFooter),p=(i="").concat(o,".length == 0"),!0===e.noAdd?p='ng-show="'.concat(p,'"'):(i=e.noAdd?'ng-hide="'.concat(e.noAdd,'"'):"",p=e.noAdd?'ng-show="'.concat(e.noAdd," && ").concat(p,'"'):"",a+="<button ".concat(i," ").concat(u," ").concat(f,' 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(T.glyphClass(),'-plus"></i> Add ')+"</button>"),e.noneIndicator&&(a+="<span ".concat(p,' class="none_indicator" id="no_').concat(e.id,'_indicator">None</span>'),i="".concat(o,".length > 0"),i=!0===e.noAdd?'ng-hide="'.concat(i,'"'):e.noAdd?'ng-hide="'.concat(e.noAdd," && ").concat(i,'"'):""),""===a)||("bs3"===L.framework()?r+="<div ".concat(i,' class="row schema-foot"><div class="col-sm-offset-3">').concat(a,"</div></div>"):r+="<div ".concat(i,' class = "schema-foot ">').concat(a,"</div>")))}else{e.help=T.handlePseudos(y,e.help),e.label=T.handlePseudos(y,e.label),e.popup=T.handlePseudos(y,e.popup);var u=T.controlDivClasses(t,e);if(e.array){if(u.push("fng-array"),"inline"===t.formstyle||"stacked"===t.formstyle)throw new Error("Cannot use arrays in an inline or stacked form");r+=T.label(y,e,"link"!==e.type,t);var f=e.help,p=(delete e.help,m(e,"link"===e.type?null:"arrayItem.x",!0,t));e.help=f,r+=T.handleArrayInputAndControlDiv(p,u,y,e,t)}else r=(r+=T.label(y,e,null,t))+T.handleInputAndControlDiv(m(e,null,t.required,t),u)}return r+=n.closeTag},$=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:N("titleCase")(e.name.split(".").slice(-1)[0])},C=function(e,t,n){var r="";if(e)for(var o=0;o<e.length;o++){var a=e[o],i=(n.viewform&&((a=angular.copy(a)).readonly=!0),0===o&&t&&!n.schema.match(/\$_schema_/)&&"object"!=typeof a.add&&(a.add=a.add?" "+a.add+" ":"",-1!==a.add.indexOf("ui-date")||n.noautofocus||a.containerType||(a.add=a.add+"autofocus ")),!0);if(a.directive){var s=a.directive,l=a.customHeader||"",c=(l+="<"+s+' model="'+(n.model||"record")+'"',w[0]);$(a,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":f=("bespoke_"+a.name).replace(/\./g,"_");y[f]=angular.copy(a),delete y[f].directive,l+=' schema="'+f+'"';break;default:l+=" "+u.nodeName+'="'+u.value+'"'}}l+=" ";var p,m=N("camelCase")(a.directive);for(p in a)if(a.hasOwnProperty(p))switch(p){case"directive":case"schema":break;case"add":switch(typeof a.add){case"string":l+=" "+a.add;break;case"object":for(var h in a.add)a.add.hasOwnProperty(h)&&(l+=" "+h+'="'+a.add[h].toString().replace(/"/g,"&quot;")+'"');break;default:throw new Error("Invalid add property of type "+typeof a.add+" in directive "+a.name)}break;case m:for(var g in a[p])a[p].hasOwnProperty(g)&&(l+=" ".concat(a.directive,"-").concat(g,'="'),"string"==typeof a[p][g]?l+="".concat(a[p][g].replace(/"/g,"&quot;"),'"'):l+="".concat((JSON.stringify(a[p][g])||"").replace(/"/g,"&quot;"),'"'));break;default:a[p]&&("string"==typeof a[p]?l+=" fng-fld-"+p+'="'+a[p].replace(/"/g,"&quot;")+'"':l+=" fng-fld-"+p+'="'+(JSON.stringify(a[p])||"").replace(/"/g,"&quot;")+'"')}for(p in n)n.hasOwnProperty(p)&&"$"!==p[0]&&void 0!==n[p]&&(l+=" fng-opt-"+p+'="'+n[p].toString().replace(/"/g,"&quot;")+'"');r+=l=(l+='ng-model="'+a.name+'"></'+s+">")+(a.customFooter||""),i=!1}else if(a.containerType){var v,b=x(a);switch(a.containerType){case"tab":k===O.N&&(k=O.Forced,r+='<uib-tabset active="activeTabNo">',v=_.findIndex(y.tabs,function(e){return e.active}),y.activeTabNo=0<=v?v:0),b.omit||(r=(r=(r+=b.before)+C(a.content,null,n))+b.after);break;case"tabset":k=O.Y,r=(r=(r+=b.before)+C(a.content,null,n))+b.after;break;default:r=(r=(r+=b.before)+C(a.content,null,n))+b.after}i=!1}else n.subkey&&(s=(angular.isArray(y[n.subkey])?y[n.subkey][0]:y[n.subkey]).keyList,_.find(s,function(e,t){return y[n.subkey].path+"."+t===a.name}))&&(i=!1);i&&($(a,n),r+=D(a,n))}else console.log("Empty array passed to processInstructions"),r="";return r},t=(y.$on("regenerateFormMarkup",function(e,t){f.formid&&f.formid===t&&(k=O.N,n(y[f.schema]))}),y.$watch(f.schema,function(e){e&&0<(e=angular.isArray(e)?e:[e]).length&&"function"==typeof t&&(t(),t=null,n(e))},!0)),n=function(e){for(var t,n="",r=f.model||"record",h=y[r],r=e.filter(function(e){return e&&"tab"===e.containerType&&e.hideable}),o=0,a=r;o<a.length;o++){if((i=a[o]).hiddenTabArrayProp){if(s&&i.hiddenTabArrayProp!==s)throw new Error("Currently, tab sets with more than one value for hiddenTabArrayProp are not supported");s=i.hiddenTabArrayProp}if(i.hiddenTabReintroductionMethod){if(t&&i.hiddenTabReintroductionMethod!==t)throw new Error("Currently, tab sets with more than one value for hiddenTabReintroductionMethod are not supported");t=i.hiddenTabReintroductionMethod}}for(var i,s=s||"record.hiddenTabs",l=0,c=r;l<c.length;l++)(i=c[l]).hiddenTabArrayProp=s;if("tab"===t&&e.push({containerType:"+tab",hiddenTabArrayProp:s,content:[]}),h=h||{},!f.subschema&&!f.model||f.forceform){y.topLevelFormName=f.name||"myForm";var d,u="";for(d in f)f.hasOwnProperty(d)&&"$"!==d[0]&&-1===["name","formstyle","schema","subschema","model","viewform"].indexOf(d)&&(u+=" "+f.$attr[d]+'="'+f[d]+'"');n="<".concat(f.forceform?"ng-form":"form",' name="').concat(y.topLevelFormName,'" class="').concat(S(f.formstyle),'" novalidate ').concat(u,">")}else n="";if(h===y.topLevelFormName)throw new Error("Model and Name must be distinct - they are both "+h);n+=C(e,!0,f),k===O.Forced&&(n+="</uib-tabset>"),n+=f.subschema?"":"</form>";var g,r=A(n)(y),n=(p?(e=y[y.topLevelFormName],p.replaceWith(r),y[y.topLevelFormName]=e):w.replaceWith(r),p=r,y[f.shared||"sharedData"]),v=n?n.modelControllers:[];(0<b.length||0<v.length)&&!y.phaseWatcher&&(g=y.$watch("phase",function(e){if(y.phaseWatcher=!0,"ready"===e&&"function"==typeof g){g(),g=null;for(var t=0;t<v.length;t++)v[t].onAllReady&&v[t].onAllReady(y);for(var n=0;n<b.length;n++){for(var r,o=b[n],a=angular.isArray(o.subkey)?o.subkey:[o.subkey],i=o.name.split("."),s=h;1<i.length;)s=s[i.shift()]||{};for(var s=s[i[0]]=s[i[0]]||[],l=0;l<a.length;l++){if(a[l].selectFunc){if(!y[a[l].selectFunc]||"function"!=typeof y[a[l].selectFunc])throw new Error("Subkey function "+a[l].selectFunc+" is not properly set up");f=y[a[l].selectFunc](h,o)}else{if(!a[l].keyList)throw new Error("Invalid subkey setup for "+o.name);var c,d,u,f,p=a[l].keyList;for(f=0;f<s.length;f++){for(var m in r=!0,p)if(p.hasOwnProperty(m)&&s[f][m]!==p[m]&&(void 0===s[f][m]||!s[f][m].text||s[f][m].text!==p[m])){r=!1;break}if(r)break}r||(f="error"===a[l].onNotFound?(c="Cannot find matching "+(a[l].title||a[l].path),E(function(){y.showError(c,"Unable to set up form correctly")}),-1):(d=(u=o.name.split(".")).pop(),u=u.join("."),(u?h[u]:h)[d].push(p)-1))}y["$_arrayOffset_"+o.name.replace(/\./g,"_")+"_"+l]=f}}}})),F.$broadcast("formInputDone",f.name),I.updateDataDependentDisplay&&h&&0<Object.keys(h).length&&I.updateDataDependentDisplay(h,null,!0,y)}}}}e=e.directives||(e.directives={}),n.$inject=["$compile","$rootScope","$filter","$timeout","CssFrameworkService","FormGeneratorService","FormMarkupHelperService","SecurityService"],(t=O=O||{})[t.Y=0]="Y",t[t.N=1]="N",t[t.Forced=2]="Forced",e.formInput=n})(fng=fng||{}),(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||{}),(e=>{function t(n,t,r,o){function a(){n.moreCount=0,n.errorClass="",n.results=[],n.focus=null}var i,e,s;s=!1,e=navigator.userAgent||navigator.vendor||window.opera,e=!(s=/(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(e)||/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(e.substr(0,4))?!0: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(l(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(e){return e.url?o.html5hash()+e.url.replace("|id|",e.id):o.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){e=e.data;e.timestamps&&e.timestamps.sentAt&&Number.parseInt(e.timestamps.sentAt)!==i||(0<n.searchTarget.length?(n.results=e.results,n.results.forEach(function(e){e.href=o.html5hash()+l(e)}),n.moreCount=e.moreCount,0<e.results.length&&(n.errorClass="",n.setFocus(0)),n.errorClass=0===n.results.length?"error has-error":""):a())},function(e){console.log("Error in searchbox.js : "+e.data+" (status="+e.status+")")})):a()},!0),n.$on("$routeChangeStart",function(){n.searchTarget=""})}e=e.controllers||(e.controllers={}),t.$inject=["$scope","$http","$location","RoutingService"],e.SearchCtrl=t})(fng=fng||{}),(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||{}),(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||{}),(e=>{(e.filters||(e.filters={})).extractTimestampFromMongoID=function(){return function(e){e=e.substring(0,8);return new Date(1e3*parseInt(e,16))}}})(fng=fng||{}),(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||{}),(e=>{(e.services||(e.services={})).AddAllService=function(){function r(e,t,r,n){var o,a,i=[],s=[];if(r="addAll"+r,"string"==typeof n)for(o=n.split(" "),a=0;a<o.length;a++)s.push(o[a]);if(!function e(t){for(var n in t)n===r&&i.push(t[n]),"$parent"===n&&e(t[n])}(e),void 0!==t[r]&&"string"==typeof t[r])for(o=t[r].split(" "),a=0;a<o.length;a++)0===o[a].indexOf("class=")?s.push(o[a].substring(6,o[a].length)):i.push(o[a]);return(n=0<s.length?' class="'+s.join(" ")+'" ':" ")+(0<i.length?i.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||{}),(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||{}),(e=>{function t(c){return{loadControllerAndMenu:function(e,t,n,r,o){function a(e){angular.forEach(e,function(e){e.divider?r=!0:e[i]&&(r&&(r=!1,l.items.push({divider:!0})),e.id||(e.id=_.camelCase(e.text||e.textFunc()||"")),l.items.push(e))})}var i,s={},l=(t+="Ctrl",(s.$scope=e.modelControllers[n]=o).$parent);l.items=l.items||[];try{c(t,s),i=l.newRecord?"creating":l.id?"editing":"listing",angular.isObject(s.$scope.contextMenu)&&(a(s.$scope.contextMenu),s.$scope.contextMenuPromise)&&s.$scope.contextMenuPromise.then(a),e.modelNameDisplayPromise&&e.modelNameDisplayPromise.then(function(e){l.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||{}),(e=>{function t(n,t){var o,r,i={hashPrefix:"",html5Mode:!1,routing:"ngroute",prefix:""},s=["edit","view"],a=[{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"}],l=null,c={};function d(e){return e=i.templateFolder?"/"!==i.templateFolder[i.templateFolder.length-1]?i.templateFolder+"/"+e:i.templateFolder+e:e}function u(e,n,r){n=(n=void 0===n?"":n)||"",angular.forEach(e,function(e){o.when(n+e.route,angular.extend(e.options||{templateUrl:d(e.templateUrl)},r))}),i.variantsForDemoWebsite&&angular.forEach(i.variantsForDemoWebsite,function(t){angular.forEach(e,function(e){o.when(n+t+e.route,angular.extend(e.options||{templateUrl:d(e.templateUrl)},r))})})}function f(e,t,n){t=(t=void 0===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,o,a){var i,s=r?"/"+r:"",l=e+"/"+n,c=a?"/"+a:"";switch(t){case"list":i=l+s;break;case"edit":i=l+s+"/"+o+"/edit"+c;break;case"view":i=l+s+"/"+o+"/view"+c;break;case"read":i=l+s+"/"+o+"/read"+c;break;case"new":i=l+s+"/new"+c}return i}function m(e,t){switch(i.routing){case"ngroute":o=n.get("$routeProvider"),e&&u(e),u(t,i.prefix,i.add2fngRoutes);break;case"uirouter":r=n.get("$stateProvider"),e&&f(i.fixedRoutes),f(t,i.prefix,i.add2fngRoutes)}}return{start:function(e){angular.extend(i,e),i.prefix[0]&&"/"!==i.prefix[0]&&(i.prefix="/"+i.prefix),t.html5Mode(i.html5Mode),""!==i.hashPrefix?t.hashPrefix(i.hashPrefix):i.html5Mode||t.hashPrefix(""),m(i.fixedRoutes,a)},addRoutes:function(e,t){m(e,t)},registerAction:function(e){s.push(e)},$get:function(){return{router:function(){return i.routing},prefix:function(){return i.prefix},parsePathFunc:function(){return function(e){var t,n,r,o,a;return e!==l&&(l=e,c={newRecord:!1},e=(e=0<i.prefix.length&&0===e.indexOf(i.prefix)?e.slice(i.prefix.length):e).split("/"),i.variants&&-1!==i.variants.indexOf(e[1])&&(c.variant=e[1],e.shift()),t=e.length,"analyse"===e[1]?(c.analyse=!0,c.modelName=e[2],c.reportSchemaName=4<=t?e[3]:null):(c.modelName=e[1],r=(n=[e[t-1],e[t-2]]).indexOf("new"),o=n.indexOf("viewonly"),a=void 0,-1===r&&-1===o?-1!==(a=s.reduce(function(e,t){t=n.indexOf(t);return-1<t?t:e},-1))&&(c.id=e[t-=2+a]):-1!==r?(c.newRecord=!0,t-=1+r):t-=1+o,1!==a&&1!==r||(c.tab=n[0]),2<t&&(c.formName=e[2]))),c}},html5hash:function(){return i.html5Mode?"":"#"},buildUrl:function(e){var t=i.html5Mode?"":"#";return(t=(t+=i.hashPrefix)+i.prefix)[0]&&(t+="/"),t+="/"===e[0]?e.slice(1):e},buildOperationUrl:function(e,t,n,r,o){return p(i.prefix,e,t,n,r,o)},redirectTo:function(){return function(e,t,n,r,o){n.search({}),e="onDelete"===e?i.onDelete?"new"===i.onDelete?p(i.prefix,"new",t.modelName,t.formName,r,o):i.onDelete:p(i.prefix,"list",t.modelName,t.formName,r,o):p(i.prefix,e,t.modelName,t.formName,r,o),n.path(e)}}}}}}e=e.services||(e.services={}),t.$inject=["$injector","$locationProvider"],e.RoutingService=t})(fng=fng||{}),(e=>{function t(i,n,s,r){function h(e,t,n,r,o,a,i,s){function l(e,t){var n=angular.copy(e);if(!(r=_.find(i.tabs,function(e){return e.title===n}))){if(0===i.tabs.length&&0<i.formSchema.length){i.tabs.push({title:"Main",content:[],active:"Main"===i.tab||!i.tab});for(var r=i.tabs[0],o=0;o<i.formSchema.length;o++)r.content.push(i.formSchema[o])}r=i.tabs[i.tabs.push({title:n,containerType:"tab",content:[],active:n===i.tab})-1]}r.content.push(t)}for(var c in"function"==typeof i.onSchemaFetch&&i.onSchemaFetch(e,t),t){var d,u,f,p,m;t.hasOwnProperty(c)&&("_id"===c?r&&t._id.options&&t._id.options.list&&b(r,t._id.options.list,c):t.hasOwnProperty(c)&&(f=(u=(d=t[c]).options||{}).form||{},d.schema&&!f.hidden?a&&n&&(h("Nested "+c,d.schema,p=[],null,c+".",!0,i,s),(m=v(c,f,o)).schema=p,f.tab&&l(f.tab,m),void 0!==f.order?n.splice(f.order,0,m):n.push(m)):(n&&!f.hidden&&(p=v(c,f,o),k(p.showIf,p.name,i))&&"options"!==c&&((m=g(p,d,u,i,s)).tab&&l(m.tab,m),void 0!==f.order?n.splice(f.order,0,m):n.push(m)),r&&u.list&&b(r,u.list,c))))}"function"==typeof i.onSchemaProcessed&&i.onSchemaProcessed(e,"Main "===e.slice(0,5)?i.baseSchema():n),r&&0===r.length&&y(e,r,n,t)}function g(t,e,n,r,o){var a;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=s.suffixCleanId(t,"Options"),null!=(a=n.form)&&a.enumLabels?(t.ids=s.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){if(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)if(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");else if(!(t.directive&&(t.noLookup||t[i("camelCase")(t.directive)]&&t[i("camelCase")(t.directive)].fngAjax)||(t.options=s.suffixCleanId(t,"Options"),t.ids=s.suffixCleanId(t,"_ids"),t.hidden)))if(n.ref)s.setUpLookupOptions(n.ref,t,r,o,h);else if(n.lookupListRef)s.setUpLookupListOptions(n.lookupListRef,t,r,o),t.lookupListRef=n.lookupListRef;else if(n.internalRef)s.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)throw a="Field "+t.name+' has unsupported type "'+e.instance+'"',console.log(a),o=" (typeof = "+typeof e.instance+")",console.log(o),new Error(a+o);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 l(e,t,n){for(var r=e.split("."),o=n||t.record,a=0,i=r.length;a<i;a++)o[r[a]]||(o[r[a]]=a===i-1?[]:{}),o=o[r[a]];return o}var v=function(e,t,n){return t.name=n+e,t},b=function(e,t,n){"object"==typeof t?(t.name=n,e.push(t)):e.push({name:n})},y=function(e,t,n,r){if(n){for(var o=0,a=n.length;o<a;o++)if("text"===n[o].type){t.push({name:n[o].name});break}0===t.length&&0!==n.length&&t.push({name:n[0].name})}if(0===t.length){for(var i in r)if("_id"!==i&&r.hasOwnProperty(i)){t.push({name:i});break}if(0===t.length)throw new Error("Unable to generate a title for "+e)}},w=function(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=s.getListData(r,e.slice(1));break;case 2:t=s.getListData(r,n[1]);break;default:throw new Error("Unsupported showIf format")}}return t}var n,o=t(e.lhs),a=t(e.rhs);switch(e.comp){case"eq":n=o===a;break;case"ne":n=o!==a;break;default:throw new Error("Unsupported comparator "+e.comp)}return n},k=function(e,n,r){var o=0;function t(e){var t;"string"==typeof e&&"$"===e.slice(0,1)&&(e=e.slice(1),(t=r.dataDependencies[e]||[]).push(n),r.dataDependencies[e]=t,o+=1)}var a=!0;return e&&(t(e.lhs),t(e.rhs),0!==o||w(e,void 0)||(a=!1)),a};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:g,handleSchema:h,updateDataDependentDisplay:function(e,t,n,r){var o,a,i,s,l,c;for(c in r.dataDependencies)if(r.dataDependencies.hasOwnProperty(c)){var d=c.split(".");if(1===d.length){if(n||!t||e[c]!==t[c])for(o=r.dataDependencies[c],a=0;a<o.length;a+=1)for(var u=o[a],f=0;f<r.formSchema.length;f+=1)r.formSchema[f].name===u&&(s=angular.element(document.querySelector("#cg_"+r.formSchema[f].id)),w(r.formSchema[f].showIf,e)?s.removeClass("ng-hide"):s.addClass("ng-hide"))}else{if(2!==d.length)throw new Error("You can only go down one level of subdocument with showIf");if(void 0===l&&(l=!0),e[d[0]])for(i=0;i<e[d[0]].length;i++)if(n||!t||!t[d[0]]||!t[d[0]][i]||e[d[0]][i][d[1]]!==t[d[0]][i][d[1]])for(o=r.dataDependencies[c],a=0;a<o.length;a+=1){var p=o[a].split(".");if(2!==p.length)throw new Error("Conditional display must control dependent fields at same level ");for(f=0;f<r.formSchema.length;f+=1)if(r.formSchema[f].name===p[0])for(var m=r.formSchema[f].schema,h=0;h<m.length;h++)m[h].name===o[a]&&(0===(s=angular.element(document.querySelector("#f_"+p[0]+"List_"+i+" #cg_f_"+o[a].replace(".","_")))).length?s=angular.element(document.querySelector("#f_elements-"+i+"-"+p[1])):l=!1,0<s.length)&&(w(r.formSchema[f].schema[h].showIf,e[d[0]][i])?s.show():s.hide())}}}return l},add:function(t,e,n,r){var o,a,i;if(null!=(a=null==e?void 0:e.target)&&a.hasAttribute&&e.target.hasAttribute("disabled"))return e.preventDefault();e.target.offsetParent&&(a=l(t,n,r),i=(r=(r=n.formSchema.find(function(e){return e.name===t}))?r.schema:null)?n.setDefaults(r,t+"."):{},"function"==typeof(null==(o=n.dataEventFunctions)?void 0:o.onInitialiseNewSubDoc)&&n.dataEventFunctions.onInitialiseNewSubDoc(t,r,i),a.push(i),n.setFormDirty(e))},unshift:function(e,t,n,r){l(e,n,r).unshift({}),n.setFormDirty(t)},remove:function(t,e,n,r,o){if(null!=(i=null==n?void 0:n.target)&&i.hasAttribute&&n.target.hasAttribute("disabled"))return n.preventDefault();var a,i=l(t,r,o);"function"==typeof r.dataEventFunctions.onDeleteSubDoc&&(o=(o=r.formSchema.find(function(e){return e.name===t}))?o.schema:null,a=r.dataEventFunctions.onDeleteSubDoc(t,o,i,e)),a?r.showError(a):(i.splice(e,1),r.setFormDirty(n))},hasError:function(e,t,n,r){var o,a=!1;return r?(r=r[r.topLevelFormName])?(r="null"!==e?r[e.replace("$index",n)]:r)&&(o=r[t])&&o.$invalid&&!o.$$attr.readonly&&(o.$dirty?a=!0:angular.forEach(o.$validators,function(e,t){"required"!==t&&o.$error[t]&&(a=!0)})):console.log("hasError failed to find form! ",e,t,n):console.log("hasError called with no scope! ",e,t,n),a},decorateScope:function(o,a,i,e,t){function s(){for(var e=o.$$childHead;e;){if(e.tabset)return e.tabset;e=e.$$nextSibling}}o.record=e.record,o.phase="init",o.disableFunctions=e.disableFunctions,o.dataEventFunctions=e.dataEventFunctions,o.topLevelFormName=void 0,o.formSchema=[],o.tabs=[],o.listSchema=[],o.recordList=[],o.dataDependencies={},o.internalLookups=[],o.listLookups=[],o.conversions={},o.pageSize=60,o.pagesLoaded=0,r.decorateSecurableScope(e.baseScope=o,{pseudoUrl:t}),o.generateEditUrl=function(e){return a.generateEditUrl(e,o)},o.generateViewUrl=function(e){return a.generateViewUrl(e,o)},o.generateNewUrl=function(){return a.generateNewUrl(o)},o.scrollTheList=function(){var e;if(0<(null==(e=o.listSchema)?void 0:e.length))return i.scrollTheList(o);var t=o.$watchCollection("listSchema",function(e){if(0<(null==e?void 0:e.length))return t(),i.scrollTheList(o)})},o.getListData=function(e,t){return i.getListData(e,t,o.listSchema,o)},o.setPristine=function(e){e&&o.dismissError(),o[o.topLevelFormName]&&o[o.topLevelFormName].$setPristine()},o.skipCols=function(e){return 0<e?"col-md-offset-3":""},o.setFormDirty=function(e){e?angular.element(e.target).inheritedData("$formController").$setDirty():console.log("setFormDirty called without an event (fine in a unit test)")},o.add=function(e,t,n){return a.add(e,t,o,n)},o.hideTab=function(e,t,n){var r=i.getData(o,n);r&&Array.isArray(r)&&!r.includes(t)&&(n=o.tabs[o.activeTabNo].title===t,r.push(t),r.sort(),(t=o.baseForm)&&t.$setDirty(),n)&&(t=s())&&t.select(o.tabs.findIndex(function(e){return!r.includes(e.title)}))},o.addTab=function(e,t,n){var r,n=i.getData(o,n);n&&Array.isArray(n)&&-1!==(r=n.findIndex(function(e){return e===t}))&&(n.splice(r,1),(n=o.baseForm)&&n.$setDirty(),r=s())&&r.select(o.tabs.findIndex(function(e){return e.title===t}))},o.hasError=function(e,t,n){return a.hasError(e,t,n,o)},o.unshift=function(e,t,n){return a.unshift(e,t,o,n)},o.remove=function(e,t,n,r){return a.remove(e,t,n,o,r)},o.baseSchema=function(){return o.tabs.length?o.tabs:o.formSchema}}}}((e.services||(e.services={})).FormGeneratorService=t).$inject=["$filter","RoutingService","RecordHandlerService","SecurityService"]})(fng=fng||{}),(d=>{var e;function t(f,p,m,h,r){function g(e,o){function t(e){var t,n,r=e;return"string"==typeof e&&("$"===e.slice(0,1)?(r=(o||"record")+".",1<(t=e.slice(1).split(".")).length?(n=t.pop(),r+=t.join(".")+"[$index]."+n):r+=e.slice(1)):r="'"+e+"'"),r}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 v(e,t){var n=["vertical","inline"];return t||n.push("stacked"),!e||"undefined"===e||!n.includes(e)}function s(){return"bs2"===f.framework()?"icon":"glyphicon glyphicon"}function l(s,l){var c=s.nonUniqueId||s.id;return[(()=>{if(s.readonly&&"boolean"==typeof s.readonly)return" disabled ";function e(){return s.readonly?' ng-disabled="'.concat(s.readonly,'" '):""}if(!c||!h.canDoSecurityNow(l,"disabled"))return e();var t=[];if(l.requiresDisabledChildren){var n=void 0;for((n=s.nonUniqueId?(i=s.nonUniqueId.startsWith("f_")?s.nonUniqueId.substring(2):s.nonUniqueId).split("_"):s.name.split(".")).pop();0<n.length;)t.push("f_".concat(n.join("_"))),n.pop()}if("instant"===d.formsAngular.elemSecurityFuncBinding){if(l.isSecurelyDisabled(c))return" disabled ";for(var r=0,o=t;r<o.length;r++)if(l.requiresDisabledChildren(o[r]))return" disabled ";return e()}var a="isSecurelyDisabled('".concat(c,"')"),i=(0<t.length&&(i=t.map(function(e){return"requiresDisabledChildren('".concat(e,"')")}),a="(".concat(a," || ").concat(i.join(" || "),")")),"one-time"===d.formsAngular.elemSecurityFuncBinding);return s.readonly?i?e()+'ng-readonly="::'.concat(a,'" '):' ng-disabled="'.concat(a," || ").concat(s.readonly,'" '):' ng-disabled="'.concat(i?"::":"").concat(a,'" ')})(),h.getDisableableAttrs(c)]}function b(e,t,n){if(n.subschema&&n.model){for(var r=n.model,o=0,a="$parent.";r.startsWith(a);)o++,r=r.substring(a.length);return"".concat(e,"_{{").concat(a.repeat(o),"$index}}")}return"".concat(e,"_{{$index}}")}function y(e,t,n){return void 0!==e.$index||!!n.subschema}function o(e,t,n){for(;t.includes("@@");){var r=t.indexOf("@@")+2,o=t.indexOf("@@",r)-1,a=(s=t.substring(r,1+o)).endsWith("s"),i=(s=a?s.slice(0,-1):s)[0].toUpperCase()===s[0]?"true":"false",s=s.toLocaleLowerCase(),l=void 0,l="global"===n?d.formsAngular.pseudo(s,"true"==i):"scopeStatic"===n?e.sharedData.pseudo(s,"true"==i):"scopeDynamic"===n?"{{ sharedData.pseudo('".concat(s,"', ").concat(i,") }}"):"";t=t.substring(0,r-2)+l+(a?"s":"")+t.substring(3+o)}return t}return{isHorizontalStyle:v,isArrayElement:y,handlePseudos:function(e,t,n){var r;return null!=t&&t.includes("@@")?(r="function"==typeof(null==(r=null==e?void 0:e.sharedData)?void 0:r.pseudo)?n?(e[n]=function(){return o(e,t,"scopeStatic")},"none"):"scopeDynamic":"function"==typeof d.formsAngular.pseudo?"global":"none",o(e,t,r)):t},fieldChrome:function(e,t,n){var r="";if(t.id&&"function"==typeof t.id.replace){var o=t.nonUniqueId||t.nonuniqueid||t.id,a=void 0;if(t.id.includes(".")&&t.id.includes("{{"))for(var a="cg_",i=!1,s=0;s<t.id.length;s++)"{"===t.id[s]&&"{"===t.id[s-1]?i=!0:"}"===t.id[s]&&"}"===t.id[s-1]&&(i=!1),i||"."!==t.id[s]?a+=t.id[s]:a+="-";else a="cg_".concat(t.id.replace(/\./g,"-"));o="cg_".concat(o.replace(/\./g,"-")),o=h.considerVisibility(o,e);if(o.omit)return{omit:!0};r+='id="'.concat(y(e,0,n)?b(a,0,n):a,'"'),o.visibilityAttr&&(r+=" ".concat(o.visibilityAttr))}var l,c,o=t.classes||"",d="",u="";return t.showWhen=t.showWhen||t.showwhen,t.showWhen&&("string"==typeof t.showWhen?r+=' ng-show="'+t.showWhen+'"':r+=' ng-show="'+g(t.showWhen,n.model)+'"'),"bs3"===f.framework()?(o+=" form-group","vertical"===n.formstyle&&"block-level"!==t.size&&(d+='<div class="row">',o+=" col-sm-"+p.sizeAsNumber(t),u+="</div>"),l=null,c=t.name.split("."),c=n&&void 0!==n.subkeyno?n.subschemaroot.replace(/\./g,"-")+"-subkey"+n.subkeyno+"-"+c[c.length-1]:n.subschema?(l="form_"+c.slice(0,-1).join("_")+"$index",t.name.replace(/\./g,"-")):"f_"+t.name.replace(/\./g,"_"),d+="<div"+m.addAll(e,"Group",o,n)+" ng-class=\"{'has-error': hasError('"+l+"','"+c+"', $index)}\"",u+="</div>"):u=v(n.formstyle,!0)?(d+="<div"+m.addAll(e,"Group","control-group",n),"</div>"):(d+="<span ","</span>"),{template:d+=(r||"")+">",closeTag:u}},label:function(e,t,n,r){var o,a="";return("bs3"===f.framework()||!["inline","stacked"].includes(r.formstyle)&&""!==t.label||n)&&(a="<label",v(r.formstyle,!(o="control-label"))?(t.linklabel||(a+=' for="'+t.id+'"'),void 0!==t.labelDefaultClass?o+=" "+t.labelDefaultClass:"bs3"===f.framework()&&(t.coloffset?o+=" col-sm-"+(3-t.coloffset).toString():o+=" col-sm-3")):["inline","stacked"].includes(r.formstyle)&&(a+=' for="'+t.id+'"',o+=" sr-only"),a+=m.addAll(e,"Label",null,r)+' class="'+o+'">'+t.label,n&&(n=o=void 0,n=r.subschema?((o=t.name.replace(r.subschemaroot,"")).startsWith(".")&&(o=o.substring(1)),"subDoc"):(o=t.name,"record"),r=l(t,e),a+=" <i ".concat(r.join(" "),' id="add_').concat(t.id,'" ng-click="add(\'').concat(o,"', $event, ").concat(n,')" class="').concat(s(),'-plus-sign"></i>')),a+="</label>",t.linklabel)&&(e='<fng-link fld="'+t.name+'" ref="'+t.ref+'" text="'+escape(a)+'"',t.form&&(e+=' form="'+t.form+'"'),t.linktab&&(e+=' linktab="'+t.linktab+'"'),a=e+="></fng-link>"),a},glyphClass:s,allInputsVars:function(e,t,n,r,o,a){var i=t.placeHolder,s="",l="",c="",d="";return"bs3"===f.framework()?(s=-1===["horizontal","vertical","inline"].indexOf(n.formstyle)?" input-sm":"",l="col-sm-"+p.sizeAsNumber(t),d=" form-control"):c=t.size?" input-"+t.size:"",["inline","stacked"].includes(n.formstyle)&&(i=i||t.label),r='data-ng-model="'+r+'"',o&&(r+=' id="'.concat(o,'"')),a?r+=' name="'.concat(a,'"'):o&&(r+=' name="'.concat(o,'"')),i&&(r+=' placeholder="'.concat(i,'"')),t.popup&&(r+=' title="'.concat(t.popup,'"')),t.ariaLabel&&(r+=' aria-label="'.concat(t.ariaLabel,'"')),{common:r+=m.addAll(e,"Field",null,n),sizeClassBS3:l,sizeClassBS2:c,compactClass:s,formControl:d}},inputChrome:function(e,t,n,r){"bs3"===f.framework()&&v(n.formstyle,!0)&&"checkbox"!==t.type&&(e='<div class="bs3-input '+r.sizeClassBS3+'">'+e+"</div>");var o,r=(t.helpInline||"")+(t.helpinline||"");return 0<r.length&&(o="bs2"===f.framework()?{el:"span",cl:"help-inline"}:{el:"div",cl:"help-block"},e+="<".concat(o.el,' class="').concat(o.cl,'">').concat(r,"</").concat(o.el,">")),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){e="<input "+e+'type="'+t.type+'" ';return t.label||t.ariaLabel?n.subschema&&(e+='aria-label="'.concat(t.label?r("titleCase")(n.subschemaroot)+" "+t.label:t.popup||t.name.replace(/\./g," "),'" ')):e+='aria-label="'.concat(t.name.replace(/\./g," "),'" '),"inline"!==n.formstyle||"bs2"!==f.framework()||t.size||(e+='class="input-small"'),e+=" />"},controlDivClasses:function(e,t){var n=[];return v(e.formstyle,!1)&&("bs2"===f.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 e=0<t.length?'<div class="'+t.join(" ")+'">'+e+"</div>":e},handleArrayInputAndControlDiv:function(e,t,n,r,o){var a="bs3"===f.framework()?'ng-class="skipCols($index)" ':"",o=o.subschema?"subDoc"+r.name.replace(o.subschemaroot,""):(o.model||"record")+"."+r.name,i="",n=(i+='<div id="'+r.id+'List" class="'+t.join(" ")+'" '+a+' ng-repeat="arrayItem in '+o+' track by $index">',l(r,n)),n="link"!==r.type?"<i ".concat(n.join(" ")," ng-click=\"remove('").concat(r.name,'\', $index, $event)" id="remove_').concat(r.id,'_{{$index}}" class="').concat(s(),'-minus-sign"></i>'):"",i=i+e.replace("<dms/>",n)+"</div>",a="bs3"===f.framework()?'ng-class="skipCols('+o+'.length)" ':"";return r.help&&(i+='<div class="array-help-block '+t.join(" ")+'" '+a+' id="empty'+r.id+'ListHelpBlock">'+r.help+"</div>"),i},addTextInputMarkup:function(e,t,n){var r="",e=e.formControl.trim()+e.compactClass+e.sizeClassBS2+(t.class?" "+t.class:"");return 0!==e.length&&(r+='class="'+e+'"'),t.add&&(r+=" "+t.add+" "),r+=n},handleReadOnlyDisabled:l,generateArrayElementIdString:b,genDisableableAncestorStr:function(e){return h.getDisableableAncestorAttrs(e)},generateNgShow:g}}e=d.services||(d.services={}),t.$inject=["CssFrameworkService","InputSizeHelperService","AddAllService","SecurityService","$filter"],e.FormMarkupHelperService=t})(fng=fng||{}),(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||{}),(e=>{function t(m){function a(e,t,n,r,o){var a=n.info.name,i=(r&&(null!=o&&o.nonUniqueIdSuffix?(t=t.replace(r,o.nonUniqueIdSuffix),a+=".".concat(o.nonUniqueIdSuffix)):a+=".".concat(r)),m.handleReadOnlyDisabled({id:t,name:a,nonUniqueId:n.info.nonuniqueid,readonly:n.info.readonly},e));if(null!=o&&o.forceNg)for(var s=0;s<i.length;s++)"disabled"===i[s].toLowerCase().trim()&&(i[s]='ng-disabled="true"');return i}function i(e,t,n,r,o){return a(e,t,n,r,o).join(" ")}function p(e,t,n){return m.handlePseudos(e,t,n)}function s(e,t,n){return m.isArrayElement(e,t.info,t.options)?m.generateArrayElementIdString(n,t.info,t.options):n}function l(e,t,n,r){var o=t.info.id;return n&&(n.startsWith("_")||(o+="_"),o+=n),o=r?s(e,t,o):o}function c(e,t,n,r){e=a(e,r,t,n,{forceNg:!0}),r="";if(t=e[0]){t=(t=(t=(t=t.replace("data-ng-disabled","ng-disabled")).replace("data-ng-readonly","ng-readonly")).replace("ng-disabled=",'"ng-disabled":')).replace("ng-readonly=",'"ng-readonly":');try{t="{ ".concat(t," }");(t=JSON.parse(t)["ng-disabled"])&&(r='disabledDate="'.concat(t,'" readonlyTime="').concat(t,'"'))}catch(e){}}return r+" "+e[1]}function h(e,t,n,r){function o(e){var t,e=e.replace(/&quot;/g,'"');return""===e||"true"===e||"false"!==e&&(t=Number(e),!isNaN(t)&&isFinite(t)?t:e)}var a,i,s={},l={formStyle:e.formstyle},c={},d=t?t.length:0,u=null==t?void 0:t.toLowerCase();for(a in e)e.hasOwnProperty(a)&&("fngfld"===(i=a.toLowerCase()).slice(0,6)?s[i.slice(6)]=o(e[a]):"fngopt"===i.slice(0,6)?l[i.slice(6)]=o(e[a]):t&&i.slice(0,d)===u&&(c[_.kebabCase(a.slice(d))]=o(e[a])));var f={info:s,options:l,directiveOptions:c};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 o=l(e,t,n,!1),a=s(e,t,o);return'id="'.concat(a,'" ').concat(i(e,o,t,n,r))}return{extractFromAttr:h,buildInputMarkup:function(e,t,n,r){var o,a,i,s,l,c,d,u=n.processedAttrs||h(t,"",e),f={},u=(n.ignoreFieldInfoFromAttrs||Object.assign(f,u.info),n.fieldInfoOverrides&&Object.assign(f,n.fieldInfoOverrides),Object.assign({},u.options,n.optionOverrides)),p=m.fieldChrome(e,f,u);return p.omit?"":(o=m.controlDivClasses(u,f),a=p.template+m.label(e,f,n.addButtons,u),i=f.id,(f.array||u.subschema)&&(i=m.generateArrayElementIdString(i,f,u)),l=n.addButtons?"arrayItem"+(n.needsX?".x":""):t.model+"."+f.name,s=f.name,u.subschema&&-1!==f.name.indexOf(".")&&(t=t.model+".",c=u.subschemaroot,d=f.name.slice(c.length+1),l=t+c,u.subkey?(i=l.slice(t.length).replace(/\./g,"-")+"-subkey"+u.subkeyno+"-"+d,l+="[$_arrayOffset_"+c.replace(/\./g,"_")+"_"+u.subkeyno+"]."+d):(l+="[$index]."+d,s=f.name.replace(/\./g,"-"))),(t=m.allInputsVars(e,f,u,l,i,s)).modelString=l,t.disableableAncestorStr=m.genDisableableAncestorStr(f.id),c=r(t),d=m.inputChrome(c,f,u,t),n.addButtons?a+=m.handleArrayInputAndControlDiv(d,o,e,f,u):a+=m.handleInputAndControlDiv(d,o),a+p.closeTag)},genIdString:function(e,t,n){return l(e,t,n,!0)},genDisabledStr:function(e,t,n,r){return i(e,l(e,t,n,!1),t,n,r)},genIdAndDisabledStr:r,genDateTimePickerDisabledStr:function(e,t,n){return c(e,t,n,l(e,t,n,!1))},genDateTimePickerIdAndDisabledStr:function(e,t,n){var r=l(e,t,n,!1),o=s(e,t,r);return'id="'.concat(o,'" ').concat(c(e,t,n,r))},genUiSelectIdAndDisabledStr:function(e,t,n){return r(e,t,n,{forceNg:!0})},handlePseudos:p,genDisableableAncestorStr:function(e){return m.genDisableableAncestorStr(e.info.id)}}}e=e.services||(e.services={}),t.$inject=["FormMarkupHelperService"],e.PluginHelperService=t})(fng=fng||{}),(O=>{var e;function t(a,d,i,u,l,c,f,m,s){var e=this,p=function(e){return(e=void 0===e?function(e){return Math.floor(e).toString(16)}:e)(Date.now()/1e3)+" ".repeat(16).replace(/./g,function(){return e(16*Math.random())})};function h(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 y(e,t,n,r){var o=v(e,t,n,!!r);if(o.lastObject&&o.key)if(r)if(angular.isArray(o.lastObject))for(var a=0;a<o.lastObject.length;a++)o.lastObject[a][o.key]=r[a];else o.lastObject[o.key]=r;else delete o.lastObject[o.key]}function g(t,n,e,r){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:A(t,e,n[b(t,"Options")],n[b(t,"_ids")])}),r=w(e.master,t.name))&&y(n.record,t.name,void 0,r)}var v=function(e,t,n,r){void 0===r&&(r=!1);for(var o=t.split("."),a=o.length-1,i=e,s=0;s<a;s++){if(!i)throw new Error("walkTree failed: Object = ".concat(e,", fieldname = ").concat(t,", i = ").concat(s));if(i=angular.isArray(i)?_.map(i,function(e){return e[o[s]]}):(r&&!i[o[s]]&&(i[o[s]]={}),i[o[s]]),angular.isArray(i)&&void 0!==n)if(n.scope&&"function"==typeof n.scope)i=i[n.scope().$index];else{if("number"!=typeof n)throw new Error("Unsupported element type in walkTree "+t);i=i[n]}if(!i)break}return{lastObject:i,key:i?o[a]:void 0}},w=function(e,t,n){var r,o=v(e,t,n);return r=o.lastObject&&o.key?angular.isArray(o.lastObject)?_.map(o.lastObject,function(e){return e[o.key]}):o.lastObject[o.key]:r};function k(e,t,n,r){if(void 0===n&&(n=null),(i=w(e,t)||"")&&n){var o=_.find(n,function(e){return e.name===t});if(o)switch(o.params){case void 0:break;case"timestamp":var a=i.toString().substring(0,8),a=new Date(1e3*parseInt(a,16)),i=a.toLocaleDateString()+" "+a.toLocaleTimeString();break;default:i=r.dataEventFunctions[o.params](e)}}return i}function S(e,t,n){r=[(e=(e=e).split("."))[0]],1<e.length&&r.push(e.slice(1).join("."));var r,e=r;if(1<e.length){var o=e[1],a=t[e[0]],i=n;if(void 0!==a)if(angular.isArray(a))for(var s=0;s<a.length;s++)S(o,a[s],i);else S(o,a,i)}else if(t[e[0]]){var l=t[e[0]];if(angular.isArray(l))for(var c=l.length-1;0<=c;c--){var d=typeof l[c];("undefined"==d||"object"==d&&0===Object.keys(l[c]).length)&&l.splice(c,1)}t[e[0]]=n(l)}}function x(e,t,n,r,o){var a="string"==typeof t?e[t]:t,i="string"==typeof n?e[n]:n;a.length=0,i.length=0,r&&0<r.length&&r.forEach(function(e){var t=e[o];t&&0<t.length&&(a.push(t),e._id||(e._id=p()),i.push(e._id))})}var D=function(e){var t=!1;return t=!e.needsX&&(e.directive||"text"!==e.type&&("select"!==e.type||e.ids))?t:!0};function $(e,t,n){e=e.conversions;return(e=n?w(e,n)||{}:e)[t]}var C=function(e,t,n,r,o,a,i){a=a||t;for(var s=0;s<e.length;s++){var l=e[s],c=l.name.slice(n),d=(c.length||(c=l.name.split(".").pop()),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]=C(l.schema,d[u],1+c.length,r,c,a,u)}else{l.internalRef&&x(r,l.options,l.ids,a[l.internalRef.property],l.internalRef.value);var f=k(t,c,null,r);if(l.array&&D(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]=A(l,d,r[b(l,"Options")],m)):l.select2?(console.log("fng-select2 is deprecated - use fng-ui-select instead"),l.select2):d&&(h=$(r,c,o))&&h.fngajax&&"function"==typeof h.fngajax&&!h.noconvert&&h.fngajax(d,l,function(e,t){y(a,e.name,i,t),F(angular.element("#"+e.id),function(){y(r.record,e.name,i,t)})})}}return t};function A(e,t,n,r){if(e.array||angular.isArray(t)){for(var o=[],a=e.array&&(!e.directive||D(e)),i=0;i<t.length;i++){var s=t[i],s=(s&&s.x&&(s=s.x),E(s,r,n,e.name));o.push(s=a?{x:s}:s)}return o}return e.select2?{id:t,text:E(t,r,n,e.name)}:E(t,r,n,e.name)}function F(e,t){var n=(e=e.inheritedData("$ngModelController"))&&e.$pristine;n&&(e.$pristine=!1),t(),n&&(e.$pristine=!0)}function o(e,t,n){n.master=C(t.formSchema,e,0,t),t.phase="ready",t.cancel()}var N=function(e,t,n,r){e=_.isObject(e)?e.x||e.text:e;if(e&&e.match(/^[0-9a-f]{24}$/))return e;var o=t.indexOf(e);if(-1===o)throw new Error("convertListValueToId: Invalid data - value "+e+" not found in "+t+" processing "+r);return n[o]},E=function(e,t,n,r){"object"==typeof e&&(e=e.id);var o=t.indexOf(e);if(-1===o&&-1===(o=n.indexOf(e)))throw new Error("convertIdToListValue: Invalid data - id "+e+" not found in "+t+" processing "+r);return n[o]};function L(t,n,r,e,o){o&&0<o.length&&o.length===e.length&&n[r]&&-1<(o=o.findIndex(function(e){return e[t.value]===n[r]}))&&(e=e[o][t.value])&&(n[r]=e)}function I(e,f,i,t,p){var n=!f.id&&!f.newRecord;function s(a,u){f.internalLookups.forEach(function(n){var r=a[n.ref.property],o=u[n.ref.property];x(f,n.lookupOptions,n.lookupIds,r,n.ref.value),(r&&0<r.length||o&&0<o.length)&&n.handlers.forEach(function(t){var e;t.possibleArray?(e=w(f.record,t.possibleArray,null))&&0<e.length&&e.forEach(function(e){return L(n.ref,e,t.lastPart,r,o)}):angular.isArray(f.record[t.lastPart])?f.record[t.lastPart].forEach(function(e){L(n.ref,e,"x",r,o)}):L(n.ref,f.record,t.lastPart,r,o)})}),f.listLookups.forEach(function(c){function e(e,t){e=e[t];return e=e&&e.id?e.id:e}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(a,t),t=e(u,t);n!==t&&(n?(t&&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(n){for(var e,r=f[n.formInstructions.options],o=(r.length=0,f[n.formInstructions.ids]),t=(o.length=0,l.data[c.ref.property]||[]),a=0;a<t.length;a++){var i=t[a][c.ref.value],s=_.sortedIndex(r,i);r[s]===i&&(i=i+" ("+t[a]._id+")",s=_.sortedIndex(r,i)),r.splice(s,0,i),o.splice(s,0,t[a]._id)}0===Object.keys(u).length?g(n.formInstructions,f,p,!0):n.oldId?angular.isArray(n.oldId)?n.oldId.forEach(function(e,t){e=o.indexOf(e);y(f.record,n.formInstructions.name,t,-1===e?void 0:r[e])}):-1!==(e=o.indexOf(n.oldId))?y(f.record,n.formInstructions.name,void 0,r[e]):d(n.formInstructions):d(n.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(),s(f.record,{})}function l(e){!0===(null==e?void 0:e.dirty)&&(f.cancel(),setTimeout(function(){f.showError(e.dirtyMessage,"Record Locked")}))}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 c=!0;if(f.newRecord||(f.dropConversionWatcher=f.$watchCollection("conversions",function(e,t){e!==t&&f.originalData&&o(f.originalData,f,p)})),f.$watch("record",function(e,t){var n,r;if("ready"===f.phase&&!f.dirtyChecked&&0<Object.keys(t).length&&f.topLevelFormName&&f[f.topLevelFormName]&&f[f.topLevelFormName].$dirty&&"function"==typeof(null==(n=f.dataEventFunctions)?void 0:n.checkDirty)&&(f.dirtyChecked=!0,"function"==typeof(null==(n=f.dataEventFunctions.checkDirty(e,t))?void 0:n.then)?n.then(function(e){l(e)}):l(n)),0<Object.keys(t).length&&f.dropConversionWatcher&&(r=f.dropConversionWatcher,f.dropConversionWatcher=null,u(function(){r()})),c=i.updateDataDependentDisplay(e,t,c,f),s(e,t),O.formsAngular.title){var o=O.formsAngular.title.prefix||"";if(f.editFormHeader)o+=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;o+=f.getListData(f.record,f.listSchema[a].name)+" "}o=o.trimEnd()+(O.formsAngular.title.suffix||""),d.document.title=o.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);e=f.initialiseNewRecord||a.$$search.r;if(e)try{Object.assign(p.master,JSON.parse(e)),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(o){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)e.data.errors.hasOwnProperty(n)&&(t+="<li><b>"+i("titleCase")(n)+": </b> ","enum"===e.data.errors[n].type?t+="You need to select from the list of values":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.",o.phase="error",o.showError(t)}else{var r;404===e.status?a.search({}).path("/404"):("string"!=typeof(r=e.data)&&(r=JSON.stringify(r)),500!==e.status&&(r=e.status+" "+r),o.showError(r))}}}function T(e,t,n){n.allowLocationChange=!1,t.phase="reading","function"==typeof t.dataEventFunctions.onAfterRead&&t.dataEventFunctions.onAfterRead(e),o(t.originalData=e,t,n)}function r(e,t,n,r){var o=t.name.split("."),a=r.find(function(e){return e.ref.property===n.property&&e.ref.value===n.value}),o={formInstructions:t,lastPart:o.pop(),possibleArray:o.join(".")};a||r.push(a={ref:n,lookupOptions:[],lookupIds:[],handlers:[]}),a.handlers.push(o),e[t.options]=a.lookupOptions,e[t.ids]=a.lookupIds}return{beginReadingRecord:function(e){e.readingRecord=m.readRecord(e.modelName,e.id,e.formName)},convertToAngularModel:function(n){return __awaiter(e,void 0,void 0,function(){var t;return __generator(this,function(e){switch(e.label){case 0:return[4,s.getSchema(n.modelName,n.formName)];case 1:return t=e.sent(),C(t,n.record,0,n),[2]}})})},convertToAngularModelWithSchema:function(t,n,r){return __awaiter(e,void 0,void 0,function(){return __generator(this,function(e){return C(t,n,0,r),[2]})})},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?a.search({}).path("/404"):t.handleHttpError(e)})},scrollTheList:function(t){var n=t.pagesLoaded;m.getPagedAndFilteredList(t.modelName,{aggregate:a.$$search.a,find:a.$$search.f,limit:t.pageSize,skip:n*t.pageSize,order:a.$$search.o,concatenate:!1}).then(function(e){e=e.data;angular.isArray(e)?(!t.listSchema.find(function(e){return"disambiguation"===e.name})&&e.some(function(e){return e.disambiguation})&&t.listSchema.push({name:"disambiguation"}),n===t.pagesLoaded?(t.pagesLoaded++,t.recordList=t.recordList.concat(e)):console.log("DEBUG: infinite scroll component asked for a page twice - the model was "+t.modelName)):t.showError(e,"Invalid query")},t.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),c.redirectTo()("onDelete",n,a)},function(e){var t;404===e.status?c.redirectTo()("onDelete",n,a):403===e.status?n.showError((null==(t=e.data)?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,t,n,r){n.phase="updating",m.updateRecord(n.modelName,n.id,e,n.formName).then(function(e){e=e.data;!1!==e.success?("function"==typeof n.dataEventFunctions.onAfterUpdate&&n.dataEventFunctions.onAfterUpdate(e,r.master),t.redirect?(t.allowChange&&(r.allowLocationChange=!0),d.location=t.redirect):(T(e,n,r),n.setPristine(!1))):n.showError(e)},function(e){var t;null!=(t=null==(t=e.data)?void 0:t.message)&&t.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."),n.handleHttpError(e)})},createNew:function(e,t,n,r){m.createRecord(n.modelName,e,n.formName).then(function(e){e=e.data;!1!==e.success?(r.allowLocationChange=!0,"function"==typeof n.dataEventFunctions.onAfterCreate&&n.dataEventFunctions.onAfterCreate(e),t.redirect?d.location=t.redirect:c.redirectTo()("edit",n,a,e._id)):n.showError(e)},n.handleHttpError)},getListData:k,suffixCleanId:b,getData:w,setData:y,setUpLookupOptions:function(e,o,a,i){var s=a[o.options]=[],l=a[o.ids]=[];(o.filter?m.getPagedAndFilteredList(e,Object.assign({concatenate:!0},o.filter)):m.getAllListAttributes(e)).then(function(e){e=e.data;if(e){e.sort(function(e,t){return e.text.localeCompare(t.text)}),s.push.apply(s,e.map(function(e){return e.text})),l.push.apply(l,e.map(function(e){return e.id}));for(var t=new Set,n=0;n<s.length-1;n++)for(var r=n+1;r<s.length;r++)_.isEqual(s[n],s[r])&&t.add(s[n]);t.forEach(function(e){for(var t=0;t<s.length;t++)s[t]===e&&(s[t]+="("+l[t]+")")}),a.readingRecord&&a.readingRecord.then(function(){g(o,a,i)})}}).catch(function(e){a.handleHttpError(e)})},setUpLookupListOptions:function(a,i,s,l){var c=s[i.options]=[],d=s[i.ids]=[];"$"===a.id[0]?r(s,i,a,s.listLookups):m.readRecord(a.collection,s.$eval(a.id)).then(function(e){for(var t=e.data[a.property],n=0;n<t.length;n++){var r=t[n][a.value],o=_.sortedIndex(c,r);c[o]===r&&(r=r+" ("+t[n]._id+")",o=_.sortedIndex(c,r)),c.splice(o,0,r),d.splice(o,0,t[n]._id)}g(i,s,l)})},handleInternalLookup:function(e,t,n){r(e,t,n,e.internalLookups)},preservePristine:F,convertToMongoModel:function d(u,f,p,m,h){function g(e,t){var n;return t&&t.fngajax?e&&(n=e.id||e):e&&(n=e.text||(e.x?e.x.text:e)),n}for(var e=function(){var s=u[v],e=s.name.slice(p),t=k(f,e,null,m);if(s.schema){if(t)for(var n=0;n<t.length;n++)t[n]=d(s.schema,t[n],1+e.length,m,e)}else{if(s.array&&D(s)&&t)for(var r=0;r<t.length;r++)t[r]=t[r].x;var l=m[b(s,"_ids")];if(l&&0<l.length)S(e,f,function(e){var t=s,n=e,r=m[b(s,"Options")],o=l;if(t.array){for(var a=[],i=0;i<n.length;i++)a.push(N(n[i],r,o,t.name));return a}return N(n,r,o,t.name)});else{var o=$(m,e,h);if(o){var a=w(f,e,null),i=void 0;if(s.array){if(i=[],a)for(var c=0;c<a.length;c++)i[c]=g(a[c],o)}else i=g(a,o);y(f,e,null,i)}}}},v=0;v<u.length;v++)e();return f},convertIdToListValue:E,handleError:t,decorateScope:function(s,n,r,o){s.handleHttpError=t(s),s.cancel=function(){angular.copy(o.master,s.record),s.$broadcast("fngCancel",s),u(function(){s.setPristine(),s.$broadcast("fngCancelFinished",s)})},s.$on("showErrorMessage",function(e,t){e.defaultPrevented||(e.defaultPrevented=!0,s.showError(t.body,t.title))}),s.showError=function(t,e){s.errorHideTimer&&s.clearTimeout(),s.errorMessage&&-1===s.errorMessage.indexOf(t)?s.errorMessage+="<br /><br />":s.errorMessage="",s.errorMessage+=(()=>{if(u(function(){s.phase="ready"},25),"string"==typeof t)return l.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}})(),s.alertTitle=e||"Error!",s.errorHideTimer=window.setTimeout(function(){s.dismissError(),s.$digest()},3500+1e3*(s.alertTitle+s.errorMessage).length/50),s.errorVisible=!0,window.setTimeout(function(){s.$digest()})},s.clearTimeout=function(){s.errorHideTimer&&(clearTimeout(s.errorHideTimer),delete s.errorHideTimer)},s.dismissError=function(){s.clearTimeout,s.errorVisible=!1,delete s.errorMessage,delete s.alertTitle},s.stickError=function(){clearTimeout(s.errorHideTimer)},s.prepareForSave=function(t){var n=r.convertToMongoModel(s.formSchema,angular.copy(s.record),0,s);s.id?"function"==typeof s.dataEventFunctions.onBeforeUpdate?s.dataEventFunctions.onBeforeUpdate(n,o.master,function(e){e?t(e):t(null,n)}):t(null,n):"function"==typeof s.dataEventFunctions.onBeforeCreate?s.dataEventFunctions.onBeforeCreate(n,function(e){e?t(e):t(null,n)}):t(null,n)},s.save=function(n){n=n||{},s.redirectOptions=n,s.prepareForSave(function(e,t){e?"_update_handled_"!==e&&u(function(){s.showError(e)}):s.id?r.updateDocument(t,n,s,o):r.createNew(t,n,s,o)})},s.newClick=function(){c.redirectTo()("new",s,a)},s.$on("$locationChangeStart",function(e,t){o.allowLocationChange||s.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?s.save({redirect:t,allowChange:!0}):(o.allowLocationChange=!0,d.location=t)}).catch(h))}),setTimeout(function(){window.onunload=function(){var e;"function"==typeof(null==(e=s.dataEventFunctions)?void 0:e.isLocked)&&null!=(e=s.dataEventFunctions)&&e.isLocked()&&"function"==typeof(null==(e=s.dataEventFunctions)?void 0:e.releaseLock)&&null!=(e=s.dataEventFunctions)&&e.releaseLock()},window.onbeforeunload=function(e){var t;(!o.allowLocationChange&&!s.isCancelDisabled()||"function"==typeof(null==(t=s.dataEventFunctions)?void 0:t.isLocked)&&null!=(t=s.dataEventFunctions)&&t.isLocked())&&(confirm("You have unsaved changes. Do you really want to lose them?")?"function"==typeof(null==(t=s.dataEventFunctions)?void 0:t.isLocked)&&"function"==typeof(null==(t=s.dataEventFunctions)?void 0:t.releaseLock)&&null!=(t=s.dataEventFunctions)&&t.isLocked()&&null!=(t=s.dataEventFunctions)&&t.releaseLock():e.preventDefault())}}),s.$on("$destroy",function(){window.onbeforeunload=null}),s.deleteClick=function(){s.record._id&&(s.unconfirmedDelete?Promise.resolve(!0):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).then(function(e){function t(){r.deleteRecord(s.id,s,o)}e&&("function"==typeof s.dataEventFunctions.onBeforeDelete?s.dataEventFunctions.onBeforeDelete(o.master,function(e){e?"_delete_handled_"!==e&&s.showError(e):t()}):t())}).catch(h)},s.isCancelDisabled=function(){var e;return!!(s[s.topLevelFormName]&&s[s.topLevelFormName].$pristine||"ready"!==s.phase)||"function"==typeof(null==(e=s.disableFunctions)?void 0:e.isCancelDisabled)&&s.disableFunctions.isCancelDisabled(s.record,o.master,s[s.topLevelFormName])},s.isSaveDisabled=function(){s.whyDisabled=void 0;var e=!1;return s[s.topLevelFormName]?s[s.topLevelFormName].$invalid?(s.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(s.whyDisabled+="<br /><strong>",r&&(s.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()?s.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()?s.whyDisabled+=e.$$element.parent().parent().parent().find("label").text():s.whyDisabled+=e.$name,s.whyDisabled+="</strong>: ",e.$error)for(var t in e.$error)if(e.$error.hasOwnProperty(t))switch(t){case"required":s.whyDisabled+="Field missing required value. ";break;case"pattern":s.whyDisabled+="Field does not match required pattern. ";break;default:s.whyDisabled+=t+". "}})}(s[s.topLevelFormName])):s[s.topLevelFormName].$pristine&&(e=!0):s.whyDisabled="Top level form name invalid",!(!e&&!s.whyDisabled&&"ready"===s.phase)||"function"==typeof(null==(e=s.disableFunctions)?void 0:e.isSaveDisabled)&&(e=s.disableFunctions.isSaveDisabled(s.record,o.master,s[s.topLevelFormName]),s.whyDisabled="string"==typeof e?e:"An application level user-specified function is inhibiting saving the record",!!e)},s.isDeleteDisabled=function(){var e;return!s.id||"ready"!==s.phase||"function"==typeof(null==(e=s.disableFunctions)?void 0:e.isDeleteDisabled)&&s.disableFunctions.isDeleteDisabled(s.record,o.master,s[s.topLevelFormName])},s.isNewDisabled=function(){var e;return"function"==typeof(null==(e=s.disableFunctions)?void 0:e.isNewDisabled)&&s.disableFunctions.isNewDisabled(s.record,o.master,s[s.topLevelFormName])},s.setDefaults=function(e,o){void 0===o&&(o="");var a={};return e.forEach(function(e){if(void 0!==e.defaultValue){for(var t=e.name.replace(o,"").split("."),n=a,r=0;r<t.length-1;r++)n[t[r]]||(n[t[r]]={}),n=n[t[r]];n[t[t.length-1]]=e.defaultValue}}),a},s.getVal=function(e,t){if(-1===e.indexOf("$index")||void 0!==t)return e=e.replace(/\$index/g,t),s.$eval("record."+e)},s.sortableOptions={update:function(e,t){e.target.hasAttribute("disabled")?t.item.sortable.cancel():s.topLevelFormName&&s[s.topLevelFormName].$setDirty()}},s.setUpCustomLookupOptions=function(e,t,n,r){for(var o=0,a=[s,r];o<a.length;o++){var i=a[o];i&&(i[e.ids]=t,i[e.options]=n)}r=w(s.record,e.name);r&&(r=A(e,r=Array.isArray(r)?r.filter(function(e){return null!=e}):r,n,t),y(s.record,e.name,void 0,r))}},fillFormFromBackendCustomSchema:I,fillFormWithBackendSchema:function(t,n,r,o){s.getSchema(t.modelName,t.formName).then(function(e){I(e.data,t,n,r,o)},t.handleHttpError)}}}e=O.services||(O.services={}),t.$inject=["$location","$window","$filter","$timeout","$sce","RoutingService","CssFrameworkService","SubmissionsService","SchemasService"],e.RecordHandlerService=t})(fng=fng||{}),(e=>{function t(n){return{getSchema:function(e,t){return n.get("/api/schema/"+e+(t?"/"+t:""),{cache:!0})}}}e=e.services||(e.services={}),t.$inject=["$http"],e.SchemasService=t})(fng=fng||{}),(d=>{var e;function t(r){function o(e){return!!d.formsAngular.elemSecurityFuncBinding&&("hidden"===e&&!!d.formsAngular.hiddenSecurityFuncName||"disabled"===e&&!!d.formsAngular.disabledSecurityFuncName)}function a(e,t){return o(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 i(e,t){return r[d.formsAngular.disabledSecurityFuncName](e,t)}function s(e,t){return!!i(e,t)}function l(){return"one-time"===d.formsAngular.elemSecurityFuncBinding?"::":""}function t(e,t){return e&&t&&(n=e,null==(r=d.formsAngular.ignoreIdsForHideableOrDisableableAttrs)||!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:o,canDoSecurityNow:a,isSecurelyHidden:n,isSecurelyDisabled:s,getHideableAttrs:c,getDisableableAttrs:e,getDisableableAncestorAttrs:function(e){return t(e,d.formsAngular.disableableAncestorAttr)},decorateSecurableScope:function(e,t){o("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)}),o("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],e.requiresDisabledChildren=function(e){return"+"===i(e,null==t?void 0:t.pseudoUrl)})},doSecurityWhenReady:function(t){var n;a(void 0,"hidden")?t():o("hidden")&&(n=r.$watch(d.formsAngular.hiddenSecurityFuncName,function(e){e&&(n(),t())}))},considerVisibility:function(e,t){var n=c(e);if(a(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){return a(t,"hidden")?"instant"===d.formsAngular.elemSecurityFuncBinding?e.some(function(e){return!t.isSecurelyHidden(e)})?{}:{omit:!0}:(e=e.map(function(e){return"!isSecurelyHidden('".concat(e,"')")}),{visibilityAttr:'data-ng-if="'.concat(l(),"(").concat(e.join(" || "),')"')}):{}},generateDisabledAttr:function(n,r,o){return(()=>{var e="";if(a(r,"disabled")){if((o=o||{}).attrRequiresValue&&o.forceNg)throw new Error("Invalid combination of parameters provided to generateDisabledAttr() [attrRequiresValue and forceNg]");var t=o.attr||"disabled";if("instant"===d.formsAngular.elemSecurityFuncBinding){if(r.isSecurelyDisabled(n)){if(o.attrRequiresValue)return" ".concat(t,'="true"');if(!o.forceNg)return" ".concat(t);e="true"}}else e="".concat(l(),"isSecurelyDisabled('").concat(n,"')");if(e)return("disabled"===t?' data-ng-disabled="':" data-ng-attr-".concat(t,'="')).concat(e,'"')}return e})()+e(n)}}}e=d.services||(d.services={}),t.$inject=["$rootScope"],e.SecurityService=t})(fng=fng||{}),(()=>{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})()),formsAngular=((e=>{function t(o){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,a=new ExpirationCache;function i(e,t,n){e="/api/".concat(e);return t&&(e+="/".concat(t)),n&&(e+="/".concat(n)),e}return{getListAttributes:function(e,t,n){var r="string"!=typeof 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)));t=n?"?returnRaw=1":"";return o.get("/api/".concat(e,"/").concat(r,"/list").concat(t),{cache:a})},getAllListAttributes:function(e){return o.get("/api/".concat(e,"/listAll"),{cache:a})},getAllPickListAttributes:function(e){return o.get("/api/".concat(e,"/picklistAll"),{cache:a})},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),o.get("/api/".concat(e,"/listAll").concat(n(t)))},getPagedAndFilteredListFull:function(e,t){return o.get("/api/".concat(e).concat(n(t)))},readRecord:function(e,t,n){var r="string"!=typeof 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)));t=i(e,n,r);return o.get(t)},getAll:function(e,t){t=angular.extend({cache:!!r&&a},t);return o.get("/api/".concat(e),t)},deleteRecord:function(e,t,n){e=i(e,n,t);return o.delete(e)},updateRecord:function(e,t,n,r){a.remove("/api/".concat(e));e=i(e,r,t);return o.post(e,n)},createRecord:function(e,t,n){a.remove("/api/".concat(e));e=i(e,n)+"/new";return o.post(e,t)},useCache:function(e){r=e},getCache:function(){return!!a},clearCache:function(){a.removeAll()}}}e=e.services||(e.services={}),t.$inject=["$http"],e.SubmissionsService=t})(fng=fng||{}),(u=>{var e;function t(t,n,e,r,o,a,i,s,l){t.sharedData={record:{},disableFunctions:{},dataEventFunctions:{},modelControllers:[]};var c={master:{},fngInvalidRequired:"fng-invalid-required",allowLocationChange:!0},i=(t.errorVisible=!1,angular.extend(t,i.parsePathFunc()(e.$$path)),r("titleCase")(t.modelName,!0));function d(){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")})}a.loadControllerAndMenu(t.sharedData,i,0,!1,t.$new()),t.formName&&a.loadControllerAndMenu(t.sharedData,i+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,o,l,c),"function"==typeof u.formsAngular.beforeProcess?u.formsAngular.beforeProcess(t,function(e){e?t.showError(e.message,"Error preparing to process form"):d()}):d()}e=u.controllers||(u.controllers={}),t.$inject=["$scope","$rootScope","$location","$filter","$uibModal","FngModelCtrlService","RoutingService","FormGeneratorService","RecordHandlerService"],e.BaseCtrl=t})(fng=fng||{}),(e=>{function t(e,t){e.yes=function(){t.close(!0)},e.no=function(){t.close(!1)},e.cancel=function(){t.dismiss("cancel")}}e=e.controllers||(e.controllers={}),t.$inject=["$scope","$uibModalInstance"],e.SaveChangesModalCtrl=t})(fng=fng||{}),(e=>{function t(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)}}e=e.controllers||(e.controllers={}),t.$inject=["$scope","$http","$location","RoutingService"],e.ModelCtrl=t})(fng=fng||{}),(d=>{var e;function t(o,e,i,r,t,n,a){var s;function l(e){i.contextMenu=e;var t="".concat(_.camelCase(e),"ContextMenu");i.contextMenuId=void 0,a.doSecurityWhenReady(function(){i.contextMenuId=t,i.contextMenuHidden=a.isSecurelyHidden(i.contextMenuId),i.contextMenuDisabled=a.isSecurelyDisabled(i.contextMenuId)})}i.clearContextMenu=function(){i.items=[],i.contextMenu=void 0,i.contextMenuId=void 0,i.contextMenuHidden=void 0,i.contextMenuDisabled=void 0},(o.navScope=i).clearContextMenu(),i.toggleCollapsed=function(){i.collapsed=!i.collapsed},i.isCollapsed=!0,i.showShortcuts=!1,i.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=d.formsAngular.keyboardShortCuts)&&s.forEach(function(e){i.shortcuts.push({key:"Ctrl+Shift+"+e.letter,act:e.desc})}),i.markupShortcut=function(e){return'<span class="key">'+e.split("+").join('</span> + <span class="key">')+"</span>"},i.globalShortcuts=function(n){function t(e){var t=document.getElementById(e);t&&(t.disabled||setTimeout(function(){t.click()}),n.preventDefault())}var e,r,o=n.ctrlKey&&n.shiftKey&&!n.altKey&&!n.metaKey;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)?27===n.keyCode&&(o||i.showShortcuts)?o?t("cancelButton"):i.showShortcuts=!1:o&&(83===n.keyCode?t("saveButton"):45===n.keyCode?t("newButton"):88===n.keyCode?t("deleteButton"):d.formsAngular.keyboardShortCuts&&d.formsAngular.keyboardShortCuts.forEach(function(e){n.keyCode===e.keycode&&t(e.id)})):n.ctrlKey||!n.shiftKey?(r=document.getElementById("searchinput"))&&(r.focus(),n.preventDefault()):i.showShortcuts=!0},i.css=function(e,t){e="function"==typeof n[e]?n[e](t):"error text-error";return e},i.$on("fngControllersLoaded",function(e,t,n){l(t.dropDownDisplay||t.modelNameDisplay||r("titleCase")(n,!1)),t.dropDownDisplayPromise&&t.dropDownDisplayPromise.then(function(e){l(e)})}),i.$on("fngControllersUnloaded",function(e){i.clearContextMenu()}),i.doClick=function(e,t,n){var r=angular.element(t.target);if((n=n||i.items[e]).divider||r.parent().hasClass("disabled"))t.preventDefault();else if(n.broadcast)o.$broadcast(n.broadcast,Object.assign({},n.args));else if("function"==typeof n.fn)n.fn.apply(n,n.args||[]);else if(n.fn)throw new Error("Incorrect menu setup")},i.isHidden=function(e){function t(e){return!!e.isHidden&&e.isHidden()}var n=!1,r=i.items[e];if(r.divider)if(0===e)n=!0;else for(var o=!1,a=e-1;0<=a&&!n&&!o;)i.items[a].divider?n=!0:t(i.items[a])?--a:o=!0;return n||t(r)},i.isDisabled=function(e){return!!i.items[e].isDisabled&&i.items[e].isDisabled()},i.buildUrl=function(e){return t.buildUrl(e)},i.dropdownClass=function(e){var t="";return i.items[e].divider?t="divider":i.isDisabled(e)&&(t="disabled"),t};var c=e.document.title;i.$on("$routeChangeSuccess",function(){e.document.title=c})}e=d.controllers||(d.controllers={}),t.$inject=["$rootScope","$window","$scope","$filter","RoutingService","CssFrameworkService","SecurityService"],e.NavCtrl=t})(fng=fng||{}),(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||{}),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&#8230;</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&#8230;</div>\n <div ng-hide="!showSpinner" class="spinner">Just a second&#8230;</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&#8230;</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&#8230;</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&#8230;</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 fng,__awaiter=this&&this.__awaiter||function(e,i,s,l){return new(s=s||Promise)(function(n,t){function r(e){try{a(l.next(e))}catch(e){t(e)}}function o(e){try{a(l.throw(e))}catch(e){t(e)}}function a(e){var t;e.done?n(e.value):((t=e.value)instanceof s?t:new s(function(e){e(t)})).then(r,o)}a((l=l.apply(e,i||[])).next())})},__generator=this&&this.__generator||function(r,o){var a,i,s,l={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]},c={next:e(0),throw:e(1),return:e(2)};return"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function e(n){return function(e){var t=[n,e];if(a)throw new TypeError("Generator is already executing.");for(;l=c&&t[c=0]?0:l;)try{if(a=1,i&&(s=2&t[0]?i.return:t[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,t[1])).done)return s;switch(i=0,(t=s?[2&t[0],s.value]:t)[0]){case 0:case 1:s=t;break;case 4:return l.label++,{value:t[1],done:!1};case 5:l.label++,i=t[1],t=[0];continue;case 7:t=l.ops.pop(),l.trys.pop();continue;default:if(!(s=0<(s=l.trys).length&&s[s.length-1])&&(6===t[0]||2===t[0])){l=0;continue}if(3===t[0]&&(!s||t[1]>s[0]&&t[1]<s[3]))l.label=t[1];else if(6===t[0]&&l.label<s[1])l.label=s[1],s=t;else{if(!(s&&l.label<s[2])){s[2]&&l.ops.pop(),l.trys.pop();continue}l.label=s[2],l.ops.push(t)}}t=o.call(r,l)}catch(e){t=[6,e],i=0}finally{a=s=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}}},__spreadArray=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||((r=r||Array.prototype.slice.call(t,0,o))[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},ExpirationCache=((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(o){return{restrict:"AE",replace:!0,link:function(e,t){var n=t[0].parentElement,r=o(' <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)",o='ng-class="dropdownClass($index)"',a="normal"!==s.formsAngular.elemSecurityFuncBinding,i=a?"::":"";return e.canDoSecurity("hidden")?(t='ng-if="contextMenuId && !contextMenuHidden" '.concat(e.getHideableAttrs("{{ ::contextMenuId }}")),a?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 }}")),o+=' class="{{ '.concat(i,"(!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(o,">")+' <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||{}),(e=>{function t(e){return{restrict:"E",templateUrl:"error-display-"+e.framework()+".html"}}e=e.directives||(e.directives={}),t.$inject=["CssFrameworkService"],e.errorDisplay=t})(fng=fng||{}),(e=>{function t(o){o.checkNotModal=function(){for(var e,t=o.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;);}}e=e.controllers||(e.controllers={}),t.$inject=["$scope"],e.LinkCtrl=t})(fng=fng||{}),(e=>{function t(d,u){return{restrict:"E",scope:{dataSrc:"&model"},link:function(n,e,r){var o=r.ref,t=r.text&&unescape(r.text)!==r.text,a=r.form,i=r.linktab;if(n.readonly=r.readonly,n.element=e,a=a?a+"/":"",i=i?"/"+i:"",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."}e=r.fld,t=e.split("."),t=n.$parent.subDoc&&(n.$parent.subDoc[e]||n.$parent.subDoc[t[t.length-1]])?n.$parent.subDoc[e]?l+"subDoc."+e:l+"subDoc."+t[t.length-1]:l+"record"+(e=void 0!==s.$index?(e=t.pop(),t.join(".")+"["+s.$index+"]."+e):"."+e);n.$watch(t,function(e){var t;e?(e=/^[a-f0-9]{24}/.test(e.toString())?e.slice(0,24):e.id&&/^[a-f0-9]{24}/.test(e.id)?e.id.slice(0,24):n.$parent["f_"+r.fld+"Options"]&&-1<(t=n.$parent["f_"+r.fld+"Options"].indexOf(e))?n.$parent["f_"+r.fld+"_ids"][t]:void 0,n.link=e?d.buildUrl(o+"/"+a+(e.id||e)+"/edit"+i):void 0):n.link=void 0},!0)}else{r.text&&0<r.text.length&&(n.text=r.text);var c=n.$parent.$index;n.$watch("dataSrc()",function(e){e&&(void 0!==c&&angular.isArray(e)&&(e=e[c]),n.link=d.buildUrl(o+"/"+a+e+"/edit"+i),n.text||u.getListAttributes(o,e).then(function(e){e=e.data;!1===e.success?n.text=e.err:n.text=e.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>")}t=t.readonly?'<span class="fng-link">{{text}}</span>':t.text&&unescape(t.text)!==t.text?n(unescape(t.text)):n("{{text}}");return t}}}e=e.directives||(e.directives={}),t.$inject=["RoutingService","SubmissionsService"],e.fngLink=t})(fng=fng||{}),(e=>{function t(e){return{restrict:"A",templateUrl:"form-button-"+e.framework()+".html"}}e=e.directives||(e.directives={}),t.$inject=["CssFrameworkService"],e.formButtons=t})(fng=fng||{}),(e=>{var T,t;function n(m,A,F,N,E,L,I,l){return{restrict:"EA",link:function(y,w,f){var p,b=[],k=T.N,h=function(t,e,n,r){function o(){var e;if(Array.isArray(y[t.options]))e={repeat:t.options,value:"option"};else{if(!y[t.options]||!Array.isArray(y[t.options].values))throw new Error("Invalid enumeration setup in field "+t.name);e=Array.isArray(y[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 a,i,s,l,c,d,u=t.id,f=((t.array||r.subschema)&&(u=I.generateArrayElementIdString(u,t,r)),e||(e=i=(r.model||"record")+".",r.subschema&&-1!==t.name.indexOf(".")?(s=t.name,l=r.subschemaroot,c=s.slice(l.length+1),r.index?u="f_"+(e+=l+"["+r.index+"]."+c).slice(i.length).replace(/(\.|\[|]\.)/g,"-"):(e+=l,r.subkey?(u=e.slice(i.length).replace(/\./g,"-")+"-subkey"+r.subkeyno+"-"+c,e+="[$_arrayOffset_"+l.replace(/\./g,"_")+"_"+r.subkeyno+"]."+c):(e+="[$index]."+c,a=s.replace(/\./g,"-")))):e+=t.name),I.allInputsVars(y,t,r,e,u,a)),p=f.common,m=(n=n||t.required)?" required ":"";switch(t.type){case"select":t.select2?v='<input placeholder="fng-select2 has been removed" readonly>':(p=(p=(p+=I.handleReadOnlyDisabled(t,y).join(" "))+(t.add?" "+t.add+" ":""))+' aria-label="'.concat(t.label&&""!==t.label?t.label:t.name,'" '),v="<select "+p+'class="'+f.formControl.trim()+f.compactClass+f.sizeClassBS2+'" '+m+">",n||(v+='<option value="">'+(t.placeHolder||"")+"</option>"),angular.isArray(t.options)?angular.forEach(t.options,function(e){_.isObject(e)?v+='<option value="'+(e.val||e.id)+'">'+(e.label||e.text)+"</option>":v+="<option>"+e+"</option>"}):(d=o(),v=(v+='<option ng-repeat="option in '+d.repeat+'"')+(d.label?' value="{{'+d.value+'}}"> {{ '+d.label+" }} </option> ":">{{"+d.value+"}}</option> ")),v+="</select>");break;case"link":v='<fng-link model="'+e+'" ref="'+t.ref+'"',t.form&&(v+=' form="'+t.form+'"'),t.linktab&&(v+=' linktab="'+t.linktab+'"'),t.linktext&&(v+=' text="'+t.linktext+'"'),t.readonly&&("boolean"==typeof t.readonly?v+=' readonly="true"':v+=' ng-readonly="'.concat(t.readonly,'"')),v+="></fng-link>";break;case"radio":var h,g,v="",p=(p=(p+=m)+I.handleReadOnlyDisabled(t,y).join(" "))+(t.add?" "+t.add+" ":""),b="vertical"===r.formstyle||"inline"!==r.formstyle&&!t.inlineRadio;angular.isArray(t.options)?(r.subschema&&(p=(p=p.replace('name="','name="{{$index}}-')).replace('id="','id="{{$index}}-')),angular.forEach(t.options,function(e,t){h=p.replace('id="','id="'+t+"-"),v+="<input ".concat(h,' type="radio" aria-label="').concat(e,'" value="').concat(e,'">').concat(e),b&&(v+="<br />")})):(g=b?"div":"span",r.subschema&&(p=p.replace("$index","$parent.$index").replace('name="','name="{{$parent.$index}}-').replace('id="','id="{{$parent.$index}}-')),d=o(),v=(v+="<"+g+' ng-repeat="option in '+d.repeat+'">')+"<input ".concat(p.replace('id="','id="{{$index}}-'),' type="radio" aria-label="').concat(d.value,'" value="{{ ').concat(d.value,' }}"> {{ ').concat(d.label||d.value," }} </").concat(g,"> "));break;case"checkbox":p=(p=(p+=m)+I.handleReadOnlyDisabled(t,y).join(" "))+(t.add?" "+t.add+" ":""),v=I.generateSimpleInput(p,t,r),"bs3"===E.framework()&&(v='<div class="checkbox">'+v+"</div>");break;default:p=(p+=I.addTextInputMarkup(f,t,m))+I.handleReadOnlyDisabled(t,y).join(" "),v="textarea"===t.type?(t.rows&&("auto"===t.rows?p+='msd-elastic="\n" class="ng-animate" ':p+='rows = "'+t.rows+'" '),"ckEditor"===t.editor&&(console.log('Deprecation Warning: "editor" property deprecated - use "add"'),p+='ckeditor = "" ',"bs3"===E.framework())&&(f.sizeClassBS3="col-xs-12"),"<textarea "+p+"></textarea>"):I.generateSimpleInput(p,t,r)}return I.inputChrome(v,t,r,f)},S=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;default:t="form-horizontal compact"}return t},x=function(e){var t;if("function"==typeof e.containerType)t=e.containerType(e);else switch(t={},e.containerType){case"tab":for(var n,r=-1,o=0;o<y.tabs.length;o++)if(y.tabs[o].title===e.title){r=o;break}0<=r?(a="".concat(_.camelCase(e.title),"Tab"),(n=l.considerVisibility(a,y)).omit?t.omit=!0:(s='id="'.concat(a,'"'),n.visibilityAttr&&(s+=" ".concat(n.visibilityAttr)),s+=l.generateDisabledAttr(a,y,{attr:"disable",attrRequiresValue:!0}),t.before="",n=e.title.replace(/["']/g,""),e.hideable?(i="customTemplate_".concat(a,".html"),t.before+='<script type="text/ng-template" id="'.concat(i,'">')+' <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(n,"</span>&nbsp;")+' <button name="hide_'.concat(a,'_btn" data-ng-click="$parent.hideTab($event, \'').concat(n,"', '").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>',s=(s+=' template-url="'.concat(i,'"'))+' data-ng-show="!'.concat(e.hiddenTabArrayProp," || !").concat(e.hiddenTabArrayProp,".includes('").concat(n,"')\"")):s+=' heading="'.concat(n,'"'),0<r&&(s+=' active="tabs['.concat(r,'].active"')),t.before+="<uib-tab ".concat(s,' deselect="tabDeselect($event, $selectedIndex)" select="updateQueryForTab(\'').concat(n,"')\""),t.before+=">",t.after="</uib-tab>")):(t.before="<p>Error! Tab ".concat(e.title," not found in tab list</p>"),t.after="");break;case"+tab":var a="addTabsTab",i="customTemplate_".concat(a,"_popover.html"),s=(t.before='<script type="text/ng-template" id="'.concat(i,'">')+' <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>","customTemplate_".concat(a,".html"));t.before+='<script type="text/ng-template" id="'.concat(s,'">')+' <li class="uib-tab nav-item" data-ng-if="$parent.'.concat(e.hiddenTabArrayProp," && $parent.").concat(e.hiddenTabArrayProp,'.length > 0">')+' <div id="'.concat(a,'">')+' <button name="addTabsBtn" popover-trigger="\'outsideClick\'" popover-placement="bottom" popover-append-to-body="true" title="Reintroduce Optional Sections..." uib-popover-template="\''.concat(i,"'\"")+' 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(s,'">'),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:t.before='<div class="'+e.containerType+'">',e.title&&((n=e.titleTagOrClass||"h4").match(/h[1-6]/)?t.before+="<"+n+">"+e.title+"</"+n+">":t.before+='<p class="'+n+'">'+e.title+"</p>"),t.after="</div>"}return t},g=function(e,t,n,r){for(var r=r?"":'ng-hide="!'.concat(n," || ").concat(n,'.length === 0"'),o='<div class="inline-col-headers" style="display:flex" '.concat(r,">"),a=0,i=e;a<i.length;a++){var s=i[a];$(s,t),o+="<div ",s.showWhen=s.showWhen||s.showwhen,s.showWhen&&("string"==typeof s.showWhen?o+='ng-show="'+s.showWhen+'"':o+='ng-show="'+I.generateNgShow(s.showWhen,n)+'"'),s.id&&"function"==typeof s.id.replace&&(o+=' id="col_label_'+s.id.replace(/\./g,"-")+'"'),o+=' class="inline-col-header"><label for="'.concat(s.id,'" class="control-label">').concat(s.label,"</label></div>")}return o+="</div>"},D=function(e,t){var n=I.fieldChrome(y,e,t);if(n.omit)return"";var r=n.template;if(e.schema){var o,a,i,s=e.name.replace(/\./g,"_"),l="$_schema_"+s;if(y[l]=e.schema,e.schema)if(e.subkey){e.subkey.path=e.name,y[l+"_subkey"]=e.subkey;for(var c=angular.isArray(e.subkey)?e.subkey:[e.subkey],d=0;d<c.length;d++)var u=x(c[d]),r=(r=(r+=u.before)+C(e.schema,null,{subschema:"true",formstyle:t.formstyle,subkey:l+"_subkey",subkeyno:d,subschemaroot:e.name,suppressNestingWarning:e.suppressNestingWarning}))+u.after;b.push(e)}else t.subschema?t.suppressNestingWarning||console.log("Attempts at supporting deep nesting have been removed - will hopefully be re-introduced at a later date"):(o=(t.model||"record")+"."+e.name,"string"==typeof e.customHeader?r+=e.customHeader:(f="",e.unshift&&(f='<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="'+I.glyphClass()+'-plus"></i> Add</button>'),"bs3"===E.framework()?r+='<div class="row schema-head"><div class="col-sm-offset-3">'+e.label+f+"</div></div>":r+='<div class="schema-head">'+e.label+f+"</div>"),"inline"===e.formStyle&&e.inlineHeaders&&(r+=g(e.schema,t,o,"always"===e.inlineHeaders)),f=I.handleReadOnlyDisabled(e,y)[0],p=e.sortable&&"disabled"!==f.trim().toLowerCase()?"".concat(f,' ui-sortable="sortableOptions" ng-model="').concat(o,'"'):"",r+='<ol class="sub-doc" '.concat(p,">"),p=I.genDisableableAncestorStr(e.id),r+='<li ng-form id="'.concat(e.id,'List_{{$index}}" name="form_').concat(s,'{{$index}}" ').concat(p)+' class="'.concat(S(e.formStyle))+" ".concat("bs2"===E.framework()?"row-fluid":"")+" ".concat(e.inlineHeaders?"width-controlled":"")+" ".concat(e.ngClass?"ng-class:"+e.ngClass:"",'"')+' ng-repeat="subDoc in '.concat(o,' track by $index"')+" ".concat(e.filterable?'data-ng-hide="subDoc._hidden"':"")+">","bs2"===E.framework()&&(r+='<div class="row-fluid sub-doc">'),s=void(!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(f," ").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="'+I.glyphClass()+'-minus"></i> Remove':(r+=' style="position: relative; z-index: 20;" type="button" class="close pull-right">',"bs3"===E.framework()?r+='<span aria-hidden="true">×</span><span class="sr-only">Close</span>':r+="<span>×</span>"),r+="</button>"),r+="</div> ")),e.subDocContainerType&&(a=y[e.subDocContainerType]||e.subDocContainerType,a=Object.assign({containerType:a},e.subDocContainerProps),s=x(a)),null!=s&&s.before&&(r+=s.before),r+=C(e.schema,!1,{subschema:"true",formstyle:e.formStyle,model:t.model,subschemaroot:e.name,suppressNestingWarning:e.suppressNestingWarning}),null!=s&&s.after&&(r+=s.after),"bs2"===E.framework()&&(r+=" </div>"),r+="</li></ol>",!0===e.noAdd&&"string"!=typeof e.customFooter&&!e.noneIndicator||(a="",(s="string"==typeof e.customFooter)&&(a=e.customFooter),m=(i="").concat(o,".length == 0"),!0===e.noAdd?m='ng-show="'.concat(m,'"'):(i=e.noAdd?'ng-hide="'.concat(e.noAdd,'"'):"",m=e.noAdd?'ng-show="'.concat(e.noAdd," && ").concat(m,'"'):"",a+="<button ".concat(i," ").concat(f," ").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(I.glyphClass(),'-plus"></i> Add ')+"</button>"),e.noneIndicator&&(a+="<span ".concat(m,' class="none_indicator" id="no_').concat(e.id,'_indicator">None</span>'),s||(i="".concat(o,".length > 0"),i=!0===e.noAdd?'ng-hide="'.concat(i,'"'):e.noAdd?'ng-hide="'.concat(e.noAdd," && ").concat(i,'"'):"")),""===a)||("bs3"===E.framework()?r+="<div ".concat(i,' class="row schema-foot"><div class="col-sm-offset-3">').concat(a,"</div></div>"):r+="<div ".concat(i,' class = "schema-foot ">').concat(a,"</div>")))}else{e.help=I.handlePseudos(y,e.help),e.label=I.handlePseudos(y,e.label),e.popup=I.handlePseudos(y,e.popup);var f=I.controlDivClasses(t,e);if(e.array){if(f.push("fng-array"),"inline"===t.formstyle||"stacked"===t.formstyle)throw new Error("Cannot use arrays in an inline or stacked form");r+=I.label(y,e,"link"!==e.type,t);var p=e.help,m=(delete e.help,h(e,"link"===e.type?null:"arrayItem.x",!0,t));e.help=p,r+=I.handleArrayInputAndControlDiv(m,f,y,e,t)}else r=(r+=I.label(y,e,null,t))+I.handleInputAndControlDiv(h(e,null,t.required,t),f)}return r+=n.closeTag},$=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:F("titleCase")(e.name.split(".").slice(-1)[0])},C=function(e,t,n){var r="";if(e)for(var o=0;o<e.length;o++){var a=e[o],i=(n.viewform&&((a=angular.copy(a)).readonly=!0),0===o&&t&&!n.schema.match(/\$_schema_/)&&"object"!=typeof a.add&&(a.add=a.add?" "+a.add+" ":"",-1!==a.add.indexOf("ui-date")||n.noautofocus||a.containerType||(a.add=a.add+"autofocus ")),!0);if(a.directive){var s=a.directive,l=a.customHeader||"",c=(l+="<"+s+' model="'+(n.model||"record")+'"',w[0]);$(a,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":f=("bespoke_"+a.name).replace(/\./g,"_");y[f]=angular.copy(a),delete y[f].directive,l+=' schema="'+f+'"';break;default:l+=" "+u.nodeName+'="'+u.value+'"'}}l+=" ";var p,m=F("camelCase")(a.directive);for(p in a)if(a.hasOwnProperty(p))switch(p){case"directive":case"schema":break;case"add":switch(typeof a.add){case"string":l+=" "+a.add;break;case"object":for(var h in a.add)a.add.hasOwnProperty(h)&&(l+=" "+h+'="'+a.add[h].toString().replace(/"/g,"&quot;")+'"');break;default:throw new Error("Invalid add property of type "+typeof a.add+" in directive "+a.name)}break;case m:for(var g in a[p])a[p].hasOwnProperty(g)&&(l+=" ".concat(a.directive,"-").concat(g,'="'),"string"==typeof a[p][g]?l+="".concat(a[p][g].replace(/"/g,"&quot;"),'"'):l+="".concat((JSON.stringify(a[p][g])||"").replace(/"/g,"&quot;"),'"'));break;default:a[p]&&("string"==typeof a[p]?l+=" fng-fld-"+p+'="'+a[p].replace(/"/g,"&quot;")+'"':l+=" fng-fld-"+p+'="'+(JSON.stringify(a[p])||"").replace(/"/g,"&quot;")+'"')}for(p in n)n.hasOwnProperty(p)&&"$"!==p[0]&&void 0!==n[p]&&(l+=" fng-opt-"+p+'="'+n[p].toString().replace(/"/g,"&quot;")+'"');r+=l=(l+='ng-model="'+a.name+'"></'+s+">")+(a.customFooter||""),i=!1}else if(a.containerType){var v,b=x(a);switch(a.containerType){case"tab":k===T.N&&(k=T.Forced,r+='<uib-tabset active="activeTabNo">',v=_.findIndex(y.tabs,function(e){return e.active}),y.activeTabNo=0<=v?v:0),b.omit||(r=(r=(r+=b.before)+C(a.content,null,n))+b.after);break;case"tabset":k=T.Y,r=(r=(r+=b.before)+C(a.content,null,n))+b.after;break;default:r=(r=(r+=b.before)+C(a.content,null,n))+b.after}i=!1}else n.subkey&&(s=(angular.isArray(y[n.subkey])?y[n.subkey][0]:y[n.subkey]).keyList,_.find(s,function(e,t){return y[n.subkey].path+"."+t===a.name}))&&(i=!1);i&&($(a,n),r+=D(a,n))}else console.log("Empty array passed to processInstructions"),r="";return r},t=(y.$on("regenerateFormMarkup",function(e,t){f.formid&&f.formid===t&&(k=T.N,n(y[f.schema]))}),y.$watch(f.schema,function(e){e&&0<(e=angular.isArray(e)?e:[e]).length&&"function"==typeof t&&(t(),t=null,n(e))},!0)),n=function(e){for(var t,n="",r=f.model||"record",h=y[r],r=e.filter(function(e){return e&&"tab"===e.containerType&&e.hideable}),o=0,a=r;o<a.length;o++){if((i=a[o]).hiddenTabArrayProp){if(s&&i.hiddenTabArrayProp!==s)throw new Error("Currently, tab sets with more than one value for hiddenTabArrayProp are not supported");s=i.hiddenTabArrayProp}if(i.hiddenTabReintroductionMethod){if(t&&i.hiddenTabReintroductionMethod!==t)throw new Error("Currently, tab sets with more than one value for hiddenTabReintroductionMethod are not supported");t=i.hiddenTabReintroductionMethod}}for(var i,s=s||"record.hiddenTabs",l=0,c=r;l<c.length;l++)(i=c[l]).hiddenTabArrayProp=s;if("tab"===t&&e.push({containerType:"+tab",hiddenTabArrayProp:s,content:[]}),h=h||{},!f.subschema&&!f.model||f.forceform){y.topLevelFormName=f.name||"myForm";var d,u="";for(d in f)f.hasOwnProperty(d)&&"$"!==d[0]&&-1===["name","formstyle","schema","subschema","model","viewform"].indexOf(d)&&(u+=" "+f.$attr[d]+'="'+f[d]+'"');n="<".concat(f.forceform?"ng-form":"form",' name="').concat(y.topLevelFormName,'" class="').concat(S(f.formstyle),'" novalidate ').concat(u,">")}else n="";if(h===y.topLevelFormName)throw new Error("Model and Name must be distinct - they are both "+h);n+=C(e,!0,f),k===T.Forced&&(n+="</uib-tabset>"),n+=f.subschema?"":"</form>";var g,r=m(n)(y),n=(p?(e=y[y.topLevelFormName],p.replaceWith(r),y[y.topLevelFormName]=e):w.replaceWith(r),p=r,y[f.shared||"sharedData"]),v=n?n.modelControllers:[];(0<b.length||0<v.length)&&!y.phaseWatcher&&(g=y.$watch("phase",function(e){if(y.phaseWatcher=!0,"ready"===e&&"function"==typeof g){g(),g=null;for(var t=0;t<v.length;t++)v[t].onAllReady&&v[t].onAllReady(y);for(var n=0;n<b.length;n++){for(var r,o=b[n],a=angular.isArray(o.subkey)?o.subkey:[o.subkey],i=o.name.split("."),s=h;1<i.length;)s=s[i.shift()]||{};for(var s=s[i[0]]=s[i[0]]||[],l=0;l<a.length;l++){if(a[l].selectFunc){if(!y[a[l].selectFunc]||"function"!=typeof y[a[l].selectFunc])throw new Error("Subkey function "+a[l].selectFunc+" is not properly set up");f=y[a[l].selectFunc](h,o)}else{if(!a[l].keyList)throw new Error("Invalid subkey setup for "+o.name);var c,d,u,f,p=a[l].keyList;for(f=0;f<s.length;f++){for(var m in r=!0,p)if(p.hasOwnProperty(m)&&s[f][m]!==p[m]&&(void 0===s[f][m]||!s[f][m].text||s[f][m].text!==p[m])){r=!1;break}if(r)break}r||(f="error"===a[l].onNotFound?(c="Cannot find matching "+(a[l].title||a[l].path),N(function(){y.showError(c,"Unable to set up form correctly")}),-1):(d=(u=o.name.split(".")).pop(),u=u.join("."),(u?h[u]:h)[d].push(p)-1))}y["$_arrayOffset_"+o.name.replace(/\./g,"_")+"_"+l]=f}}}})),A.$broadcast("formInputDone",f.name),L.updateDataDependentDisplay&&h&&0<Object.keys(h).length&&L.updateDataDependentDisplay(h,null,!0,y)}}}}e=e.directives||(e.directives={}),n.$inject=["$compile","$rootScope","$filter","$timeout","CssFrameworkService","FormGeneratorService","FormMarkupHelperService","SecurityService"],(t=T=T||{})[t.Y=0]="Y",t[t.N=1]="N",t[t.Forced=2]="Forced",e.formInput=n})(fng=fng||{}),(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||{}),(e=>{function t(n,t,r,o){function a(){n.moreCount=0,n.errorClass="",n.results=[],n.focus=null}var i,e,s;s=!1,e=navigator.userAgent||navigator.vendor||window.opera,e=!(s=/(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(e)||/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(e.substr(0,4))?!0: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(l(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(e){return e.url?o.html5hash()+e.url.replace("|id|",e.id):o.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){e=e.data;e.timestamps&&e.timestamps.sentAt&&Number.parseInt(e.timestamps.sentAt)!==i||(0<n.searchTarget.length?(n.results=e.results,n.results.forEach(function(e){e.href=o.html5hash()+l(e)}),n.moreCount=e.moreCount,0<e.results.length&&(n.errorClass="",n.setFocus(0)),n.errorClass=0===n.results.length?"error has-error":""):a())},function(e){console.log("Error in searchbox.js : "+e.data+" (status="+e.status+")")})):a()},!0),n.$on("$routeChangeStart",function(){n.searchTarget=""})}e=e.controllers||(e.controllers={}),t.$inject=["$scope","$http","$location","RoutingService"],e.SearchCtrl=t})(fng=fng||{}),(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||{}),(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||{}),(e=>{(e.filters||(e.filters={})).extractTimestampFromMongoID=function(){return function(e){e=e.substring(0,8);return new Date(1e3*parseInt(e,16))}}})(fng=fng||{}),(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||{}),(e=>{(e.services||(e.services={})).AddAllService=function(){function r(e,t,r,n){var o,a,i=[],s=[];if(r="addAll"+r,"string"==typeof n)for(o=n.split(" "),a=0;a<o.length;a++)s.push(o[a]);if(!function e(t){for(var n in t)n===r&&i.push(t[n]),"$parent"===n&&e(t[n])}(e),void 0!==t[r]&&"string"==typeof t[r])for(o=t[r].split(" "),a=0;a<o.length;a++)0===o[a].indexOf("class=")?s.push(o[a].substring(6,o[a].length)):i.push(o[a]);return(n=0<s.length?' class="'+s.join(" ")+'" ':" ")+(0<i.length?i.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||{}),(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||{}),(e=>{function t(c){return{loadControllerAndMenu:function(e,t,n,r,o){function a(e){angular.forEach(e,function(e){e.divider?r=!0:e[i]&&(r&&(r=!1,l.items.push({divider:!0})),e.id||(e.id=_.camelCase(e.text||e.textFunc()||"")),l.items.push(e))})}var i,s={},l=(t+="Ctrl",(s.$scope=e.modelControllers[n]=o).$parent);l.items=l.items||[];try{c(t,s),i=l.newRecord?"creating":l.id?"editing":"listing",angular.isObject(s.$scope.contextMenu)&&(a(s.$scope.contextMenu),s.$scope.contextMenuPromise)&&s.$scope.contextMenuPromise.then(a),e.modelNameDisplayPromise&&e.modelNameDisplayPromise.then(function(e){l.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||{}),(e=>{function t(n,t){var o,r,i={hashPrefix:"",html5Mode:!1,routing:"ngroute",prefix:""},s=["edit","view"],a=[{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"}],l=null,c={};function d(e){return e=i.templateFolder?"/"!==i.templateFolder[i.templateFolder.length-1]?i.templateFolder+"/"+e:i.templateFolder+e:e}function u(e,n,r){n=(n=void 0===n?"":n)||"",angular.forEach(e,function(e){o.when(n+e.route,angular.extend(e.options||{templateUrl:d(e.templateUrl)},r))}),i.variantsForDemoWebsite&&angular.forEach(i.variantsForDemoWebsite,function(t){angular.forEach(e,function(e){o.when(n+t+e.route,angular.extend(e.options||{templateUrl:d(e.templateUrl)},r))})})}function f(e,t,n){t=(t=void 0===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,o,a){var i,s=r?"/"+r:"",l=e+"/"+n,c=a?"/"+a:"";switch(t){case"list":i=l+s;break;case"edit":i=l+s+"/"+o+"/edit"+c;break;case"view":i=l+s+"/"+o+"/view"+c;break;case"read":i=l+s+"/"+o+"/read"+c;break;case"new":i=l+s+"/new"+c}return i}function m(e,t){switch(i.routing){case"ngroute":o=n.get("$routeProvider"),e&&u(e),u(t,i.prefix,i.add2fngRoutes);break;case"uirouter":r=n.get("$stateProvider"),e&&f(i.fixedRoutes),f(t,i.prefix,i.add2fngRoutes)}}return{start:function(e){angular.extend(i,e),i.prefix[0]&&"/"!==i.prefix[0]&&(i.prefix="/"+i.prefix),t.html5Mode(i.html5Mode),""!==i.hashPrefix?t.hashPrefix(i.hashPrefix):i.html5Mode||t.hashPrefix(""),m(i.fixedRoutes,a)},addRoutes:function(e,t){m(e,t)},registerAction:function(e){s.push(e)},$get:function(){return{router:function(){return i.routing},prefix:function(){return i.prefix},parsePathFunc:function(){return function(e){var t,n,r,o,a;return e!==l&&(l=e,c={newRecord:!1},e=(e=0<i.prefix.length&&0===e.indexOf(i.prefix)?e.slice(i.prefix.length):e).split("/"),i.variants&&-1!==i.variants.indexOf(e[1])&&(c.variant=e[1],e.shift()),t=e.length,"analyse"===e[1]?(c.analyse=!0,c.modelName=e[2],c.reportSchemaName=4<=t?e[3]:null):(c.modelName=e[1],r=(n=[e[t-1],e[t-2]]).indexOf("new"),o=n.indexOf("viewonly"),a=void 0,-1===r&&-1===o?-1!==(a=s.reduce(function(e,t){t=n.indexOf(t);return-1<t?t:e},-1))&&(c.id=e[t-=2+a]):-1!==r?(c.newRecord=!0,t-=1+r):t-=1+o,1!==a&&1!==r||(c.tab=n[0]),2<t&&(c.formName=e[2]))),c}},html5hash:function(){return i.html5Mode?"":"#"},buildUrl:function(e){var t=i.html5Mode?"":"#";return(t=(t+=i.hashPrefix)+i.prefix)[0]&&(t+="/"),t+="/"===e[0]?e.slice(1):e},buildOperationUrl:function(e,t,n,r,o){return p(i.prefix,e,t,n,r,o)},redirectTo:function(){return function(e,t,n,r,o){n.search({}),e="onDelete"===e?i.onDelete?"new"===i.onDelete?p(i.prefix,"new",t.modelName,t.formName,r,o):i.onDelete:p(i.prefix,"list",t.modelName,t.formName,r,o):p(i.prefix,e,t.modelName,t.formName,r,o),n.path(e)}}}}}}e=e.services||(e.services={}),t.$inject=["$injector","$locationProvider"],e.RoutingService=t})(fng=fng||{}),(e=>{function t(i,n,s,r){function h(e,t,n,r,o,a,i,s){function l(e,t){var n=angular.copy(e);if(!(r=_.find(i.tabs,function(e){return e.title===n}))){if(0===i.tabs.length&&0<i.formSchema.length){i.tabs.push({title:"Main",content:[],active:"Main"===i.tab||!i.tab});for(var r=i.tabs[0],o=0;o<i.formSchema.length;o++)r.content.push(i.formSchema[o])}r=i.tabs[i.tabs.push({title:n,containerType:"tab",content:[],active:n===i.tab})-1]}r.content.push(t)}for(var c in"function"==typeof i.onSchemaFetch&&i.onSchemaFetch(e,t),t){var d,u,f,p,m;t.hasOwnProperty(c)&&("_id"===c?r&&t._id.options&&t._id.options.list&&b(r,t._id.options.list,c):t.hasOwnProperty(c)&&(f=(u=(d=t[c]).options||{}).form||{},d.schema&&!f.hidden?a&&n&&(h("Nested "+c,d.schema,p=[],null,c+".",!0,i,s),(m=v(c,f,o)).schema=p,f.tab&&l(f.tab,m),void 0!==f.order?n.splice(f.order,0,m):n.push(m)):(n&&!f.hidden&&(p=v(c,f,o),k(p.showIf,p.name,i))&&"options"!==c&&((m=g(p,d,u,i,s)).tab&&l(m.tab,m),void 0!==f.order?n.splice(f.order,0,m):n.push(m)),r&&u.list&&b(r,u.list,c))))}"function"==typeof i.onSchemaProcessed&&i.onSchemaProcessed(e,"Main "===e.slice(0,5)?i.baseSchema():n),r&&0===r.length&&y(e,r,n,t)}function g(t,e,n,r,o){var a;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=s.suffixCleanId(t,"Options"),null!=(a=n.form)&&a.enumLabels?(t.ids=s.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){if(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)if(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");else if(!(t.directive&&(t.noLookup||t[i("camelCase")(t.directive)]&&t[i("camelCase")(t.directive)].fngAjax)||(t.options=s.suffixCleanId(t,"Options"),t.ids=s.suffixCleanId(t,"_ids"),t.hidden)))if(n.ref)s.setUpLookupOptions(n.ref,t,r,o,h);else if(n.lookupListRef)s.setUpLookupListOptions(n.lookupListRef,t,r,o),t.lookupListRef=n.lookupListRef;else if(n.internalRef)s.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)throw a="Field "+t.name+' has unsupported type "'+e.instance+'"',console.log(a),o=" (typeof = "+typeof e.instance+")",console.log(o),new Error(a+o);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 l(e,t,n){for(var r=e.split("."),o=n||t.record,a=0,i=r.length;a<i;a++)o[r[a]]||(o[r[a]]=a===i-1?[]:{}),o=o[r[a]];return o}var v=function(e,t,n){return t.name=n+e,t},b=function(e,t,n){"object"==typeof t?(t.name=n,e.push(t)):e.push({name:n})},y=function(e,t,n,r){if(n){for(var o=0,a=n.length;o<a;o++)if("text"===n[o].type){t.push({name:n[o].name});break}0===t.length&&0!==n.length&&t.push({name:n[0].name})}if(0===t.length){for(var i in r)if("_id"!==i&&r.hasOwnProperty(i)){t.push({name:i});break}if(0===t.length)throw new Error("Unable to generate a title for "+e)}},w=function(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=s.getListData(r,e.slice(1));break;case 2:t=s.getListData(r,n[1]);break;default:throw new Error("Unsupported showIf format")}}return t}var n,o=t(e.lhs),a=t(e.rhs);switch(e.comp){case"eq":n=o===a;break;case"ne":n=o!==a;break;default:throw new Error("Unsupported comparator "+e.comp)}return n},k=function(e,n,r){var o=0;function t(e){var t;"string"==typeof e&&"$"===e.slice(0,1)&&(e=e.slice(1),(t=r.dataDependencies[e]||[]).push(n),r.dataDependencies[e]=t,o+=1)}var a=!0;return e&&(t(e.lhs),t(e.rhs),0!==o||w(e,void 0)||(a=!1)),a};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:g,handleSchema:h,updateDataDependentDisplay:function(e,t,n,r){var o,a,i,s,l,c;for(c in r.dataDependencies)if(r.dataDependencies.hasOwnProperty(c)){var d=c.split(".");if(1===d.length){if(n||!t||e[c]!==t[c])for(o=r.dataDependencies[c],a=0;a<o.length;a+=1)for(var u=o[a],f=0;f<r.formSchema.length;f+=1)r.formSchema[f].name===u&&(s=angular.element(document.querySelector("#cg_"+r.formSchema[f].id)),w(r.formSchema[f].showIf,e)?s.removeClass("ng-hide"):s.addClass("ng-hide"))}else{if(2!==d.length)throw new Error("You can only go down one level of subdocument with showIf");if(void 0===l&&(l=!0),e[d[0]])for(i=0;i<e[d[0]].length;i++)if(n||!t||!t[d[0]]||!t[d[0]][i]||e[d[0]][i][d[1]]!==t[d[0]][i][d[1]])for(o=r.dataDependencies[c],a=0;a<o.length;a+=1){var p=o[a].split(".");if(2!==p.length)throw new Error("Conditional display must control dependent fields at same level ");for(f=0;f<r.formSchema.length;f+=1)if(r.formSchema[f].name===p[0])for(var m=r.formSchema[f].schema,h=0;h<m.length;h++)m[h].name===o[a]&&(0===(s=angular.element(document.querySelector("#f_"+p[0]+"List_"+i+" #cg_f_"+o[a].replace(".","_")))).length?s=angular.element(document.querySelector("#f_elements-"+i+"-"+p[1])):l=!1,0<s.length)&&(w(r.formSchema[f].schema[h].showIf,e[d[0]][i])?s.show():s.hide())}}}return l},add:function(t,e,n,r){var o,a,i;if(null!=(a=null==e?void 0:e.target)&&a.hasAttribute&&e.target.hasAttribute("disabled"))return e.preventDefault();e.target.offsetParent&&(a=l(t,n,r),i=(r=(r=n.formSchema.find(function(e){return e.name===t}))?r.schema:null)?n.setDefaults(r,t+"."):{},"function"==typeof(null==(o=n.dataEventFunctions)?void 0:o.onInitialiseNewSubDoc)&&n.dataEventFunctions.onInitialiseNewSubDoc(t,r,i),a.push(i),n.setFormDirty(e))},unshift:function(e,t,n,r){l(e,n,r).unshift({}),n.setFormDirty(t)},remove:function(t,e,n,r,o){if(null!=(i=null==n?void 0:n.target)&&i.hasAttribute&&n.target.hasAttribute("disabled"))return n.preventDefault();var a,i=l(t,r,o);"function"==typeof r.dataEventFunctions.onDeleteSubDoc&&(o=(o=r.formSchema.find(function(e){return e.name===t}))?o.schema:null,a=r.dataEventFunctions.onDeleteSubDoc(t,o,i,e)),a?r.showError(a):(i.splice(e,1),r.setFormDirty(n))},hasError:function(e,t,n,r){var o,a=!1;return r?(r=r[r.topLevelFormName])?(r="null"!==e?r[e.replace("$index",n)]:r)&&(o=r[t])&&o.$invalid&&!o.$$attr.readonly&&(o.$dirty?a=!0:angular.forEach(o.$validators,function(e,t){"required"!==t&&o.$error[t]&&(a=!0)})):console.log("hasError failed to find form! ",e,t,n):console.log("hasError called with no scope! ",e,t,n),a},decorateScope:function(o,a,i,e,t){function s(){for(var e=o.$$childHead;e;){if(e.tabset)return e.tabset;e=e.$$nextSibling}}o.record=e.record,o.phase="init",o.disableFunctions=e.disableFunctions,o.dataEventFunctions=e.dataEventFunctions,o.topLevelFormName=void 0,o.formSchema=[],o.tabs=[],o.listSchema=[],o.recordList=[],o.dataDependencies={},o.internalLookups=[],o.listLookups=[],o.conversions={},o.pageSize=60,o.pagesLoaded=0,r.decorateSecurableScope(e.baseScope=o,{pseudoUrl:t}),o.generateEditUrl=function(e){return a.generateEditUrl(e,o)},o.generateViewUrl=function(e){return a.generateViewUrl(e,o)},o.generateNewUrl=function(){return a.generateNewUrl(o)},o.scrollTheList=function(){var e;if(0<(null==(e=o.listSchema)?void 0:e.length))return i.scrollTheList(o);var t=o.$watchCollection("listSchema",function(e){if(0<(null==e?void 0:e.length))return t(),i.scrollTheList(o)})},o.getListData=function(e,t){return i.getListData(e,t,o.listSchema,o)},o.setPristine=function(e){e&&o.dismissError(),o[o.topLevelFormName]&&o[o.topLevelFormName].$setPristine()},o.skipCols=function(e){return 0<e?"col-md-offset-3":""},o.setFormDirty=function(e){e?angular.element(e.target).inheritedData("$formController").$setDirty():console.log("setFormDirty called without an event (fine in a unit test)")},o.add=function(e,t,n){return a.add(e,t,o,n)},o.hideTab=function(e,t,n){var r=i.getData(o,n);r&&Array.isArray(r)&&!r.includes(t)&&(n=o.tabs[o.activeTabNo].title===t,r.push(t),r.sort(),(t=o.baseForm)&&t.$setDirty(),n)&&(t=s())&&t.select(o.tabs.findIndex(function(e){return!r.includes(e.title)}))},o.addTab=function(e,t,n){var r,n=i.getData(o,n);n&&Array.isArray(n)&&-1!==(r=n.findIndex(function(e){return e===t}))&&(n.splice(r,1),(n=o.baseForm)&&n.$setDirty(),r=s())&&r.select(o.tabs.findIndex(function(e){return e.title===t}))},o.hasError=function(e,t,n){return a.hasError(e,t,n,o)},o.unshift=function(e,t,n){return a.unshift(e,t,o,n)},o.remove=function(e,t,n,r){return a.remove(e,t,n,o,r)},o.baseSchema=function(){return o.tabs.length?o.tabs:o.formSchema}}}}((e.services||(e.services={})).FormGeneratorService=t).$inject=["$filter","RoutingService","RecordHandlerService","SecurityService"]})(fng=fng||{}),(d=>{var e;function t(f,p,m,h,r){function g(e,o){function t(e){var t,n,r=e;return"string"==typeof e&&("$"===e.slice(0,1)?(r=(o||"record")+".",1<(t=e.slice(1).split(".")).length?(n=t.pop(),r+=t.join(".")+"[$index]."+n):r+=e.slice(1)):r="'"+e+"'"),r}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 v(e,t){var n=["vertical","inline"];return t||n.push("stacked"),!e||"undefined"===e||!n.includes(e)}function s(){return"bs2"===f.framework()?"icon":"glyphicon glyphicon"}function l(s,l){var c=s.nonUniqueId||s.id;return[(()=>{if(s.readonly&&"boolean"==typeof s.readonly)return" disabled ";function e(){return s.readonly?' ng-disabled="'.concat(s.readonly,'" '):""}if(!c||!h.canDoSecurityNow(l,"disabled"))return e();var t=[];if(l.requiresDisabledChildren){var n=void 0;for((n=s.nonUniqueId?(i=s.nonUniqueId.startsWith("f_")?s.nonUniqueId.substring(2):s.nonUniqueId).split("_"):s.name.split(".")).pop();0<n.length;)t.push("f_".concat(n.join("_"))),n.pop()}if("instant"===d.formsAngular.elemSecurityFuncBinding){if(l.isSecurelyDisabled(c))return" disabled ";for(var r=0,o=t;r<o.length;r++)if(l.requiresDisabledChildren(o[r]))return" disabled ";return e()}var a="isSecurelyDisabled('".concat(c,"')"),i=(0<t.length&&(i=t.map(function(e){return"requiresDisabledChildren('".concat(e,"')")}),a="(".concat(a," || ").concat(i.join(" || "),")")),"one-time"===d.formsAngular.elemSecurityFuncBinding);return s.readonly?i?e()+'ng-readonly="::'.concat(a,'" '):' ng-disabled="'.concat(a," || ").concat(s.readonly,'" '):' ng-disabled="'.concat(i?"::":"").concat(a,'" ')})(),h.getDisableableAttrs(c)]}function b(e,t,n){if(n.subschema&&n.model){for(var r=n.model,o=0,a="$parent.";r.startsWith(a);)o++,r=r.substring(a.length);return"".concat(e,"_{{").concat(a.repeat(o),"$index}}")}return"".concat(e,"_{{$index}}")}function y(e,t,n){return void 0!==e.$index||!!n.subschema}function o(e,t,n){for(;t.includes("@@");){var r=t.indexOf("@@")+2,o=t.indexOf("@@",r)-1,a=(s=t.substring(r,1+o)).endsWith("s"),i=(s=a?s.slice(0,-1):s)[0].toUpperCase()===s[0]?"true":"false",s=s.toLocaleLowerCase(),l=void 0,l="global"===n?d.formsAngular.pseudo(s,"true"==i):"scopeStatic"===n?e.sharedData.pseudo(s,"true"==i):"scopeDynamic"===n?"{{ sharedData.pseudo('".concat(s,"', ").concat(i,") }}"):"";t=t.substring(0,r-2)+l+(a?"s":"")+t.substring(3+o)}return t}return{isHorizontalStyle:v,isArrayElement:y,handlePseudos:function(e,t,n){var r;return null!=t&&t.includes("@@")?(r="function"==typeof(null==(r=null==e?void 0:e.sharedData)?void 0:r.pseudo)?n?(e[n]=function(){return o(e,t,"scopeStatic")},"none"):"scopeDynamic":"function"==typeof d.formsAngular.pseudo?"global":"none",o(e,t,r)):t},fieldChrome:function(e,t,n){var r="";if(t.id&&"function"==typeof t.id.replace){var o=t.nonUniqueId||t.nonuniqueid||t.id,a=void 0;if(t.id.includes(".")&&t.id.includes("{{"))for(var a="cg_",i=!1,s=0;s<t.id.length;s++)"{"===t.id[s]&&"{"===t.id[s-1]?i=!0:"}"===t.id[s]&&"}"===t.id[s-1]&&(i=!1),i||"."!==t.id[s]?a+=t.id[s]:a+="-";else a="cg_".concat(t.id.replace(/\./g,"-"));o="cg_".concat(o.replace(/\./g,"-")),o=h.considerVisibility(o,e);if(o.omit)return{omit:!0};r+='id="'.concat(y(e,0,n)?b(a,0,n):a,'"'),o.visibilityAttr&&(r+=" ".concat(o.visibilityAttr))}var l,c,o=t.classes||"",d="",u="";return t.showWhen=t.showWhen||t.showwhen,t.showWhen&&("string"==typeof t.showWhen?r+=' ng-show="'+t.showWhen+'"':r+=' ng-show="'+g(t.showWhen,n.model)+'"'),"bs3"===f.framework()?(o+=" form-group","vertical"===n.formstyle&&"block-level"!==t.size&&(d+='<div class="row">',o+=" col-sm-"+p.sizeAsNumber(t),u+="</div>"),l=null,c=t.name.split("."),c=n&&void 0!==n.subkeyno?n.subschemaroot.replace(/\./g,"-")+"-subkey"+n.subkeyno+"-"+c[c.length-1]:n.subschema?(l="form_"+c.slice(0,-1).join("_")+"$index",t.name.replace(/\./g,"-")):"f_"+t.name.replace(/\./g,"_"),d+="<div"+m.addAll(e,"Group",o,n)+" ng-class=\"{'has-error': hasError('"+l+"','"+c+"', $index)}\"",u+="</div>"):u=v(n.formstyle,!0)?(d+="<div"+m.addAll(e,"Group","control-group",n),"</div>"):(d+="<span ","</span>"),{template:d+=(r||"")+">",closeTag:u}},label:function(e,t,n,r){var o,a="";return("bs3"===f.framework()||!["inline","stacked"].includes(r.formstyle)&&""!==t.label||n)&&(a="<label",v(r.formstyle,!(o="control-label"))?(t.linklabel||(a+=' for="'+t.id+'"'),void 0!==t.labelDefaultClass?o+=" "+t.labelDefaultClass:"bs3"===f.framework()&&(t.coloffset?o+=" col-sm-"+(3-t.coloffset).toString():o+=" col-sm-3")):["inline","stacked"].includes(r.formstyle)&&(a+=' for="'+t.id+'"',o+=" sr-only"),a+=m.addAll(e,"Label",null,r)+' class="'+o+'">'+t.label,n&&(n=o=void 0,n=r.subschema?((o=t.name.replace(r.subschemaroot,"")).startsWith(".")&&(o=o.substring(1)),"subDoc"):(o=t.name,"record"),r=l(t,e),a+=" <i ".concat(r.join(" "),' id="add_').concat(t.id,'" ng-click="add(\'').concat(o,"', $event, ").concat(n,')" class="').concat(s(),'-plus-sign"></i>')),a+="</label>",t.linklabel)&&(e='<fng-link fld="'+t.name+'" ref="'+t.ref+'" text="'+escape(a)+'"',t.form&&(e+=' form="'+t.form+'"'),t.linktab&&(e+=' linktab="'+t.linktab+'"'),a=e+="></fng-link>"),a},glyphClass:s,allInputsVars:function(e,t,n,r,o,a){var i=t.placeHolder,s="",l="",c="",d="";return"bs3"===f.framework()?(s=-1===["horizontal","vertical","inline"].indexOf(n.formstyle)?" input-sm":"",l="col-sm-"+p.sizeAsNumber(t),d=" form-control"):c=t.size?" input-"+t.size:"",["inline","stacked"].includes(n.formstyle)&&(i=i||t.label),r='data-ng-model="'+r+'"',o&&(r+=' id="'.concat(o,'"')),a?r+=' name="'.concat(a,'"'):o&&(r+=' name="'.concat(o,'"')),i&&(r+=' placeholder="'.concat(i,'"')),t.popup&&(r+=' title="'.concat(t.popup,'"')),t.ariaLabel&&(r+=' aria-label="'.concat(t.ariaLabel,'"')),{common:r+=m.addAll(e,"Field",null,n),sizeClassBS3:l,sizeClassBS2:c,compactClass:s,formControl:d}},inputChrome:function(e,t,n,r){"bs3"===f.framework()&&v(n.formstyle,!0)&&"checkbox"!==t.type&&(e='<div class="bs3-input '+r.sizeClassBS3+'">'+e+"</div>");var o,r=(t.helpInline||"")+(t.helpinline||"");return 0<r.length&&(o="bs2"===f.framework()?{el:"span",cl:"help-inline"}:{el:"div",cl:"help-block"},e+="<".concat(o.el,' class="').concat(o.cl,'">').concat(r,"</").concat(o.el,">")),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){e="<input "+e+'type="'+t.type+'" ';return t.label||t.ariaLabel?n.subschema&&(e+='aria-label="'.concat(t.label?r("titleCase")(n.subschemaroot)+" "+t.label:t.popup||t.name.replace(/\./g," "),'" ')):e+='aria-label="'.concat(t.name.replace(/\./g," "),'" '),"inline"!==n.formstyle||"bs2"!==f.framework()||t.size||(e+='class="input-small"'),e+=" />"},controlDivClasses:function(e,t){var n=[];return v(e.formstyle,!1)&&("bs2"===f.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 e=0<t.length?'<div class="'+t.join(" ")+'">'+e+"</div>":e},handleArrayInputAndControlDiv:function(e,t,n,r,o){var a="bs3"===f.framework()?'ng-class="skipCols($index)" ':"",o=o.subschema?"subDoc"+r.name.replace(o.subschemaroot,""):(o.model||"record")+"."+r.name,i="",n=(i+='<div id="'+r.id+'List" class="'+t.join(" ")+'" '+a+' ng-repeat="arrayItem in '+o+' track by $index">',l(r,n)),n="link"!==r.type?"<i ".concat(n.join(" ")," ng-click=\"remove('").concat(r.name,'\', $index, $event)" id="remove_').concat(r.id,'_{{$index}}" class="').concat(s(),'-minus-sign"></i>'):"",i=i+e.replace("<dms/>",n)+"</div>",a="bs3"===f.framework()?'ng-class="skipCols('+o+'.length)" ':"";return r.help&&(i+='<div class="array-help-block '+t.join(" ")+'" '+a+' id="empty'+r.id+'ListHelpBlock">'+r.help+"</div>"),i},addTextInputMarkup:function(e,t,n){var r="",e=e.formControl.trim()+e.compactClass+e.sizeClassBS2+(t.class?" "+t.class:"");return 0!==e.length&&(r+='class="'+e+'"'),t.add&&(r+=" "+t.add+" "),r+=n},handleReadOnlyDisabled:l,generateArrayElementIdString:b,genDisableableAncestorStr:function(e){return h.getDisableableAncestorAttrs(e)},generateNgShow:g}}e=d.services||(d.services={}),t.$inject=["CssFrameworkService","InputSizeHelperService","AddAllService","SecurityService","$filter"],e.FormMarkupHelperService=t})(fng=fng||{}),(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||{}),(e=>{function t(m){function a(e,t,n,r,o){var a=n.info.name,i=(r&&(null!=o&&o.nonUniqueIdSuffix?(t=t.replace(r,o.nonUniqueIdSuffix),a+=".".concat(o.nonUniqueIdSuffix)):a+=".".concat(r)),m.handleReadOnlyDisabled({id:t,name:a,nonUniqueId:n.info.nonuniqueid,readonly:n.info.readonly},e));if(null!=o&&o.forceNg)for(var s=0;s<i.length;s++)"disabled"===i[s].toLowerCase().trim()&&(i[s]='ng-disabled="true"');return i}function i(e,t,n,r,o){return a(e,t,n,r,o).join(" ")}function p(e,t,n){return m.handlePseudos(e,t,n)}function s(e,t,n){return m.isArrayElement(e,t.info,t.options)?m.generateArrayElementIdString(n,t.info,t.options):n}function l(e,t,n,r){var o=t.info.id;return n&&(n.startsWith("_")||(o+="_"),o+=n),o=r?s(e,t,o):o}function c(e,t,n,r){e=a(e,r,t,n,{forceNg:!0}),r="";if(t=e[0]){t=(t=(t=(t=t.replace("data-ng-disabled","ng-disabled")).replace("data-ng-readonly","ng-readonly")).replace("ng-disabled=",'"ng-disabled":')).replace("ng-readonly=",'"ng-readonly":');try{t="{ ".concat(t," }");(t=JSON.parse(t)["ng-disabled"])&&(r='disabledDate="'.concat(t,'" readonlyTime="').concat(t,'"'))}catch(e){}}return r+" "+e[1]}function h(e,t,n,r){function o(e){var t,e=e.replace(/&quot;/g,'"');return""===e||"true"===e||"false"!==e&&(t=Number(e),!isNaN(t)&&isFinite(t)?t:e)}var a,i,s={},l={formStyle:e.formstyle},c={},d=t?t.length:0,u=null==t?void 0:t.toLowerCase();for(a in e)e.hasOwnProperty(a)&&("fngfld"===(i=a.toLowerCase()).slice(0,6)?s[i.slice(6)]=o(e[a]):"fngopt"===i.slice(0,6)?l[i.slice(6)]=o(e[a]):t&&i.slice(0,d)===u&&(c[_.kebabCase(a.slice(d))]=o(e[a])));var f={info:s,options:l,directiveOptions:c};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 o=l(e,t,n,!1),a=s(e,t,o);return'id="'.concat(a,'" ').concat(i(e,o,t,n,r))}return{extractFromAttr:h,buildInputMarkup:function(e,t,n,r){var o,a,i,s,l,c,d,u=n.processedAttrs||h(t,"",e),f={},u=(n.ignoreFieldInfoFromAttrs||Object.assign(f,u.info),n.fieldInfoOverrides&&Object.assign(f,n.fieldInfoOverrides),Object.assign({},u.options,n.optionOverrides)),p=m.fieldChrome(e,f,u);return p.omit?"":(o=m.controlDivClasses(u,f),a=p.template+m.label(e,f,n.addButtons,u),i=f.id,(f.array||u.subschema)&&(i=m.generateArrayElementIdString(i,f,u)),l=n.addButtons?"arrayItem"+(n.needsX?".x":""):t.model+"."+f.name,s=f.name,u.subschema&&-1!==f.name.indexOf(".")&&(t=t.model+".",c=u.subschemaroot,d=f.name.slice(c.length+1),l=t+c,u.subkey?(i=l.slice(t.length).replace(/\./g,"-")+"-subkey"+u.subkeyno+"-"+d,l+="[$_arrayOffset_"+c.replace(/\./g,"_")+"_"+u.subkeyno+"]."+d):(l+="[$index]."+d,s=f.name.replace(/\./g,"-"))),(t=m.allInputsVars(e,f,u,l,i,s)).modelString=l,t.disableableAncestorStr=m.genDisableableAncestorStr(f.id),c=r(t),d=m.inputChrome(c,f,u,t),n.addButtons?a+=m.handleArrayInputAndControlDiv(d,o,e,f,u):a+=m.handleInputAndControlDiv(d,o),a+p.closeTag)},genIdString:function(e,t,n){return l(e,t,n,!0)},genDisabledStr:function(e,t,n,r){return i(e,l(e,t,n,!1),t,n,r)},genIdAndDisabledStr:r,genDateTimePickerDisabledStr:function(e,t,n){return c(e,t,n,l(e,t,n,!1))},genDateTimePickerIdAndDisabledStr:function(e,t,n){var r=l(e,t,n,!1),o=s(e,t,r);return'id="'.concat(o,'" ').concat(c(e,t,n,r))},genUiSelectIdAndDisabledStr:function(e,t,n){return r(e,t,n,{forceNg:!0})},handlePseudos:p,genDisableableAncestorStr:function(e){return m.genDisableableAncestorStr(e.info.id)}}}e=e.services||(e.services={}),t.$inject=["FormMarkupHelperService"],e.PluginHelperService=t})(fng=fng||{}),(O=>{var e;function t(a,d,i,u,l,c,f,m,s){var e=this,p=function(e){return(e=void 0===e?function(e){return Math.floor(e).toString(16)}:e)(Date.now()/1e3)+" ".repeat(16).replace(/./g,function(){return e(16*Math.random())})};function h(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 y(e,t,n,r){var o=v(e,t,n,!!r);if(o.lastObject&&o.key)if(r)if(angular.isArray(o.lastObject))for(var a=0;a<o.lastObject.length;a++)o.lastObject[a][o.key]=r[a];else o.lastObject[o.key]=r;else delete o.lastObject[o.key]}function g(t,n,e,r){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:A(t,e,n[b(t,"Options")],n[b(t,"_ids")])}),r=w(e.master,t.name))&&y(n.record,t.name,void 0,r)}var v=function(e,t,n,r){void 0===r&&(r=!1);for(var o=t.split("."),a=o.length-1,i=e,s=0;s<a;s++){if(!i)throw new Error("walkTree failed: Object = ".concat(e,", fieldname = ").concat(t,", i = ").concat(s));if(i=angular.isArray(i)?_.map(i,function(e){return e[o[s]]}):(r&&!i[o[s]]&&(i[o[s]]={}),i[o[s]]),angular.isArray(i)&&void 0!==n)if(n.scope&&"function"==typeof n.scope)i=i[n.scope().$index];else{if("number"!=typeof n)throw new Error("Unsupported element type in walkTree "+t);i=i[n]}if(!i)break}return{lastObject:i,key:i?o[a]:void 0}},w=function(e,t,n){var r,o=v(e,t,n);return r=o.lastObject&&o.key?angular.isArray(o.lastObject)?_.map(o.lastObject,function(e){return e[o.key]}):o.lastObject[o.key]:r};function k(e,t,n,r){if(void 0===n&&(n=null),(i=w(e,t)||"")&&n){var o=_.find(n,function(e){return e.name===t});if(o)switch(o.params){case void 0:break;case"timestamp":var a=i.toString().substring(0,8),a=new Date(1e3*parseInt(a,16)),i=a.toLocaleDateString()+" "+a.toLocaleTimeString();break;default:i=r.dataEventFunctions[o.params](e)}}return i}function S(e,t,n){r=[(e=(e=e).split("."))[0]],1<e.length&&r.push(e.slice(1).join("."));var r,e=r;if(1<e.length){var o=e[1],a=t[e[0]],i=n;if(void 0!==a)if(angular.isArray(a))for(var s=0;s<a.length;s++)S(o,a[s],i);else S(o,a,i)}else if(t[e[0]]){var l=t[e[0]];if(angular.isArray(l))for(var c=l.length-1;0<=c;c--){var d=typeof l[c];("undefined"==d||"object"==d&&0===Object.keys(l[c]).length)&&l.splice(c,1)}t[e[0]]=n(l)}}function x(e,t,n,r,o){var a="string"==typeof t?e[t]:t,i="string"==typeof n?e[n]:n;a.length=0,i.length=0,r&&0<r.length&&r.forEach(function(e){var t=e[o];t&&0<t.length&&(a.push(t),e._id||(e._id=p()),i.push(e._id))})}var D=function(e){var t=!1;return t=!e.needsX&&(e.directive||"text"!==e.type&&("select"!==e.type||e.ids))?t:!0};function $(e,t,n){e=e.conversions;return(e=n?w(e,n)||{}:e)[t]}var C=function(e,t,n,r,o,a,i){a=a||t;for(var s=0;s<e.length;s++){var l=e[s],c=l.name.slice(n),d=(c.length||(c=l.name.split(".").pop()),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]=C(l.schema,d[u],1+c.length,r,c,a,u)}else{l.internalRef&&x(r,l.options,l.ids,a[l.internalRef.property],l.internalRef.value);var f=k(t,c,null,r);if(l.array&&D(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]=A(l,d,r[b(l,"Options")],m)):l.select2?(console.log("fng-select2 is deprecated - use fng-ui-select instead"),l.select2):d&&(h=$(r,c,o))&&h.fngajax&&"function"==typeof h.fngajax&&!h.noconvert&&h.fngajax(d,l,function(e,t){y(a,e.name,i,t),F(angular.element("#"+e.id),function(){y(r.record,e.name,i,t)})})}}return t};function A(e,t,n,r){if(e.array||angular.isArray(t)){for(var o=[],a=e.array&&(!e.directive||D(e)),i=0;i<t.length;i++){var s=t[i],s=(s&&s.x&&(s=s.x),E(s,r,n,e.name));o.push(s=a?{x:s}:s)}return o}return e.select2?{id:t,text:E(t,r,n,e.name)}:E(t,r,n,e.name)}function F(e,t){var n=(e=e.inheritedData("$ngModelController"))&&e.$pristine;n&&(e.$pristine=!1),t(),n&&(e.$pristine=!0)}function o(e,t,n){n.master=C(t.formSchema,e,0,t),t.phase="ready",t.cancel()}var N=function(e,t,n,r){e=_.isObject(e)?e.x||e.text:e;if(e&&e.match(/^[0-9a-f]{24}$/))return e;var o=t.indexOf(e);if(-1===o)throw new Error("convertListValueToId: Invalid data - value "+e+" not found in "+t+" processing "+r);return n[o]},E=function(e,t,n,r){"object"==typeof e&&(e=e.id);var o=t.indexOf(e);if(-1===o&&-1===(o=n.indexOf(e)))throw new Error("convertIdToListValue: Invalid data - id "+e+" not found in "+t+" processing "+r);return n[o]};function L(t,n,r,e,o){o&&0<o.length&&o.length===e.length&&n[r]&&-1<(o=o.findIndex(function(e){return e[t.value]===n[r]}))&&(e=e[o][t.value])&&(n[r]=e)}function I(e,f,i,t,p){var n=!f.id&&!f.newRecord;function s(a,u){f.internalLookups.forEach(function(n){var r=a[n.ref.property],o=u[n.ref.property];x(f,n.lookupOptions,n.lookupIds,r,n.ref.value),(r&&0<r.length||o&&0<o.length)&&n.handlers.forEach(function(t){var e;t.possibleArray?(e=w(f.record,t.possibleArray,null))&&0<e.length&&e.forEach(function(e){return L(n.ref,e,t.lastPart,r,o)}):angular.isArray(f.record[t.lastPart])?f.record[t.lastPart].forEach(function(e){L(n.ref,e,"x",r,o)}):L(n.ref,f.record,t.lastPart,r,o)})}),f.listLookups.forEach(function(c){function e(e,t){e=e[t];return e=e&&e.id?e.id:e}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(a,t),t=e(u,t);n!==t&&(n?(t&&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(n){for(var e,r=f[n.formInstructions.options],o=(r.length=0,f[n.formInstructions.ids]),t=(o.length=0,l.data[c.ref.property]||[]),a=0;a<t.length;a++){var i=t[a][c.ref.value],s=_.sortedIndex(r,i);r[s]===i&&(i=i+" ("+t[a]._id+")",s=_.sortedIndex(r,i)),r.splice(s,0,i),o.splice(s,0,t[a]._id)}0===Object.keys(u).length?g(n.formInstructions,f,p,!0):n.oldId?angular.isArray(n.oldId)?n.oldId.forEach(function(e,t){e=o.indexOf(e);y(f.record,n.formInstructions.name,t,-1===e?void 0:r[e])}):-1!==(e=o.indexOf(n.oldId))?y(f.record,n.formInstructions.name,void 0,r[e]):d(n.formInstructions):d(n.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(),s(f.record,{})}function l(e){!0===(null==e?void 0:e.dirty)&&(f.cancel(),setTimeout(function(){f.showError(e.dirtyMessage,"Record Locked")}))}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 c=!0;if(f.newRecord||(f.dropConversionWatcher=f.$watchCollection("conversions",function(e,t){e!==t&&f.originalData&&o(f.originalData,f,p)})),f.$watch("record",function(e,t){var n,r;if("ready"===f.phase&&!f.dirtyChecked&&0<Object.keys(t).length&&f.topLevelFormName&&f[f.topLevelFormName]&&f[f.topLevelFormName].$dirty&&"function"==typeof(null==(n=f.dataEventFunctions)?void 0:n.checkDirty)&&(f.dirtyChecked=!0,"function"==typeof(null==(n=f.dataEventFunctions.checkDirty(e,t))?void 0:n.then)?n.then(function(e){l(e)}):l(n)),0<Object.keys(t).length&&f.dropConversionWatcher&&(r=f.dropConversionWatcher,f.dropConversionWatcher=null,u(function(){r()})),c=i.updateDataDependentDisplay(e,t,c,f),s(e,t),O.formsAngular.title){var o=O.formsAngular.title.prefix||"";if(f.editFormHeader)o+=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;o+=f.getListData(f.record,f.listSchema[a].name)+" "}o=o.trimEnd()+(O.formsAngular.title.suffix||""),d.document.title=o.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);e=f.initialiseNewRecord||a.$$search.r;if(e)try{Object.assign(p.master,JSON.parse(e)),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(o){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)e.data.errors.hasOwnProperty(n)&&(t+="<li><b>"+i("titleCase")(n)+": </b> ","enum"===e.data.errors[n].type?t+="You need to select from the list of values":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.",o.phase="error",o.showError(t)}else{var r;404===e.status?a.search({}).path("/404"):("string"!=typeof(r=e.data)&&(r=JSON.stringify(r)),500!==e.status&&(r=e.status+" "+r),o.showError(r))}}}function T(e,t,n){n.allowLocationChange=!1,t.phase="reading","function"==typeof t.dataEventFunctions.onAfterRead&&t.dataEventFunctions.onAfterRead(e),o(t.originalData=e,t,n)}function r(e,t,n,r){var o=t.name.split("."),a=r.find(function(e){return e.ref.property===n.property&&e.ref.value===n.value}),o={formInstructions:t,lastPart:o.pop(),possibleArray:o.join(".")};a||r.push(a={ref:n,lookupOptions:[],lookupIds:[],handlers:[]}),a.handlers.push(o),e[t.options]=a.lookupOptions,e[t.ids]=a.lookupIds}return{beginReadingRecord:function(e){e.readingRecord=m.readRecord(e.modelName,e.id,e.formName)},convertToAngularModel:function(n){return __awaiter(e,void 0,void 0,function(){var t;return __generator(this,function(e){switch(e.label){case 0:return[4,s.getSchema(n.modelName,n.formName)];case 1:return t=e.sent(),C(t,n.record,0,n),[2]}})})},convertToAngularModelWithSchema:function(t,n,r){return __awaiter(e,void 0,void 0,function(){return __generator(this,function(e){return C(t,n,0,r),[2]})})},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?a.search({}).path("/404"):t.handleHttpError(e)})},scrollTheList:function(t){var n=t.pagesLoaded;m.getPagedAndFilteredList(t.modelName,{aggregate:a.$$search.a,find:a.$$search.f,limit:t.pageSize,skip:n*t.pageSize,order:a.$$search.o,concatenate:!1}).then(function(e){e=e.data;angular.isArray(e)?(!t.listSchema.find(function(e){return"disambiguation"===e.name})&&e.some(function(e){return e.disambiguation})&&t.listSchema.push({name:"disambiguation"}),n===t.pagesLoaded?(t.pagesLoaded++,t.recordList=t.recordList.concat(e)):console.log("DEBUG: infinite scroll component asked for a page twice - the model was "+t.modelName)):t.showError(e,"Invalid query")},t.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),c.redirectTo()("onDelete",n,a)},function(e){var t;404===e.status?c.redirectTo()("onDelete",n,a):403===e.status?n.showError((null==(t=e.data)?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,t,n,r){n.phase="updating",m.updateRecord(n.modelName,n.id,e,n.formName).then(function(e){e=e.data;!1!==e.success?("function"==typeof n.dataEventFunctions.onAfterUpdate&&n.dataEventFunctions.onAfterUpdate(e,r.master),t.redirect?(t.allowChange&&(r.allowLocationChange=!0),d.location=t.redirect):(T(e,n,r),n.setPristine(!1))):n.showError(e)},function(e){var t;null!=(t=null==(t=e.data)?void 0:t.message)&&t.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."),n.handleHttpError(e)})},createNew:function(e,t,n,r){m.createRecord(n.modelName,e,n.formName).then(function(e){e=e.data;!1!==e.success?(r.allowLocationChange=!0,"function"==typeof n.dataEventFunctions.onAfterCreate&&n.dataEventFunctions.onAfterCreate(e),t.redirect?d.location=t.redirect:c.redirectTo()("edit",n,a,e._id)):n.showError(e)},n.handleHttpError)},getListData:k,suffixCleanId:b,getData:w,setData:y,setUpLookupOptions:function(e,o,a,i){var s=a[o.options]=[],l=a[o.ids]=[];(o.filter?m.getPagedAndFilteredList(e,Object.assign({concatenate:!0},o.filter)):m.getAllListAttributes(e)).then(function(e){e=e.data;if(e){e.sort(function(e,t){return e.text.localeCompare(t.text)}),s.push.apply(s,e.map(function(e){return e.text})),l.push.apply(l,e.map(function(e){return e.id}));for(var t=new Set,n=0;n<s.length-1;n++)for(var r=n+1;r<s.length;r++)_.isEqual(s[n],s[r])&&t.add(s[n]);t.forEach(function(e){for(var t=0;t<s.length;t++)s[t]===e&&(s[t]+="("+l[t]+")")}),a.readingRecord&&a.readingRecord.then(function(){g(o,a,i)})}}).catch(function(e){a.handleHttpError(e)})},setUpLookupListOptions:function(a,i,s,l){var c=s[i.options]=[],d=s[i.ids]=[];"$"===a.id[0]?r(s,i,a,s.listLookups):m.readRecord(a.collection,s.$eval(a.id)).then(function(e){for(var t=e.data[a.property],n=0;n<t.length;n++){var r=t[n][a.value],o=_.sortedIndex(c,r);c[o]===r&&(r=r+" ("+t[n]._id+")",o=_.sortedIndex(c,r)),c.splice(o,0,r),d.splice(o,0,t[n]._id)}g(i,s,l)})},handleInternalLookup:function(e,t,n){r(e,t,n,e.internalLookups)},preservePristine:F,convertToMongoModel:function d(u,f,p,m,h){function g(e,t){var n;return t&&t.fngajax?e&&(n=e.id||e):e&&(n=e.text||(e.x?e.x.text:e)),n}for(var e=function(){var s=u[v],e=s.name.slice(p),t=k(f,e,null,m);if(s.schema){if(t)for(var n=0;n<t.length;n++)t[n]=d(s.schema,t[n],1+e.length,m,e)}else{if(s.array&&D(s)&&t)for(var r=0;r<t.length;r++)t[r]=t[r].x;var l=m[b(s,"_ids")];if(l&&0<l.length)S(e,f,function(e){var t=s,n=e,r=m[b(s,"Options")],o=l;if(t.array){for(var a=[],i=0;i<n.length;i++)a.push(N(n[i],r,o,t.name));return a}return N(n,r,o,t.name)});else{var o=$(m,e,h);if(o){var a=w(f,e,null),i=void 0;if(s.array){if(i=[],a)for(var c=0;c<a.length;c++)i[c]=g(a[c],o)}else i=g(a,o);y(f,e,null,i)}}}},v=0;v<u.length;v++)e();return f},convertIdToListValue:E,handleError:t,decorateScope:function(s,n,r,o){s.handleHttpError=t(s),s.cancel=function(){angular.copy(o.master,s.record),s.$broadcast("fngCancel",s),u(function(){s.setPristine(),s.$broadcast("fngCancelFinished",s)})},s.$on("showErrorMessage",function(e,t){e.defaultPrevented||(e.defaultPrevented=!0,s.showError(t.body,t.title))}),s.showError=function(t,e){s.errorHideTimer&&s.clearTimeout(),s.errorMessage&&-1===s.errorMessage.indexOf(t)?s.errorMessage+="<br /><br />":s.errorMessage="",s.errorMessage+=(()=>{if(u(function(){s.phase="ready"},25),"string"==typeof t)return l.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}})(),s.alertTitle=e||"Error!",s.errorHideTimer=window.setTimeout(function(){s.dismissError(),s.$digest()},3500+1e3*(s.alertTitle+s.errorMessage).length/50),s.errorVisible=!0,window.setTimeout(function(){s.$digest()})},s.clearTimeout=function(){s.errorHideTimer&&(clearTimeout(s.errorHideTimer),delete s.errorHideTimer)},s.dismissError=function(){s.clearTimeout,s.errorVisible=!1,delete s.errorMessage,delete s.alertTitle},s.stickError=function(){clearTimeout(s.errorHideTimer)},s.prepareForSave=function(t){var n=r.convertToMongoModel(s.formSchema,angular.copy(s.record),0,s);s.id?"function"==typeof s.dataEventFunctions.onBeforeUpdate?s.dataEventFunctions.onBeforeUpdate(n,o.master,function(e){e?t(e):t(null,n)}):t(null,n):"function"==typeof s.dataEventFunctions.onBeforeCreate?s.dataEventFunctions.onBeforeCreate(n,function(e){e?t(e):t(null,n)}):t(null,n)},s.save=function(n){n=n||{},s.redirectOptions=n,s.prepareForSave(function(e,t){e?"_update_handled_"!==e&&u(function(){s.showError(e)}):s.id?r.updateDocument(t,n,s,o):r.createNew(t,n,s,o)})},s.newClick=function(){c.redirectTo()("new",s,a)},s.$on("$locationChangeStart",function(e,t){o.allowLocationChange||s.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?s.save({redirect:t,allowChange:!0}):(o.allowLocationChange=!0,d.location=t)}).catch(h))}),setTimeout(function(){window.onunload=function(){var e;"function"==typeof(null==(e=s.dataEventFunctions)?void 0:e.isLocked)&&null!=(e=s.dataEventFunctions)&&e.isLocked()&&"function"==typeof(null==(e=s.dataEventFunctions)?void 0:e.releaseLock)&&null!=(e=s.dataEventFunctions)&&e.releaseLock()},window.onbeforeunload=function(e){var t;(!o.allowLocationChange&&!s.isCancelDisabled()||"function"==typeof(null==(t=s.dataEventFunctions)?void 0:t.isLocked)&&null!=(t=s.dataEventFunctions)&&t.isLocked())&&(confirm("You have unsaved changes. Do you really want to lose them?")?"function"==typeof(null==(t=s.dataEventFunctions)?void 0:t.isLocked)&&"function"==typeof(null==(t=s.dataEventFunctions)?void 0:t.releaseLock)&&null!=(t=s.dataEventFunctions)&&t.isLocked()&&null!=(t=s.dataEventFunctions)&&t.releaseLock():e.preventDefault())}}),s.$on("$destroy",function(){window.onbeforeunload=null}),s.deleteClick=function(){s.record._id&&(s.unconfirmedDelete?Promise.resolve(!0):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).then(function(e){function t(){r.deleteRecord(s.id,s,o)}e&&("function"==typeof s.dataEventFunctions.onBeforeDelete?s.dataEventFunctions.onBeforeDelete(o.master,function(e){e?"_delete_handled_"!==e&&s.showError(e):t()}):t())}).catch(h)},s.isCancelDisabled=function(){var e;return!!(s[s.topLevelFormName]&&s[s.topLevelFormName].$pristine||"ready"!==s.phase)||"function"==typeof(null==(e=s.disableFunctions)?void 0:e.isCancelDisabled)&&s.disableFunctions.isCancelDisabled(s.record,o.master,s[s.topLevelFormName])},s.isSaveDisabled=function(){s.whyDisabled=void 0;var e=!1;return s[s.topLevelFormName]?s[s.topLevelFormName].$invalid?(s.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(s.whyDisabled+="<br /><strong>",r&&(s.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()?s.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()?s.whyDisabled+=e.$$element.parent().parent().parent().find("label").text():s.whyDisabled+=e.$name,s.whyDisabled+="</strong>: ",e.$error)for(var t in e.$error)if(e.$error.hasOwnProperty(t))switch(t){case"required":s.whyDisabled+="Field missing required value. ";break;case"pattern":s.whyDisabled+="Field does not match required pattern. ";break;default:s.whyDisabled+=t+". "}})}(s[s.topLevelFormName])):s[s.topLevelFormName].$pristine&&(e=!0):s.whyDisabled="Top level form name invalid",!(!e&&!s.whyDisabled&&"ready"===s.phase)||"function"==typeof(null==(e=s.disableFunctions)?void 0:e.isSaveDisabled)&&(e=s.disableFunctions.isSaveDisabled(s.record,o.master,s[s.topLevelFormName]),s.whyDisabled="string"==typeof e?e:"An application level user-specified function is inhibiting saving the record",!!e)},s.isDeleteDisabled=function(){var e;return!s.id||"ready"!==s.phase||"function"==typeof(null==(e=s.disableFunctions)?void 0:e.isDeleteDisabled)&&s.disableFunctions.isDeleteDisabled(s.record,o.master,s[s.topLevelFormName])},s.isNewDisabled=function(){var e;return"function"==typeof(null==(e=s.disableFunctions)?void 0:e.isNewDisabled)&&s.disableFunctions.isNewDisabled(s.record,o.master,s[s.topLevelFormName])},s.setDefaults=function(e,o){void 0===o&&(o="");var a={};return e.forEach(function(e){if(void 0!==e.defaultValue){for(var t=e.name.replace(o,"").split("."),n=a,r=0;r<t.length-1;r++)n[t[r]]||(n[t[r]]={}),n=n[t[r]];n[t[t.length-1]]=e.defaultValue}}),a},s.getVal=function(e,t){if(-1===e.indexOf("$index")||void 0!==t)return e=e.replace(/\$index/g,t),s.$eval("record."+e)},s.sortableOptions={update:function(e,t){e.target.hasAttribute("disabled")?t.item.sortable.cancel():s.topLevelFormName&&s[s.topLevelFormName].$setDirty()}},s.setUpCustomLookupOptions=function(e,t,n,r){for(var o=0,a=[s,r];o<a.length;o++){var i=a[o];i&&(i[e.ids]=t,i[e.options]=n)}r=w(s.record,e.name);r&&(r=A(e,r=Array.isArray(r)?r.filter(function(e){return null!=e}):r,n,t),y(s.record,e.name,void 0,r))}},fillFormFromBackendCustomSchema:I,fillFormWithBackendSchema:function(t,n,r,o){s.getSchema(t.modelName,t.formName).then(function(e){I(e.data,t,n,r,o)},t.handleHttpError)}}}e=O.services||(O.services={}),t.$inject=["$location","$window","$filter","$timeout","$sce","RoutingService","CssFrameworkService","SubmissionsService","SchemasService"],e.RecordHandlerService=t})(fng=fng||{}),(e=>{function t(n){return{getSchema:function(e,t){return n.get("/api/schema/"+e+(t?"/"+t:""),{cache:!0})}}}e=e.services||(e.services={}),t.$inject=["$http"],e.SchemasService=t})(fng=fng||{}),(d=>{var e;function t(r){function o(e){return!!d.formsAngular.elemSecurityFuncBinding&&("hidden"===e&&!!d.formsAngular.hiddenSecurityFuncName||"disabled"===e&&!!d.formsAngular.disabledSecurityFuncName)}function a(e,t){return o(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 i(e,t){return r[d.formsAngular.disabledSecurityFuncName](e,t)}function s(e,t){return!!i(e,t)}function l(){return"one-time"===d.formsAngular.elemSecurityFuncBinding?"::":""}function t(e,t){return e&&t&&(n=e,null==(r=d.formsAngular.ignoreIdsForHideableOrDisableableAttrs)||!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:o,canDoSecurityNow:a,isSecurelyHidden:n,isSecurelyDisabled:s,getHideableAttrs:c,getDisableableAttrs:e,getDisableableAncestorAttrs:function(e){return t(e,d.formsAngular.disableableAncestorAttr)},decorateSecurableScope:function(e,t){o("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)}),o("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],e.requiresDisabledChildren=function(e){return"+"===i(e,null==t?void 0:t.pseudoUrl)})},doSecurityWhenReady:function(t){var n;a(void 0,"hidden")?t():o("hidden")&&(n=r.$watch(d.formsAngular.hiddenSecurityFuncName,function(e){e&&(n(),t())}))},considerVisibility:function(e,t){var n=c(e);if(a(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){return a(t,"hidden")?"instant"===d.formsAngular.elemSecurityFuncBinding?e.some(function(e){return!t.isSecurelyHidden(e)})?{}:{omit:!0}:(e=e.map(function(e){return"!isSecurelyHidden('".concat(e,"')")}),{visibilityAttr:'data-ng-if="'.concat(l(),"(").concat(e.join(" || "),')"')}):{}},generateDisabledAttr:function(n,r,o){return(()=>{var e="";if(a(r,"disabled")){if((o=o||{}).attrRequiresValue&&o.forceNg)throw new Error("Invalid combination of parameters provided to generateDisabledAttr() [attrRequiresValue and forceNg]");var t=o.attr||"disabled";if("instant"===d.formsAngular.elemSecurityFuncBinding){if(r.isSecurelyDisabled(n)){if(o.attrRequiresValue)return" ".concat(t,'="true"');if(!o.forceNg)return" ".concat(t);e="true"}}else e="".concat(l(),"isSecurelyDisabled('").concat(n,"')");if(e)return("disabled"===t?' data-ng-disabled="':" data-ng-attr-".concat(t,'="')).concat(e,'"')}return e})()+e(n)}}}e=d.services||(d.services={}),t.$inject=["$rootScope"],e.SecurityService=t})(fng=fng||{}),(()=>{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})()),formsAngular=((e=>{function t(o){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,a=new ExpirationCache;function i(e,t,n){e="/api/".concat(e);return t&&(e+="/".concat(t)),n&&(e+="/".concat(n)),e}return{getListAttributes:function(e,t,n){var r="string"!=typeof 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)));t=n?"?returnRaw=1":"";return o.get("/api/".concat(e,"/").concat(r,"/list").concat(t),{cache:a})},getAllListAttributes:function(e){return o.get("/api/".concat(e,"/listAll"),{cache:a})},getAllPickListAttributes:function(e){return o.get("/api/".concat(e,"/picklistAll"),{cache:a})},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),o.get("/api/".concat(e,"/listAll").concat(n(t)))},getPagedAndFilteredListFull:function(e,t){return o.get("/api/".concat(e).concat(n(t)))},readRecord:function(e,t,n){var r="string"!=typeof 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)));t=i(e,n,r);return o.get(t)},getAll:function(e,t){t=angular.extend({cache:!!r&&a},t);return o.get("/api/".concat(e),t)},deleteRecord:function(e,t,n){e=i(e,n,t);return o.delete(e)},updateRecord:function(e,t,n,r){a.remove("/api/".concat(e));e=i(e,r,t);return o.post(e,n)},createRecord:function(e,t,n){a.remove("/api/".concat(e));e=i(e,n)+"/new";return o.post(e,t)},useCache:function(e){r=e},getCache:function(){return!!a},clearCache:function(){a.removeAll()}}}e=e.services||(e.services={}),t.$inject=["$http"],e.SubmissionsService=t})(fng=fng||{}),(u=>{var e;function t(t,n,e,r,o,a,i,s,l){t.sharedData={record:{},disableFunctions:{},dataEventFunctions:{},modelControllers:[]};var c={master:{},fngInvalidRequired:"fng-invalid-required",allowLocationChange:!0},i=(t.errorVisible=!1,angular.extend(t,i.parsePathFunc()(e.$$path)),r("titleCase")(t.modelName,!0));function d(){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")})}a.loadControllerAndMenu(t.sharedData,i,0,!1,t.$new()),t.formName&&a.loadControllerAndMenu(t.sharedData,i+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,o,l,c),"function"==typeof u.formsAngular.beforeProcess?u.formsAngular.beforeProcess(t,function(e){e?t.showError(e.message,"Error preparing to process form"):d()}):d()}e=u.controllers||(u.controllers={}),t.$inject=["$scope","$rootScope","$location","$filter","$uibModal","FngModelCtrlService","RoutingService","FormGeneratorService","RecordHandlerService"],e.BaseCtrl=t})(fng=fng||{}),(e=>{function t(e,t){e.yes=function(){t.close(!0)},e.no=function(){t.close(!1)},e.cancel=function(){t.dismiss("cancel")}}e=e.controllers||(e.controllers={}),t.$inject=["$scope","$uibModalInstance"],e.SaveChangesModalCtrl=t})(fng=fng||{}),(e=>{function t(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)}}e=e.controllers||(e.controllers={}),t.$inject=["$scope","$http","$location","RoutingService"],e.ModelCtrl=t})(fng=fng||{}),(d=>{var e;function t(o,e,i,r,t,n,a){var s;function l(e){i.contextMenu=e;var t="".concat(_.camelCase(e),"ContextMenu");i.contextMenuId=void 0,a.doSecurityWhenReady(function(){i.contextMenuId=t,i.contextMenuHidden=a.isSecurelyHidden(i.contextMenuId),i.contextMenuDisabled=a.isSecurelyDisabled(i.contextMenuId)})}i.clearContextMenu=function(){i.items=[],i.contextMenu=void 0,i.contextMenuId=void 0,i.contextMenuHidden=void 0,i.contextMenuDisabled=void 0},(o.navScope=i).clearContextMenu(),i.toggleCollapsed=function(){i.collapsed=!i.collapsed},i.isCollapsed=!0,i.showShortcuts=!1,i.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=d.formsAngular.keyboardShortCuts)&&s.forEach(function(e){i.shortcuts.push({key:"Ctrl+Shift+"+e.letter,act:e.desc})}),i.markupShortcut=function(e){return'<span class="key">'+e.split("+").join('</span> + <span class="key">')+"</span>"},i.globalShortcuts=function(n){function t(e){var t=document.getElementById(e);t&&(t.disabled||setTimeout(function(){t.click()}),n.preventDefault())}var e,r,o=n.ctrlKey&&n.shiftKey&&!n.altKey&&!n.metaKey;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)?27===n.keyCode&&(o||i.showShortcuts)?o?t("cancelButton"):i.showShortcuts=!1:o&&(83===n.keyCode?t("saveButton"):45===n.keyCode?t("newButton"):88===n.keyCode?t("deleteButton"):d.formsAngular.keyboardShortCuts&&d.formsAngular.keyboardShortCuts.forEach(function(e){n.keyCode===e.keycode&&t(e.id)})):n.ctrlKey||!n.shiftKey?(r=document.getElementById("searchinput"))&&(r.focus(),n.preventDefault()):i.showShortcuts=!0},i.css=function(e,t){e="function"==typeof n[e]?n[e](t):"error text-error";return e},i.$on("fngControllersLoaded",function(e,t,n){l(t.dropDownDisplay||t.modelNameDisplay||r("titleCase")(n,!1)),t.dropDownDisplayPromise&&t.dropDownDisplayPromise.then(function(e){l(e)})}),i.$on("fngControllersUnloaded",function(e){i.clearContextMenu()}),i.doClick=function(e,t,n){var r=angular.element(t.target);if((n=n||i.items[e]).divider||r.parent().hasClass("disabled"))t.preventDefault();else if(n.broadcast)o.$broadcast(n.broadcast,Object.assign({},n.args));else if("function"==typeof n.fn)n.fn.apply(n,n.args||[]);else if(n.fn)throw new Error("Incorrect menu setup")},i.isHidden=function(e){function t(e){return!!e.isHidden&&e.isHidden()}var n=!1,r=i.items[e];if(r.divider)if(0===e)n=!0;else for(var o=!1,a=e-1;0<=a&&!n&&!o;)i.items[a].divider?n=!0:t(i.items[a])?--a:o=!0;return n||t(r)},i.isDisabled=function(e){return!!i.items[e].isDisabled&&i.items[e].isDisabled()},i.buildUrl=function(e){return t.buildUrl(e)},i.dropdownClass=function(e){var t="";return i.items[e].divider?t="divider":i.isDisabled(e)&&(t="disabled"),t};var c=e.document.title;i.$on("$routeChangeSuccess",function(){e.document.title=c})}e=d.controllers||(d.controllers={}),t.$inject=["$rootScope","$window","$scope","$filter","RoutingService","CssFrameworkService","SecurityService"],e.NavCtrl=t})(fng=fng||{}),(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||{}),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&#8230;</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&#8230;</div>\n <div ng-hide="!showSpinner" class="spinner">Just a second&#8230;</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&#8230;</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&#8230;</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&#8230;</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')}]);
@@ -1013,8 +1013,9 @@ class FormsAngular {
1013
1013
  }
1014
1014
  hackVariablesInPipeline(runPipeline) {
1015
1015
  for (let pipelineSection = 0; pipelineSection < runPipeline.length; pipelineSection++) {
1016
- if (runPipeline[pipelineSection]["$match"]) {
1017
- this.hackVariables(runPipeline[pipelineSection]["$match"]);
1016
+ let sectionType = Object.keys(runPipeline[pipelineSection])[0];
1017
+ if (["$match", "$group", "$project"].includes(sectionType)) {
1018
+ this.hackVariables(runPipeline[pipelineSection][sectionType]);
1018
1019
  }
1019
1020
  }
1020
1021
  }
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "description": "A form builder that sits on top of Angular.js, Twitter Bootstrap, jQuery UI, Angular-UI, Express and Mongoose. Opinionated or what?",
8
8
  "homepage": "http://forms-angular.org",
9
- "version": "0.12.0-beta.315",
9
+ "version": "0.12.0-beta.316",
10
10
  "engines": {
11
11
  "node": ">=8.x",
12
12
  "npm": ">=5.x"