PageSourceSearch

https://app.waiverforever.com/app/waiverList.ec5f2110883978b88c1a.js

js waiverforever.com collected 2026-10-01 13:08:27 UTC 88,264 bytes, 1 lines download raw bytes

1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e.SENTRY_RELEASE={id:"qs3-webapp@61baa86f"};var t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="caea3a6e-3d56-4ad6-bb9f-1a38fe71e35f",e._sentryDebugIdIdentifier="sentry-dbid-caea3a6e-3d56-4ad6-bb9f-1a38fe71e35f")}catch(e){}}(),(globalThis.webpackChunkqs3_webapp=globalThis.webpackChunkqs3_webapp||[]).push([[439],{1874(e,t,i){"use strict";i.r(t),i.d(t,{default:()=>f});var a=i(1812),n=i(80313),s=(i(19870),i(5576),i(6152),i(64562),i(33315),i(83245)),r=i.n(s);const o=["platform","group","signTime","note","status","expiration","payment"],l=["platform","group","signTime","note","status","expiration","payment"];class c{static get inject(){return["Confirmation","premiumModalHelper"]}constructor(e,t){this.Confirmation=e,this.premiumModalHelper=t}$onInit(){this.paginationOptions=[50,100,200],this.perPage=this.resolve.perPage,this.columns=[{name:i18next.t("Share"),value:"platform",show:!1},{name:i18next.t("Request Group"),value:"group",show:!1},{name:i18next.t("Signed Time"),value:"signTime",show:!1},{name:i18next.t("Note"),value:"note",show:!1},{name:"Status",value:"status",show:!1},{name:i18next.t("Payment"),value:"payment",show:!1},{name:"Expiration",value:"expiration",show:!1}],this._sortColumns(this.resolve.columnOrder),this._showColumns(this.resolve.showColumns)}_sortColumns(e){this.columns=this.columns.sort((t,i)=>e.indexOf(t.value)-e.indexOf(i.value))}_showColumns(e){e.forEach(e=>{const t=this.columns.find(t=>t.value===e);t&&(t.show=!0)})}reset(){return this.Confirmation.confirm({title:i18next.t("Continue to reset?"),message:i18next.t("Are you sure you want to reset the columns to their default settings?"),confirm:i18next.t("Yes"),cancel:i18next.t("No")}).then(()=>{this._showColumns(o),this._sortColumns(l),this.perPage=50})}toggleColumn(e){e.show=!e.show}submit(){this.modalInstance.close({perPage:this.perPage,showColumns:this.columns.filter(e=>e.show).map(e=>e.value),columnOrder:this.columns.map(e=>e.value)})}showPremiumPopup(){this.premiumModalHelper.open({featureKey:"Auto Expiration",featureName:i18next.t("Auto Expiration"),videoId:"804719389",includedInCurrentPlan:this.resolve.waiverExpirationAvailable,source:"auto-expiration",description:i18next.t("Automatically expire waivers after some time or on a specific day.")})}dismiss(){this.modalInstance.dismiss()}}c.$inject=["Confirmation","premiumModalHelper"],angular.module("waiverforeverApp.waiverList").component("filterModal",{bindings:{modalInstance:"<",resolve:"<"},controller:c,template:r(),controllerAs:"vm"});var d=i(51509),p=i(92364),u=i(99621),g=i(98609),v=i(62409);const{acceptWaiverBatch:h,runWithPromiseLock:m}=i(2835);angular.module("waiverforeverApp.waiverList").directive("waiverListSignedWaiverView",(0,d.F)({template:i(47488),scope:{waiverId:"<",close:"&",prev:"&",next:"&",hasPrev:"&",hasNext:"&",refresh:"&",onOperation:"<"}})).component("paymentDetails",p.A);const f=angular.module("waiverforeverApp.waiverList").controller("WaiverListController",["$scope","$rootScope","WFWaiverListProcessor","Confirmation","$uibModal","toastr","$state","$location","$transition$","Guidance","$timeout","authenticator","$interval","WFApiClient","premiumModalHelper","onboardingTaskManager",function(e,t,s,r,c,d,p,f,w,b,x,y,k,S,D,_){const P={current:!1},T=w.params();function W(e){const{state:t,id:i,source:a}=e;return"accepted"===t?`/get_signed_doc/${i}`:"pending"===t&&"WF_REQUEST_SIGN"!==a?`/get_pending_waiver/${i}`:`/get_requested_waiver/${i}`}e.isTemplateLevel="app.waiverTemplateRoot.waiverList"===p.current.name,e.hasEditPermission=y.hasPermission(["waiver_editing"]),e.hasExportPermission=y.hasPermission(["data_exporting"]),e.sidebarStateInfo=[{text:"all",value:"all",count:0},{text:"approved",value:"accepted",count:0},{text:"pending",value:"pending",count:0},{text:"revoked",value:"revoked",count:0},{text:"expired",value:"expired",count:0},{text:"archived",value:"archived",count:0}],e.initSidebarState=function(){return T.archived?{text:"archived",value:"archived",count:0}:T.expired?{text:"expired",value:"expired",count:0}:{pending:{text:"pending",value:"pending",count:0},accepted:{text:"approved",value:"accepted",count:0},revoked:{text:"revoked",value:"revoked",count:0}}[T.state]||{text:"all",value:"all",count:0}},e.currentSidebarState=e.initSidebarState(),e.templateOptions=[],e.sourceOptions=[{text:i18next.t("iOS Kiosk"),value:"WF_IOS_APP"},{text:i18next.t("Android Kiosk"),value:"WF_ANDROID_APP"},{text:i18next.t("Online Sign"),value:"WF_REMOTE_SIGN"},{text:i18next.t("Request Sign"),value:"WF_REQUEST_SIGN"},{text:i18next.t("Embed waiver(widget)"),value:"EMBED_WAIVER_WIDGET"}],e.stateOptions=[{text:i18next.t("Pending"),value:"pending"},{text:i18next.t("Approved"),value:"accepted"},{text:i18next.t("Revoked"),value:"revoked"}],e.searchTypes=[{value:"search_term",option:"All",text:"All"},{value:"note",option:"By Note",text:"Note"},{value:"tag_names",option:"By Tag",text:"Tag"},{value:"platforms",option:"By Platform",text:"Platform"}],e.isSearching=!1,e.isFetchingConfigs=!1,e.isDeleting=!1,e.isAccepting=!1,e.isRevoking=!1,e.isReinstating=!1,e.toBeAccepted=0,e.waiversTotal=0,e.waivers=[],e.waiverDataList=[],e.selectedWaiversIdMap={},e.selectedWaiver=null,e.listErrorMsg="",e.defaultSearchParams={date:{startDate:null,endD
1ate:null},expiredDate:{startDate:null,endDate:null},checkInDate:{startDate:null,endDate:null},filter:{keyword:"",type:e.searchTypes[0],source:[],state:[],template:e.isTemplateLevel?[{value:p.params.templateId}]:[],currentPage:1,perPage:50,documentId:"",query:{}}},e.latestWaiverId=void 0,e.sortingDataKey="waiverListFieldSorting",e.waiverListSortingData={},e.showColumns=[],e.columnOrder=l,e.documentsCache={},e.waiverExpirationAvailable=!1,e.filterModalInstance=null,e.initSearchParams=function(){const{start_date:t,end_date:i,keyword:a="",source:n,state:s,template:r,type:o,page:l,field_title:c,field_choices:d,field_query_keys:u,field_sort:v,archived:h,expired:m,start_expired_date:f,end_expired_date:w,start_check_in_date:b,end_check_in_date:x,document_id:y}=T;function k(e,t){try{return e?t.filter(t=>e.includes(t.value)):[]}catch(e){return[]}}let S={};c&&(S.fieldTitle=c),u&&(S.queryKeys=u.split(",")),v&&(S.sort=v),d&&(S.choiceList=d.split(","));const D={date:{startDate:t?g(1e3*t):null,endDate:i?g(1e3*i):null},expiredDate:{startDate:f?g(1e3*f):null,endDate:w?g(1e3*w):null},checkInDate:{startDate:b?g(1e3*b):null,endDate:x?g(1e3*x):null},filter:{keyword:a,type:o?k(o,e.searchTypes)[0]:e.searchTypes[0],source:k(n,e.sourceOptions),state:k(s,e.stateOptions),archived:void 0===h?void 0:"true"===h,expired:void 0===m?void 0:"true"===m,currentPage:l?parseInt(l,10):1,perPage:50,documentId:y,query:S}};return e.isTemplateLevel?D.filter.template=[{value:p.params.templateId}]:D.filter.template=r?r.split(",").map(e=>({value:e})):[],D},e.searchParams=e.initSearchParams(),e.watchParams=function(){e.$watch("searchParams",function(t,i){if(v.isEqual(t,i))return;t.filter.currentPage===i.filter.currentPage&&(e.searchParams.filter.currentPage=1);const{keyword:a,type:n,source:s,state:r,template:o,currentPage:l,query:c,archived:d,expired:u,documentId:g}=t.filter,{startDate:h,endDate:m}=t.date,{startDate:f,endDate:w}=t.expiredDate,{startDate:b,endDate:x}=t.checkInDate,y={start_date:h?h.unix():void 0,end_date:m?m.unix():void 0,start_expired_date:f?f.unix():void 0,end_expired_date:w?w.unix():void 0,start_check_in_date:b?b.unix():void 0,end_check_in_date:x?x.unix():void 0,keyword:a,type:n.value,source:s.map(e=>{let{value:t}=e;return t}).join(","),state:r.map(e=>{let{value:t}=e;return t}).join(","),archived:d,expired:u,document_id:g,template:e.isTemplateLevel?void 0:o.map(e=>{let{value:t}=e;return t}).join(","),page:l,field_title:c.fieldTitle,field_query_keys:c.queryKeys&&c.queryKeys.join(","),field_sort:c.sort,field_choices:c.choiceList&&c.choiceList.join(",")};p.go(p.current.name,y,{notify:!1}),e.searchWaivers()},!0)},e.clickSidebarState=function(t){if(e.isSearching)return;const i=v.merge(v.cloneDeep(e.defaultSearchParams),v.merge(e.searchParams));"archived"!==t.value&&(i.filter.archived=void 0),"expired"!==t.value&&"expired"===e.currentSidebarState.value&&(i.filter.expired=void 0),"all"!==t.value?"archived"===t.value?i.filter.archived=!0:"expired"===t.value?i.filter.expired=!0:i.filter.state=e.stateOptions.filter(e=>e.value===t.value):i.filter.state=[],e.currentSidebarState=t,e.searchParams=i},e.getTemplates=function(){return S.get("waiverTemplate/getTemplates").then(function(t){t.data.result&&(e.templateOptions=t.data.success.map(function(e){return{text:e.title,value:e.id}}))})},e.setSidebar=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.all=Object.keys(t).reduce((e,i)=>("archived"!==i&&"expired"!==i&&(e+=t[i]),e),0),e.sidebarStateInfo.forEach(function(e){e.count=t[e.value]||0})},e.getSubmitData=function(){const{date:{startDate:t,endDate:i},expiredDate:{startDate:a,endDate:n},checkInDate:{startDate:s,endDate:r},filter:{type:o,source:l,template:c,state:d,keyword:p,perPage:u,currentPage:g,documentId:v,query:h,archived:m,expired:f}}=e.searchParams,w={perPage:u,page:g,archived:m,expired:f};if(t&&(w.start_ts=t.unix()),i&&(w.end_ts=i.unix()),a&&(w.start_expired_ts=a.unix()),n&&(w.end_expired_ts=n.unix()),s&&(w.start_checkin_ts=s.unix()),r&&(w.end_checkin_ts=r.unix()),v&&(w.document_id=v),u&&(w.perPage=parseInt(u)||50),h){const{sort:e,queryKeys:t,choiceList:i}=h;e&&t&&(w.sort=t.map(t=>`fields.${t}:${e}`)),i?.length&&t?.length&&(w.field_query={[t[0]]:i})}return p&&("tag_names"===o.value?w[o.value]=[p]:"platforms"===o.value?w[o.value]=[p.toUpperCase()]:w[o.value]=p),c.length&&(w.template_ids=c.map(function(e){return e.value})),l.length&&(w.sources=l.map(function(e){return e.value})),d.length&&(w.states=d.map(function(e){return e.value})),w},e.isProcessingList=function(){return e.isDeleting||e.isAccepting||e.isRevoking||e.isReinstating||e.isArchiving||e.isRestoring||e.isCanceling},e.searchWaivers=function(){if(e.isSearching)return Promise.resolve();e.isSearching=!0,e.showRefreshTip=!1,e.listErrorMsg="";let t="waiver/count";e.isTemplateLevel&&(t=`waiver/count?template_id=${p.params.templateId}`);const i=e.queue(function(){return S.get(t).then(t=>{t.data.result&&e.setSidebar(t.data.success)})}),a=e.queue(function(){return S.post("waiver/list",e.getSubmitData()).then(function(t){if(t.data.result){const{total:i,waivers:a}=t.data.success;return e.waiversTotal=i,e.waivers=a,e.selectedWaiversIdMap={},e.isSearchParamsEmpty()&&a.length&&(e.latestWaiverId=a[0].id),e.setListData(a)}}).catch(function(t){e.setListData([]),t.data&&t.data.failed&&(e.listErrorMsg=t.data.failed)})});
1return Promise.all([i,a]).then(()=>{x(()=>{e.isSearching=!1},0)})},e.showFilterModal=()=>{e.filterModalInstance=c.open({animation:!0,backdrop:"static",component:"filterModal",windowClass:"wavier-list-filter-modal centered-modal",resolve:{perPage:()=>e.searchParams.filter.perPage,showColumns:()=>e.showColumns,columnOrder:()=>e.columnOrder,waiverExpirationAvailable:()=>e.waiverExpirationAvailable}}),e.filterModalInstance.result.then(t=>{let{perPage:i,showColumns:a,columnOrder:n}=t;return e.searchParams.filter.perPage=i,e.showColumns=a,e.columnOrder=n,i!==e.searchParams.filter.perPage&&(e.searchParams.filter.currentPage=1,e.searchWaivers()),Promise.all([S.post("accountSettings/adminKeyValue",{key:"waiver_list_show_columns",value:JSON.stringify(a)}),S.post("accountSettings/adminKeyValue",{key:"waiver_list_column_order",value:JSON.stringify(n)}),S.post("accountSettings/adminKeyValue",{key:"waiver_list_per_page",value:i.toString()})])})},e.queue=function(e){return new Promise(t=>{x(()=>{t(e())},0)})},e.getDocuments=function(t){const i=t.filter(t=>e.documentsCache[t]),a=t.filter(e=>!i.includes(e));return a.length?S.get(`waiverTemplate/getSimpleDocuments?document_ids=${a.join(",")}`).then(t=>{if(t.data.result&&t.data.success&&t.data.success.documents)return t.data.success.documents.forEach(t=>{e.documentsCache[t._id]=t}),i.concat(a).map(t=>e.documentsCache[t])}):Promise.resolve(i.map(t=>e.documentsCache[t]))},e.setListData=function(t){return e.getDocuments(t.map(e=>e.document_id)).then(i=>{const{waiverMap:a,documentIdOrderMap:n}=t.reduce(function(e,t){var a=t.document_id;return e.waiverMap[a]||(e.waiverMap[a]={documentId:a,templateTitle:t.document_title,templateId:t.template_id,waivers:[],titles:[],datetime:i.find(e=>e._id===a).datetime},e.documentIdOrderMap[a]=Object.keys(e.documentIdOrderMap).length),e.waiverMap[a].waivers.push(t),e},{waiverMap:{},documentIdOrderMap:{}});e.waiverDataList=v.values(s.parseWaiverMap(a)).sort((e,t)=>n[e.documentId]>n[t.documentId])})},e.deleteWaivers=function(t){const i=t?[t]:Object.keys(e.selectedWaiversIdMap);i.length&&r.confirm({title:i18next.t("Are you sure to delete selected waiver(s)?"),message:i18next.t("Deleted waivers cannot be recovered any more.")}).then(function(){e.isDeleting=!0,S.post("waiver/bulkDelete",{waiverIds:i}).then(e=>{const{result:t,success:i}=e.data;t&&i.failed.length&&d.error(i18next.t("fail in deleting {{count}} waiver(s)",{count:i.failed.length}))}).catch(()=>{d.error(i18next.t("fail in deleting {{count}} waiver(s)",{count:i.length}))}).finally(()=>{setTimeout(()=>{e.isDeleting=!1,e.searchWaivers()},2e3)})})},e.acceptWaivers=function(t){const i=t?[t]:Object.keys(e.selectedWaiversIdMap);if(i.length)return m(P,()=>r.confirm({title:i18next.t("Are you sure to accept selected waiver(s)?"),message:i18next.t("Accepted waivers will be moved to the Approved list.")}).then(function(){e.isAccepting=!0,e.toBeAccepted=i.length;let t=!1;return h({waiverIds:i,acceptWaiver:e=>S.post("waiver/accept",{waiverId:e}),onAccepted:t=>{_.completeTask("accept_your_waiver"),t.data.result&&(e.toBeAccepted-=1)},onFirstError:e=>{t=!0;const i=e.data&&e.data.failed||i18next.t("Please try again.");400===e.status&&(0,u.U5)(e,{Confirmation:r,premiumModalHelper:D,source:"pending-accept-waiver"})||(400!==e.status&&a.Cp(e),r.confirm({title:i18next.t("Accept Waiver Failed"),message:i,hideCancel:!0}))}}).then(()=>{if(!t&&0===e.toBeAccepted)return new Promise(e=>setTimeout(e,2e3))}).finally(()=>{e.isAccepting=!1,e.searchWaivers()})}))},e.revokeWaivers=function(t){const i=t?[t]:Object.keys(e.selectedWaiversIdMap);i.length&&r.confirm({title:i18next.t("Are you sure to revoke selected waiver(s)?"),message:i18next.t("You could reinstate the waiver under Revoked list in the future.")}).then(()=>{e.isRevoking=!0,S.post("requestWaiver/bulkRevoke",{waiverIds:i}).catch(e=>{r.confirm({title:i18next.t("Revoke Waiver Failed"),message:e.data.failed,hideCancel:!0})}).finally(()=>{setTimeout(()=>{e.isRevoking=!1,e.searchWaivers()},2e3)})})},e.reinstateWaivers=function(t){const i=t?[t]:Object.keys(e.selectedWaiversIdMap);i.length&&r.confirm({title:i18next.t("Are you sure to reinstate selected waiver(s)?"),message:i18next.t("Reinstated waiver will be moved to the Pending list for you to accept.")}).then(()=>{e.isReinstating=!0,S.post("requestWaiver/bulkReinstate",{waiverIds:i}).catch(e=>{r.confirm({title:i18next.t("Reinstate Waiver Failed"),message:e.data.failed,hideCancel:!0})}).finally(()=>{setTimeout(()=>{e.isReinstating=!1,e.searchWaivers()},2e3)})})},e.archiveWaivers=function(t){const i=t?[t]:Object.keys(e.selectedWaiversIdMap);i.length&&r.confirm({title:i18next.t("Are you sure to archive selected waiver(s)"),message:i18next.t("Archived waivers will be moved to the Archived list")}).then(function(){e.isArchiving=!0,S.post("waiver/bulkArchive",{waiverIds:i}).then(e=>{e.data.result&&console.log(e.data.result)}).catch(()=>{d.error(i18next.t("fail in archiving {{count}} waiver(s)",{count:i.length}))}).finally(()=>{setTimeout(()=>{e.isArchiving=!1,e.searchWaivers()},2e3)})})},e.restoreWaivers=function(t){const i=t?[t]:Object.keys(e.selectedWaiversIdMap);let a=i18next.t("Restored waivers will be moved to their original list");if(t){const i=e.waivers.find(e=>e.id===t).state,n={accepted:"Approved",pending:"Pending",revoked:"Revoked"};a=i18next.t("Restored waiver will be moved to {{listName}} list",{listName:n[i]})}r.confirm({title:i18next.t("Are you sure to restore selected waiver(s)"),message:a}).then(function(){e.isRestoring=!0,S.post("waiver/bulkRestore",{waiverIds:i}).then(e=>{e.data.result&&console.log(e.data.result)}).catch(()=>{d.error(i18next.t("fail in restoring {{count}} waiver(s)",{count:i.length}))}).finally(()=>{setTimeout(()=>{e.isRestoring=!1,e.searchWaivers()},2e3)})})},e.cancelExpiredWaivers=function(t){const i=t?[t]:Object.keys(e.selectedWaiversIdMap);i.length&&r.confirm({title:i18next.t("Are you sure to cancel expiration of selected waiver(s)")}).then(function(){e.isCanceling=!0,S.post("waiver/bulkCancelExpiration",{waiverIds:i}).then(e=>{console.log(e.data.result)}).catch(()=>{d.error(i18next.t("fail in canceling expiration of {{count}} waiver(s)",{count:i.length}))}).finally(()=>{x(()=>{e.isCanceling=!1,e.searchWaivers()},2e3)})})},e.handleDownload=function(t){let a=[];t?a.push(t):a=Object.keys(e.selectedWaiversIdMap),a.length&&(1===a.length?window.location.href=`${n.BACKEND_HOST}/api/v3/waiver/downloadPDF/${a[0]}
1`:c.open({animation:!0,template:i(38657),controller:"DownloadModalController",resolve:{waiverIds:()=>a}}))},e.setQueryParams=function(t){const{documentId:i,template:a,queryKeys:n,choiceList:s,sort:r,fieldTitle:o}=t;e.searchParams.filter.template=[a],e.searchParams.filter.documentId=i,e.searchParams.filter.query={queryKeys:n,choiceList:s,sort:r,fieldTitle:o,sort:r,queryKeys:n}},e.clearQueryParams=function(){e.searchParams.filter.documentId="",e.searchParams.filter.query={}},e.showCheckInDateFilter=!e.isTemplateLevel,e.fetchConfigs=function(){e.isFetchingConfigs=!0;const t=e.isTemplateLevel?S.get("waiverSettings/getSettings?fields=checkInLimit").then(t=>{t.data.result&&t.data.success.checkInLimit&&(e.showCheckInDateFilter=!!t.data.success.checkInLimit)}).catch(e=>{console.error("Failed to get checkInLimit:",e)}):Promise.resolve(),i=S.get("accountSettings/getSettings?fields=waiverExpirationAvailable").then(t=>{t.data.result&&(e.waiverExpirationAvailable=t.data.success.waiverExpirationAvailable)}).catch(e=>{console.error("Failed to get waiverExpirationAvailable:",e)}).then(()=>Promise.all([S.get("accountSettings/adminKeyValue/waiver_list_show_columns").then(t=>{if(t.data.result&&t.data.success&&t.data.success.waiver_list_show_columns)try{const i=JSON.parse(t.data.success.waiver_list_show_columns);e.showColumns=i}catch(t){e.showColumns=o}else e.showColumns=o;e.waiverExpirationAvailable||(e.showColumns=e.showColumns.filter(e=>"expiration"!==e))}).catch(t=>{console.error("Failed to get waiver_list_show_columns:",t),e.showColumns=o}),S.get("accountSettings/adminKeyValue/waiver_list_column_order").then(t=>{if(t.data.result&&t.data.success&&t.data.success.waiver_list_column_order)try{const i=JSON.parse(t.data.success.waiver_list_column_order);e.columnOrder=i,l.forEach(t=>{i.includes(t)||e.columnOrder.push(t)})}catch(t){e.columnOrder=l}else e.columnOrder=l}).catch(t=>{console.error("Failed to get waiver_list_column_order:",t),e.columnOrder=l}),S.get("accountSettings/adminKeyValue/waiver_list_per_page").then(t=>{t.data.result&&t.data.success&&t.data.success.waiver_list_per_page?e.searchParams.filter.perPage!=t.data.success.waiver_list_per_page&&(e.searchParams.filter.perPage=t.data.success.waiver_list_per_page):50!=e.searchParams.filter.perPage&&(e.searchParams.filter.perPage=50)}).catch(t=>{console.error("Failed to get waiver_list_per_page:",t),50!=e.searchParams.filter.perPage&&(e.searchParams.filter.perPage=50)})]));return Promise.all([t,i]).finally(()=>{e.isFetchingConfigs=!1})},e.init=function(){e.isTemplateLevel||e.getTemplates(),e.startCheckingUpdate(),e.getWaiverListSortingData(),e.fetchConfigs().then(()=>e.searchWaivers()).then(()=>{e.isTemplateLevel||x(()=>{e.startGuidance(!1)},100),e.watchParams()})},e.isFiltersApplied=function(){const{date:t,filter:i}=e.searchParams;return t.startDate||!e.isTemplateLevel&&i.template.length||i.source.length||i.state.length},e.clearAllFilter=function(){e.searchParams=v.cloneDeep(e.defaultSearchParams),t.$broadcast("clearSearch"),x(()=>{e.currentSidebarState=e.initSidebarState()},0)},e.getEmptyTip=function(){return 0===e.sidebarStateInfo[0].count?`<p>${i18next.t("There is no data available now. Sign the waivers and check back later.")}</p>`:e.listErrorMsg?`<p>${e.listErrorMsg}</p>`:i18next.t('<p>Do you know you can add * to your keyword to enable partial search?</p>\n                      <p>e.g. If you type in <span class="pre">Wai*</span> or <span class="pre">*ever</span>\n                      , you can search out WaiverForever.</p>')},e.startGuidance=function(t){$(".waiver-list-content").scrollTop(0);b[t?"redo":"guide"]("waiver_list_guidance",function(){let t=[];try{t=function(){const t=[{highlight:!1,descImg:"/app/static/images/waiverList/guide-welcome.svg",title:i18next.t("Welcome to your waiver list page!"),desc:i18next.t("On this page, you can review all the signed waivers and filter them by date, template name, channels, status, and waiver content. Let's check them one by one."),nextTxt:i18next.t("Continue")}];if($(".waiver-list-aside-wrapper").is(":visible")){const e=$(".waiver-state-list");t.push({highlight:!0,placement:"right",style:{width:e.width(),height:e.height(),top:e.offset().top,left
1:0},desc:i18next.t("List all the approved, pending, and revoked waivers under your account.")})}const i=angular.element(".filter-btns");t.push({highlight:!0,placement:"bottom",style:{width:i.width(),height:i.height()-16,top:i.offset().top,left:i.offset().left},desc:i18next.t("Apply the filters above to narrow your results.")});const a=angular.element(".search-box");t.push({highlight:!0,placement:"bottom",style:{width:a.width(),height:a.height(),top:a.offset().top,left:a.offset().left},desc:i18next.t("Use keywords to search waivers.")});const n=angular.element(".waiver-list-content");if(n.length&&t.push({highlight:!0,placement:"top",style:{width:n.width(),height:n.height(),top:n.offset().top,left:n.offset().left},desc:i18next.t("View lists of waiver content.")}),e.hasEditPermission){const e=$(".waiver-table-fixed tbody tr").first(),i=$(".waiver-table-scroll tbody tr").first();e.addClass("hovered"),i.addClass("hovered");const a=$(".waiver-table-scroll tbody tr .toolbar-col").first();a.length&&t.push({highlight:!0,placement:"left",style:{width:a.width(),height:a.height(),top:a.offset().top,left:a.offset().left},desc:i18next.t("You can accept, download, and add tags and notes for each waiver.")})}return t}()}catch(e){if("dev"===window.WF_ENV)return void console.log(e);a.Cp(e)}return x(()=>{$(".wf-guidance").addClass("waiver-list-guidance")},50),t})},e.timer=null,e.showRefreshTip=!1,e.startCheckingUpdate=function(){null===e.timer&&(e.timer=k(function(){e.checkUpdate()},1e4))},e.stopCheckingUpdate=function(){null!==e.timer&&(k.cancel(e.timer),e.timer=null)},e.isSearchParamsEmpty=function(){const{keyword:t,type:i,query:a,documentId:n="",currentPage:s}=e.searchParams.filter;return!e.isFiltersApplied()&&i.value===e.searchTypes[0].value&&0===t.length&&v.isEmpty(a)&&0===n.length&&1===s},e.checkUpdate=function(){if(e.isSearching||!e.isSearchParamsEmpty())return;const t={perPage:1,page:1,start_ts:g().unix()};e.isTemplateLevel&&(t.template_ids=[p.params.templateId]),S.post("waiver/list",t).then(t=>{const{result:i,success:a}=t.data;i&&(a.waivers[0]&&e.latestWaiverId!==a.waivers[0].id&&(e.showRefreshTip=!0),a.waivers.length&&(e.latestWaiverId=a.waivers[0].id))})},e.handleClickRefreshTip=function(){e.searchWaivers()},e.getWaiverListSortingData=function(){return S.get(`accountSettings/adminKeyValue/${e.sortingDataKey}`).then(function(t){if(t.data.result)try{e.waiverListSortingData=JSON.parse(t.data.success[e.sortingDataKey])||{}}catch(t){e.waiverListSortingData={}}})},e.updateWaiverListSortingData=function(t,i){let a=e.waiverListSortingData[t];if(a){const e=a.indexOf(i);e>-1?a.splice(e,1):a.push(i)}else e.waiverListSortingData[t]=[i];return S.post("accountSettings/adminKeyValue",{key:e.sortingDataKey,value:JSON.stringify(e.waiverListSortingData)})},e.selectWaiver=t=>{if(window.innerWidth<=750){const e=W(t);return void(e&&(window.location.href=e))}e.selectedWaiver=t},e.deSelectWaiver=()=>{e.selectedWaiver=null},e.openSelectedWaiverPage=()=>{if(!e.selectedWaiver)return;const t=W(e.selectedWaiver);t&&window.open(t)},e.shouldShowDownloadButton=()=>{if(!e.selectedWaiver)return;const{archived:t,state:i}=e.selectedWaiver;return!t&&"accepted"===i&&e.hasExportPermission},e.prevWaiver=()=>{const t=e.waiverDataList.map(e=>e.waivers).flat(),i=t.indexOf(e.selectedWaiver);i>0&&(e.selectedWaiver=t[i-1],e.reloadSelectedWaiver())},e.hasPrevWaiver=()=>e.waiverDataList.map(e=>e.waivers).flat().indexOf(e.selectedWaiver)>0,e.nextWaiver=()=>{const t=e.waiverDataList.map(e=>e.waivers).flat(),i=t.indexOf(e.selectedWaiver);i<t.length-1&&(e.selectedWaiver=t[i+1],e.reloadSelectedWaiver())},e.hasNextWaiver=()=>{const t=e.waiverDataList.map(e=>e.waivers).flat();return t.indexOf(e.selectedWaiver)<t.length-1},e.reloadSelectedWaiver=()=>{const t=e.selectedWaiver;e.selectedWaiver=null,x(()=>e.selectedWaiver=t)},e.onOperation=t=>{e.searchWaivers()},e.$on("$destroy",function(){e.stopCheckingUpdate(),e.filterModalInstance&&e.filterModalInstance.dismiss()}),e.init()}]);angular.module("waiverforeverApp.waiverList").directive("checkOverflow",["$timeout",function(e){return{restrict:"A",link:function(t,i){t.isOverflow=!1,i.one("mouseenter",function(a){e(function(){const n=i[0].clientWidth,s=i[0].scrollWidth;t.isOverflow=s>n,t.isOverflow&&e(function(){i.triggerHandler("mouseenter",a)})})})}}}])},2835(e){e.exports={acceptWaiverBatch:function(e){let{waiverIds:t,acceptWaiver:i,onAccepted:a,onFirstError:n}=e,s=!1;const r=t.map(e=>i(e).then(t=>(a(t,e),t)).catch(e=>{s||(s=!0,n(e))}));return Promise.all(r)}
1,runWithPromiseLock:function(e,t){if(!e.current){e.current=!0;try{const i=t();return i&&"function"==typeof i.finally?i.finally(()=>{e.current=!1}):(e.current=!1,i)}catch(t){throw e.current=!1,t}}}}},5576(e,t,i){angular.module("waiverforeverApp.waiverList").directive("filterDialog",["$timeout",function(e){return{restrict:"AE",scope:{isShow:"=",options:"=",value:"=",onClose:"="},template:i(60583),link:function(t,i){t.search={text:""},t.getTextValueMap=function(e){return e.reduce((e,t)=>(e[t.value]=t,e),{})},t.checkedOptions=t.getTextValueMap(t.value),t.handleClickOption=function(e){t.checkedOptions[e.value]?delete t.checkedOptions[e.value]:t.checkedOptions[e.value]=e},t.handleClear=function(){t.checkedOptions={}},t.closeDialog=function(){e(()=>{t.isShow=!1,t.value=Object.keys(t.checkedOptions).map(function(e){return t.checkedOptions[e]})},0)},t.$watch("value",function(e){t.checkedOptions=t.getTextValueMap(e)}),t.handleClickOutside=function(e){!i.parent(".filter")[0].contains(e.target)&&t.isShow&&t.closeDialog()},t.$on("$destroy",function(){document.removeEventListener("click",t.handleClickOutside)}),e(function(){document.addEventListener("click",t.handleClickOutside)},0)}}}])},6152(e,t,i){angular.module("waiverforeverApp.waiverList").directive("navBar",["authenticator",function(e){return{restrict:"AE",scope:{page:"=",perPage:"=",total:"=",onFilter:"=",onRefresh:"=",waivers:"=",selectedWaiversId:"=",onAccept:"=",onDelete:"=",onDownload:"=",onArchive:"=",onRevoke:"=",onReinstate:"=",onRestore:"=",onCancel:"=",currentSidebarState:"="},template:i(52127),link:function(t){const{total:i,page:a,perPage:n}=t;t.maxPage=Math.ceil(i/n),t.waiversIdMap=t.waivers.reduce((e,t)=>(e[t.id]=t,e),{}),t.isAllSelected=!1,t.isSomeSelected=!1,t.showDelBtn=!1,t.showArchiveBtn=!1,t.showDownloadBtn=!1,t.showAcceptBtn=!1,t.showRevokeBtn=!1,t.showReinstateBtn=!1,t.showCancelBtn=!1,t.hasEditPermission=e.hasPermission(["waiver_editing"]),t.hasExportPermission=e.hasPermission(["data_exporting"]),t.getPaginationInfo=function(){return i<=n?`1-${i} of ${i}`:`${1+n*(a-1)}-${Math.min(n*a,i)} of ${i}`},t.changePage=function(e){t.page+=e},t.toggleAllSelect=function(){t.isAllSelected?Object.keys(t.selectedWaiversId).forEach(e=>{delete t.selectedWaiversId[e]}):t.waivers.reduce((e,t)=>(e[t.id]=!0,e),t.selectedWaiversId)},t.$watch("selectedWaiversId",function(e){const i=Object.keys(e);t.isAllSelected=i.length===t.waivers.length,t.isSomeSelected=!t.isAllSelected&&0!==i.length,t.showDelBtn="archived"===t.currentSidebarState&&i.length,t.showAcceptBtn=i.length&&i.every(e=>"pending"===t.waiversIdMap[e].state),t.showRevokeBtn=i.length&&i.every(e=>{const i=t.waiversIdMap[e];return!i.archived&&"pending"===i.state&&"WF_REQUEST_SIGN"===i.source}),t.showReinstateBtn=i.length&&i.every(e=>{const i=t.waiversIdMap[e];return!i.archived&&"revoked"===i.state}),t.showDownloadBtn=i.length&&i.every(e=>{const i=t.waiversIdMap[e];return"accepted"===i.state&&!i.archived}),t.showCancelBtn=i.length&&i.every(e=>t.waiversIdMap[e].expired),t.showArchiveBtn=i.length&&"archived"!==t.currentSidebarState,t.showRestoreBtn=i.length&&"archived"===t.currentSidebarState},!0)}}}])},19870(e,t,i){var a=i(62409),n=i(98609);angular.module("waiverforeverApp.waiverList").directive("filterBar",["$timeout",function(e){return{restrict:"AE",scope:{currentSidebarState:"=",hideStateFilter:"=",hideTemplateFilter:"=",templateOptions:"=",sourceOptions:"=",stateOptions:"=",searchTypes:"=",date:"=",expiredDate:"=",checkInDate:"=",searchType:"=",searchKeyword:"=",selectedTemplate:"=",selectedSource:"=",selectedState:"=",isExpired:"=",isExpiredList:"=",query:"=",onClearQuery:"=",showCheckInDateFilter:"="},template:i(52445),link:function(t){t.getDateRangeStr=function(e){if(e.startDate&&e.endDate){const t=e.startDate.format("MMM DD, YYYY"),i=e.endDate.format("MMM DD, YYYY");return t===i?t:`${t} - ${i}`}},t.filterShowFlags={template:!1,source:!1,state:!1},t.searchText=t.searchKeyword,t.handleClearSearch=function(){t.clearDatePicker(),t.clearExpiredDatePicker(),t.clearCheckInDatePicker(),t.clearFilters(),t.clearSelectedTemplate(),t.clearSelectedSource(),t.clearSelectedState(),t.onClearQuery(),t.searchKeyword="",t.searchText="",t.searchType=t.searchTypes[0]},t.clearSelectedTemplate=function(){t.hideTemplateFilter||(t.selectedTemplate=[])},t.clearSelectedSource=function(){t.selectedSource=[]},t.clearSelectedState=function(){t.selectedState=t.selectedState.filter(e=>e.value===t.currentSidebarState)},t.shouldShowClearSearch=function(){return t.searchKeyword||t.searchText||!a.isEqual(t.searchType,t.searchTypes[0])||t.selectedSource.length||t.selectedState.filter(e=>e.value!==t.currentSidebarState).length||!t.hideTemplateFilter&&!!t.selectedTemplate.length||t.date.startDate||t.date.endDate||t.expiredDate.startDate||t.expiredDate.endDate||!t.isExpiredList&&t.isExpired||!a.isEmpty(t.query)},t.handleSubmit=function(){t.searchKeyword=t.searchText},t.clearFilters=function(){t.isExpiredList||(t.isExpired=void 0),Object.keys(t.filterShowFlags).forEac
1h(function(e){t.filterShowFlags[e]=!1})},t.toggleFilters=function(e){("template"!==e||t.templateOptions.length)&&("expired"!==e?Object.keys(t.filterShowFlags).forEach(function(i){t.filterShowFlags[i]=i===e&&!t.filterShowFlags[i]}):t.isExpired=!t.isExpired||void 0)},t.toggleExpired=function(){},t.clearDatePicker=function(){t.date={startDate:null,endDate:null}},t.clearExpiredDatePicker=function(){t.expiredDate={startDate:null,endDate:null}},t.clearCheckInDatePicker=function(){t.checkInDate={startDate:null,endDate:null}},t.datePickerBaseOptions={maxDate:n().endOf("day"),locale:{cancelLabel:i18next.t("Clear"),applyLabel:i18next.t("Apply"),customRangeLabel:i18next.t("Custom Range")},showDropdowns:!0,alwaysShowCalendars:!0,ranges:{[i18next.t("Today")]:[n().startOf("day"),n().endOf("day")],[i18next.t("Yesterday")]:[n().subtract(1,"days").startOf("day"),n().subtract(1,"days").endOf("day")],[i18next.t("Last 7 Days")]:[n().subtract(6,"days").startOf("day"),n().endOf("day")],[i18next.t("Last 30 Days")]:[n().subtract(29,"days").startOf("day"),n().endOf("day")],[i18next.t("This month")]:[n().startOf("month").startOf("day"),n().endOf("day")]}},t.datePickerOption={...t.datePickerBaseOptions,eventHandlers:{"cancel.daterangepicker":t.clearDatePicker}},t.expiredDatePickerOption={...t.datePickerBaseOptions,eventHandlers:{"cancel.daterangepicker":t.clearExpiredDatePicker}},t.checkInDatePickerOption={...t.datePickerBaseOptions,eventHandlers:{"cancel.daterangepicker":t.clearCheckInDatePicker}},t.toggleSearchType=function(e){e.value!==t.searchType.value&&(t.searchKeyword=t.searchText),t.searchType=e},t.getSingleSelectedTemplateText=function(e){if(!e)return"Template";if(e.text)return e.text;{const i=t.templateOptions.find(t=>{let{value:i}=t;return i===e.value});return i?i.text:"Template"}},t.$on("clearSearch",function(){t.handleClearSearch()}),e(function(){$(".daterangepicker .daterangepicker_input").hide()},0)}}}])},33315(){angular.module("waiverforeverApp.waiverList").controller("DownloadModalController",["$scope","$uibModalInstance","$interval","waiverIds","WFApiClient",function(e,t,i,a,n){e.waiverIds=a,e.taskId="",e.isCheckingStatus=!1,e.isExporting=!1,e.downloadMultiWaiver=function(t){e.isCheckingStatus=!1,e.isExporting=!0,e.errorMessage="";let i="";"pdf"===t&&(i="archive/exportPDFByIds"),"csv"===t&&(i="archive/exportCSVByIds"),n.post(i,{waiver_ids:e.waiverIds}).then(t=>{t.data.result&&(e.taskId=t.data.success.task,e.isCheckingStatus=!0,e.startRefreshing(),e.isExporting=!1)}).catch(t=>{400==t.status&&(e.errorMessage=t.data.failed),e.isExporting=!1})},e.checkStatus=function(){n.get("checkTaskStatus/"+e.taskId).then(function(t){if(t.data.result){const{status:i,download_url:a,error:n}=t.data.success;"completed"===i&&(e.isCheckingStatus=!1,e.stopRefreshing(),e.downloadUrl=a),"failed"===i&&(e.isCheckingStatus=!1,e.stopRefreshing(),e.errorMessage=n)}}).catch(t=>{404==t.status&&(e.errorMessage=i18next.t("Task not found, please try again.")),e.isCheckingStatus=!1,e.stopRefreshing()})},e.timer=null,e.startRefreshing=function(){null===e.timer&&(e.timer=i(function(){e.checkStatus()},3e3))},e.stopRefreshing=function(){null!==e.timer&&(i.cancel(e.timer),e.timer=null)},e.$on("$destroy",function(){e.stopRefreshing()})}])},38657(e){e.exports='<div class="modal-header"> <h3 class="modal-title" ng-i18next="Export"></h3> </div> <div class="modal-body"> <div class="alert alert-danger" ng-if="errorMessage">{{errorMessage}}</div> <div class="row" ng-show="!isCheckingStatus && !downloadUrl"> <div class="col-md-8 col-md-offset-2"> <br/> <button ng-click="downloadMultiWaiver(\'pdf\')" class="wf-button wf-block" ng-disabled="isExporting"> <span ng-if="!isExporting" ng-i18next="Export as PDF"></span> <span ng-if="isExporting" ng-i18next="Downloading..."></span> </button> <br/> <br/> <button ng-click="downloadMultiWaiver(\'csv\')" class="wf-button wf-block" ng-disabled="isExporting"> <span ng-if="!isExporting" ng-i18next="Export as CSV"></span> <span ng-if="isExporting" ng-i18next="Downloading..."></span> </button> </div> </div> <wf-loading ng-show="isCheckingStatus" loading-text="Generating file..."></wf-loading> <div ng-if="downloadUrl" class="text-center"> <a class="wf-link" href="{{downloadUrl}}" target="_blank"> <i class="fa fa-download" aria-hidden="true"></i> <span ng-i18next="Click here to download the file."></span> </a> </div> </div> '},44884(e){e.exports='<div class="waiver-drawer-mask" ng-class="{\'mask-visible\': selectedWaiver}" ng-click="deSelectWaiver()"></div> <div class="waiver-drawer" ng-class="{\'drawer-open\': selectedWaiver}"> <waiver-list-signed-waiver-view waiver-id="selectedWaiver.id" close="deSelectWaiver()" prev="prevWaiver()" next="nextWaiver()" has-prev="hasPrevWaiver()" has-next="hasNextWaiver()" refresh="reloadSelectedWaiver()" on-operation="onOperation" ng-if="selectedWaiver"></waiver-list-signed-waiver-view> </div> <div class="waiver-list-module hidden-in-print" ng-class="{\'template-level\': isTemplateLevel}"> <div class="waiver-list-aside-wrapper"> <div class="waiver-list-aside"> <h2 ng-i18next="Waiver List"></h2> <ul class="waiver-state-list"> <li ng-repeat="state in sidebarStateInfo" ng-click="clickSidebarState(state)" id="aside-menu-{{state.text}}-option" ng-class="{current: state.text === currentSidebarState.text}"> <span class="waiver-state-icon icon-{{state.text}}"></span> <span class="waiver-state-text">{{state.text | i18next}}</span> <span class="waiver-state-count">{{state.count}}</span> </li> </ul> </div> </div> <div class="waiver-list-main">
1 <img ng-if="!isTemplateLevel" class="guide-trigger clickable" ng-click="startGuidance(1)" ng-src="/app/static/images/dashboard/guide_reset.svg"/> <div filter-bar class="waiver-filter-bar" current-sidebar-state="currentSidebarState.value" hide-state-filter="currentSidebarState.text !== \'all\'" hide-template-filter="isTemplateLevel" template-options="templateOptions" source-options="sourceOptions" state-options="stateOptions" search-types="searchTypes" date="searchParams.date" expired-date="searchParams.expiredDate" check-in-date="searchParams.checkInDate" search-type="searchParams.filter.type" search-keyword="searchParams.filter.keyword" selected-template="searchParams.filter.template" selected-source="searchParams.filter.source" selected-state="searchParams.filter.state" is-expired="searchParams.filter.expired" is-expired-list="currentSidebarState.value === \'expired\'" query="searchParams.filter.query" on-clear-query="clearQueryParams" show-check-in-date-filter="showCheckInDateFilter"> </div> <div nav-bar class="waiver-nav-bar" ng-if="!isSearching && !isProcessingList() && waiversTotal > 0" waivers="waivers" selected-waivers-id="selectedWaiversIdMap" page="searchParams.filter.currentPage" per-page="searchParams.filter.perPage" total="waiversTotal" current-sidebar-state="currentSidebarState.value" on-filter="showFilterModal" on-refresh="searchWaivers" on-accept="acceptWaivers" on-delete="deleteWaivers" on-download="handleDownload" on-archive="archiveWaivers" on-revoke="revokeWaivers" on-reinstate="reinstateWaivers" on-restore="restoreWaivers" on-cancel="cancelExpiredWaivers"> </div> <div class="refresh-tip" ng-show="showRefreshTip" ng-click="handleClickRefreshTip()"> <span ng-i18next="new waivers received, click here to refresh"></span> </div> <div waiver-list-table class="waiver-list-content" ng-if="waiverDataList.length && !isSearching && !isProcessingList()" on-waiver-selected="selectWaiver(waiver)" hide-template-col="isTemplateLevel" waiver-data-list="waiverDataList" selected-waivers-id="selectedWaiversIdMap" field-sorting-data="waiverListSortingData" on-accept="acceptWaivers" on-delete="deleteWaivers" on-revoke="revokeWaivers" on-reinstate="reinstateWaivers" on-download="handleDownload" on-archive="archiveWaivers" on-restore="restoreWaivers" on-query="setQueryParams" on-toggle-pin-field="updateWaiverListSortingData" show-columns="showColumns" column-order="columnOrder"> </div> <div class="empty-waivers-tip" ng-if="!waiverDataList.length && !isSearching && !isFetchingConfigs && !isProcessingList()"> <img class="tip-img" width="120" height="120" src="/app/static/images/waiverList/empty-icon.svg"/> <span class="main-tip" ng-i18next="No results"></span> <div class="sub-tip" ng-bind-html="getEmptyTip()"></div> <button class="clear-all-btn" ng-if="sidebarStateInfo[0].count !== 0 && !listErrorMsg" ng-click="clearAllFilter()" ng-i18next="Clear all filters"> </button> </div> <div ng-show="isSearching || isFetchingConfigs" class="loading"> <wf-loading></wf-loading> </div> <div ng-show="isDeleting" class="loading"> <wf-loading loading-text="{{\'Deleting waiver(s)...\' | i18next}}"></wf-loading> </div> <div ng-show="isRevoking" class="loading"> <wf-loading loading-text="{{\'Revoking waiver...\' | i18next}}"></wf-loading> </div> <div ng-show="isReinstating" class="loading"> <wf-loading loading-text="{{\'Reinstating waiver...\' | i18next}}"></wf-loading> </div> <div ng-show="isAccepting" class="loading"> <wf-loading loading-text="Accepting {{toBeAccepted || 1}} waiver(s)..."></wf-loading> </div> <div ng-show="isArchiving" class="loading"> <wf-loading loading-text="{{\'Archiving waiver(s)...\' | i18next}}"></wf-loading> </div> <div ng-show="isRestoring" class="loading"> <wf-loading loading-text="{{\'Restoring waiver(s)...\' | i18next}}"></wf-loading> </div> <div ng-show="isCanceling" class="loading"> <wf-loading loadin-text="{{\'Canceling expiration\' | i18next}}"></wf-loading> </div> </div> </div> '},47488(e){e.exports='<div class="drawer-header hidden-in-print"> <div class="header-left"> <button class="switch-waiver-button" ng-click="prev()"> <img ng-src="/app/static/images/waiverList/prev-waiver-arrow-{{hasPrev() ? \'active\' : \'inactive\'}}.svg" alt="Previous Waiver"/> </button> <button class="switch-waiver-button" ng-click="next()"> <img ng-src="/app/static/images/waiverList/next-waiver-arrow-{{hasNext() ? \'active\' : \'inactive\'}}.svg" alt="Next Waiver"/> </button>
1 <div class="drawer-title" uib-tooltip="{{name}}" tooltip-placement="bottom">{{name}}</div> <img ng-if="content.expired" src="/app/static/images/waiverList/waiver-expired.svg" alt="Waiver Expired"/> </div> <div class="header-right"> <button class="drawer-menu-button" ng-if="showDownloadBtn() && !pdfRenderMode" uib-tooltip="{{tooltipText.download}}" tooltip-placement="bottom" ng-click="downloadPDF()"> <img src="/app/static/images/waiverList/drawer-download.svg" alt="download"/> </button> <button class="drawer-menu-button" ng-if="(content.state === \'accepted\' || content.state === \'pending\') && !content.has_pdf" ng-click="printPage()" uib-tooltip="{{tooltipText.print}}" tooltip-placement="bottom"> <img src="/app/static/images/waiverList/drawer-print.svg" alt="print"/> </button> <button class="drawer-menu-button" ng-click="fullscreen()" uib-tooltip="{{tooltipText.fullscreen}}" tooltip-placement="bottom"> <img src="/app/static/images/waiverList/drawer-fullscreen.svg" alt="fullscreen"/> </button> <button class="drawer-menu-button" ng-click="close()"> <img src="/app/static/images/waiverList/drawer-close.svg" alt="close"/> </button> </div> </div> <div class="drawer-info hidden-in-print"> <div class="drawer-info-row"> <div class="info-head" ng-i18next="Signed Time"></div> <div>{{content.create_timestamp && content.create_timestamp * 1000 | date:\'medium\'}}</div> </div> <div class="drawer-info-row"> <div class="info-head" ng-i18next="Status"></div> <div class="state-label {{content.state}}">{{content.state === \'accepted\' ? \'approved\' : content.state | i18next}}</div> </div> <div class="drawer-info-row"> <div class="info-head" ng-i18next="Expired At"></div> <div class="info-row-right"> <div>{{content.expired_timestamp && content.expired_timestamp * 1000 | date:\'medium\'}}</div> <button class="edit-btn" ng-click="setExpire()" ng-if="!pdfRenderMode"></button> </div> </div> <div class="drawer-info-row"> <div class="info-head" ng-i18next="Note"></div> <div class="info-row-right"> <div class="info-note-content">
1{{content.note}}</div> <button class="edit-btn" ng-click="editNote()" ng-if="!pdfRenderMode"></button> </div> </div> <div ng-if="content.state === \'accepted\'" class="drawer-info-row"> <div class="info-head" ng-i18next="Tags"></div> <div class="info-row-right"> <span ng-repeat="tag in content.tags" class="tag">{{tag.name}}</span> <button class="edit-btn" ng-click="editTag()" ng-if="showEditTagBtn()" ng-if="!pdfRenderMode"></button> </div> </div> <div ng-if="content.state !== \'pending\'" class="drawer-info-row"> <div class="info-head" ng-i18next="Check-in History"></div> <div class="check-in-row-content"> <div class="checked-in-timestamps" ng-class="{expanded: isCheckedInListShown,\n            dropdown: content.checked_in_timestamps.length > 1}" ng-if="content.checked_in_timestamps"> <div class="last-checked-in" ng-click="toggleCheckedInList()"> {{content.checked_in_timestamps[0] * 1000 | date:\'medium\'}} </div> <div class="checked-in-list" ng-if="content.checked_in_timestamps && content.checked_in_timestamps.length > 1"> <div ng-repeat="t in content.checked_in_timestamps | limitTo:content.checked_in_timestamps.length - 1:1"> {{t * 1000 | date:\'medium\'}} </div> </div> </div> <button class="check-in-btn wf-button-small" ng-class="{\'checked\': isCheckedIn && !isCheckingIn}" ng-click="checkIn()" ng-if="!pdfRenderMode && showCheckIn"> <span ng-show="isCheckingIn"><i class="fa fa-spinner fa-spin" aria-hidden="true"></i>&nbsp;</span> {{isCheckingIn ? \'Checking in...\' : (isCheckedIn ? \'Checked in\' : \'Check in\') | i18next}} </button>  </div> </div> </div> <div class="drawer-body"> <div class="drawer-waiver-container"> <div class="waiver-display-module"> <div> <div ng-if="errorMessage" class="error-message">{{errorMessage}}</div> <div ng-show="isLoadingWaiverContent"> <wf-loading></wf-loading> </div> <div ng-if="showWaiverMainBody()"> <waiver-content ng-show="!isViewInPDF" ng-model="content.signed_doc" currency="content.payment_info.currency"></waiver-content> <pdf-frame show="isViewInPDF" on-download="downloadPDF()" has-pdf="content.has_pdf" waiver-id="waiverId"></pdf-frame> <div class="payment-details-container" ng-if="content.signed_doc && content.payment_info"> <div class="payment-details-title" ng-i18next="Payment Details"></div> <div class="payment-processor payment-info"> <span ng-i18next="Processor:"></span> <span class="payment-processor-name">{{content.payment_method}}</span> </div> <div class="payment-order-id payment-info"> <span ng-i18next="Transaction ID:"></span> <span>{{content.payment_order_id}}</span> </div> <div class="payment-order-time payment-info"> <span ng-i18next="Transaction Time:"></span> <span>{{content.payment_timestamp * 1000 | date:\'medium\'}}</span> </div> <payment-details template="content.signed_doc" currency="content.payment_info.currency" additional-fees="content.payment_info.additional_fees" show-line-items="content.payment_info.settings.show_line_items" show-sub-total="content.payment_info.settings.show_subtotal"> </payment-details> </div> <button ng-if="showDownloadBtn() && !pdfRenderMode" class="waiver-action-button" ng-click="downloadPDF()" uib-popover="{{\'This is the PDF file generated when the waiver was originally accepted.\' | i18next}}" popover-trigger="\'mouseenter\'" popover-placement="top"> <i class="fa fa-file-pdf-o"></i>&nbsp;&nbsp;<span ng-i18next="Download as PDF"></span> </button> <div ng-if="!pdfRenderMode" class="text-center" style="color:#999" ng-if="!isViewInPDF && !content.has_pdf && content.state === \'accepted\'" ng-i18next="It usually takes about about 3 minutes to generate the PDF. Thank you for your patience."> </div> </div> <section class="internal-form-section" ng-if="enableInternalForm && !pdfRenderMode"> <div class="internal-form-card"> <div class="form-card-upper"> <div> <div class="internal-form-title"> <span>{{content.signed_doc.doc_title}}</span> <span>-</span> <span ng-i18next="Internal Form"></span> </div> <div ng-if="internalWaiver" class="internal-form-status filled"> <span ng-i18next="Filled by"></span> <span>{{internalWaiver.verified_signer}}</span> (<span>{{internalWaiver.signed_doc.upload_datetime * 1000 | date:\'medium\'}}</span>) </div> <div ng-if="!internalWaiver" class="internal-form-status" ng-i18next="Not filled"></div> </div> <button ng-if="internalWaiver" class="wf-button-small fill-button" ng-i18next="Re-fill" ng-click="fillInternalForm()"></button> <button ng-if="!internalWaiver" class="wf-button-small fill-button" ng-i18next="Fill" ng-click="fillInternalForm()"></button> </div> <div class="form-card-lower" ng-if="internalWaiver"> <waiver-content ng-model="internalWaiver.signed_doc"></waiver-content> </div> </div> </section> <section class="attachment-section" ng-show="showAttachments()"> <div class="section-title" ng-if="attachments.length > 0" ng-i18next="Attachments"></div> <div class="attach-action" ng-if="showAttachAction()"> <div class="picture-attach"> <div class="title" ng-i18next="Attach picture"></div> <div class="upload-action"> <div class="action-buttons"> <button class="wf-button file" ng-click="selectFile()" ng-i18next="Upload"></button> <p ng-i18next="or"></p> <button class="wf-button photo" ng-click="openWebcam()" ng-i18next="Capture"></button> <input id="upload-file-input" type="file" onchange="angular.element(this).scope().readFile(this)"> </div> <div class="subtitle" ng-i18next="Upload or take a picture"></div> </div> <div class="app-qrcode"> <qrcode version="5" size="120" data="WaiverForeverDocKey:{{ waiverId }}"></qrcode> <div class="subtitle" ng-i18next="Scan with WaiverForever app"></div> </div> </div> <div class="note-attach"> <div class="title" ng-i18next="Attach Text"></div> <img class="note-icon" src="/app/static/images/signedWaiver/note.svg" alt="note icon"/> <button class="wf-button-small attach-btn" ng-click="attachNote()" ng-i18next="Attach"></button> </div> </div> <div class="attachment-content"> <div ng-repeat="item in attachments" class="attachment-item" ng-class="{\'new-added-attachment\': item.newAdded}"> <div class="attachment-title">{{item.title}}</div> <div class="attachment-datetime">{{item.timestamp * 1000 | date:\'medium\'}}</div> <div class="attachment-username">
1{{getDisplayUsername(item)}}</div> <div class="attachment-text" ng-if="item.type === \'note\'">{{item.content}}</div> <div class="attachment-picture" ng-if="item.type === \'picture\'" ng-click="showPictureInFullscreen(item.s3_file_prefix + item.s3_file_uri)"> <img ng-src="{{item.s3_file_prefix}}{{item.s3_file_uri}}"/> <button class="fullscreen-btn"></button> </div> <div class="attachment-button-menu" ng-if="!pdfRenderMode"> <div class="buttons"> <button class="del-btn" ng-if="hasEditPermission" ng-click="deleteAttachment(item, $index)"></button> <button class="copy-btn" ng-if="item.type === \'note\'" ngclipboard data-clipboard-text="{{item.content}}" ng-click="handleClickCopy(item)" uib-popover="Text copied!" popover-class="copy-tip" popover-trigger="none" popover-is-open="item.id === copiedAttachment.id"> </button> <button class="download-btn" ng-if="item.type === \'picture\'"> <a download="true" href="{{item.s3_file_prefix}}{{item.s3_file_uri}}" ng-if="item.type === \'picture\'"></a> </button> </div> </div> </div> </div> </section> <div class="waiver-context-info" ng-show="!isLoadingWaiverContent && content && !pdfRenderMode"> <table> <tbody> <tr ng-if="content.group_id"> <th width="150" ng-i18next="Request Group"></th> <td> <a class="group-link" ng-click="openGroup()">{{content.group_name}}</a> </td> </tr> <tr ng-if="content.tracking_id"> <th width="150" ng-i18next="Tracking ID"></th> <td>{{content.tracking_id}}</td> </tr> <tr ng-if="content.reference_number"> <th width="150" ng-i18next="Reference Number"></th> <td>{{content.reference_number}}</td> </tr> <tr ng-if="content.create_timestamp"> <th width="150" ng-i18next="Created"></th> <td>{{content.create_timestamp * 1000 | date:\'medium\'}}</td> </tr> <tr ng-if="content.upload_timestamp"> <th ng-i18next="Uploaded"></th> <td>{{content.upload_timestamp * 1000 | date:\'medium\'}}</td> </tr> <tr ng-if="content.received_timestamp"> <th ng-i18next="Accepted"></th> <td> {{content.received_timestamp * 1000 | date:\'medium\'}} <span ng-if="content.approved_by_automation" ng-i18next="by Automation"></span> </td> </tr> <tr ng-repeat="event in content.events"> <th>{{ event.type | i18next }}</th> <td> {{ event.timestamp * 1000 | date:\'medium\'}} <span class="event-status" ng-if="event.status" uib-tooltip-html="getEventMetaDataTooltip(event) | xss" tooltip-popup-close-delay="1000"> {{ event.status }} </span> </td> </tr> <tr ng-repeat="log in content.autoemail_logs"> <th ng-i18next="Auto-email Detail"></th> <td>Sent to {{log.recipient}} at {{ log.timestamp * 1000 | date:\'medium\'}}</td> </tr> <tr ng-if="content.ip"> <th ng-i18next="Origin IP"></th> <td>{{content.ip}}</td> </tr> <tr ng-if="content.user_agent"> <th ng-i18next="User Agent"></th> <td>{{content.user_agent}}</td> </tr> <tr ng-if="content.device_info.device_name"> <th ng-i18next="Device Name"></th> <td>{{content.device_info.device_name}}</td> </tr> <tr ng-if="content.device_info.device_model"> <th ng-i18next="Device Model"></th> <td>{{content.device_info.device_model}}</td> </tr> <tr ng-if="content.geo_location"> <th ng-i18next="Geo Location"></th> <td> <iframe class="map-top" width="260" height="260" ng-src="{{gmapUrl|trustedUrl}}" allowfullscreen=""></iframe> <br/> <span ng-i18next="Lat:"></span> {{content.geo_location.latitude}} <br/> <span ng-i18next="Lon:"></span> {{content.geo_location.longitude}} </td> </tr> </tbody> </table> </div> <section class="overlay-wrapper" ng-show="showOverlay" ng-click="closeOverlay()"> <main ng-click="$event.stopPropagation()" ng-class="{webcam: takingPhoto, uploading: uploading}"> <section class="title" ng-class="{error: imgTitle === \'\'}"> <h1 ng-i18next="Picture title"></h1> <input type="text" ng-model="imgTitle"> <p ng-class="{visible: imgTitle === \'\'}" ng-i18next="Please fill the title"></p> </section> <section class="img" ng-show="imgSrc" ng-class="{error: !!submitImgErrorMsg}" ng-if="!takingPhoto"> <img ng-src="{{ imgSrc }}"/> </section> <p class="img-error" ng-show="submitImgErrorMsg"> {{ submitImgErrorMsg }} </p> <video width="320" height="240" autoplay ng-if="takingPhoto" ng-style="{visibility: showVideo ? \'visible\' : \'hidden\'}"> </video> <canvas width="320" height="240" ng-if="takingPhoto" ng-style="{visibility: showVideo ? \'hidden\' : \'visible\'}"> </canvas> <img src="/app/static/images/signedWaiver/take-picture.svg" ng-show="takingPhoto" class="take-photo" ng-click="takePhoto()"/> <div class="uploading-progress" ng-show="uploading"> <div class="bar" ng-style="{width: uploadingPercentage}"></div> </div> <section class="confirm" ng-show="!takingPhoto"> <h1 ng-i18next="Please confirm"></h1> <div class="buttons"> <button class="wf-button yes" ng-click="submitTempImg()" ng-disabled="imgTitle.length <= 0 || uploading" ng-i18next="Upload"> </button> <button class="wf-button no" ng-click="closeOverlay()" ng-i18next="Cancel"></button> </div> </section> <section class="take-photo-operation" ng-show="takingPhoto"> <button class="wf-button upload" ng-disabled="imgTitle.length <= 0 || !imgSrc || uploading" ng-click="submitTempImg()" ng-i18next="Upload"> </button> <button class="wf-button retake" ng-click="closeOverlay()" ng-i18next="Cancel"></button> </section> </main> </section> </div> <div class="waiver-create-timestamp" ng-if="!isLoadingWaiverContent && content && pdfRenderMode && accessCode"> <span ng-i18next="Waiver ID:"></span> {{waiverId}} ({{getCreateTimestampString()}}) </div> <div class="waiver-signed-anchor" ng-if="content && !pdfRenderMode"> <div class="waiver-signed-pdf-toggler hidden-in-print" ng-if="content.state === \'accepted\' && !pdfRenderMode"> <span ng-i18next="View in PDF"> </span> <wf-switch class="ios-style-switch" is-on="isViewInPDF" on-toggle="toggleViewPDF()"></wf-switch> </div> </div> </div> </div> </div> <renew-waiver-popup-wrapper waiver-id="waiverId" visible="showRenewPopup" on-visibility-change="handlePopupVisibilityChange" create-client="createClient"></renew-waiver-popup-wrapper>
1 <div class="drawer-footer hidden-in-print" ng-if="!pdfRenderMode"> <button class="waiver-action-button waiver-action-button-secondary" ng-if="content.state === \'accepted\' && content.has_pdf" ng-click="downloadPDF()"> <i class="fa fa-file-pdf-o"></i>&nbsp;&nbsp;<span ng-i18next="Download PDF"></span> </button> <button class="waiver-action-button waiver-action-button-secondary print-button" ng-if="(content.state === \'accepted\' || content.state === \'pending\') && !content.has_pdf" ng-click="printPage()" ng-i18next="Print"> <span ng-i18next="Print this page"></span> </button> <button class="waiver-action-button" ng-if="showAcceptBtn()" ng-click="acceptWaiver()" ng-disabled="isAccepting"> {{pendingWaiverBtnTitle}} </button> <button class="waiver-action-button" ng-if="showRequestBtn()" ng-click="toggleRequestWaiver()" ng-disabled="isReinstating || isRevoking"> {{requestWaiverBtnTitle}} </button> <button class="waiver-action-button" ng-if="showToggleArchivedBtn()" ng-click="toggleArchivedWaiver()" ng-disabled="isArchiving || isRestoring"> {{archiveWaiverBtnTitle}} </button> <button class="waiver-action-button waiver-action-button-secondary" ng-click="renewWaiver()"> <i class="fa fa-refresh"></i> <span ng-i18next="Renew Waiver"></span> </button> <button class="waiver-action-button" ng-if="showDelBtn()" ng-click="deleteWaiver()" ng-disabled="isDeleting"> <span ng-if="isDeleting" ng-i18next="Deleting..."></span> <span ng-if="!isDeleting" ng-i18next="Delete Waiver"></span> </button> </div> '},52127(e){e.exports='<button class="nav-bar-btn check-btn" ng-click="toggleAllSelect()"> <span class="check-icon icon" ng-class="{\'all-checked\': isAllSelected, \'some-checked\': isSomeSelected}"> </span> </button> <button class="nav-bar-btn" ng-if="showDownloadBtn && hasExportPermission" ng-click="onDownload()"> <span class="download-icon icon-text" ng-i18next="Export"></span> </button> <button class="nav-bar-btn" ng-if="showAcceptBtn && hasEditPermission" ng-click="onAccept()"> <span class="accept-icon icon-text" ng-i18next="Accept"></span> </button> <button class="nav-bar-btn" ng-if="showCancelBtn && hasEditPermission" ng-click="onCancel()"> <span class="cancel-icon icon-text" ng-i18next="Cancel expiration"></span> </button> <button class="nav-bar-btn" ng-if="showDelBtn && hasEditPermission" ng-click="onDelete()"> <span class="del-icon icon-text" ng-i18next="Delete forever"></span> </button> <button class="nav-bar-btn" ng-if="showArchiveBtn && hasEditPermission" ng-click="onArchive()"> <span class="archive-icon icon-text" ng-i18next="Archive"></span> </button> <button class="nav-bar-btn" ng-if="showRevokeBtn && hasEditPermission" ng-click="onRevoke()"> <span class="revoke-icon icon-text" ng-i18next="Revoke"></span> </button> <button class="nav-bar-btn" ng-if="showReinstateBtn && hasEditPermission" ng-click="onReinstate()"> <span class="reinstate-icon icon-text" ng-i18next="Reinstate"></span> </button> <button class="nav-bar-btn" ng-if="showRestoreBtn && hasEditPermission" ng-click="onRestore()"> <span class="restore-icon icon-text" ng-i18next="Restore"></span> </button> <button class="nav-bar-btn" ng-click="onRefresh()"> <span class="refresh-icon icon"></span> </button> <button class="nav-bar-btn" ng-click="onFilter()"> <span class="column-settings-icon icon"></span> </button> <div class="nav-bar-paginator"> <div class="pagination-info"> <div class="pagination-info-text">{{getPaginationInfo()}}</div> <div class="pagination-btns"> <button ng-disabled="page === 1" ng-click="page = 1" ng-i18next="First Page"></button> <button ng-disabled="page === maxPage" ng-click="page = maxPage" ng-i18next="Last page"></button> </div> </div> <button class="nav-bar-btn" ng-click="changePage(-1)" ng-disabled="page === 1"> <span class="prev-icon icon"></span> </button> <button class="nav-bar-btn" ng-click="changePage(1)" ng-disabled="page === maxPage"> <span class="next-icon icon"></span> </button> </div> '},52445(e){e.exports='<div class="filter-btns"> <div class="filter"> <button class="filter-btn date-filter" ng-class="{filtered: date.startDate !== null}"> {{getDateRangeStr(date) || (\'Sign Dates\' | i18next)}} </button> <input class="hidden-daterangepicker" date-range-picker type="text" ng-model="date" options="datePickerOption" ng-click="toggleFilters()"/> </div> <div class="template-filter filter" ng-show="!hideTemplateFilter"> <button class="filter-btn" ng-class="{filtered: selectedTemplate.length}" ng-disabled="hideTemplateFilter" ng-click="toggleFilters(\'template\')"> <span ng-if="selectedTemplate.length === 0" ng-i18next="Templates"></span> <span ng-if="selectedTemplate.length === 1">{{getSingleSelectedTemplateText(selectedTemplate[0])}}</span> <span ng-if="selectedTemplate.length > 1">{{\'Template·\' + selectedTemplate.length}}</span> </button> <filter-dialog is-show="filterShowFlags.template" options="templateOptions" value="selectedTemplate" on-close
1="closeFilterDialog"> </filter-dialog> </div> <div class="source-filter filter"> <button class="filter-btn" ng-class="{filtered: selectedSource.length}" ng-click="toggleFilters(\'source\')"> <span ng-if="selectedSource.length === 0" ng-i18next="Share"></span> <span ng-if="selectedSource.length === 1">{{selectedSource[0].text}}</span> <span ng-if="selectedSource.length > 1">{{\'Source·\' + selectedSource.length}}</span> </button> <filter-dialog is-show="filterShowFlags.source" options="sourceOptions" value="selectedSource" on-close="closeFilterDialog"> </filter-dialog> </div> <div class="state-filter filter" ng-show="!hideStateFilter"> <button class="filter-btn" ng-class="{filtered: selectedState.length}" ng-click="toggleFilters(\'state\')"> <span ng-if="selectedState.length === 0" ng-i18next="Status"></span> <span ng-if="selectedState.length === 1">{{selectedState[0].text}}</span> <span ng-if="selectedState.length > 1">{{\'Status·\' + selectedState.length}}</span> </button> <filter-dialog is-show="filterShowFlags.state" options="stateOptions" value="selectedState" on-close="closeFilterDialog"> </filter-dialog> </div> <div class="expired-filter filter" ng-show="!isExpiredList"> <button class="filter-btn" ng-class="{filtered: isExpired}" ng-click="toggleFilters(\'expired\')"> <span ng-i18next="is Expired"></span> </button> </div> <div class="filter" ng-show="isExpiredList"> <button class="filter-btn date-filter" ng-class="{filtered: expiredDate.startDate !== null}"> {{getDateRangeStr(expiredDate) || (\'Expired Dates\' | i18next)}} </button> <input class="hidden-daterangepicker" date-range-picker type="text" ng-model="expiredDate" options="expiredDatePickerOption" ng-click="toggleFilters()"/> </div> <div class="filter" ng-show="showCheckInDateFilter"> <button class="filter-btn date-filter" ng-class="{filtered: checkInDate.startDate !== null}"> {{getDateRangeStr(checkInDate) || (\'Check-in Dates\' | i18next)}} </button> <input class="hidden-daterangepicker" date-range-picker type="text" ng-model="checkInDate" options="checkInDatePickerOption" ng-click="toggleFilters()"/> </div> <div ng-if="query.fieldTitle" class="query-info filter"> <div class="query-info-inner"> <span class="{{query.sort}}-icon"></span> <span class="query-field-name">{{query.fieldTitle}}</span> <span class="close-btn" ng-click="onClearQuery()"></span> </div> <div class="query-popover"> <div class="query-popover-inner"> <ul class="query-details"> <li> <span class="query-key" ng-i18next="Sort: "></span> <span class="query-value">{{query.sort.toUpperCase()}}</span> </li> <li ng-if="query.choiceList && query.choiceList.length"> <span class="query-key" ng-i18next="Filter: "></span> <span class="query-value">{{query.choiceList.join(\',\')}}</span> </li> </ul> </div> </div> </div> <button class="search-clear-btn alternative" ng-if="shouldShowClearSearch()" ng-click="handleClearSearch()" ng-i18next="clear"> </button> </div> <div class="search-box"> <button class="search-clear-btn main" ng-if="shouldShowClearSearch()" ng-click="handleClearSearch()"></button> <div class="search-keyword"> <form ng-submit="handleSubmit()"> <input ng-model="searchText" type="text" ng-i18next="[placeholder]Search"/> </form> </div> <div class="current-type"> <span>{{searchType.text | i18next}}</span> <ul class="type-selector"> <li ng-class="{current: searchType.value === type.value}" ng-repeat="type in searchTypes" ng-click="toggleSearchType(type, $event)"> {{type.option | i18next}} </li> </ul> </div> </div> '},59377(e){e.exports='<div class="waiver-table-wrapper" ng-repeat="waiverData in waiverDataList"> <div class="waiver-table-document"> <div class="document-title">{{waiverData.templateTitle}}</div> <div class="document-date"><span ng-i18next="Published at:"></span>&nbsp;{{waiverData.displayTime}}</div> </div> <div class="waiver-table-head" ng-class="{\'waiver-table-head-sticky\': isSticky($index), \'waiver-table-head-bottom\': isBottom($index)}" style="top:{};"> <table class="waiver-table-fixed"> <thead> <tr> <th class="checkbox-col">&nbsp;</th> <th ng-repeat-start="column in columnOrder" class="platform-col" ng-if="isColumnShow(\'platform\') && column === \'platform\'"> <div class="icon device-icon"></div> </th> <th class="group-col" ng-if="isColumnShow(\'group\') && column === \'group\'"></th> <th class="datetime-col" ng-i18next="Signed Time" ng-if="isColumnShow(\'signTime\') && column === \'signTime\'"></th> <th class="note-col" ng-if="isColumnShow(\'note\') && column === \'note\'"></th> <th class="state-col" ng-i18next="Status" ng-if="isColumnShow(\'status\') && column === \'status\'"></th> <th class="expired-datetime-col" ng-if="isColumnShow(\'expiration\') && column === \'expiration\'" ng-i18next="Expired Time"></th> <th ng-repeat-end class="payment-col" ng-i18next="Payment" ng-if="isColumnShow(\'payment\') && column === \'payment\'"></th> </tr> </thead> </table> <div class="waiver-table-scroll scroll-reach-left"> <div class="waiver-table-scroll-track"> <table class="waiver-table"> <thead> <tr> <th class="data-col {{titleObj.type}}" ng-repeat="titleObj in sortFieldColumn(waiverData.documentId, waiverData.titles)"> <div class="toggle-pin-btn" ng-click="togglePinField(waiverData.documentId, titleObj.sourceIndex, $event)" ng-class="{\'pinned\': isFieldPinned(waiverData.documentId, titleObj.sourceIndex)}" uib-tooltip="{{isFieldPinned(waiverData.documentId, titleObj.sourceIndex) ? \'Unpin\' : \'Pin to the left\'}}" tooltip-append-to-body="true" tooltip-placement="bottom-left" tooltip-class="pin-field-tooltip"> </div> <div class="title-text" tooltip-append-to-body="true" uib-tooltip="{{titleObj.title}}" tooltip-placement="top-left" ng-click="showQueryDialog(waiverData, titleObj, $event)"> {{titleObj.title}} </div> <div class="order" ng-class="getSort().sortTitle === titleObj.title ? getSort().sortOrder : \'asc\'"> <div class="order-clickable --asc" ng-click="queryByOrder(waiverData, titleObj, \'asc\')"></div> <div class="order-clickable --desc" ng-click="queryByOrder(waiverData, titleObj, \'desc\')"></div> </div> </th> <th class="data-col" ng-if="waiverData.titles.length === 0"> <div>&nbsp;</div> </th> </tr> </thead> </table> </div> </div> </div> <div class="waiver-table-body"> <div> <table class="waiver-table-fixed"> <thead> <tr> <th class="checkbox-col">&nbsp;</th> <th ng-repeat-start="column in columnOrder" class="platform-col" ng-if="isColumnShow(\'platform\') && column === \'platform\'"> <div class="icon device-icon"></div> </th> <th class="group-col" ng-if="isColumnShow(\'group\') && column === \'group\'"> <div class="icon group-icon"></div> </th> <th class="datetime-col" ng-i18next="Signed Time" ng-if="isColumnShow(\'signTime\') && column === \'signTime\'"></th> <th class="note-col" ng-if="isColumnShow(\'note\') && column === \'note\'"></th> <th class="state-col" ng-i18next="Status" ng-if="isColumnShow(\'status\') && column === \'status\'"></th> <th class="expired-datetime-col" ng-if="isColumnShow(\'expiration\') && column === \'expiration\'" ng-i18next="Expired Time"></th> <th ng-repeat-end class="payment-col" ng-i18next="Payment" ng-if="isColumnShow(\'payment\') && column === \'payment\'"></th> </tr> </thead> <tbody> <tr ng-repeat="waiver in waiverData.waivers" ng-mouseenter="handleMouseEnterTr(waiver.id)" ng-mouseleave="handleMouseLeaveTr()" ng-click="openWaiver(waiver)" ng-class="{selected: isWaiverSelected(waiver.id), hovered: waiver.id === hoveredWaiverId, expired: waiver.expired}"> <td class="checkbox-col" ng-click="$event.stopPropagation()"> <div class="icon check-icon" ng-click="toggleSelected(waiver.id, $event)"> </div> </td> <td ng-repeat-start="column in columnOrder" class="platform-col" ng-click="$event.stopPropagation()" ng-if="isColumnShow(\'platform\') && column === \'platform\'"> <div tooltip-append-to-body="true" uib-tooltip="{{getPlatformTooltip(waiver)}}" class="icon {{waiver.platform.toLowerCase()}}-icon"></div> </td> <td class="group-col" ng-if="isColumnShow(\'group\') && column === \'group\'"> <div tooltip-append-to-body="true" uib-tooltip="{{waiver.group_name}}" class="icon group-icon" ng-class="{\'group-icon-empty\': !waiver.group_name}"> </div> </td> <td class="datetime-col" ng-if="isColumnShow(\'signTime\') && column === \'signTime\'">{{waiver.displayTime}}</td> <td class="note-col" ng-if="isColumnShow(\'note\') && column === \'note\'"> <button class="note-button" ng-class="{\'note-button-empty\': !waiver.note}" ng-disabled="!hasEditPermission" tooltip-class="waiver-note-tooltip" tooltip-append-to-body="true" uib-tooltip="{{waiver.note || (hasEditPermission ? \'Click to create note\' : \'\')}}" ng-click="editNote(waiver, $event)"> </button> </td> <td class="state-col" ng-if="isColumnShow(\'status\') && column === \'status\'"> <div class="state-label {{waiver.state}}">{{waiver.state === \'accepted\' ? \'approved\' : waiver.state | i18next}}</div> </td> <td class="expired-datetime-col" ng-if="isColumnShow(\'expiration\') && column === \'expiration\'"> <div ng-if="waiver.expired" ng-i18next="Expired" uib-tooltip="{{getExpiredTimestampStr(waiver.expired_timestamp)}}">{{formatDate(waiver.expired_timestamp)}}</div> <div ng-if="!waiver.expired && !getWillExpireTimestamp(waiver)" uib-tooltip="{{expirationUnsetText}}" ng-i18next="Unset"></div> <div ng-if="!waiver.expired && getWillExpireTimestamp(waiver)" uib-tooltip="{{getWillExpireTimestampStr(waiver)}}">{{getWillExpireTimestamp(waiver)}}</div> </td> <td ng-repeat-end class="payment-col" ng-if="isColumnShow(\'payment\') && column === \'payment\'"> <span ng-if="waiver.payment_amount">{{waiver.payment_currency | currencySymbol}}{{waiver.payment_amount / 100}}</span> </td> </tr> </tbody> </table> </div> <div class="waiver-table-scroll scroll-reach-left"> <div class="waiver-table-scroll-track"> <table class="waiver-table"> <thead> <tr> <th class="data-col {{titleObj.type}}" ng-repeat="titleObj in sortFieldColumn(waiverData.documentId, waiverData.titles)"> {{titleObj.title}} </th> <th class="data-col" ng-if="waiverData.titles.length === 0"> <div>&nbsp;</div> </th> </tr> </thead> <tbody> <tr ng-repeat="waiver in waiverData.waivers" ng-mouseenter="handleMouseEnterTr(waiver.id)" ng-mouseleave="handleMouseLeaveTr()" ng-click="openWaiver(waiver)" ng-class="{selected: isWaiverSelected(waiver.id), hovered: waiver.id === hoveredWaiverId, expired: waiver.expired}"> <td class="data-col {{waiverData.titles[$index].type}}" ng-repeat="answerResult in sortFieldColumn(waiverData.documentId, waiver.answerResults) track by $index"> <div class="answer-text" ng-repeat="result in answerResult track by $index"> <span class="answer-text-segment" uib-tooltip-html="result | xss" tooltip-append-to-body="true" tooltip-class="waiver-field-tooltip" ng-repeat="segment in parseAnswerResult(result) track by $index"> {{segment}} </span> </div> </td> <td class="data-col" ng-if="waiver.answerResults.length === 0"> <div>&nbsp;</div> </td> <td class="toolbar-col" ng-click="$event.stopPropagation()"> <span class="expired-timestamp" ng-if="waiver.expired && waiver.expired_timestamp">{{getExpiredTimestampStr(waiver.expired_timestamp)}}</span> <button ng-if="waiver.reference_number" uib-tooltip="{{\'Reference #: \' + waiver.reference_number}}" tooltip-append-to-body="true" class="icon reference-icon"> </button> <button ng-if="showDownloadBtn(waiver)" uib-tooltip="{{\'Download\' | i18next}}" tooltip-append-to-body="true" class="icon download-icon" ng-click="onDownload(waiver.id)"> </button> <renew-waiver-list-button waiver-id="waiver.id"></renew-waiver-list-button> <button ng-if="showAcceptBtn(waiver)" class="accept-btn" ng-click="onAccept(waiver.id)"> <span ng-i18next="Accept"></span> </button> <button ng-if="showDelBtn(waiver)" uib-tooltip="{{\'Delete\' | i18next}}" tooltip-append-to-body="true" class="icon del-icon" ng-click="onDelete(waiver.id)"> </button> <button ng-if="showReinstateBtn(waiver)" class="icon reinstate-icon" uib-tooltip="{{\'Reinstate\' | i18next}}" tooltip-append-to-body="true" ng-click="onReinstate(waiver.id)"> </button> <button ng-if="showRevokeBtn(waiver)" class="icon revoke-icon" uib-tooltip="{{\'Revoke\' | i18next}}" tooltip-append-to-body="true" ng-click="onRevoke(waiver.id)"> </button> <button ng-if="showArchiveBtn(waiver)" class="icon archive-icon" uib-tooltip="Archive" tooltip-append-to-body="true" ng-click="onArchive(waiver.id)"> </button> <button ng-if="showRestoreBtn(waiver)" class="icon restore-icon" uib-tooltip="{{\'Restore\' | i18next}}" tooltip-append-to-body="true" ng-click="onRestore(waiver.id)"> </button> <button ng-if="showEditTagsBtn(waiver)" ng-disabled="!hasEditPermission" uib-tooltip="{{(waiver.tags|formatTag) || (hasEditPermission ? \'Click to create tags\' : \'\')}}" tooltip-append-to-body="true" tooltip-placement="top-right" tooltip-class="waiver-tags-tooltip" class="icon tag-icon" ng-class="{\'no-tag-icon\': !(waiver.tags && waiver.tags.length)}" ng-click="editTags(waiver)"> </button> <button uib-tooltip="{{\'Attach text\' | i18next}}" tooltip-append-to-body="true" ng-disabled="!hasEditPermission" class="text-icon icon" ng-click="attachText(waiver)"> </button> </td> </tr> </tbody> </table> </div> </div> </div> </div> <div class="waiver-query-backdrop" ng-click="closeQueryDialog()" ng-show="isQueryDialogShow"> <div class="waiver-query-dialog" ng-click="$event.stopPropagation()"> <div class="sort-query"> <div class="query-title">Sort</div> <div class="sort-btns"> <button ng-class="{selected: queryDialogState.sort === \'asc\'}" ng-click="setQuerySort(\'asc\')" ng-i18next="ASC"> </button> <button ng-class="{selected: queryDialogState.sort === \'desc\'}" ng-click="setQuerySort(\'desc\')" ng-i18next="DESC"> </button> </div> </div> <div class="filter-query" ng-if="queryDialogState.choiceList.length"> <div class="query-title" ng-i18next="Filter"></div> <ul class="filter-options"> <li class="filter-option" ng-click="toggleCheckAllOption()"> <span class="option-checkbox" ng-class="{checked: isAllOptionsChecked()}"></span> <span class="option-text" ng-i18next="Select all"></span> </li> <li class="filter-option" ng-repeat="choice in queryDialogState.choiceList" ng-click="toggleCheckOption($index)"> <span class="option-checkbox" ng-class="{checked: choice.checked}"></span> <span class="option-text" tooltip-enable="isOverflow" uib-tooltip="{{option.text}}" check-overflow> {{choice.text}} </span> </li> </ul> </div> <div class="apply-btn" ng-click="applyQuery()"> <button ng-i18next="Apply"></button> </div> </div> </div> '},60583(e){e.exports='<div class="filter-dialog" ng-show="isShow"> <div ng-if="options.length > 20" class="options-searcher"> <input type="text" ng-model="search.text" ng-i18next="[placeholder]Search by template name"/> </div> <ul class="filter-options"> <li ng-repeat="option in options | filter: search" ng-click="handleClickOption(option)"> <span class="option-checkbox" ng-class="{checked: checkedOptions[option.value] !== undefined}"></span> <span class="option-text" tooltip-enable="isOverflow" uib-tooltip="{{option.text}}" check-overflow> {{option.text}} </span> </li> </ul> <button class="filter-dialog-btn clear-btn" ng-click="handleClear()" ng-i18next="Clear"></button> <button class="filter-dialog-btn apply-btn" ng-click="closeDialog()" ng-i18next="Apply"></button> </div> '},64562(e,t,i){var a=i(98609),n=i(62409);const s={date_field:["year","month","day"]};angular.module("waiverforeverApp.waiverList").directive("waiverListTable",["$timeout","$uibModal","authenticator","WFWaiverListProcessor","$state",function(e,t,r,o,l){return{restrict:"AE",scope:{hideTemplateCol:"=",waiverDataList:"=",selectedWaiversId:"=",fieldSortingData:"=",onAccept:"=",onDelete:"=",onRevoke:"=",onReinstate:"=",onDownload:"=",onArchive:"=",onRestore:"=",onQuery:"=",onTogglePinField:"=",onWaiverSelected:"&",showColumns:"=",columnOrder:"="},template:i(59377),link:function(c,d){function p(e){return a(1e3*e).format("hh:mm:ss DD-MM-YYYY")}c.expiredText=i18next.t("Expired at"),c.hasEditPermission=r.hasPermission(["waiver_editing"]),c.hasExportPermission=r.hasPermission(["data_exporting"]),c.sourceTextMap={WF_IOS_APP:i18next.t("iOS Kiosk"),WF_ANDROID_APP:i18next.t("Android Kiosk"),WF_REMOTE_SIGN:i18next.t("Online Sign"),WF_REQUEST_SIGN:i18next.t("Request Sign"),EMBED_WAIVER_WIDGET:i18next.t("Embed waiver(widget)")},c.stickyTop="0px",c.isWaiverSelected=function(e){return c.selectedW
1aiversId[e]},c.toggleSelected=function(e,t){t.stopPropagation(),c.selectedWaiversId[e]?delete c.selectedWaiversId[e]:c.selectedWaiversId[e]=!0},c.scrollHeads=[],c.scrollBodys=[],c.syncScrollListeners=[],c.expirationUnsetText=i18next.t("Expiration rule not set."),c.getExpiredTimestampStr=function(e){return i18next.t("Expired at {{dateString}}",{dateString:p(e)})},c.getWillExpireTimestamp=function(e){return e.expired?null:e.expired_timestamp?p(e.expired_timestamp):void 0},c.getWillExpireTimestampStr=function(e){return i18next.t("Will Expire at {{dateString}}",{dateString:c.getWillExpireTimestamp(e)})},c.syncTableScrollX=function(){c.scrollBodys.forEach((e,t)=>{const i=function(){const i=e.scrollLeft,a=c.scrollHeads[t].parentElement,n=c.scrollBodys[t].parentElement,s=Math.abs(e.scrollWidth-e.offsetWidth-i)<1;0!==i||s?s?(a.classList.add("scroll-reach-right"),n.classList.add("scroll-reach-right")):(a.classList.remove("scroll-reach-right","scroll-reach-left"),n.classList.remove("scroll-reach-right","scroll-reach-left")):(a.classList.add("scroll-reach-left"),n.classList.add("scroll-reach-left"))},a=function(){c.scrollHeads[t].scrollLeft=e.scrollLeft,i()};c.syncScrollListeners.push(a),e.addEventListener("scroll",a),i()})},c.destroySyncTableScrollX=function(){c.scrollBodys.forEach((e,t)=>{e.removeEventListener("scroll",c.syncScrollListeners[t])}),c.syncScrollListeners=[]},c.currentRenewWaiver=null,c.tableWrappersData=[],c.tableHeadHeight=0,c.handleListScroll=function(){c.tableWrappersData=[...d[0].querySelectorAll(".waiver-table-wrapper")].map(e=>({el:e,offsetTop:e.offsetTop,offsetHeight:e.offsetHeight,offsetBottom:e.offsetTop+e.offsetHeight,sticky:!1,fixedInBottom:!1})),d[0].addEventListener("scroll",c.throttledListScrollListener),c.tableHeadHeight=d[0].querySelector(".waiver-table-head").clientHeight},c.throttledListScrollListener=n.throttle(function(t){e(()=>{c.listScrollListener(t)},0)},1e3/60),c.listScrollListener=function(e){c.tableWrappersData.forEach(e=>{e.sticky=!1,e.fixedInBottom=!1});const t=c.tableWrappersData.findIndex(t=>e.target.scrollTop>=t.offsetTop&&e.target.scrollTop<t.offsetBottom);-1!==t&&(e.target.scrollTop>=c.tableWrappersData[t].offsetBottom-c.tableHeadHeight?c.tableWrappersData[t].fixedInBottom=!0:e.target.scrollTop>c.tableWrappersData[t].offsetTop&&(c.tableWrappersData[t].sticky=!0))},c.isSticky=function(e){return c.tableWrappersData[e]&&c.tableWrappersData[e].sticky},c.isBottom=function(e){return c.tableWrappersData[e]&&c.tableWrappersData[e].fixedInBottom},c.syncTableRowHeight=function(){const e=[...d[0].querySelectorAll(".waiver-table-body .waiver-table-scroll tbody tr")],t=[...d[0].querySelectorAll(".waiver-table-body .waiver-table-fixed tbody tr")],i=[...d[0].querySelectorAll(".toolbar-col")];e.forEach((e,a)=>{const n=e.clientHeight;n!==t[a].clientHeight&&(t[a].style.height=`${n}px`),n!==i[a].clientHeight&&(i[a].style.height=`${n}px`)})},c.syncTableScrollColWidth=function(){[...d[0].querySelectorAll(".waiver-table-wrapper")].forEach(e=>{const t=e.querySelectorAll(".waiver-table-head .waiver-table-scroll th"),i=e.querySelectorAll(".waiver-table-body .waiver-table-scroll th");t.forEach((e,t)=>{if(e.clientWidth!==i[t].clientWidth){const a=window.getComputedStyle(i[t]).getPropertyValue("width");e.style.minWidth=a,i[t].style.minWidth=a}})})},c.hoveredWaiverId="",c.handleMouseEnterTr=function(e){c.hoveredWaiverId=e},c.handleMouseLeaveTr=function(){c.hoveredWaiverId=""},c.openWaiver=function(e){c.onWaiverSelected({waiver:e})},c.editTags=function(e){let{tags:a,id:n,document_id:s,template_id:r}=e;c.modalDocumentId=s,c.modalWaiverId=n,t.open({animation:!0,template:i(66341),controller:"WaiverListTagModalCtrl",resolve:{tags:function(){return a},currentWaiverId:function(){return n},currentTemplateId:()=>r}})},c.attachText=function(e){t.open({animation:!0,template:i(11934),controller:"AttachNoteModalCtrl",windowClass:"attach-note-modal centered-modal",backdrop:"static",resolve:{waiverId:()=>e.id,noteList:()=>null,shouldRequestNotes:()=>!0}}).result.then(t=>{const i=n.find(c.waiverDataList,{documentId:e.document_id}),a=n.find(i.waivers,{id:e.id});a.text=[...t,...a.text||[]]})},c.$on("tagModalClosing",function(e,t){const i=n.find(c.waiverDataList,{documentId:c.modalDocumentId});n.find(i.waivers,{id:c.modalWaiverId}).tags=t.length?t:null}),c.editNote=function(e,a){let{note:s,id:r,document_id:o,template_id:l}=e;a.stopPropagation(),c.modalDocumentId=o,c.modalWaiverId=r;t.open({animation:!0,template:i(30417),controller:"WaiverListNoteModalCtrl",resolve:{newNote:function(){return s},currentWaiverId:function(){return r},currentTemplateId:()=>l}}).result.then(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=n.find(c.waiverDataList,{documentId:c.modalDocumentId});n.find(t.waivers,{id:c.modalWaiverId}).note=e.length?e:""})},c.isQueryDialogShow=!1,c.activeQueryTitle=null,c.queryDialogState={documentId:"",template:null,fieldType:"",fieldTitle:"",queryKeys:null,sort:"asc",choiceList:null},c.getSort=function(){return{sortOrder:"desc"===l.params.field_sort?"desc":"asc",sortTitle:l.params.field_title}},c.queryByOrder=function(e,t,i){let{templateId:a,templateTitle:r}=e,{queryKeys:o,choiceList:l,type:d,title:p}=t;const{sortOrder:u,sortTitle:g}=c.getSort();if(i===u&&p===g)return;const v={sort:i,template:{text:r,value:a},queryKeys:s[d]?s[d].map(e=>o[e]):n.values(o),fieldType:d,fieldTitle:p,choiceList:l};c.onQuery(v)},c.showQueryDialog=function(e,t,i){let{documentId:a,templateId:s,templateTitle:r}=e,{sourceIndex:o,queryKeys:l,choiceList:d,type:p,title:u}=t;c.queryDialogState.documentId=a,c.queryDialogState.template={text:r,value:s},c.queryDialogState.queryKeys=n.values(l),c.queryDialogState.fieldType=p,c.queryDialogState.fieldTitle=u,d&&(c.queryDialogState.choiceList=d.map(e=>({text:e,checked:!1}
1))),c.isQueryDialogShow=!0,c.activeQueryTitle=$(i.target),c.setQueryDialogStyle()},c.setQueryDialogStyle=function(){const{top:e,left:t}=c.activeQueryTitle.offset(),i=(c.activeQueryTitle.width(),c.activeQueryTitle.height()),a=$(window).height()-e-i,n=$(".waiver-query-dialog"),s={top:"",left:"",right:"",bottom:""};n.width()<$(window).width()-t?s.left=t:s.right=20,.4*$(window).height()>a?s.bottom=a+20:s.top=e+20,n.css(s)},c.closeQueryDialog=function(){c.activeQueryTitle&&(c.activeQueryTitle=null),c.isQueryDialogShow=!1,c.queryDialogState={documentId:"",template:null,queryKeys:null,sort:"asc",choiceList:null}},c.setQuerySort=function(e){c.queryDialogState.sort=e},c.toggleCheckOption=function(e){c.queryDialogState.choiceList[e].checked=!c.queryDialogState.choiceList[e].checked},c.isAllOptionsChecked=function(){return c.queryDialogState.choiceList.every(e=>e.checked)},c.toggleCheckAllOption=function(){const e=c.isAllOptionsChecked();c.queryDialogState.choiceList.forEach(t=>{t.checked=!e})},c.applyQuery=function(){c.queryDialogState.choiceList&&(c.queryDialogState.choiceList=c.queryDialogState.choiceList.filter(e=>e.checked).map(e=>e.text)),c.onQuery(c.queryDialogState),c.closeQueryDialog()},c.getPlatformTooltip=function(e){return"WEB"===e.platform?c.sourceTextMap[e.source]:e.device?e.device.name&&"Unknown"!==e.device.name?e.device.name:e.device.username&&"Unknown"!==e.device.username?`${e.device.username}'s ${e.device.model}`:e.device.model:i18next.t("unknown device and owner")},c.setStickyHeaderTop=n.throttle(function(){e(()=>{c.stickyTop=`${d.offset().top}px`})},1e3/60),c.togglePinField=function(e,t,i){i.stopPropagation(),c.onTogglePinField(e,t)},c.isFieldPinned=function(e,t){return(c.fieldSortingData[e]||[]).includes(t)},c.sortFieldColumn=function(e,t){const i=c.fieldSortingData[e]||[];return t.map((e,t)=>(e.sourceIndex=t,e)).sort((e,t)=>i.indexOf(t.sourceIndex)-i.indexOf(e.sourceIndex))},c.$on("$destroy",function(){c.destroySyncTableScrollX(),d[0].removeEventListener("scroll",c.throttledListScrollListener),window.removeEventListener("resize",c.setStickyHeaderTop)}),c.parseAnswerResult=o.parseAnswerResult,c.showDownloadBtn=function(e){return!e.archived&&"accepted"===e.state&&c.hasExportPermission},c.showAcceptBtn=function(e){return!e.archived&&"pending"===e.state&&c.hasEditPermission},c.showDelBtn=function(e){return e.archived&&c.hasEditPermission},c.showReinstateBtn=function(e){return!e.archived&&"revoked"===e.state&&"WF_REQUEST_SIGN"===e.source&&c.hasEditPermission},c.showRevokeBtn=function(e){return!e.archived&&"pending"===e.state&&"WF_REQUEST_SIGN"===e.source&&c.hasEditPermission},c.showArchiveBtn=function(e){return!e.archived&&c.hasEditPermission},c.showRestoreBtn=function(e){return e.archived&&c.hasEditPermission},c.showEditTagsBtn=function(e){return"accepted"===e.state},c.isColumnShow=e=>c.showColumns.includes(e),c.relativeTime=function(e){if(!e)return i18next.t("Never");const t=new Date-new Date(1e3*e),i=[{unit:"year",ms:31536e6},{unit:"month",ms:2628e6},{unit:"week",ms:6048e5},{unit:"day",ms:864e5},{unit:"hour",ms:36e5},{unit:"minute",ms:6e4},{unit:"second",ms:1e3}],{unit:a,ms:n}=i.find(e=>{let{ms:i}=e;return Math.abs(t)>=i})||i[i.length-1],s=new Intl.RelativeTimeFormat("en",{numeric:"auto"}),r=Math.round(t/n);return s.format(r,a)},e(function(){c.waiverDataList.length&&(c.scrollHeads=[...d[0].querySelectorAll(".waiver-table-head .waiver-table-scroll-track")],c.scrollBodys=[...d[0].querySelectorAll(".waiver-table-body .waiver-table-scroll-track")],c.syncTableRowHeight(),c.syncTableScrollColWidth(),c.syncTableScrollX(),c.handleListScroll(),c.setStickyHeaderTop(),window.addEventListener("resize",c.setStickyHeaderTop))},0)}}}])},83245(e){e.exports='<div class="modal-title-container"> <h2 class="modal-title-text" ng-i18next="Customize Column"></h2> <img class="close-button" src="/app/static/images/waiverList/close.svg" alt="close modal" ng-click="vm.dismiss()"/> </div> <div class="top-bar"> <p class="modal-info" ng-i18next="Drag and drop to reorder"></p> <div> <button class="reset-button" ng-click="vm.reset()"> <span class="reset-icon"></span> <span ng-i18next="Reset"></span> </button> </div> </div> <div class="body-container"> <div class="filter-list" dnd-list="vm.columns"> <div class="filter-entry" ng-repeat="column in vm.columns" dnd-draggable="column" dnd-moved="vm.columns.splice($index, 1)" dnd-effect-allowed="move"> <img src="/app/static/images/templates/dnd-handler.svg" alt="drag handle" draggable="false"/> <div class="column-name"> {{column.name}} <div class="premium-link" ng-if="column.value === \'expiration\'"> <premium-link feature-key="Auto Expiration" feature-name="{{ \'Auto Expiration\' | i18next }}" video-id="804719389" included-in-current-plan="vm.resolve.waiverExpirationAvailable" source="auto-expiration" description="{{ \'Automatically expire waivers after some time or on a specific day.\' | i18next }}"> <a><img src="/app/static/images/premium.svg" alt="premium tag"/></a> </premium-link> </div> </div> <wf-switch ng-if="column.value !== \'expiration\' || vm.resolve.waiverExpirationAvailable" is-on="column.show" on-toggle="vm.toggleColumn(column)"></wf-switch> <wf-switch ng-if="column.value === \'expiration\' && !vm.resolve.waiverExpirationAvailable" is-on="false" on-toggle="vm.showPremiumPopup()"></wf-switch> </div> </div> <div> <h3 class="modal-subtitle" ng-i18next="Page Size"></h3> <div class="page-size-radio-list"> <label class="page-size-radio" ng-repeat="option in vm.paginationOptions"> <input class="page-size-radio-input" type="radio" ng-value="option" ng-model="vm.perPage"> <span>{{option}}&nbsp;</span> <span ng-i18next="records"></span> </label> </div> </div> <div class="modal-buttons"> <button class="wf-button-secondary" ng-i18next="Cancel" ng-click="vm.dismiss()"></button> <button class="wf-button" ng-i18next="Save" ng-click="vm.submit()"></button> </div> </div> '}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.