forms-angular 0.12.0-beta.323 → 0.12.0-beta.325
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.
|
@@ -3907,6 +3907,7 @@ var fng;
|
|
|
3907
3907
|
// Convert mongodb json to what we use in the browser, for example {_id:'xxx', array:['item 1'], lookup:'012abcde'} to {_id:'xxx', array:[{x:'item 1'}], lookup:'List description for 012abcde'}
|
|
3908
3908
|
// This will currently only work for a single level of nesting (conversionObject will not go down further without amendment, and offset needs to be an array, at least)
|
|
3909
3909
|
var convertToAngularModel = function (schema, anObject, prefixLength, $scope, schemaName, master, offset) {
|
|
3910
|
+
var _a;
|
|
3910
3911
|
master = master || anObject;
|
|
3911
3912
|
for (var i = 0; i < schema.length; i++) {
|
|
3912
3913
|
var schemaEntry = schema[i];
|
|
@@ -3934,7 +3935,7 @@ var fng;
|
|
|
3934
3935
|
if (schemaEntry.array &&
|
|
3935
3936
|
simpleArrayNeedsX(schemaEntry) &&
|
|
3936
3937
|
thisField &&
|
|
3937
|
-
!(thisField.length > 0 && thisField[0].x) // Don't keep on coverting
|
|
3938
|
+
!(thisField.length > 0 && ((_a = thisField[0]) === null || _a === void 0 ? void 0 : _a.x)) // Don't keep on coverting
|
|
3938
3939
|
) {
|
|
3939
3940
|
for (var k = 0; k < thisField.length; k++) {
|
|
3940
3941
|
thisField[k] = { x: thisField[k] };
|
|
@@ -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{o(l.next(e))}catch(e){t(e)}}function a(e){try{o(l.throw(e))}catch(e){t(e)}}function o(e){var t;e.done?n(e.value):((t=e.value)instanceof s?t:new s(function(e){e(t)})).then(r,a)}o((l=l.apply(e,i||[])).next())})},__generator=this&&this.__generator||function(r,a){var o,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(o)throw new TypeError("Generator is already executing.");for(;l=c&&t[c=0]?0:l;)try{if(o=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=a.call(r,l)}catch(e){t=[6,e],i=0}finally{o=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,a=0,o=t.length;a<o;a++)!r&&a in t||((r=r||Array.prototype.slice.call(t,0,a))[a]=t[a]);return e.concat(r||Array.prototype.slice.call(t))},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(a){return{restrict:"AE",replace:!0,link:function(e,t){var n=t[0].parentElement,r=a(' <a ng-show="choice.text || choice.textFunc" class="dropdown-option open-sub-menu" data-ng-mouseenter="mouseenter()"> {{ choice.text || choice.textFunc() }} </a> <ul class="uib-dropdown-menu dropdown-menu sub-menu"> <li ng-repeat="choice in choice.items" ng-attr-id="{{choice.id}}"> <drop-down-item data-ng-if="::!choice.items"></drop-down-item> <drop-down-sub-menu data-ng-if="::choice.items"></drop-down-sub-menu> </li> </ul>')(e);t.replaceWith(r),e.mouseenter=function(){var e=n.getBoundingClientRect(),t=r[2].getBoundingClientRect().height-5;t>e.top&&(t-=t-e.top+e.height),t-=e.height,r[2].style.top="-".concat(t,"px")}}}}function r(e){var t,n,r="isHidden($index)",a='ng-class="dropdownClass($index)"',o="normal"!==s.formsAngular.elemSecurityFuncBinding,i=o?"::":"";return e.canDoSecurity("hidden")?(t='ng-if="contextMenuId && !contextMenuHidden" '.concat(e.getHideableAttrs("{{ ::contextMenuId }}")),o?r='ng-if="::(choice.divider || !isSecurelyHidden(choice.id))" ng-hide="'.concat(r,'"'):"normal"===s.formsAngular.elemSecurityFuncBinding&&(r='ng-hide="'.concat(r,' || (!choice.divider && isSecurelyHidden(choice.id))"')),r+=" ".concat(e.getHideableAttrs("{{ ::choice.id }}"))):(t="",r='ng-hide="'.concat(r,'"')),e.canDoSecurity("disabled")?(n='disableable-link ng-disabled="contextMenuDisabled" '.concat(e.getDisableableAttrs("{{ ::contextMenuId }}")),a+=' class="{{ '.concat(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(a,">")+' <drop-down-item data-ng-if="!choice.items"></drop-down-item> <drop-down-sub-menu data-ng-if="choice.items"></drop-down-sub-menu> </li> </ul></li>'}}e=s.directives||(s.directives={}),t.$inject=["$compile"],n.$inject=["$compile"],r.$inject=["SecurityService"],e.dropDownItem=t,e.dropDownSubMenu=n,e.modelControllerDropdown=r})(fng=fng||{}),(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(a){a.checkNotModal=function(){for(var e,t=a.element[0],n=!1,r={preventDefault:angular.noop,stopPropagation:angular.noop,target:1,currentTarget:1};(e=t.parentNode)?"function"==typeof e.getAttribute&&e.getAttribute("uib-modal-window")?(angular.element(t).scope().close(r),n=!0):t=e:n=!0,!n;);}}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 a=r.ref,t=r.text&&unescape(r.text)!==r.text,o=r.form,i=r.linktab;if(n.readonly=r.readonly,n.element=e,o=o?o+"/":"",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(a+"/"+o+(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(a+"/"+o+e+"/edit"+i),n.text||u.getListAttributes(a,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 a(){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 o,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,o=s.replace(/\./g,"-")))):e+=t.name),I.allInputsVars(y,t,r,e,u,o)),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=a(),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=a(),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,a=0;a<y.tabs.length;a++)if(y.tabs[a].title===e.title){r=a;break}0<=r?(o="".concat(_.camelCase(e.title),"Tab"),(n=l.considerVisibility(o,y)).omit?t.omit=!0:(s='id="'.concat(o,'"'),n.visibilityAttr&&(s+=" ".concat(n.visibilityAttr)),s+=l.generateDisabledAttr(o,y,{attr:"disable",attrRequiresValue:!0}),t.before="",n=e.title.replace(/["']/g,""),e.hideable?(i="customTemplate_".concat(o,".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> ")+' <button name="hide_'.concat(o,'_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 o="addTabsTab",i="customTemplate_".concat(o,"_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(o,".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(o,'">')+' <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"'),a='<div class="inline-col-headers" style="display:flex" '.concat(r,">"),o=0,i=e;o<i.length;o++){var s=i[o];$(s,t),a+="<div ",s.showWhen=s.showWhen||s.showwhen,s.showWhen&&("string"==typeof s.showWhen?a+='ng-show="'+s.showWhen+'"':a+='ng-show="'+I.generateNgShow(s.showWhen,n)+'"'),s.id&&"function"==typeof s.id.replace&&(a+=' id="col_label_'+s.id.replace(/\./g,"-")+'"'),a+=' class="inline-col-header"><label for="'.concat(s.id,'" class="control-label">').concat(s.label,"</label></div>")}return a+="</div>"},D=function(e,t){var n=I.fieldChrome(y,e,t);if(n.omit)return"";var r=n.template;if(e.schema){var a,o,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"):(a=(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,a,"always"===e.inlineHeaders)),f=I.handleReadOnlyDisabled(e,y)[0],p=e.sortable&&"disabled"!==f.trim().toLowerCase()?"".concat(f,' ui-sortable="sortableOptions" ng-model="').concat(a,'"'):"",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(a,' 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&&(o=y[e.subDocContainerType]||e.subDocContainerType,o=Object.assign({containerType:o},e.subDocContainerProps),s=x(o)),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||(o="",(s="string"==typeof e.customFooter)&&(o=e.customFooter),m=(i="").concat(a,".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,'"'):"",o+="<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&&(o+="<span ".concat(m,' class="none_indicator" id="no_').concat(e.id,'_indicator">None</span>'),s||(i="".concat(a,".length > 0"),i=!0===e.noAdd?'ng-hide="'.concat(i,'"'):e.noAdd?'ng-hide="'.concat(e.noAdd," && ").concat(i,'"'):"")),""===o)||("bs3"===E.framework()?r+="<div ".concat(i,' class="row schema-foot"><div class="col-sm-offset-3">').concat(o,"</div></div>"):r+="<div ".concat(i,' class = "schema-foot ">').concat(o,"</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 a=0;a<e.length;a++){var o=e[a],i=(n.viewform&&((o=angular.copy(o)).readonly=!0),0===a&&t&&!n.schema.match(/\$_schema_/)&&"object"!=typeof o.add&&(o.add=o.add?" "+o.add+" ":"",-1!==o.add.indexOf("ui-date")||n.noautofocus||o.containerType||(o.add=o.add+"autofocus ")),!0);if(o.directive){var s=o.directive,l=o.customHeader||"",c=(l+="<"+s+' model="'+(n.model||"record")+'"',w[0]);$(o,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_"+o.name).replace(/\./g,"_");y[f]=angular.copy(o),delete y[f].directive,l+=' schema="'+f+'"';break;default:l+=" "+u.nodeName+'="'+u.value+'"'}}l+=" ";var p,m=F("camelCase")(o.directive);for(p in o)if(o.hasOwnProperty(p))switch(p){case"directive":case"schema":break;case"add":switch(typeof o.add){case"string":l+=" "+o.add;break;case"object":for(var h in o.add)o.add.hasOwnProperty(h)&&(l+=" "+h+'="'+o.add[h].toString().replace(/"/g,""")+'"');break;default:throw new Error("Invalid add property of type "+typeof o.add+" in directive "+o.name)}break;case m:for(var g in o[p])o[p].hasOwnProperty(g)&&(l+=" ".concat(o.directive,"-").concat(g,'="'),"string"==typeof o[p][g]?l+="".concat(o[p][g].replace(/"/g,"""),'"'):l+="".concat((JSON.stringify(o[p][g])||"").replace(/"/g,"""),'"'));break;default:o[p]&&("string"==typeof o[p]?l+=" fng-fld-"+p+'="'+o[p].replace(/"/g,""")+'"':l+=" fng-fld-"+p+'="'+(JSON.stringify(o[p])||"").replace(/"/g,""")+'"')}for(p in n)n.hasOwnProperty(p)&&"$"!==p[0]&&void 0!==n[p]&&(l+=" fng-opt-"+p+'="'+n[p].toString().replace(/"/g,""")+'"');r+=l=(l+='ng-model="'+o.name+'"></'+s+">")+(o.customFooter||""),i=!1}else if(o.containerType){var v,b=x(o);switch(o.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(o.content,null,n))+b.after);break;case"tabset":k=T.Y,r=(r=(r+=b.before)+C(o.content,null,n))+b.after;break;default:r=(r=(r+=b.before)+C(o.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===o.name}))&&(i=!1);i&&($(o,n),r+=D(o,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.$on("selectTab",function(e,t){var n;Array.isArray(y.tabs)&&-1!==(n=y.tabs.findIndex(function(e){return e.title===t}))&&(y.activeTabNo=n,e.preventDefault())}),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}),a=0,o=r;a<o.length;a++){if((i=o[a]).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,a=b[n],o=angular.isArray(a.subkey)?a.subkey:[a.subkey],i=a.name.split("."),s=h;1<i.length;)s=s[i.shift()]||{};for(var s=s[i[0]]=s[i[0]]||[],l=0;l<o.length;l++){if(o[l].selectFunc){if(!y[o[l].selectFunc]||"function"!=typeof y[o[l].selectFunc])throw new Error("Subkey function "+o[l].selectFunc+" is not properly set up");f=y[o[l].selectFunc](h,a)}else{if(!o[l].keyList)throw new Error("Invalid subkey setup for "+a.name);var c,d,u,f,p=o[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"===o[l].onNotFound?(c="Cannot find matching "+(o[l].title||o[l].path),N(function(){y.showError(c,"Unable to set up form correctly")}),-1):(d=(u=a.name.split(".")).pop(),u=u.join("."),(u?h[u]:h)[d].push(p)-1))}y["$_arrayOffset_"+a.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,a){function o(){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?a.html5hash()+e.url.replace("|id|",e.id):a.buildOperationUrl("edit",e.resource,void 0,e.id,e.resourceTab)}n.$watch("searchTarget",function(e){e&&0<e.length?(i=n.testTime||(new Date).valueOf(),t.get("/api/search?q="+e.replaceAll("+","%2b")+"&sentAt="+i).then(function(e){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=a.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":""):o())},function(e){console.log("Error in searchbox.js : "+e.data+" (status="+e.status+")")})):o()},!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 a,o,i=[],s=[];if(r="addAll"+r,"string"==typeof n)for(a=n.split(" "),o=0;o<a.length;o++)s.push(a[o]);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(a=t[r].split(" "),o=0;o<a.length;o++)0===a[o].indexOf("class=")?s.push(a[o].substring(6,a[o].length)):i.push(a[o]);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,a){function o(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]=a).$parent);l.items=l.items||[];try{c(t,s),i=l.newRecord?"creating":l.id?"editing":"listing",angular.isObject(s.$scope.contextMenu)&&(o(s.$scope.contextMenu),s.$scope.contextMenuPromise)&&s.$scope.contextMenuPromise.then(o),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 a,r,i={hashPrefix:"",html5Mode:!1,routing:"ngroute",prefix:""},s=["edit","view"],o=[{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){a.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){a.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,a,o){var i,s=r?"/"+r:"",l=e+"/"+n,c=o?"/"+o:"";switch(t){case"list":i=l+s;break;case"edit":i=l+s+"/"+a+"/edit"+c;break;case"view":i=l+s+"/"+a+"/view"+c;break;case"read":i=l+s+"/"+a+"/read"+c;break;case"new":i=l+s+"/new"+c}return i}function m(e,t){switch(i.routing){case"ngroute":a=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,o)},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,a,o;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"),a=n.indexOf("viewonly"),o=void 0,-1===r&&-1===a?-1!==(o=s.reduce(function(e,t){t=n.indexOf(t);return-1<t?t:e},-1))&&(c.id=e[t-=2+o]):-1!==r?(c.newRecord=!0,t-=1+r):t-=1+a,1!==o&&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,a){return p(i.prefix,e,t,n,r,a)},redirectTo:function(){return function(e,t,n,r,a){n.search({}),e="onDelete"===e?i.onDelete?"new"===i.onDelete?p(i.prefix,"new",t.modelName,t.formName,r,a):i.onDelete:p(i.prefix,"list",t.modelName,t.formName,r,a):p(i.prefix,e,t.modelName,t.formName,r,a),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,a,o,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],a=0;a<i.formSchema.length;a++)r.content.push(i.formSchema[a])}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?o&&n&&(h("Nested "+c,d.schema,p=[],null,c+".",!0,i,s),(m=v(c,f,a)).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,a),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,a){var o;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!=(o=n.form)&&o.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,a,h);else if(n.lookupListRef)s.setUpLookupListOptions(n.lookupListRef,t,r,a),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 o="Field "+t.name+' has unsupported type "'+e.instance+'"',console.log(o),a=" (typeof = "+typeof e.instance+")",console.log(a),new Error(o+a);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("."),a=n||t.record,o=0,i=r.length;o<i;o++)a[r[o]]||(Array.isArray(a)&&a[0][r[o]]?a=a[0]:a[r[o]]=o===i-1?[]:{}),a=a[r[o]];return a}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 a=0,o=n.length;a<o;a++)if("text"===n[a].type){t.push({name:n[a].name});break}0===t.length&&0!==n.length&&t.push({name:n[0].name})}if(0===t.length){for(var 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,a=t(e.lhs),o=t(e.rhs);switch(e.comp){case"eq":n=a===o;break;case"ne":n=a!==o;break;default:throw new Error("Unsupported comparator "+e.comp)}return n},k=function(e,n,r){var a=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,a+=1)}var o=!0;return e&&(t(e.lhs),t(e.rhs),0!==a||w(e,void 0)||(o=!1)),o};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 a,o,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(a=r.dataDependencies[c],o=0;o<a.length;o+=1)for(var u=a[o],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(a=r.dataDependencies[c],o=0;o<a.length;o+=1){var p=a[o].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===a[o]&&(0===(s=angular.element(document.querySelector("#f_"+p[0]+"List_"+i+" #cg_f_"+a[o].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 a,o,i;if(null!=(o=null==e?void 0:e.target)&&o.hasAttribute&&e.target.hasAttribute("disabled"))return e.preventDefault();e.target.offsetParent&&(o=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==(a=n.dataEventFunctions)?void 0:a.onInitialiseNewSubDoc)&&n.dataEventFunctions.onInitialiseNewSubDoc(t,r,i),o.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,a){if(null!=(i=null==n?void 0:n.target)&&i.hasAttribute&&n.target.hasAttribute("disabled"))return n.preventDefault();var o,i=l(t,r,a);"function"==typeof r.dataEventFunctions.onDeleteSubDoc&&(a=(a=r.formSchema.find(function(e){return e.name===t}))?a.schema:null,o=r.dataEventFunctions.onDeleteSubDoc(t,a,i,e)),o?r.showError(o):(i.splice(e,1),r.setFormDirty(n))},hasError:function(e,t,n,r){var a,o=!1;return r?(r=r[r.topLevelFormName])?(r="null"!==e?r[e.replace("$index",n)]:r)&&(a=r[t])&&a.$invalid&&!a.$$attr.readonly&&(a.$dirty?o=!0:angular.forEach(a.$validators,function(e,t){"required"!==t&&a.$error[t]&&(o=!0)})):console.log("hasError failed to find form! ",e,t,n):console.log("hasError called with no scope! ",e,t,n),o},decorateScope:function(a,o,i,e,t){function s(){for(var e=a.$$childHead;e;){if(e.tabset)return e.tabset;e=e.$$nextSibling}}a.record=e.record,a.phase="init",a.disableFunctions=e.disableFunctions,a.dataEventFunctions=e.dataEventFunctions,a.topLevelFormName=void 0,a.formSchema=[],a.tabs=[],a.listSchema=[],a.recordList=[],a.dataDependencies={},a.internalLookups=[],a.listLookups=[],a.conversions={},a.pageSize=60,a.pagesLoaded=0,r.decorateSecurableScope(e.baseScope=a,{pseudoUrl:t}),a.generateEditUrl=function(e){return o.generateEditUrl(e,a)},a.generateViewUrl=function(e){return o.generateViewUrl(e,a)},a.generateNewUrl=function(){return o.generateNewUrl(a)},a.scrollTheList=function(){var e;if(0<(null==(e=a.listSchema)?void 0:e.length))return i.scrollTheList(a);var t=a.$watchCollection("listSchema",function(e){if(0<(null==e?void 0:e.length))return t(),i.scrollTheList(a)})},a.getListData=function(e,t){return i.getListData(e,t,a.listSchema,a)},a.setPristine=function(e){e&&a.dismissError(),a[a.topLevelFormName]&&a[a.topLevelFormName].$setPristine()},a.skipCols=function(e){return 0<e?"col-md-offset-3":""},a.setFormDirty=function(e){e?angular.element(e.target).inheritedData("$formController").$setDirty():console.log("setFormDirty called without an event (fine in a unit test)")},a.add=function(e,t,n){return o.add(e,t,a,n)},a.hideTab=function(e,t,n){var r=i.getData(a,n);r&&Array.isArray(r)&&!r.includes(t)&&(n=a.tabs[a.activeTabNo].title===t,r.push(t),r.sort(),(t=a.baseForm)&&t.$setDirty(),n)&&(t=s())&&t.select(a.tabs.findIndex(function(e){return!r.includes(e.title)}))},a.addTab=function(e,t,n){var r,n=i.getData(a,n);n&&Array.isArray(n)&&-1!==(r=n.findIndex(function(e){return e===t}))&&(n.splice(r,1),(n=a.baseForm)&&n.$setDirty(),r=s())&&r.select(a.tabs.findIndex(function(e){return e.title===t}))},a.hasError=function(e,t,n){return o.hasError(e,t,n,a)},a.unshift=function(e,t,n){return o.unshift(e,t,a,n)},a.remove=function(e,t,n,r){return o.remove(e,t,n,a,r)},a.baseSchema=function(){return a.tabs.length?a.tabs:a.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,a){function t(e){var t,n,r=e;return"string"==typeof e&&("$"===e.slice(0,1)?(r=(a||"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,a=t;r<a.length;r++)if(l.requiresDisabledChildren(a[r]))return" disabled ";return e()}var o="isSecurelyDisabled('".concat(c,"')"),i=(0<t.length&&(i=t.map(function(e){return"requiresDisabledChildren('".concat(e,"')")}),o="(".concat(o," || ").concat(i.join(" || "),")")),"one-time"===d.formsAngular.elemSecurityFuncBinding);return s.readonly?i?e()+'ng-readonly="::'.concat(o,'" '):' ng-disabled="'.concat(o," || ").concat(s.readonly,'" '):' ng-disabled="'.concat(i?"::":"").concat(o,'" ')})(),h.getDisableableAttrs(c)]}function b(e,t,n){if(n.subschema&&n.model){for(var r=n.model,a=0,o="$parent.";r.startsWith(o);)a++,r=r.substring(o.length);return"".concat(e,"_{{").concat(o.repeat(a),"$index}}")}return"".concat(e,"_{{$index}}")}function y(e,t,n){return void 0!==e.$index||!!n.subschema}function a(e,t,n){for(;t.includes("@@");){var r=t.indexOf("@@")+2,a=t.indexOf("@@",r)-1,o=(s=t.substring(r,1+a)).endsWith("s"),i=(s=o?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+(o?"s":"")+t.substring(3+a)}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 a(e,t,"scopeStatic")},"none"):"scopeDynamic":"function"==typeof d.formsAngular.pseudo?"global":"none",a(e,t,r)):t},fieldChrome:function(e,t,n){var r="";if(t.id&&"function"==typeof t.id.replace){var a=t.nonUniqueId||t.nonuniqueid||t.id,o=void 0;if(t.id.includes(".")&&t.id.includes("{{"))for(var o="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]?o+=t.id[s]:o+="-";else o="cg_".concat(t.id.replace(/\./g,"-"));a="cg_".concat(a.replace(/\./g,"-")),a=h.considerVisibility(a,e);if(a.omit)return{omit:!0};r+='id="'.concat(y(e,0,n)?b(o,0,n):o,'"'),a.visibilityAttr&&(r+=" ".concat(a.visibilityAttr))}var l,c,a=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()?(a+=" form-group","vertical"===n.formstyle&&"block-level"!==t.size&&(d+='<div class="row">',a+=" 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",a,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 a,o="";return("bs3"===f.framework()||!["inline","stacked"].includes(r.formstyle)&&""!==t.label||n)&&(o="<label",v(r.formstyle,!(a="control-label"))?(t.linklabel||(o+=' for="'+t.id+'"'),void 0!==t.labelDefaultClass?a+=" "+t.labelDefaultClass:"bs3"===f.framework()&&(t.coloffset?a+=" col-sm-"+(3-t.coloffset).toString():a+=" col-sm-3")):["inline","stacked"].includes(r.formstyle)&&(o+=' for="'+t.id+'"',a+=" sr-only"),o+=m.addAll(e,"Label",null,r)+' class="'+a+'">'+t.label,n&&(n=a=void 0,n=r.subschema?((a=t.name.replace(r.subschemaroot,"")).startsWith(".")&&(a=a.substring(1)),"subDoc"):(a=t.name,"record"),r=l(t,e),o+=" <i ".concat(r.join(" "),' id="add_').concat(t.id,'" ng-click="add(\'').concat(a,"', $event, ").concat(n,')" class="').concat(s(),'-plus-sign"></i>')),o+="</label>",t.linklabel)&&(e='<fng-link fld="'+t.name+'" ref="'+t.ref+'" text="'+escape(o)+'"',t.form&&(e+=' form="'+t.form+'"'),t.linktab&&(e+=' linktab="'+t.linktab+'"'),o=e+="></fng-link>"),o},glyphClass:s,allInputsVars:function(e,t,n,r,a,o){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+'"',a&&(r+=' id="'.concat(a,'"')),o?r+=' name="'.concat(o,'"'):a&&(r+=' name="'.concat(a,'"')),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 a,r=(t.helpInline||"")+(t.helpinline||"");return 0<r.length&&(a="bs2"===f.framework()?{el:"span",cl:"help-inline"}:{el:"div",cl:"help-block"},e+="<".concat(a.el,' class="').concat(a.cl,'">').concat(r,"</").concat(a.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,a){var o="bs3"===f.framework()?'ng-class="skipCols($index)" ':"",a=a.subschema?"subDoc"+r.name.replace(a.subschemaroot,""):(a.model||"record")+"."+r.name,i="",n=(i+='<div id="'+r.id+'List" class="'+t.join(" ")+'" '+o+' ng-repeat="arrayItem in '+a+' 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>",o="bs3"===f.framework()?'ng-class="skipCols('+a+'.length)" ':"";return r.help&&(i+='<div class="array-help-block '+t.join(" ")+'" '+o+' 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 o(e,t,n,r,a){var o=n.info.name,i=(r&&(null!=a&&a.nonUniqueIdSuffix?(t=t.replace(r,a.nonUniqueIdSuffix),o+=".".concat(a.nonUniqueIdSuffix)):o+=".".concat(r)),m.handleReadOnlyDisabled({id:t,name:o,nonUniqueId:n.info.nonuniqueid,readonly:n.info.readonly},e));if(null!=a&&a.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,a){return o(e,t,n,r,a).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 a=t.info.id;return n&&(n.startsWith("_")||(a+="_"),a+=n),a=r?s(e,t,a):a}function c(e,t,n,r){e=o(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 a(e){var t,e=e.replace(/"/g,'"');return""===e||"true"===e||"false"!==e&&(t=Number(e),!isNaN(t)&&isFinite(t)?t:e)}var o,i,s={},l={formStyle:e.formstyle},c={},d=t?t.length:0,u=null==t?void 0:t.toLowerCase();for(o in e)e.hasOwnProperty(o)&&("fngfld"===(i=o.toLowerCase()).slice(0,6)?s[i.slice(6)]=a(e[o]):"fngopt"===i.slice(0,6)?l[i.slice(6)]=a(e[o]):t&&i.slice(0,d)===u&&(c[_.kebabCase(o.slice(d))]=a(e[o])));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 a=l(e,t,n,!1),o=s(e,t,a);return'id="'.concat(o,'" ').concat(i(e,a,t,n,r))}return{extractFromAttr:h,buildInputMarkup:function(e,t,n,r){var a,o,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?"":(a=m.controlDivClasses(u,f),o=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?o+=m.handleArrayInputAndControlDiv(d,a,e,f,u):o+=m.handleInputAndControlDiv(d,a),o+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),a=s(e,t,r);return'id="'.concat(a,'" ').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)},findIdInSchemaAndFlagNeedX:function e(t,n){for(var r=!1,a=0;a<t.length;a++){var o=t[a];if(o.id===n){r=o.needsX=!0;break}if(o.schema&&e(o.schema,n)){r=!0;break}}return r}}}e=e.services||(e.services={}),t.$inject=["FormMarkupHelperService"],e.PluginHelperService=t})(fng=fng||{}),(O=>{var e;function t(o,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 a=v(e,t,n,!!r);if(a.lastObject&&a.key)if(r)if(angular.isArray(a.lastObject))for(var o=0;o<a.lastObject.length;o++)a.lastObject[o][a.key]=r[o];else a.lastObject[a.key]=r;else delete a.lastObject[a.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 a=t.split("."),o=a.length-1,i=e,s=0;s<o;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[a[s]]}):(r&&!i[a[s]]&&(i[a[s]]={}),i[a[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?a[o]:void 0}},w=function(e,t,n){var r,a=v(e,t,n);return r=a.lastObject&&a.key?angular.isArray(a.lastObject)?_.map(a.lastObject,function(e){return e[a.key]}):a.lastObject[a.key]:r};function k(e,t,n,r){if(void 0===n&&(n=null),(i=w(e,t)||"")&&n){var a=_.find(n,function(e){return e.name===t});if(a)switch(a.params){case void 0:break;case"timestamp":var o=i.toString().substring(0,8),o=new Date(1e3*parseInt(o,16)),i=o.toLocaleDateString()+" "+o.toLocaleTimeString();break;default:i=r.dataEventFunctions[a.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 a=e[1],o=t[e[0]],i=n;if(void 0!==o)if(angular.isArray(o))for(var s=0;s<o.length;s++)S(a,o[s],i);else S(a,o,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,a){var o="string"==typeof t?e[t]:t,i="string"==typeof n?e[n]:n;o.length=0,i.length=0,r&&0<r.length&&r.forEach(function(e){var t=e[a];t&&0<t.length&&(o.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","email"].includes(e.type)||"select"===e.type&&!e.ids)?!0:t};function $(e,t,n){e=e.conversions;return(e=n?w(e,n)||{}:e)[t]}var C=function(e,t,n,r,a,o,i){o=o||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,o,u)}else{l.internalRef&&x(r,l.options,l.ids,o[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,a))&&h.fngajax&&"function"==typeof h.fngajax&&!h.noconvert&&h.fngajax(d,l,function(e,t){y(o,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 a=[],o=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));a.push(s=o?{x:s}:s)}return a}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 a(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 a=t.indexOf(e);if(-1===a)throw new Error("convertListValueToId: Invalid data - value "+e+" not found in "+t+" processing "+r);return n[a]},E=function(e,t,n,r){"object"==typeof e&&(e=e.id);var a=t.indexOf(e);if(-1===a&&-1===(a=n.indexOf(e)))throw new Error("convertIdToListValue: Invalid data - id "+e+" not found in "+t+" processing "+r);return n[a]};function L(t,n,r,e,a){a&&0<a.length&&a.length===e.length&&n[r]&&-1<(a=a.findIndex(function(e){return e[t.value]===n[r]}))&&(e=e[a][t.value])&&(n[r]=e)}function I(e,f,i,t,p){var n=!f.id&&!f.newRecord;function s(o,u){f.internalLookups.forEach(function(n){var r=o[n.ref.property],a=u[n.ref.property];x(f,n.lookupOptions,n.lookupIds,r,n.ref.value),(r&&0<r.length||a&&0<a.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,a)}):angular.isArray(f.record[t.lastPart])?f.record[t.lastPart].forEach(function(e){L(n.ref,e,"x",r,a)}):L(n.ref,f.record,t.lastPart,r,a)})}),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(o,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],a=(r.length=0,f[n.formInstructions.ids]),t=(a.length=0,l.data[c.ref.property]||[]),o=0;o<t.length;o++){var i=t[o][c.ref.value],s=_.sortedIndex(r,i);r[s]===i&&(i=i+" ("+t[o]._id+")",s=_.sortedIndex(r,i)),r.splice(s,0,i),a.splice(s,0,t[o]._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=a.indexOf(e);y(f.record,n.formInstructions.name,t,-1===e?void 0:r[e])}):-1!==(e=a.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&&a(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 a=O.formsAngular.title.prefix||"";if(f.editFormHeader)a+=f.editFormHeader();else for(var o in f.listSchema)if(f.listSchema.hasOwnProperty(o)){if("object"==typeof f.getListData(f.record,f.listSchema[o].name))return;a+=f.getListData(f.record,f.listSchema[o].name)+" "}a=a.trimEnd()+(O.formsAngular.title.suffix||""),d.document.title=a.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||o.$$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(a){return function(e){if(-1!==[200,400,403].indexOf(e.status)){var t="";if(e.data&&e.data.errors)for(var n in e.data.errors)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.",a.phase="error",a.showError(t)}else{var r;404===e.status?o.search({}).path("/404"):("string"!=typeof(r=e.data)&&(r=JSON.stringify(r)),500!==e.status&&(r=e.status+" "+r),a.showError(r))}}}function T(e,t,n){n.allowLocationChange=!1,t.phase="reading","function"==typeof t.dataEventFunctions.onAfterRead&&t.dataEventFunctions.onAfterRead(e),a(t.originalData=e,t,n)}function r(e,t,n,r){var a=t.name.split("."),o=r.find(function(e){return e.ref.property===n.property&&e.ref.value===n.value}),a={formInstructions:t,lastPart:a.pop(),possibleArray:a.join(".")};o||r.push(o={ref:n,lookupOptions:[],lookupIds:[],handlers:[]}),o.handlers.push(a),e[t.options]=o.lookupOptions,e[t.ids]=o.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?o.search({}).path("/404"):t.handleHttpError(e)})},scrollTheList:function(t){var n=t.pagesLoaded;m.getPagedAndFilteredList(t.modelName,{aggregate:o.$$search.a,find:o.$$search.f,limit:t.pageSize,skip:n*t.pageSize,order:o.$$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,o)},function(e){var t;404===e.status?c.redirectTo()("onDelete",n,o):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,o,e._id)):n.showError(e)},n.handleHttpError)},getListData:k,suffixCleanId:b,getData:w,setData:y,setUpLookupOptions:function(e,a,o,i){var s=o[a.options]=[],l=o[a.ids]=[];(a.filter?m.getPagedAndFilteredList(e,Object.assign({concatenate:!0},a.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]+")")}),o.readingRecord&&o.readingRecord.then(function(){g(a,o,i)})}}).catch(function(e){o.handleHttpError(e)})},setUpLookupListOptions:function(o,i,s,l){var c=s[i.options]=[],d=s[i.ids]=[];"$"===o.id[0]?r(s,i,o,s.listLookups):m.readRecord(o.collection,s.$eval(o.id)).then(function(e){for(var t=e.data[o.property],n=0;n<t.length;n++){var r=t[n][o.value],a=_.sortedIndex(c,r);c[a]===r&&(r=r+" ("+t[n]._id+")",a=_.sortedIndex(c,r)),c.splice(a,0,r),d.splice(a,0,t[n]._id)}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")],a=l;if(t.array){for(var o=[],i=0;i<n.length;i++)o.push(N(n[i],r,a,t.name));return o}return N(n,r,a,t.name)});else{var a=$(m,e,h);if(a){var o=w(f,e,null),i=void 0;if(s.array){if(i=[],o)for(var c=0;c<o.length;c++)i[c]=g(o[c],a)}else i=g(o,a);y(f,e,null,i)}}}},v=0;v<u.length;v++)e();return f},convertIdToListValue:E,handleError:t,decorateScope:function(s,n,r,a){s.handleHttpError=t(s),s.cancel=function(){angular.copy(a.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,a.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,a):r.createNew(t,n,s,a)})},s.newClick=function(){c.redirectTo()("new",s,o)},s.$on("$locationChangeStart",function(e,t){a.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}):(a.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;(!a.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,a)}e&&("function"==typeof s.dataEventFunctions.onBeforeDelete?s.dataEventFunctions.onBeforeDelete(a.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,a.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,a.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,a.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,a.master,s[s.topLevelFormName])},s.setDefaults=function(e,a){void 0===a&&(a="");var o={};return e.forEach(function(e){if(void 0!==e.defaultValue){for(var t=e.name.replace(a,"").split("."),n=o,r=0;r<t.length-1;r++)n[t[r]]||(n[t[r]]={}),n=n[t[r]];n[t[t.length-1]]=e.defaultValue}}),o},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 a=0,o=[s,r];a<o.length;a++){var i=o[a];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,a){s.getSchema(t.modelName,t.formName).then(function(e){I(e.data,t,n,r,a)},t.handleHttpError)}}}e=O.services||(O.services={}),t.$inject=["$location","$window","$filter","$timeout","$sce","RoutingService","CssFrameworkService","SubmissionsService","SchemasService"],e.RecordHandlerService=t})(fng=fng||{}),(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 a(e){return!!d.formsAngular.elemSecurityFuncBinding&&("hidden"===e&&!!d.formsAngular.hiddenSecurityFuncName||"disabled"===e&&!!d.formsAngular.disabledSecurityFuncName)}function o(e,t){return a(t)&&("hidden"===t&&r[d.formsAngular.hiddenSecurityFuncName]&&(!e||!!e.isSecurelyHidden)||"disabled"===t&&r[d.formsAngular.disabledSecurityFuncName]&&(!e||!!e.isSecurelyDisabled))}function n(e,t){return r[d.formsAngular.hiddenSecurityFuncName](e,t)}function 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:a,canDoSecurityNow:o,isSecurelyHidden:n,isSecurelyDisabled:s,getHideableAttrs:c,getDisableableAttrs:e,getDisableableAncestorAttrs:function(e){return t(e,d.formsAngular.disableableAncestorAttr)},decorateSecurableScope:function(e,t){a("hidden")&&(!d.formsAngular.skipHiddenSecurityFuncName||null!=t&&t.overrideSkipping||"function"!=typeof r[d.formsAngular.skipHiddenSecurityFuncName]||!r[d.formsAngular.skipHiddenSecurityFuncName](null==t?void 0:t.pseudoUrl))&&(e.isSecurelyHidden=function(e){return n(e,null==t?void 0:t.pseudoUrl)}),a("disabled")&&(!d.formsAngular.skipDisabledSecurityFuncName||null!=t&&t.overrideSkipping||"function"!=typeof r[d.formsAngular.skipDisabledSecurityFuncName]||!r[d.formsAngular.skipDisabledSecurityFuncName](null==t?void 0:t.pseudoUrl))&&(e.isSecurelyDisabled=function(e){return s(e,null==t?void 0:t.pseudoUrl)},!d.formsAngular.skipDisabledAncestorSecurityFuncName||null!=t&&t.overrideSkipping||r[d.formsAngular.skipDisabledAncestorSecurityFuncName],e.requiresDisabledChildren=function(e){return"+"===i(e,null==t?void 0:t.pseudoUrl)})},doSecurityWhenReady:function(t){var n;o(void 0,"hidden")?t():a("hidden")&&(n=r.$watch(d.formsAngular.hiddenSecurityFuncName,function(e){e&&(n(),t())}))},considerVisibility:function(e,t){var n=c(e);if(o(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 o(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,a){return(()=>{var e="";if(o(r,"disabled")){if((a=a||{}).attrRequiresValue&&a.forceNg)throw new Error("Invalid combination of parameters provided to generateDisabledAttr() [attrRequiresValue and forceNg]");var t=a.attr||"disabled";if("instant"===d.formsAngular.elemSecurityFuncBinding){if(r.isSecurelyDisabled(n)){if(a.attrRequiresValue)return" ".concat(t,'="true"');if(!a.forceNg)return" ".concat(t);e="true"}}else e="".concat(l(),"isSecurelyDisabled('").concat(n,"')");if(e)return("disabled"===t?' data-ng-disabled="':" 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(a){function n(e){function t(e,t){void 0!==t&&""!==t&&("object"==typeof t&&(t=JSON.stringify(t)),""===n?n="?":n+="&",n+=e+"="+t)}var n="";return t("l",e.limit),t("f",e.find),t("p",e.projection),t("a",e.aggregate),t("o",e.order),t("s",e.skip),t("c",e.concatenate),n}var r=!0,o=new ExpirationCache;function 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 a.get("/api/".concat(e,"/").concat(r,"/list").concat(t),{cache:o})},getAllListAttributes:function(e){return a.get("/api/".concat(e,"/listAll"),{cache:o})},getAllPickListAttributes:function(e){return a.get("/api/".concat(e,"/picklistAll"),{cache:o})},getPagedAndFilteredList:function(e,t){if(t.projection)throw new Error("Cannot use projection option for getPagedAndFilteredList, because it only returns list fields");return void 0===t.concatenate&&(t.concatenate=!1),a.get("/api/".concat(e,"/listAll").concat(n(t)))},getPagedAndFilteredListFull:function(e,t){return a.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 a.get(t)},getAll:function(e,t){t=angular.extend({cache:!!r&&o},t);return a.get("/api/".concat(e),t)},deleteRecord:function(e,t,n){e=i(e,n,t);return a.delete(e)},updateRecord:function(e,t,n,r){o.remove("/api/".concat(e));e=i(e,r,t);return a.post(e,n)},createRecord:function(e,t,n){o.remove("/api/".concat(e));e=i(e,n)+"/new";return a.post(e,t)},useCache:function(e){r=e},getCache:function(){return!!o},clearCache:function(){o.removeAll()}}}e=e.services||(e.services={}),t.$inject=["$http"],e.SubmissionsService=t})(fng=fng||{}),(u=>{var e;function t(t,n,e,r,a,o,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")})}o.loadControllerAndMenu(t.sharedData,i,0,!1,t.$new()),t.formName&&o.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,a,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(a,e,i,r,t,n,o){var s;function l(e){i.contextMenu=e;var t="".concat(_.camelCase(e),"ContextMenu");i.contextMenuId=void 0,o.doSecurityWhenReady(function(){i.contextMenuId=t,i.contextMenuHidden=o.isSecurelyHidden(i.contextMenuId),i.contextMenuDisabled=o.isSecurelyDisabled(i.contextMenuId)})}i.clearContextMenu=function(){i.items=[],i.contextMenu=void 0,i.contextMenuId=void 0,i.contextMenuHidden=void 0,i.contextMenuDisabled=void 0},(a.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,a=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&&(a||i.showShortcuts)?a?t("cancelButton"):i.showShortcuts=!1:a&&(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)a.$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 a=!1,o=e-1;0<=o&&!n&&!a;)i.items[o].divider?n=!0:t(i.items[o])?--o:a=!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…</div>\n <div class="container-fluid page-header report-header">\n <div class="header-lhs">\n <h1>{{ titleWithSubstitutions }}</h1>\n </div>\n <div class="header-rhs">\n <form-input schema="paramSchema" name="paramForm" ng-show="paramSchema" formstyle="horizontalCompact"></form-input>\n </div>\n </div>\n <div class="container-fluid page-body report-body">\n <div class="row-fluid report-grow">\n <div class="gridStyle" style="height:100%;" ui-grid="gridOptions" ui-grid-selection ui-grid-resize-columns></div>\n </div>\n </div>\n</div>\n'),e.put("base-edit.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="phase == \'ready\' && !showLoading" class="loading">Loading…</div>\n <div ng-hide="!showSpinner" class="spinner">Just a second…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header edit-header">\n <div class="header-lhs col-sm-8 span8">\n <h1 id="header-text">{{modelNameDisplay}} :\n <span id="header-data-desc">\n <span ng-show="!!editFormHeader" >{{ editFormHeader() }}</span>\n <span ng-hide="!!editFormHeader" ng-repeat="field in listSchema" ng-bind-html="getListData(record, field.name) + \' \'"></span>\n </span>\n </h1>\n </div>\n <div class="header-rhs col-sm-2 span2">\n <div form-buttons></div>\n </div>\n </div>\n <div class="container-fluid page-body edit-body">\n <form-input name="baseForm" schema="baseSchema()" formstyle="compact"></form-input>\n </div>\n\x3c!-- <pre>--\x3e\n \x3c!--Record--\x3e\n \x3c!--{{ record | json }}--\x3e\n \x3c!--formSchema--\x3e\n \x3c!--{{ formSchema | json }}--\x3e\n\x3c!-- </pre>--\x3e\n</div>\n'),e.put("base-list-view.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="!showLoading" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header list-header">\n <div class="header-lhs col-sm-8 span8">\n <h1>{{modelNameDisplay}}</h1>\n </div>\n </div>\n <div class="page-body list-body">\n <div ng-class="css(\'rowFluid\')" infinite-scroll="scrollTheList()">\n <a ng-repeat="record in recordList" ng-href="{{generateViewUrl(record)}}">\n <div class="list-item">\n <div ng-class="css(\'span\',12/listSchema.length)" ng-repeat="field in listSchema">{{getListData(record, field.name)}} </div>\n </div>\n </a>\n </div>\n </div>\n</div>\n'),e.put("base-list.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="!showLoading" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header list-header">\n <div class="header-lhs col-sm-8 span8">\n <h1>{{modelNameDisplay}}</h1>\n </div>\n <div class="header-rhs col-sm-2 span2">\n <a ng-href="{{generateNewUrl()}}"><button id="newBtn" class="btn btn-default"><i class="icon-plus"></i> New</button></a>\n </div>\n </div>\n <div class="page-body list-body">\n <div ng-class="css(\'rowFluid\')" infinite-scroll="scrollTheList()">\n <a ng-repeat="record in recordList" ng-href="{{generateEditUrl(record)}}">\n <div class="list-item">\n <div ng-class="css(\'span\',12/listSchema.length)" ng-repeat="field in listSchema">{{getListData(record, field.name)}} </div>\n </div>\n </a>\n </div>\n </div>\n</div>\n'),e.put("base-view.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="phase == \'ready\' && !spinning" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header edit-header">\n <div class="header-lhs col-sm-8 span8">\n <h1 id="header-text">{{modelNameDisplay}} :\n <span ng-repeat="field in listSchema" ng-bind-html="getListData(record, field.name) + \' \'"></span>\n </h1>\n </div>\n </div>\n <div class="container-fluid page-body edit-body">\n <form-input name="baseForm" schema="baseSchema()" formstyle="compact" viewform="true"></form-input>\n </div>\n</div>\n'),e.put("error-display-bs2.html",'<div id="display-error" ng-show="errorVisible" class="row-fluid ng-hide">\n <div class="alert alert-error offset1 span10">\n <button type="button" id="err-hide" class="close" ng-click="dismissError()"><i class="icon-remove"></i></button>\n <button type="button" id="err-pin" class="close" ng-click="stickError()"><i class="icon-eye-open"></i></button>\n <h4 id="err-title">{{alertTitle}}</h4>\n <div id="err-msg" ng-bind-html="errorMessage"></div>\n </div>\n</div>\n'),e.put("error-display-bs3.html",'<div id="display-error" ng-show="errorVisible" class="row ng-hide">\n <div class="alert alert-error col-md-offset-1 col-md-10 alert-danger">\n <button type="button" id="err-hide" class="close" ng-click="dismissError()"><i class="glyphicon glyphicon-remove"></i></button>\n <button type="button" id="err-pin" class="close" ng-click="stickError()"><i class="glyphicon glyphicon-pushpin"></i></button>\n <h4 id="err-title">{{alertTitle}}</h4>\n <div id="err-msg" ng-bind-html="errorMessage"></div>\n </div>\n</div>\n'),e.put("error-messages.html",'<div ng-message="required">A value is required for this field</div>\n<div ng-message="minlength">Too few characters entered</div>\n<div ng-message="maxlength">Too many characters entered</div>\n<div ng-message="min">That value is too small</div>\n<div ng-message="max">That value is too large</div>\n<div ng-message="email">You need to enter a valid email address</div>\n<div ng-message="pattern">This field does not match the expected pattern</div>\n'),e.put("form-button-bs2.html",'<div class="form-btn-grp">\n <div class="btn-group pull-right">\n <button id="saveButton" class="btn btn-mini btn-primary form-btn" ng-click="save()" ng-disabled="isSaveDisabled()"><i class="icon-ok"></i> Save</button>\n <div id="why-disabled" ng-class="{showwhy:!!whyDisabled}" ng-bind-html="whyDisabled"></div>\n <button id="cancelButton" class="btn btn-mini btn-warning form-btn" ng-click="cancel()" ng-disabled="isCancelDisabled()"><i class="icon-remove"></i> Cancel</button>\n </div>\n <div class="btn-group pull-right">\n <button id="newButton" class="btn btn-mini btn-success form-btn" ng-click="newClick()" ng-disabled="isNewDisabled()"><i class="icon-plus"></i> New</button>\n <button id="deleteButton" class="btn btn-mini btn-danger form-btn" ng-click="deleteClick()" ng-disabled="isDeleteDisabled()"><i class="icon-minus"></i> Delete</button>\n </div>\n</div>\n'),e.put("form-button-bs3.html",'<div class="form-btn-grp">\n <div class="btn-group pull-right">\n <button id="saveButton" class="btn btn-primary form-btn btn-xs" ng-click="save()" ng-disabled="isSaveDisabled()"><i class="glyphicon glyphicon-ok"></i> Save</button>\n <div id="why-disabled" ng-class="{showwhy:!!whyDisabled}" ng-bind-html="whyDisabled"></div>\n <button id="cancelButton" class="btn btn-warning form-btn btn-xs" ng-click="cancel()" ng-disabled="isCancelDisabled()"><i class="glyphicon glyphicon-remove"></i> Cancel</button>\n </div>\n <div class="btn-group pull-right">\n <button id="newButton" class="btn btn-success form-btn btn-xs" ng-click="newClick()" ng-disabled="isNewDisabled()"><i class="glyphicon glyphicon-plus"></i> New</button>\n <button id="deleteButton" class="btn btn-danger form-btn btn-xs" ng-click="deleteClick()" ng-disabled="isDeleteDisabled()"><i class="glyphicon glyphicon-minus"></i> Delete</button>\n </div>\n</div>\n'),e.put("search-bs2.html",'<form class="navbar-search pull-right">\n <div id="search-cg" class="control-group" ng-class="errorClass">\n <input type="text" spellcheck="false" autocomplete="off" id="searchinput" ng-model="searchTarget" ng-model-options="{debounce:500}" class="search-query" placeholder="{{searchPlaceholder}}" ng-keyup="handleKey($event)">\n </div>\n</form>\n<div class="results-container" ng-show="results.length >= 1">\n <div class="search-results">\n <div ng-repeat="result in results">\n <a href="{{result.href}}" ng-class="resultClass($index)" title="{{result.additional}}">{{result.resourceText}} {{result.text}}</a>\n </div>\n <div ng-show="moreCount > 0">(plus more - continue typing to narrow down search...)\n </div>\n </div>\n</div>\n'),e.put("search-bs3.html",'<form class="pull-right navbar-form">\n <div id="search-cg" class="form-group" ng-class="errorClass">\n <input type="text" spellcheck="false" autocomplete="off" id="searchinput" ng-model="searchTarget" ng-model-options="{debounce:500}" class="search-query form-control" placeholder="{{searchPlaceholder}}" ng-keyup="handleKey($event)">\n </div>\n</form>\n<div class="results-container" ng-show="results.length >= 1">\n <div class="search-results">\n <div ng-repeat="result in results">\n <a href="{{result.href}}" ng-class="resultClass($index)" title="{{result.additional}}">{{result.resourceText}} {{result.text}}</a>\n </div>\n <div ng-show="moreCount > 0">(plus more - continue typing to narrow down search...)\n </div>\n </div>\n</div>\n')}]);
|
|
1
|
+
var fng,__awaiter=this&&this.__awaiter||function(e,i,s,l){return new(s=s||Promise)(function(n,t){function r(e){try{o(l.next(e))}catch(e){t(e)}}function a(e){try{o(l.throw(e))}catch(e){t(e)}}function o(e){var t;e.done?n(e.value):((t=e.value)instanceof s?t:new s(function(e){e(t)})).then(r,a)}o((l=l.apply(e,i||[])).next())})},__generator=this&&this.__generator||function(r,a){var o,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(o)throw new TypeError("Generator is already executing.");for(;l=c&&t[c=0]?0:l;)try{if(o=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=a.call(r,l)}catch(e){t=[6,e],i=0}finally{o=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,a=0,o=t.length;a<o;a++)!r&&a in t||((r=r||Array.prototype.slice.call(t,0,a))[a]=t[a]);return e.concat(r||Array.prototype.slice.call(t))},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(a){return{restrict:"AE",replace:!0,link:function(e,t){var n=t[0].parentElement,r=a(' <a ng-show="choice.text || choice.textFunc" class="dropdown-option open-sub-menu" data-ng-mouseenter="mouseenter()"> {{ choice.text || choice.textFunc() }} </a> <ul class="uib-dropdown-menu dropdown-menu sub-menu"> <li ng-repeat="choice in choice.items" ng-attr-id="{{choice.id}}"> <drop-down-item data-ng-if="::!choice.items"></drop-down-item> <drop-down-sub-menu data-ng-if="::choice.items"></drop-down-sub-menu> </li> </ul>')(e);t.replaceWith(r),e.mouseenter=function(){var e=n.getBoundingClientRect(),t=r[2].getBoundingClientRect().height-5;t>e.top&&(t-=t-e.top+e.height),t-=e.height,r[2].style.top="-".concat(t,"px")}}}}function r(e){var t,n,r="isHidden($index)",a='ng-class="dropdownClass($index)"',o="normal"!==s.formsAngular.elemSecurityFuncBinding,i=o?"::":"";return e.canDoSecurity("hidden")?(t='ng-if="contextMenuId && !contextMenuHidden" '.concat(e.getHideableAttrs("{{ ::contextMenuId }}")),o?r='ng-if="::(choice.divider || !isSecurelyHidden(choice.id))" ng-hide="'.concat(r,'"'):"normal"===s.formsAngular.elemSecurityFuncBinding&&(r='ng-hide="'.concat(r,' || (!choice.divider && isSecurelyHidden(choice.id))"')),r+=" ".concat(e.getHideableAttrs("{{ ::choice.id }}"))):(t="",r='ng-hide="'.concat(r,'"')),e.canDoSecurity("disabled")?(n='disableable-link ng-disabled="contextMenuDisabled" '.concat(e.getDisableableAttrs("{{ ::contextMenuId }}")),a+=' class="{{ '.concat(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(a,">")+' <drop-down-item data-ng-if="!choice.items"></drop-down-item> <drop-down-sub-menu data-ng-if="choice.items"></drop-down-sub-menu> </li> </ul></li>'}}e=s.directives||(s.directives={}),t.$inject=["$compile"],n.$inject=["$compile"],r.$inject=["SecurityService"],e.dropDownItem=t,e.dropDownSubMenu=n,e.modelControllerDropdown=r})(fng=fng||{}),(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(a){a.checkNotModal=function(){for(var e,t=a.element[0],n=!1,r={preventDefault:angular.noop,stopPropagation:angular.noop,target:1,currentTarget:1};(e=t.parentNode)?"function"==typeof e.getAttribute&&e.getAttribute("uib-modal-window")?(angular.element(t).scope().close(r),n=!0):t=e:n=!0,!n;);}}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 a=r.ref,t=r.text&&unescape(r.text)!==r.text,o=r.form,i=r.linktab;if(n.readonly=r.readonly,n.element=e,o=o?o+"/":"",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(a+"/"+o+(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(a+"/"+o+e+"/edit"+i),n.text||u.getListAttributes(a,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 a(){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 o,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,o=s.replace(/\./g,"-")))):e+=t.name),I.allInputsVars(y,t,r,e,u,o)),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=a(),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=a(),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,a=0;a<y.tabs.length;a++)if(y.tabs[a].title===e.title){r=a;break}0<=r?(o="".concat(_.camelCase(e.title),"Tab"),(n=l.considerVisibility(o,y)).omit?t.omit=!0:(s='id="'.concat(o,'"'),n.visibilityAttr&&(s+=" ".concat(n.visibilityAttr)),s+=l.generateDisabledAttr(o,y,{attr:"disable",attrRequiresValue:!0}),t.before="",n=e.title.replace(/["']/g,""),e.hideable?(i="customTemplate_".concat(o,".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> ")+' <button name="hide_'.concat(o,'_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 o="addTabsTab",i="customTemplate_".concat(o,"_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(o,".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(o,'">')+' <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"'),a='<div class="inline-col-headers" style="display:flex" '.concat(r,">"),o=0,i=e;o<i.length;o++){var s=i[o];$(s,t),a+="<div ",s.showWhen=s.showWhen||s.showwhen,s.showWhen&&("string"==typeof s.showWhen?a+='ng-show="'+s.showWhen+'"':a+='ng-show="'+I.generateNgShow(s.showWhen,n)+'"'),s.id&&"function"==typeof s.id.replace&&(a+=' id="col_label_'+s.id.replace(/\./g,"-")+'"'),a+=' class="inline-col-header"><label for="'.concat(s.id,'" class="control-label">').concat(s.label,"</label></div>")}return a+="</div>"},D=function(e,t){var n=I.fieldChrome(y,e,t);if(n.omit)return"";var r=n.template;if(e.schema){var a,o,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"):(a=(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,a,"always"===e.inlineHeaders)),f=I.handleReadOnlyDisabled(e,y)[0],p=e.sortable&&"disabled"!==f.trim().toLowerCase()?"".concat(f,' ui-sortable="sortableOptions" ng-model="').concat(a,'"'):"",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(a,' 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&&(o=y[e.subDocContainerType]||e.subDocContainerType,o=Object.assign({containerType:o},e.subDocContainerProps),s=x(o)),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||(o="",(s="string"==typeof e.customFooter)&&(o=e.customFooter),m=(i="").concat(a,".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,'"'):"",o+="<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&&(o+="<span ".concat(m,' class="none_indicator" id="no_').concat(e.id,'_indicator">None</span>'),s||(i="".concat(a,".length > 0"),i=!0===e.noAdd?'ng-hide="'.concat(i,'"'):e.noAdd?'ng-hide="'.concat(e.noAdd," && ").concat(i,'"'):"")),""===o)||("bs3"===E.framework()?r+="<div ".concat(i,' class="row schema-foot"><div class="col-sm-offset-3">').concat(o,"</div></div>"):r+="<div ".concat(i,' class = "schema-foot ">').concat(o,"</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 a=0;a<e.length;a++){var o=e[a],i=(n.viewform&&((o=angular.copy(o)).readonly=!0),0===a&&t&&!n.schema.match(/\$_schema_/)&&"object"!=typeof o.add&&(o.add=o.add?" "+o.add+" ":"",-1!==o.add.indexOf("ui-date")||n.noautofocus||o.containerType||(o.add=o.add+"autofocus ")),!0);if(o.directive){var s=o.directive,l=o.customHeader||"",c=(l+="<"+s+' model="'+(n.model||"record")+'"',w[0]);$(o,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_"+o.name).replace(/\./g,"_");y[f]=angular.copy(o),delete y[f].directive,l+=' schema="'+f+'"';break;default:l+=" "+u.nodeName+'="'+u.value+'"'}}l+=" ";var p,m=F("camelCase")(o.directive);for(p in o)if(o.hasOwnProperty(p))switch(p){case"directive":case"schema":break;case"add":switch(typeof o.add){case"string":l+=" "+o.add;break;case"object":for(var h in o.add)o.add.hasOwnProperty(h)&&(l+=" "+h+'="'+o.add[h].toString().replace(/"/g,""")+'"');break;default:throw new Error("Invalid add property of type "+typeof o.add+" in directive "+o.name)}break;case m:for(var g in o[p])o[p].hasOwnProperty(g)&&(l+=" ".concat(o.directive,"-").concat(g,'="'),"string"==typeof o[p][g]?l+="".concat(o[p][g].replace(/"/g,"""),'"'):l+="".concat((JSON.stringify(o[p][g])||"").replace(/"/g,"""),'"'));break;default:o[p]&&("string"==typeof o[p]?l+=" fng-fld-"+p+'="'+o[p].replace(/"/g,""")+'"':l+=" fng-fld-"+p+'="'+(JSON.stringify(o[p])||"").replace(/"/g,""")+'"')}for(p in n)n.hasOwnProperty(p)&&"$"!==p[0]&&void 0!==n[p]&&(l+=" fng-opt-"+p+'="'+n[p].toString().replace(/"/g,""")+'"');r+=l=(l+='ng-model="'+o.name+'"></'+s+">")+(o.customFooter||""),i=!1}else if(o.containerType){var v,b=x(o);switch(o.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(o.content,null,n))+b.after);break;case"tabset":k=T.Y,r=(r=(r+=b.before)+C(o.content,null,n))+b.after;break;default:r=(r=(r+=b.before)+C(o.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===o.name}))&&(i=!1);i&&($(o,n),r+=D(o,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.$on("selectTab",function(e,t){var n;Array.isArray(y.tabs)&&-1!==(n=y.tabs.findIndex(function(e){return e.title===t}))&&(y.activeTabNo=n,e.preventDefault())}),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}),a=0,o=r;a<o.length;a++){if((i=o[a]).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,a=b[n],o=angular.isArray(a.subkey)?a.subkey:[a.subkey],i=a.name.split("."),s=h;1<i.length;)s=s[i.shift()]||{};for(var s=s[i[0]]=s[i[0]]||[],l=0;l<o.length;l++){if(o[l].selectFunc){if(!y[o[l].selectFunc]||"function"!=typeof y[o[l].selectFunc])throw new Error("Subkey function "+o[l].selectFunc+" is not properly set up");f=y[o[l].selectFunc](h,a)}else{if(!o[l].keyList)throw new Error("Invalid subkey setup for "+a.name);var c,d,u,f,p=o[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"===o[l].onNotFound?(c="Cannot find matching "+(o[l].title||o[l].path),N(function(){y.showError(c,"Unable to set up form correctly")}),-1):(d=(u=a.name.split(".")).pop(),u=u.join("."),(u?h[u]:h)[d].push(p)-1))}y["$_arrayOffset_"+a.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,a){function o(){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?a.html5hash()+e.url.replace("|id|",e.id):a.buildOperationUrl("edit",e.resource,void 0,e.id,e.resourceTab)}n.$watch("searchTarget",function(e){e&&0<e.length?(i=n.testTime||(new Date).valueOf(),t.get("/api/search?q="+e.replaceAll("+","%2b")+"&sentAt="+i).then(function(e){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=a.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":""):o())},function(e){console.log("Error in searchbox.js : "+e.data+" (status="+e.status+")")})):o()},!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 a,o,i=[],s=[];if(r="addAll"+r,"string"==typeof n)for(a=n.split(" "),o=0;o<a.length;o++)s.push(a[o]);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(a=t[r].split(" "),o=0;o<a.length;o++)0===a[o].indexOf("class=")?s.push(a[o].substring(6,a[o].length)):i.push(a[o]);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,a){function o(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]=a).$parent);l.items=l.items||[];try{c(t,s),i=l.newRecord?"creating":l.id?"editing":"listing",angular.isObject(s.$scope.contextMenu)&&(o(s.$scope.contextMenu),s.$scope.contextMenuPromise)&&s.$scope.contextMenuPromise.then(o),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 a,r,i={hashPrefix:"",html5Mode:!1,routing:"ngroute",prefix:""},s=["edit","view"],o=[{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){a.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){a.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,a,o){var i,s=r?"/"+r:"",l=e+"/"+n,c=o?"/"+o:"";switch(t){case"list":i=l+s;break;case"edit":i=l+s+"/"+a+"/edit"+c;break;case"view":i=l+s+"/"+a+"/view"+c;break;case"read":i=l+s+"/"+a+"/read"+c;break;case"new":i=l+s+"/new"+c}return i}function m(e,t){switch(i.routing){case"ngroute":a=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,o)},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,a,o;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"),a=n.indexOf("viewonly"),o=void 0,-1===r&&-1===a?-1!==(o=s.reduce(function(e,t){t=n.indexOf(t);return-1<t?t:e},-1))&&(c.id=e[t-=2+o]):-1!==r?(c.newRecord=!0,t-=1+r):t-=1+a,1!==o&&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,a){return p(i.prefix,e,t,n,r,a)},redirectTo:function(){return function(e,t,n,r,a){n.search({}),e="onDelete"===e?i.onDelete?"new"===i.onDelete?p(i.prefix,"new",t.modelName,t.formName,r,a):i.onDelete:p(i.prefix,"list",t.modelName,t.formName,r,a):p(i.prefix,e,t.modelName,t.formName,r,a),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,a,o,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],a=0;a<i.formSchema.length;a++)r.content.push(i.formSchema[a])}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?o&&n&&(h("Nested "+c,d.schema,p=[],null,c+".",!0,i,s),(m=v(c,f,a)).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,a),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,a){var o;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!=(o=n.form)&&o.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,a,h);else if(n.lookupListRef)s.setUpLookupListOptions(n.lookupListRef,t,r,a),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 o="Field "+t.name+' has unsupported type "'+e.instance+'"',console.log(o),a=" (typeof = "+typeof e.instance+")",console.log(a),new Error(o+a);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("."),a=n||t.record,o=0,i=r.length;o<i;o++)a[r[o]]||(Array.isArray(a)&&a[0][r[o]]?a=a[0]:a[r[o]]=o===i-1?[]:{}),a=a[r[o]];return a}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 a=0,o=n.length;a<o;a++)if("text"===n[a].type){t.push({name:n[a].name});break}0===t.length&&0!==n.length&&t.push({name:n[0].name})}if(0===t.length){for(var 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,a=t(e.lhs),o=t(e.rhs);switch(e.comp){case"eq":n=a===o;break;case"ne":n=a!==o;break;default:throw new Error("Unsupported comparator "+e.comp)}return n},k=function(e,n,r){var a=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,a+=1)}var o=!0;return e&&(t(e.lhs),t(e.rhs),0!==a||w(e,void 0)||(o=!1)),o};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 a,o,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(a=r.dataDependencies[c],o=0;o<a.length;o+=1)for(var u=a[o],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(a=r.dataDependencies[c],o=0;o<a.length;o+=1){var p=a[o].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===a[o]&&(0===(s=angular.element(document.querySelector("#f_"+p[0]+"List_"+i+" #cg_f_"+a[o].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 a,o,i;if(null!=(o=null==e?void 0:e.target)&&o.hasAttribute&&e.target.hasAttribute("disabled"))return e.preventDefault();e.target.offsetParent&&(o=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==(a=n.dataEventFunctions)?void 0:a.onInitialiseNewSubDoc)&&n.dataEventFunctions.onInitialiseNewSubDoc(t,r,i),o.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,a){if(null!=(i=null==n?void 0:n.target)&&i.hasAttribute&&n.target.hasAttribute("disabled"))return n.preventDefault();var o,i=l(t,r,a);"function"==typeof r.dataEventFunctions.onDeleteSubDoc&&(a=(a=r.formSchema.find(function(e){return e.name===t}))?a.schema:null,o=r.dataEventFunctions.onDeleteSubDoc(t,a,i,e)),o?r.showError(o):(i.splice(e,1),r.setFormDirty(n))},hasError:function(e,t,n,r){var a,o=!1;return r?(r=r[r.topLevelFormName])?(r="null"!==e?r[e.replace("$index",n)]:r)&&(a=r[t])&&a.$invalid&&!a.$$attr.readonly&&(a.$dirty?o=!0:angular.forEach(a.$validators,function(e,t){"required"!==t&&a.$error[t]&&(o=!0)})):console.log("hasError failed to find form! ",e,t,n):console.log("hasError called with no scope! ",e,t,n),o},decorateScope:function(a,o,i,e,t){function s(){for(var e=a.$$childHead;e;){if(e.tabset)return e.tabset;e=e.$$nextSibling}}a.record=e.record,a.phase="init",a.disableFunctions=e.disableFunctions,a.dataEventFunctions=e.dataEventFunctions,a.topLevelFormName=void 0,a.formSchema=[],a.tabs=[],a.listSchema=[],a.recordList=[],a.dataDependencies={},a.internalLookups=[],a.listLookups=[],a.conversions={},a.pageSize=60,a.pagesLoaded=0,r.decorateSecurableScope(e.baseScope=a,{pseudoUrl:t}),a.generateEditUrl=function(e){return o.generateEditUrl(e,a)},a.generateViewUrl=function(e){return o.generateViewUrl(e,a)},a.generateNewUrl=function(){return o.generateNewUrl(a)},a.scrollTheList=function(){var e;if(0<(null==(e=a.listSchema)?void 0:e.length))return i.scrollTheList(a);var t=a.$watchCollection("listSchema",function(e){if(0<(null==e?void 0:e.length))return t(),i.scrollTheList(a)})},a.getListData=function(e,t){return i.getListData(e,t,a.listSchema,a)},a.setPristine=function(e){e&&a.dismissError(),a[a.topLevelFormName]&&a[a.topLevelFormName].$setPristine()},a.skipCols=function(e){return 0<e?"col-md-offset-3":""},a.setFormDirty=function(e){e?angular.element(e.target).inheritedData("$formController").$setDirty():console.log("setFormDirty called without an event (fine in a unit test)")},a.add=function(e,t,n){return o.add(e,t,a,n)},a.hideTab=function(e,t,n){var r=i.getData(a,n);r&&Array.isArray(r)&&!r.includes(t)&&(n=a.tabs[a.activeTabNo].title===t,r.push(t),r.sort(),(t=a.baseForm)&&t.$setDirty(),n)&&(t=s())&&t.select(a.tabs.findIndex(function(e){return!r.includes(e.title)}))},a.addTab=function(e,t,n){var r,n=i.getData(a,n);n&&Array.isArray(n)&&-1!==(r=n.findIndex(function(e){return e===t}))&&(n.splice(r,1),(n=a.baseForm)&&n.$setDirty(),r=s())&&r.select(a.tabs.findIndex(function(e){return e.title===t}))},a.hasError=function(e,t,n){return o.hasError(e,t,n,a)},a.unshift=function(e,t,n){return o.unshift(e,t,a,n)},a.remove=function(e,t,n,r){return o.remove(e,t,n,a,r)},a.baseSchema=function(){return a.tabs.length?a.tabs:a.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,a){function t(e){var t,n,r=e;return"string"==typeof e&&("$"===e.slice(0,1)?(r=(a||"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,a=t;r<a.length;r++)if(l.requiresDisabledChildren(a[r]))return" disabled ";return e()}var o="isSecurelyDisabled('".concat(c,"')"),i=(0<t.length&&(i=t.map(function(e){return"requiresDisabledChildren('".concat(e,"')")}),o="(".concat(o," || ").concat(i.join(" || "),")")),"one-time"===d.formsAngular.elemSecurityFuncBinding);return s.readonly?i?e()+'ng-readonly="::'.concat(o,'" '):' ng-disabled="'.concat(o," || ").concat(s.readonly,'" '):' ng-disabled="'.concat(i?"::":"").concat(o,'" ')})(),h.getDisableableAttrs(c)]}function b(e,t,n){if(n.subschema&&n.model){for(var r=n.model,a=0,o="$parent.";r.startsWith(o);)a++,r=r.substring(o.length);return"".concat(e,"_{{").concat(o.repeat(a),"$index}}")}return"".concat(e,"_{{$index}}")}function y(e,t,n){return void 0!==e.$index||!!n.subschema}function a(e,t,n){for(;t.includes("@@");){var r=t.indexOf("@@")+2,a=t.indexOf("@@",r)-1,o=(s=t.substring(r,1+a)).endsWith("s"),i=(s=o?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+(o?"s":"")+t.substring(3+a)}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 a(e,t,"scopeStatic")},"none"):"scopeDynamic":"function"==typeof d.formsAngular.pseudo?"global":"none",a(e,t,r)):t},fieldChrome:function(e,t,n){var r="";if(t.id&&"function"==typeof t.id.replace){var a=t.nonUniqueId||t.nonuniqueid||t.id,o=void 0;if(t.id.includes(".")&&t.id.includes("{{"))for(var o="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]?o+=t.id[s]:o+="-";else o="cg_".concat(t.id.replace(/\./g,"-"));a="cg_".concat(a.replace(/\./g,"-")),a=h.considerVisibility(a,e);if(a.omit)return{omit:!0};r+='id="'.concat(y(e,0,n)?b(o,0,n):o,'"'),a.visibilityAttr&&(r+=" ".concat(a.visibilityAttr))}var l,c,a=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()?(a+=" form-group","vertical"===n.formstyle&&"block-level"!==t.size&&(d+='<div class="row">',a+=" 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",a,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 a,o="";return("bs3"===f.framework()||!["inline","stacked"].includes(r.formstyle)&&""!==t.label||n)&&(o="<label",v(r.formstyle,!(a="control-label"))?(t.linklabel||(o+=' for="'+t.id+'"'),void 0!==t.labelDefaultClass?a+=" "+t.labelDefaultClass:"bs3"===f.framework()&&(t.coloffset?a+=" col-sm-"+(3-t.coloffset).toString():a+=" col-sm-3")):["inline","stacked"].includes(r.formstyle)&&(o+=' for="'+t.id+'"',a+=" sr-only"),o+=m.addAll(e,"Label",null,r)+' class="'+a+'">'+t.label,n&&(n=a=void 0,n=r.subschema?((a=t.name.replace(r.subschemaroot,"")).startsWith(".")&&(a=a.substring(1)),"subDoc"):(a=t.name,"record"),r=l(t,e),o+=" <i ".concat(r.join(" "),' id="add_').concat(t.id,'" ng-click="add(\'').concat(a,"', $event, ").concat(n,')" class="').concat(s(),'-plus-sign"></i>')),o+="</label>",t.linklabel)&&(e='<fng-link fld="'+t.name+'" ref="'+t.ref+'" text="'+escape(o)+'"',t.form&&(e+=' form="'+t.form+'"'),t.linktab&&(e+=' linktab="'+t.linktab+'"'),o=e+="></fng-link>"),o},glyphClass:s,allInputsVars:function(e,t,n,r,a,o){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+'"',a&&(r+=' id="'.concat(a,'"')),o?r+=' name="'.concat(o,'"'):a&&(r+=' name="'.concat(a,'"')),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 a,r=(t.helpInline||"")+(t.helpinline||"");return 0<r.length&&(a="bs2"===f.framework()?{el:"span",cl:"help-inline"}:{el:"div",cl:"help-block"},e+="<".concat(a.el,' class="').concat(a.cl,'">').concat(r,"</").concat(a.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,a){var o="bs3"===f.framework()?'ng-class="skipCols($index)" ':"",a=a.subschema?"subDoc"+r.name.replace(a.subschemaroot,""):(a.model||"record")+"."+r.name,i="",n=(i+='<div id="'+r.id+'List" class="'+t.join(" ")+'" '+o+' ng-repeat="arrayItem in '+a+' 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>",o="bs3"===f.framework()?'ng-class="skipCols('+a+'.length)" ':"";return r.help&&(i+='<div class="array-help-block '+t.join(" ")+'" '+o+' 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 o(e,t,n,r,a){var o=n.info.name,i=(r&&(null!=a&&a.nonUniqueIdSuffix?(t=t.replace(r,a.nonUniqueIdSuffix),o+=".".concat(a.nonUniqueIdSuffix)):o+=".".concat(r)),m.handleReadOnlyDisabled({id:t,name:o,nonUniqueId:n.info.nonuniqueid,readonly:n.info.readonly},e));if(null!=a&&a.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,a){return o(e,t,n,r,a).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 a=t.info.id;return n&&(n.startsWith("_")||(a+="_"),a+=n),a=r?s(e,t,a):a}function c(e,t,n,r){e=o(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 a(e){var t,e=e.replace(/"/g,'"');return""===e||"true"===e||"false"!==e&&(t=Number(e),!isNaN(t)&&isFinite(t)?t:e)}var o,i,s={},l={formStyle:e.formstyle},c={},d=t?t.length:0,u=null==t?void 0:t.toLowerCase();for(o in e)e.hasOwnProperty(o)&&("fngfld"===(i=o.toLowerCase()).slice(0,6)?s[i.slice(6)]=a(e[o]):"fngopt"===i.slice(0,6)?l[i.slice(6)]=a(e[o]):t&&i.slice(0,d)===u&&(c[_.kebabCase(o.slice(d))]=a(e[o])));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 a=l(e,t,n,!1),o=s(e,t,a);return'id="'.concat(o,'" ').concat(i(e,a,t,n,r))}return{extractFromAttr:h,buildInputMarkup:function(e,t,n,r){var a,o,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?"":(a=m.controlDivClasses(u,f),o=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?o+=m.handleArrayInputAndControlDiv(d,a,e,f,u):o+=m.handleInputAndControlDiv(d,a),o+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),a=s(e,t,r);return'id="'.concat(a,'" ').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)},findIdInSchemaAndFlagNeedX:function e(t,n){for(var r=!1,a=0;a<t.length;a++){var o=t[a];if(o.id===n){r=o.needsX=!0;break}if(o.schema&&e(o.schema,n)){r=!0;break}}return r}}}e=e.services||(e.services={}),t.$inject=["FormMarkupHelperService"],e.PluginHelperService=t})(fng=fng||{}),(O=>{var e;function t(o,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 a=v(e,t,n,!!r);if(a.lastObject&&a.key)if(r)if(angular.isArray(a.lastObject))for(var o=0;o<a.lastObject.length;o++)a.lastObject[o][a.key]=r[o];else a.lastObject[a.key]=r;else delete a.lastObject[a.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 a=t.split("."),o=a.length-1,i=e,s=0;s<o;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[a[s]]}):(r&&!i[a[s]]&&(i[a[s]]={}),i[a[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?a[o]:void 0}},w=function(e,t,n){var r,a=v(e,t,n);return r=a.lastObject&&a.key?angular.isArray(a.lastObject)?_.map(a.lastObject,function(e){return e[a.key]}):a.lastObject[a.key]:r};function k(e,t,n,r){if(void 0===n&&(n=null),(i=w(e,t)||"")&&n){var a=_.find(n,function(e){return e.name===t});if(a)switch(a.params){case void 0:break;case"timestamp":var o=i.toString().substring(0,8),o=new Date(1e3*parseInt(o,16)),i=o.toLocaleDateString()+" "+o.toLocaleTimeString();break;default:i=r.dataEventFunctions[a.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 a=e[1],o=t[e[0]],i=n;if(void 0!==o)if(angular.isArray(o))for(var s=0;s<o.length;s++)S(a,o[s],i);else S(a,o,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,a){var o="string"==typeof t?e[t]:t,i="string"==typeof n?e[n]:n;o.length=0,i.length=0,r&&0<r.length&&r.forEach(function(e){var t=e[a];t&&0<t.length&&(o.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","email"].includes(e.type)||"select"===e.type&&!e.ids)?!0:t};function $(e,t,n){e=e.conversions;return(e=n?w(e,n)||{}:e)[t]}var C=function(e,t,n,r,a,o,i){o=o||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,o,u)}else{l.internalRef&&x(r,l.options,l.ids,o[l.internalRef.property],l.internalRef.value);var f=k(t,c,null,r);if(l.array&&D(l)&&f&&!(0<f.length&&null!=(m=f[0])&&m.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,a))&&h.fngajax&&"function"==typeof h.fngajax&&!h.noconvert&&h.fngajax(d,l,function(e,t){y(o,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 a=[],o=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));a.push(s=o?{x:s}:s)}return a}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 a(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 a=t.indexOf(e);if(-1===a)throw new Error("convertListValueToId: Invalid data - value "+e+" not found in "+t+" processing "+r);return n[a]},E=function(e,t,n,r){"object"==typeof e&&(e=e.id);var a=t.indexOf(e);if(-1===a&&-1===(a=n.indexOf(e)))throw new Error("convertIdToListValue: Invalid data - id "+e+" not found in "+t+" processing "+r);return n[a]};function L(t,n,r,e,a){a&&0<a.length&&a.length===e.length&&n[r]&&-1<(a=a.findIndex(function(e){return e[t.value]===n[r]}))&&(e=e[a][t.value])&&(n[r]=e)}function I(e,f,i,t,p){var n=!f.id&&!f.newRecord;function s(o,u){f.internalLookups.forEach(function(n){var r=o[n.ref.property],a=u[n.ref.property];x(f,n.lookupOptions,n.lookupIds,r,n.ref.value),(r&&0<r.length||a&&0<a.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,a)}):angular.isArray(f.record[t.lastPart])?f.record[t.lastPart].forEach(function(e){L(n.ref,e,"x",r,a)}):L(n.ref,f.record,t.lastPart,r,a)})}),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(o,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],a=(r.length=0,f[n.formInstructions.ids]),t=(a.length=0,l.data[c.ref.property]||[]),o=0;o<t.length;o++){var i=t[o][c.ref.value],s=_.sortedIndex(r,i);r[s]===i&&(i=i+" ("+t[o]._id+")",s=_.sortedIndex(r,i)),r.splice(s,0,i),a.splice(s,0,t[o]._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=a.indexOf(e);y(f.record,n.formInstructions.name,t,-1===e?void 0:r[e])}):-1!==(e=a.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&&a(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 a=O.formsAngular.title.prefix||"";if(f.editFormHeader)a+=f.editFormHeader();else for(var o in f.listSchema)if(f.listSchema.hasOwnProperty(o)){if("object"==typeof f.getListData(f.record,f.listSchema[o].name))return;a+=f.getListData(f.record,f.listSchema[o].name)+" "}a=a.trimEnd()+(O.formsAngular.title.suffix||""),d.document.title=a.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||o.$$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(a){return function(e){if(-1!==[200,400,403].indexOf(e.status)){var t="";if(e.data&&e.data.errors)for(var n in e.data.errors)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.",a.phase="error",a.showError(t)}else{var r;404===e.status?o.search({}).path("/404"):("string"!=typeof(r=e.data)&&(r=JSON.stringify(r)),500!==e.status&&(r=e.status+" "+r),a.showError(r))}}}function T(e,t,n){n.allowLocationChange=!1,t.phase="reading","function"==typeof t.dataEventFunctions.onAfterRead&&t.dataEventFunctions.onAfterRead(e),a(t.originalData=e,t,n)}function r(e,t,n,r){var a=t.name.split("."),o=r.find(function(e){return e.ref.property===n.property&&e.ref.value===n.value}),a={formInstructions:t,lastPart:a.pop(),possibleArray:a.join(".")};o||r.push(o={ref:n,lookupOptions:[],lookupIds:[],handlers:[]}),o.handlers.push(a),e[t.options]=o.lookupOptions,e[t.ids]=o.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?o.search({}).path("/404"):t.handleHttpError(e)})},scrollTheList:function(t){var n=t.pagesLoaded;m.getPagedAndFilteredList(t.modelName,{aggregate:o.$$search.a,find:o.$$search.f,limit:t.pageSize,skip:n*t.pageSize,order:o.$$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,o)},function(e){var t;404===e.status?c.redirectTo()("onDelete",n,o):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,o,e._id)):n.showError(e)},n.handleHttpError)},getListData:k,suffixCleanId:b,getData:w,setData:y,setUpLookupOptions:function(e,a,o,i){var s=o[a.options]=[],l=o[a.ids]=[];(a.filter?m.getPagedAndFilteredList(e,Object.assign({concatenate:!0},a.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]+")")}),o.readingRecord&&o.readingRecord.then(function(){g(a,o,i)})}}).catch(function(e){o.handleHttpError(e)})},setUpLookupListOptions:function(o,i,s,l){var c=s[i.options]=[],d=s[i.ids]=[];"$"===o.id[0]?r(s,i,o,s.listLookups):m.readRecord(o.collection,s.$eval(o.id)).then(function(e){for(var t=e.data[o.property],n=0;n<t.length;n++){var r=t[n][o.value],a=_.sortedIndex(c,r);c[a]===r&&(r=r+" ("+t[n]._id+")",a=_.sortedIndex(c,r)),c.splice(a,0,r),d.splice(a,0,t[n]._id)}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")],a=l;if(t.array){for(var o=[],i=0;i<n.length;i++)o.push(N(n[i],r,a,t.name));return o}return N(n,r,a,t.name)});else{var a=$(m,e,h);if(a){var o=w(f,e,null),i=void 0;if(s.array){if(i=[],o)for(var c=0;c<o.length;c++)i[c]=g(o[c],a)}else i=g(o,a);y(f,e,null,i)}}}},v=0;v<u.length;v++)e();return f},convertIdToListValue:E,handleError:t,decorateScope:function(s,n,r,a){s.handleHttpError=t(s),s.cancel=function(){angular.copy(a.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,a.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,a):r.createNew(t,n,s,a)})},s.newClick=function(){c.redirectTo()("new",s,o)},s.$on("$locationChangeStart",function(e,t){a.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}):(a.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;(!a.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,a)}e&&("function"==typeof s.dataEventFunctions.onBeforeDelete?s.dataEventFunctions.onBeforeDelete(a.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,a.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,a.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,a.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,a.master,s[s.topLevelFormName])},s.setDefaults=function(e,a){void 0===a&&(a="");var o={};return e.forEach(function(e){if(void 0!==e.defaultValue){for(var t=e.name.replace(a,"").split("."),n=o,r=0;r<t.length-1;r++)n[t[r]]||(n[t[r]]={}),n=n[t[r]];n[t[t.length-1]]=e.defaultValue}}),o},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 a=0,o=[s,r];a<o.length;a++){var i=o[a];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,a){s.getSchema(t.modelName,t.formName).then(function(e){I(e.data,t,n,r,a)},t.handleHttpError)}}}e=O.services||(O.services={}),t.$inject=["$location","$window","$filter","$timeout","$sce","RoutingService","CssFrameworkService","SubmissionsService","SchemasService"],e.RecordHandlerService=t})(fng=fng||{}),(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 a(e){return!!d.formsAngular.elemSecurityFuncBinding&&("hidden"===e&&!!d.formsAngular.hiddenSecurityFuncName||"disabled"===e&&!!d.formsAngular.disabledSecurityFuncName)}function o(e,t){return a(t)&&("hidden"===t&&r[d.formsAngular.hiddenSecurityFuncName]&&(!e||!!e.isSecurelyHidden)||"disabled"===t&&r[d.formsAngular.disabledSecurityFuncName]&&(!e||!!e.isSecurelyDisabled))}function n(e,t){return r[d.formsAngular.hiddenSecurityFuncName](e,t)}function 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:a,canDoSecurityNow:o,isSecurelyHidden:n,isSecurelyDisabled:s,getHideableAttrs:c,getDisableableAttrs:e,getDisableableAncestorAttrs:function(e){return t(e,d.formsAngular.disableableAncestorAttr)},decorateSecurableScope:function(e,t){a("hidden")&&(!d.formsAngular.skipHiddenSecurityFuncName||null!=t&&t.overrideSkipping||"function"!=typeof r[d.formsAngular.skipHiddenSecurityFuncName]||!r[d.formsAngular.skipHiddenSecurityFuncName](null==t?void 0:t.pseudoUrl))&&(e.isSecurelyHidden=function(e){return n(e,null==t?void 0:t.pseudoUrl)}),a("disabled")&&(!d.formsAngular.skipDisabledSecurityFuncName||null!=t&&t.overrideSkipping||"function"!=typeof r[d.formsAngular.skipDisabledSecurityFuncName]||!r[d.formsAngular.skipDisabledSecurityFuncName](null==t?void 0:t.pseudoUrl))&&(e.isSecurelyDisabled=function(e){return s(e,null==t?void 0:t.pseudoUrl)},!d.formsAngular.skipDisabledAncestorSecurityFuncName||null!=t&&t.overrideSkipping||r[d.formsAngular.skipDisabledAncestorSecurityFuncName],e.requiresDisabledChildren=function(e){return"+"===i(e,null==t?void 0:t.pseudoUrl)})},doSecurityWhenReady:function(t){var n;o(void 0,"hidden")?t():a("hidden")&&(n=r.$watch(d.formsAngular.hiddenSecurityFuncName,function(e){e&&(n(),t())}))},considerVisibility:function(e,t){var n=c(e);if(o(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 o(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,a){return(()=>{var e="";if(o(r,"disabled")){if((a=a||{}).attrRequiresValue&&a.forceNg)throw new Error("Invalid combination of parameters provided to generateDisabledAttr() [attrRequiresValue and forceNg]");var t=a.attr||"disabled";if("instant"===d.formsAngular.elemSecurityFuncBinding){if(r.isSecurelyDisabled(n)){if(a.attrRequiresValue)return" ".concat(t,'="true"');if(!a.forceNg)return" ".concat(t);e="true"}}else e="".concat(l(),"isSecurelyDisabled('").concat(n,"')");if(e)return("disabled"===t?' data-ng-disabled="':" 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(a){function n(e){function t(e,t){void 0!==t&&""!==t&&("object"==typeof t&&(t=JSON.stringify(t)),""===n?n="?":n+="&",n+=e+"="+t)}var n="";return t("l",e.limit),t("f",e.find),t("p",e.projection),t("a",e.aggregate),t("o",e.order),t("s",e.skip),t("c",e.concatenate),n}var r=!0,o=new ExpirationCache;function 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 a.get("/api/".concat(e,"/").concat(r,"/list").concat(t),{cache:o})},getAllListAttributes:function(e){return a.get("/api/".concat(e,"/listAll"),{cache:o})},getAllPickListAttributes:function(e){return a.get("/api/".concat(e,"/picklistAll"),{cache:o})},getPagedAndFilteredList:function(e,t){if(t.projection)throw new Error("Cannot use projection option for getPagedAndFilteredList, because it only returns list fields");return void 0===t.concatenate&&(t.concatenate=!1),a.get("/api/".concat(e,"/listAll").concat(n(t)))},getPagedAndFilteredListFull:function(e,t){return a.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 a.get(t)},getAll:function(e,t){t=angular.extend({cache:!!r&&o},t);return a.get("/api/".concat(e),t)},deleteRecord:function(e,t,n){e=i(e,n,t);return a.delete(e)},updateRecord:function(e,t,n,r){o.remove("/api/".concat(e));e=i(e,r,t);return a.post(e,n)},createRecord:function(e,t,n){o.remove("/api/".concat(e));e=i(e,n)+"/new";return a.post(e,t)},useCache:function(e){r=e},getCache:function(){return!!o},clearCache:function(){o.removeAll()}}}e=e.services||(e.services={}),t.$inject=["$http"],e.SubmissionsService=t})(fng=fng||{}),(u=>{var e;function t(t,n,e,r,a,o,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")})}o.loadControllerAndMenu(t.sharedData,i,0,!1,t.$new()),t.formName&&o.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,a,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(a,e,i,r,t,n,o){var s;function l(e){i.contextMenu=e;var t="".concat(_.camelCase(e),"ContextMenu");i.contextMenuId=void 0,o.doSecurityWhenReady(function(){i.contextMenuId=t,i.contextMenuHidden=o.isSecurelyHidden(i.contextMenuId),i.contextMenuDisabled=o.isSecurelyDisabled(i.contextMenuId)})}i.clearContextMenu=function(){i.items=[],i.contextMenu=void 0,i.contextMenuId=void 0,i.contextMenuHidden=void 0,i.contextMenuDisabled=void 0},(a.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,a=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&&(a||i.showShortcuts)?a?t("cancelButton"):i.showShortcuts=!1:a&&(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)a.$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 a=!1,o=e-1;0<=o&&!n&&!a;)i.items[o].divider?n=!0:t(i.items[o])?--o:a=!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…</div>\n <div class="container-fluid page-header report-header">\n <div class="header-lhs">\n <h1>{{ titleWithSubstitutions }}</h1>\n </div>\n <div class="header-rhs">\n <form-input schema="paramSchema" name="paramForm" ng-show="paramSchema" formstyle="horizontalCompact"></form-input>\n </div>\n </div>\n <div class="container-fluid page-body report-body">\n <div class="row-fluid report-grow">\n <div class="gridStyle" style="height:100%;" ui-grid="gridOptions" ui-grid-selection ui-grid-resize-columns></div>\n </div>\n </div>\n</div>\n'),e.put("base-edit.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="phase == \'ready\' && !showLoading" class="loading">Loading…</div>\n <div ng-hide="!showSpinner" class="spinner">Just a second…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header edit-header">\n <div class="header-lhs col-sm-8 span8">\n <h1 id="header-text">{{modelNameDisplay}} :\n <span id="header-data-desc">\n <span ng-show="!!editFormHeader" >{{ editFormHeader() }}</span>\n <span ng-hide="!!editFormHeader" ng-repeat="field in listSchema" ng-bind-html="getListData(record, field.name) + \' \'"></span>\n </span>\n </h1>\n </div>\n <div class="header-rhs col-sm-2 span2">\n <div form-buttons></div>\n </div>\n </div>\n <div class="container-fluid page-body edit-body">\n <form-input name="baseForm" schema="baseSchema()" formstyle="compact"></form-input>\n </div>\n\x3c!-- <pre>--\x3e\n \x3c!--Record--\x3e\n \x3c!--{{ record | json }}--\x3e\n \x3c!--formSchema--\x3e\n \x3c!--{{ formSchema | json }}--\x3e\n\x3c!-- </pre>--\x3e\n</div>\n'),e.put("base-list-view.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="!showLoading" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header list-header">\n <div class="header-lhs col-sm-8 span8">\n <h1>{{modelNameDisplay}}</h1>\n </div>\n </div>\n <div class="page-body list-body">\n <div ng-class="css(\'rowFluid\')" infinite-scroll="scrollTheList()">\n <a ng-repeat="record in recordList" ng-href="{{generateViewUrl(record)}}">\n <div class="list-item">\n <div ng-class="css(\'span\',12/listSchema.length)" ng-repeat="field in listSchema">{{getListData(record, field.name)}} </div>\n </div>\n </a>\n </div>\n </div>\n</div>\n'),e.put("base-list.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="!showLoading" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header list-header">\n <div class="header-lhs col-sm-8 span8">\n <h1>{{modelNameDisplay}}</h1>\n </div>\n <div class="header-rhs col-sm-2 span2">\n <a ng-href="{{generateNewUrl()}}"><button id="newBtn" class="btn btn-default"><i class="icon-plus"></i> New</button></a>\n </div>\n </div>\n <div class="page-body list-body">\n <div ng-class="css(\'rowFluid\')" infinite-scroll="scrollTheList()">\n <a ng-repeat="record in recordList" ng-href="{{generateEditUrl(record)}}">\n <div class="list-item">\n <div ng-class="css(\'span\',12/listSchema.length)" ng-repeat="field in listSchema">{{getListData(record, field.name)}} </div>\n </div>\n </a>\n </div>\n </div>\n</div>\n'),e.put("base-view.html",'<div ng-controller="BaseCtrl">\n <error-display></error-display>\n <div ng-hide="phase == \'ready\' && !spinning" class="loading">Loading…</div>\n <div ng-class="css(\'rowFluid\')" class="page-header edit-header">\n <div class="header-lhs col-sm-8 span8">\n <h1 id="header-text">{{modelNameDisplay}} :\n <span ng-repeat="field in listSchema" ng-bind-html="getListData(record, field.name) + \' \'"></span>\n </h1>\n </div>\n </div>\n <div class="container-fluid page-body edit-body">\n <form-input name="baseForm" schema="baseSchema()" formstyle="compact" viewform="true"></form-input>\n </div>\n</div>\n'),e.put("error-display-bs2.html",'<div id="display-error" ng-show="errorVisible" class="row-fluid ng-hide">\n <div class="alert alert-error offset1 span10">\n <button type="button" id="err-hide" class="close" ng-click="dismissError()"><i class="icon-remove"></i></button>\n <button type="button" id="err-pin" class="close" ng-click="stickError()"><i class="icon-eye-open"></i></button>\n <h4 id="err-title">{{alertTitle}}</h4>\n <div id="err-msg" ng-bind-html="errorMessage"></div>\n </div>\n</div>\n'),e.put("error-display-bs3.html",'<div id="display-error" ng-show="errorVisible" class="row ng-hide">\n <div class="alert alert-error col-md-offset-1 col-md-10 alert-danger">\n <button type="button" id="err-hide" class="close" ng-click="dismissError()"><i class="glyphicon glyphicon-remove"></i></button>\n <button type="button" id="err-pin" class="close" ng-click="stickError()"><i class="glyphicon glyphicon-pushpin"></i></button>\n <h4 id="err-title">{{alertTitle}}</h4>\n <div id="err-msg" ng-bind-html="errorMessage"></div>\n </div>\n</div>\n'),e.put("error-messages.html",'<div ng-message="required">A value is required for this field</div>\n<div ng-message="minlength">Too few characters entered</div>\n<div ng-message="maxlength">Too many characters entered</div>\n<div ng-message="min">That value is too small</div>\n<div ng-message="max">That value is too large</div>\n<div ng-message="email">You need to enter a valid email address</div>\n<div ng-message="pattern">This field does not match the expected pattern</div>\n'),e.put("form-button-bs2.html",'<div class="form-btn-grp">\n <div class="btn-group pull-right">\n <button id="saveButton" class="btn btn-mini btn-primary form-btn" ng-click="save()" ng-disabled="isSaveDisabled()"><i class="icon-ok"></i> Save</button>\n <div id="why-disabled" ng-class="{showwhy:!!whyDisabled}" ng-bind-html="whyDisabled"></div>\n <button id="cancelButton" class="btn btn-mini btn-warning form-btn" ng-click="cancel()" ng-disabled="isCancelDisabled()"><i class="icon-remove"></i> Cancel</button>\n </div>\n <div class="btn-group pull-right">\n <button id="newButton" class="btn btn-mini btn-success form-btn" ng-click="newClick()" ng-disabled="isNewDisabled()"><i class="icon-plus"></i> New</button>\n <button id="deleteButton" class="btn btn-mini btn-danger form-btn" ng-click="deleteClick()" ng-disabled="isDeleteDisabled()"><i class="icon-minus"></i> Delete</button>\n </div>\n</div>\n'),e.put("form-button-bs3.html",'<div class="form-btn-grp">\n <div class="btn-group pull-right">\n <button id="saveButton" class="btn btn-primary form-btn btn-xs" ng-click="save()" ng-disabled="isSaveDisabled()"><i class="glyphicon glyphicon-ok"></i> Save</button>\n <div id="why-disabled" ng-class="{showwhy:!!whyDisabled}" ng-bind-html="whyDisabled"></div>\n <button id="cancelButton" class="btn btn-warning form-btn btn-xs" ng-click="cancel()" ng-disabled="isCancelDisabled()"><i class="glyphicon glyphicon-remove"></i> Cancel</button>\n </div>\n <div class="btn-group pull-right">\n <button id="newButton" class="btn btn-success form-btn btn-xs" ng-click="newClick()" ng-disabled="isNewDisabled()"><i class="glyphicon glyphicon-plus"></i> New</button>\n <button id="deleteButton" class="btn btn-danger form-btn btn-xs" ng-click="deleteClick()" ng-disabled="isDeleteDisabled()"><i class="glyphicon glyphicon-minus"></i> Delete</button>\n </div>\n</div>\n'),e.put("search-bs2.html",'<form class="navbar-search pull-right">\n <div id="search-cg" class="control-group" ng-class="errorClass">\n <input type="text" spellcheck="false" autocomplete="off" id="searchinput" ng-model="searchTarget" ng-model-options="{debounce:500}" class="search-query" placeholder="{{searchPlaceholder}}" ng-keyup="handleKey($event)">\n </div>\n</form>\n<div class="results-container" ng-show="results.length >= 1">\n <div class="search-results">\n <div ng-repeat="result in results">\n <a href="{{result.href}}" ng-class="resultClass($index)" title="{{result.additional}}">{{result.resourceText}} {{result.text}}</a>\n </div>\n <div ng-show="moreCount > 0">(plus more - continue typing to narrow down search...)\n </div>\n </div>\n</div>\n'),e.put("search-bs3.html",'<form class="pull-right navbar-form">\n <div id="search-cg" class="form-group" ng-class="errorClass">\n <input type="text" spellcheck="false" autocomplete="off" id="searchinput" ng-model="searchTarget" ng-model-options="{debounce:500}" class="search-query form-control" placeholder="{{searchPlaceholder}}" ng-keyup="handleKey($event)">\n </div>\n</form>\n<div class="results-container" ng-show="results.length >= 1">\n <div class="search-results">\n <div ng-repeat="result in results">\n <a href="{{result.href}}" ng-class="resultClass($index)" title="{{result.additional}}">{{result.resourceText}} {{result.text}}</a>\n </div>\n <div ng-show="moreCount > 0">(plus more - continue typing to narrow down search...)\n </div>\n </div>\n</div>\n')}]);
|
package/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.
|
|
9
|
+
"version": "0.12.0-beta.325",
|
|
10
10
|
"packageManager": "npm@10.2.4",
|
|
11
11
|
"type": "module",
|
|
12
12
|
"engines": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"scripts": {
|
|
20
20
|
"test": "gulp --gulpfile /home/mark/Projects/forms-angular/forms-angular/gulpfile.cjs test",
|
|
21
21
|
"tidy": "find . -name '*.js' -not -path '**/node_modules/**' -and -not -path '**/website/**' -and -not -path '**/test/**' -and -not -path '**/models/**' -and -not -name 'gulpfile.js' -and -not -name 'index.js' -and -not -name 'Gruntfile.js' -and -not -name '*.conf.js' -delete && find . -name '*.map' -not -path '**/node_modules/**' -delete",
|
|
22
|
-
"build": "if [ -d 'node_modules/bower' ]; then npx bower install --config.directory=node_modules --production jquery@2.0.3 bootstrap-2-3-2=git://github.com/twbs/bootstrap.git#v2.3.2 bootstrap-3-4-0=git://github.com/twbs/bootstrap.git#v3.4.0; fi && gulp build",
|
|
22
|
+
"build": "if [ -d 'node_modules/bower' ]; then npx bower install --config.directory=node_modules --production jquery@2.0.3 bootstrap-2-3-2=git://github.com/twbs/bootstrap.git#v2.3.2 bootstrap-3-4-0=git://github.com/twbs/bootstrap.git#v3.4.0; fi && gulp -f gulpfile.cjs build",
|
|
23
23
|
"reset": "cd website && rm -rf node_modules && npm install && cd .. && rm -rf node_modules && npm install && npm run build"
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"https://github.com/advisories/GHSA-4w4v-5hc9-xrr2": {
|
|
83
83
|
"description": "angular vulnerable to super-linear runtime due to backtracking",
|
|
84
84
|
"mitigation": "We do not make any use of ng-srcset",
|
|
85
|
-
"nextReview": "2026-
|
|
85
|
+
"nextReview": "2026-04-01T00:00:00Z",
|
|
86
86
|
"reviewBy": "Search plait and forms-angular looking for srcset"
|
|
87
87
|
}
|
|
88
88
|
},
|