UNPKG

p3x-redis-ui-material

Version:

💿 The p3x-redis-ui-material web interface that connects to the p3x-redis-ui-server via http and socket.io

33 lines 193 kB
/*! 

@license p3x-redis-ui-material v2020.10.453
  
💿 The p3x-redis-ui-material web interface that connects to the p3x-redis-ui-server via http and socket.io

https://corifeus.com/redis-ui-material

Copyright (c) 2020 Patrik Laszlo / P3X / Corifeus and contributors.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.    

For more information about all licenses, please see main.15068b3c6730115eb70e.js.LICENSE.txt
 */
(()=>{var e,t,n,o={3099:(e,t,n)=>{p3xr.ng=angular.module("p3xr-redis-ui",["ngCookies","ngAnimate","ngAria","ngSanitize","ngMessages","ngMaterial","ui.router","treeControl","angular-json-tree","angular-inview"]),n(7083),p3xr.ng.config(["$qProvider","$locationProvider","$urlRouterProvider","$stateProvider","p3xrThemeProvider","$mdAriaProvider",(e,t,o,r,i,s)=>{s.disableWarnings(),e.errorOnUnhandledRejections(!1),t.html5Mode(!0),i.start();const a=n(5924);o.otherwise("/main"),a(r)}]),p3xr.ng.run(["$rootScope","p3xrSocket","p3xrTheme","$mdMedia","$state","$timeout","$cookies","p3xrRedisParser","$animate",(e,t,n,o,r,i,s,a,d)=>{let l,c,m;e.p3xr=p3xr,e.$mdMedia=o,e.isElectron=/electron/i.test(navigator.userAgent),e.hasConnected=()=>0!==Object.keys(p3xr.state.redisConnections).length,e.locationReload=()=>{location.href="/"},Object.defineProperty(e.p3xr.state,"search",{get:()=>(l=s.get("p3xr-state-search"),void 0===l&&(l=""),l),set:e=>{l=e,l=s.put("p3xr-state-search",e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"redisTreeDivider",{get:()=>(c=s.get(p3xr.settings.tree.cookieName),void 0===c&&(c=p3xr.settings.tree.defaultDivider),c),set:e=>{c=e,c=s.put(p3xr.settings.tree.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"jsonFormat",{get:()=>(m=s.get(p3xr.settings.jsonFormatSettings.cookieName),void 0===m&&(m=p3xr.settings.jsonFormatSettings.default),parseInt(m)),set:e=>{m=e,m=s.put(p3xr.settings.jsonFormatSettings.cookieName,e,{expires:p3xr.settings.cookieExpiry})}});const p=()=>{console.log("set animation",e.p3xr.settings.animation),d.enabled(e.p3xr.settings.animation),e.p3xr.settings.animation?$body.removeClass("p3xr-no-animation"):$body.addClass("p3xr-no-animation")};let u,g,x,h,f,y,b;Object.defineProperty(e.p3xr.settings,"animation",{get:()=>(u=s.get(p3xr.settings.animationSettings.cookieName),void 0===u&&(u=p3xr.settings.animationSettings.default),1===parseInt(u)),set:e=>{u=e,u=s.put(p3xr.settings.animationSettings.cookieName,e,{expires:p3xr.settings.cookieExpiry}),p()}}),p(),Object.defineProperty(e.p3xr.settings,"maxValueDisplay",{get:()=>(g=s.get(p3xr.settings.maxValueDisplaySetting.cookieName),void 0===g&&(g=p3xr.settings.maxValueDisplaySetting.default),parseInt(g)),set:e=>{g=parseInt(e),g=s.put(p3xr.settings.maxValueDisplaySetting.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"maxKeys",{get:()=>{x=s.get(p3xr.settings.maxKeysSettings.cookieName),void 0===x&&(x=p3xr.settings.maxKeysSettings.default);let e=parseInt(x);return(isNaN(e)||e<5||e>p3xr.settings.maxKeysSettings.max)&&(e=p3xr.settings.maxKeysSettings.default),e},set:e=>{x=parseInt(e),x=s.put(p3xr.settings.maxKeysSettings.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings.language,"current",{get:()=>(h=s.get(p3xr.settings.language.cookieName),void 0===h&&(h=p3xr.settings.language.defaultLanguage),h),set:t=>{void 0===t&&(t=p3xr.settings.language.defaultLanguage),h=t,e.p3xr.strings=p3xr.settings.language.translation[t],h=s.put(p3xr.settings.language.cookieName,t,{expires:p3xr.settings.cookieExpiry})}}),e.p3xr.settings.language.current=s.get(p3xr.settings.language.cookieName),Object.defineProperty(e.p3xr.settings,"keysSort",{get:()=>(f=s.get(p3xr.settings.keySortInfo.cookieName),void 0===f?f=p3xr.settings.keySortInfo.default:"true"===f?f=!0:"false"===f&&(f=!1),f),set:e=>{f=e,f=s.put(p3xr.settings.keySortInfo.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"searchClientSide",{get:()=>(y=s.get(p3xr.settings.searchInfoClientSide.cookieName),void 0===y?y=p3xr.settings.searchInfoClientSide.default:"true"===y?y=!0:"false"===y&&(y=!1),(p3xr.state.keysRaw.length>p3xr.settings.maxLightKeysCount||p3xr.state.dbsize>p3xr.settings.maxLightKeysCount)&&(y=!1),y),set:e=>{y=e,y=s.put(p3xr.settings.searchInfoClientSide.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"searchStartsWith",{get:()=>(b=s.get(p3xr.settings.searchInfoStartsWith.cookieName),void 0===b?b=p3xr.settings.searchInfoStartsWith.default:"true"===b?b=!0:"false"===b&&(b=!1),b),set:e=>{b=e,b=s.put(p3xr.settings.searchInfoStartsWith.cookieName,e,{expires:p3xr.settings.cookieExpiry})}});let v=[];Object.defineProperty(e,"expandedNodes",{get:()=>v,set:e=>{v=e}}),e.savedExpandedNodes=[];let $,k=1;Object.defineProperty(e.p3xr.state,"page",{get:()=>k,set:e=>{k=parseInt(e)}}),e.keysTreeRendered=[],Object.defineProperty(e,"keysTree",{get:()=>(!0!==e.p3xr.state.redisChanged&&JSON.stringify($)===JSON.stringify(p3xr.state.keys)||(e.p3xr.state.redisChanged=!1,e.keysTreeRendered=a.keysToTreeControl({keys:p3xr.state.keys}),$=p3xr.state.keys),e.keysTreeRendered)});let w,C=[];Object.defineProperty(e.p3xr.state,"keys",{get:()=>{if(C=e.p3xr.state.keysRaw.slice(),e.p3xr.settings.searchClientSide&&"string"==typeof e.p3xr.state.search&&e.p3xr.state.search.length>0&&(C=e.p3xr.settings.searchStartsWith?C.filter((t=>t.startsWith(e.p3xr.state.search))):C.filter((t=>t.includes(e.p3xr.state.search)))),C<=e.p3xr.settings.pageCount)return C;{const t=(e.p3xr.state.page-1)*e.p3xr.settings.pageCount;return C.slice(t,t+e.p3xr.settings.pageCount)}}}),Object.defineProperty(e.p3xr.state,"pages",{get:()=>Math.ceil(C.length/e.p3xr.settings.pageCount)}),Object.defineProperty(e.p3xr.settings,"pageCount",{get:()=>(w=s.get(p3xr.settings.paging.cookieName),w=void 0===w?p3xr.settings.paging.default:parseInt(w),w),set:e=>{w=e,w=s.put(p3xr.settings.paging.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),n.start(),console.info("P3X Redis UI ran")}]),angular.element(document).ready((()=>{const e=document.getElementById("p3xr-redis-ui-bootstrap");angular.bootstrap(e,["p3xr-redis-ui"])}))},8808:(e,t,n)=>{p3xr.ng.factory("p3xrDialogConnection",["p3xrCommon","$mdDialog","p3xrSocket",function(e,t,o){return new function(){this.show=async r=>{try{await t.show({controller:["$scope","$mdDialog",function(t,n){t.options=r,void 0!==r.model?(t.model=r.model,t.model.password=r.model.id):t.model={awsElastiCache:!1,azure:!1,name:void 0,host:void 0,port:void 0,password:void 0,id:void 0},t.model.hasOwnProperty("cluster")||(t.model.cluster=!1),t.model.hasOwnProperty("nodes")||(t.model.nodes=[]);for(let e of t.model.nodes)e.password=e.id;t.cancel=function(){n.cancel()};const i=()=>!t.p3xrConnectionForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),!1);t.addNode=e=>{const n={host:void 0,port:void 0,password:void 0,id:p3xr.nextId()};void 0===e?t.model.nodes.push(n):t.model.nodes.splice(e+1,0,n)},t.removeNode=async(n,o)=>{try{await e.confirm({event:n,message:p3xr.strings.confirm.deleteConnectionText}),t.model.nodes.splice(o,1),e.toast({message:p3xr.strings.status.nodeRemoved})}catch(t){if(void 0===t)return;e.generalHandleError(t)}},t.testConnection=async()=>{if(t.p3xrConnectionForm.$setSubmitted(),i())try{p3xr.ui.overlay.show({message:p3xr.strings.title.connectingRedis});await o.request({action:"redis-test-connection",payload:{model:t.model}});e.toast({message:p3xr.strings.status.redisConnected})}catch(t){e.generalHandleError(t)}finally{p3xr.ui.overlay.hide()}},t.submit=async()=>{if(i()){void 0===t.model.host&&(t.model.host="localhost"),void 0===t.model.port&&(t.model.port=6379),"new"===r.type&&(t.model.id=p3xr.nextId());for(let e of t.model.nodes)void 0===e.host&&(e.host="localhost"),void 0===e.id&&(e.id=p3xr.nextId());try{await o.request({action:"connection-save",payload:{model:angular.copy(t.model)}});e.toast({message:"new"===t.options.type?p3xr.strings.status.added:p3xr.strings.status.saved}),n.cancel()}catch(t){e.generalHandleError(t)}}}}],template:n(9862),parent:angular.element(document.body),targetEvent:r.$event,clickOutsideToClose:!0,fullscreen:!0})}catch(t){e.generalHandleError(t)}}}}])},7693:(e,t,n)=>{p3xr.ng.factory("p3xrDialogJsonEditor",["p3xrCommon","$mdDialog","$timeout",function(e,t,o){return new function(){this.show=e=>t.show({controller:["$scope","$mdDialog","p3xrCommon","$rootScope","p3xrTheme",function(t,r,i,s,a){let d,l;s.$broadcast("p3xr-main-resizer",{drag:!1});try{l=JSON.parse(e.value),t.isJson=!0}catch(e){l=void 0,t.isJson=!1}if(t.isJson){(async()=>{try{await Promise.all([n.e(362),n.e(478)]).then(n.t.bind(n,478,7)),o((()=>{let e;switch(p3xr.settings.language.current){case"zn":e="zh-CN";break;default:e="en"}const t=document.getElementById("p3xr-jsoneditor"),n={limitDragging:!1,modes:["tree","code","view","preview"],mode:"code",language:e,ace,theme:a.isDark()?"ace/theme/twilight":"ace/theme/github",indentation:p3xr.settings.jsonFormat};d=new JSONEditor(t,n,l)}))}catch(e){i.generalHandleError(e)}})()}const c=e=>{if(27===(e.which||e.keyCode)){e.preventDefault(),e.stopPropagation();const t=$(".pico-close");t.length>0?t.click():r.cancel()}};document.documentElement.addEventListener("keydown",c,!0),t.$on("$destroy",(()=>{d&&d.destroy(),s.$broadcast("p3xr-main-resizer",{drag:!0}),document.documentElement.removeEventListener("keydown",c,!0)})),t.ok=function(){r.cancel()},t.save=function({format:e}){try{r.hide({obj:JSON.stringify(d.get(),null,e?p3xr.settings.jsonFormat:0)})}catch(e){i.generalHandleError(e)}}}],template:n(8133),parent:angular.element(document.body),targetEvent:e.$event,clickOutsideToClose:!1,fullscreen:!0,multiple:!0,escapeToClose:!1})}}])},7028:(e,t,n)=>{p3xr.ng.factory("p3xrDialogJsonView",["p3xrCommon","$mdDialog",function(e,t){return new function(){this.show=async o=>{try{await t.show({controller:["$scope","$mdDialog","$timeout",function(e,t,n){e.treeExpandAll=()=>{p3xr.ui.overlay.show({message:p3xr.strings.title.jsonRecursive}),n((()=>{e.howExpanded="recursive",n((()=>{p3xr.ui.overlay.hide()}))}))},e.treeCollapseAll=()=>{e.howExpanded=!0};try{e.howExpanded=!0,e.obj=JSON.parse(o.value),e.isJson=!0}catch(t){e.obj=void 0,e.isJson=!1}e.ok=function(){t.cancel()}}],template:n(3857),parent:angular.element(document.body),targetEvent:o.$event,clickOutsideToClose:!0,fullscreen:!0,multiple:!0})}catch(t){e.generalHandleError(t)}}}}])},556:(e,t,n)=>{p3xr.ng.factory("p3xrDialogKeyNewOrSet",["p3xrCommon","$mdDialog","p3xrSocket","p3xrDialogJsonEditor","p3xrDialogJsonView",function(e,t,o,r,i){return new function(){this.show=s=>new Promise((async(a,d)=>{try{await t.show({controller:["$scope","$mdDialog",function(t,l){t.jsonViewer=e=>{i.show({event:e.$event,value:e.value})},t.copy=t=>{n.g.p3xr.clipboard({value:t.value}),e.toast(p3xr.strings.status.dataCopied)},t.types=["string","list","hash","set","zset"],t.validateJson=!1,t.model={type:"string",key:void 0!==s.node?s.node.key:"",value:void 0,score:void 0,hashKey:void 0,index:void 0},t.options=s,s.hasOwnProperty("model")&&Object.assign(t.model,s.model),t.cancel=function(){l.cancel(),d()};t.submit=async()=>{if(!t.p3xrKeyNewForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),0))try{const n=await o.request({action:"key-new-or-set",payload:{type:s.type,originalValue:s.hasOwnProperty("model")?s.model.value:void 0,originalHashKey:s.hasOwnProperty("model")?s.model.hashKey:void 0,model:angular.copy(t.model)}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/key-new-or-set"}),a(n),e.toast({message:p3xr.strings.status.set}),l.cancel()}catch(t){d(t),e.generalHandleError(t)}},t.jsonEditor=async n=>{try{const e=await r.show({event:n.$event,value:n.value});t.model.value=e.obj,t.$digest()}catch(t){e.generalHandleError(t)}},t.formatJson=()=>{try{t.model.value=JSON.stringify(JSON.parse(t.model.value),null,p3xr.settings.jsonFormat)}catch(t){e.toast({message:p3xr.strings.label.jsonViewNotParsable})}}}],template:n(5817),parent:angular.element(document.body),targetEvent:s.$event,clickOutsideToClose:!1,fullscreen:!0,multiple:!0})}catch(t){d(t),e.generalHandleError(t)}}))}}])},6310:(e,t,n)=>{p3xr.ng.factory("p3xrDialogTreecontrolSettings",["p3xrCommon","$mdDialog","$timeout",function(e,t,o){return new function(){this.show=async o=>{try{await t.show({controller:["$scope","$rootScope",function(n,r){console.log("$rootScope.p3xr.settings.maxValueDisplay",r.p3xr.settings.maxValueDisplay),n.model={treeSeparator:r.p3xr.settings.redisTreeDivider,pageCount:r.p3xr.settings.pageCount,keysSort:r.p3xr.settings.keysSort,searchClientSide:r.p3xr.settings.searchClientSide,searchStartsWith:r.p3xr.settings.searchStartsWith,maxValueDisplay:r.p3xr.settings.maxValueDisplay,maxKeys:r.p3xr.settings.maxKeys,jsonFormat:2===r.p3xr.settings.jsonFormat,animation:r.p3xr.settings.animation},n.cancel=function(){t.cancel()};n.submit=async()=>{if(!n.p3xrDialogTreecontrolSettingsForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),0))try{r.p3xr.settings.redisTreeDivider=n.model.treeSeparator,r.p3xr.settings.pageCount=n.model.pageCount,r.p3xr.settings.keysSort=n.model.keysSort,r.p3xr.settings.searchClientSide=n.model.searchClientSide,r.p3xr.settings.searchStartsWith=n.model.searchStartsWith,r.p3xr.state.page=1,r.p3xr.state.redisChanged=!0,r.p3xr.settings.maxValueDisplay=n.model.maxValueDisplay,r.p3xr.settings.maxKeys=n.model.maxKeys,r.p3xr.settings.jsonFormat=!0===n.model.jsonFormat?2:4,r.p3xr.settings.animation=!0===n.model.animation?1:0,void 0!==o.p3xrMainRef&&o.p3xrMainRef.refresh(),t.cancel(),r.$broadcast("p3x-refresh")}catch(t){e.generalHandleError(t)}}}],template:n(526),parent:angular.element(document.body),targetEvent:o.$event,clickOutsideToClose:!0,fullscreen:!0})}catch(t){e.generalHandleError(t)}}}}])},5583:(e,t,n)=>{p3xr.ng.factory("p3xrDialogTtl",["p3xrCommon","$mdDialog",function(e,t){const o=n(9567);return new function(){this.show=async r=>{try{return await t.show({controller:["$scope","$mdDialog",function(t,i){t.cancel=function(){i.cancel()},t.model=r.model;const s=n(2014);"number"==typeof t.model.ttl&&t.model.ttl>0?t.convertTextToTime=s(1e3*t.model.ttl,{delimiter:" "}):t.convertTextToTime="",t.openTimestringNpm=()=>{window.open("https://www.npmjs.com/package/timestring#keywords","_blank")};let a=!0;t.$watch("convertTextToTime",((e,n)=>{if(a)a=!a;else try{t.model.ttl=o(String(e),"s")}catch(e){console.warn("timestring parse error",e)}}));t.submit=async()=>{if(!t.p3xrTtlForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),0))try{isNaN(t.model.ttl)&&(t.model.ttl=Math.round(t.model.ttl));const e={model:t.model};i.hide(e)}catch(t){e.generalHandleError(t)}}}],template:n(5006),parent:angular.element(document.body),targetEvent:r.$event,clickOutsideToClose:!0,fullscreen:!0})}catch(t){e.generalHandleError(t)}}}}])},305:()=>{p3xr.ng.directive("p3xValidateJson",(function(){return{restrict:"A",require:"ngModel",scope:{p3xValidateJsonRequired:"<"},link:function(e,t,n,o){let r,i=e.p3xValidateJsonRequired||!1;e.$watch("p3xValidateJsonRequired",((e,t)=>{if(i=e,i)try{JSON.parse(r),o.$setValidity("p3xValidateJson",!0)}catch(e){o.$setValidity("p3xValidateJson",!1)}else o.$setValidity("p3xValidateJson",!0)})),o.$validators.p3xIsJson=(e,t)=>{if(r=e,!i)return o.$setValidity("p3xValidateJson",!0),!0;try{return JSON.parse(e),o.$setValidity("p3xValidateJson",!0),!0}catch(e){return o.$setValidity("p3xValidateJson",!1),!1}}}}}))},7229:()=>{p3xr.ng.directive("ngEnter",(function(){return function(e,t,n){t.bind("keydown keypress",(function(t){13===t.which&&(e.$apply((function(){e.$eval(n.ngEnter)})),t.preventDefault())}))}}))},2942:(e,t,n)=>{p3xr.ng.factory("p3xrCommon",["$mdToast","$mdDialog","$mdColors","$rootScope","p3xrRedisParser","$timeout",function(e,t,o,r,i,s){n(6897);const a=e=>{let n,o,r;return e.hasOwnProperty("disableCancel")?(n=t.alert(),o=p3xr.strings.confirm.info,r=p3xr.strings.intention.ok):(n=t.confirm(),o=p3xr.strings.confirm.title,r=p3xr.strings.intention.sure),n.title(o).htmlContent(e.message).targetEvent(e.event).ok(r).multiple(!0),e.hasOwnProperty("disableCancel")||n.cancel(p3xr.strings.intention.cancel),t.show(n)},d={generalHandleError:e=>{if(void 0!==e){if(e instanceof Error||e instanceof Object||(e=new Error(e)),e instanceof Error||"error"===e.status){let t;return t=e instanceof Error?e:e.error,console.warn("generalHandleError"),console.error(t),"string"==typeof t&&p3xr.strings.code.hasOwnProperty(t)?t=new Error(p3xr.strings.code[t]):t.hasOwnProperty("code")&&p3xr.strings.code.hasOwnProperty(t.code)?t.message=p3xr.strings.code[t.code]:p3xr.strings.code.hasOwnProperty(t.message)&&(t.message=p3xr.strings.code[t.message]),d.alert({title:p3xr.strings.title.error,message:"<pre>"+(t.hasOwnProperty("message")?t.message:t)+"</pre>"}),!1}return!0}},toast:t=>{"string"==typeof t&&(t={message:t});const n='<md-toast class="md-toast p3xr-toast-default" ng-click="closeToast()">'+t.message+"</md-toast>";e.show({controller:"p3xrToastController",template:n,hideDelay:t.hideDelay||p3xr.settings.toast.timeout,position:p3xr.settings.toast.position})},alert:e=>("string"==typeof e&&(e={message:e}),e.disableCancel=!0,a(e)),confirm:a,loadRedisInfoResponse:e=>{const{response:t}=e;console.time("loadRedisInfoResponse"),r.p3xr.state.info=i.info(t.info),r.p3xr.state.keysRaw=t.keys,r.p3xr.settings.keysSort&&r.p3xr.state.keysRaw.length<=p3xr.settings.maxLightKeysCount?r.p3xr.state.keysRaw=t.keys.sort(p3xr.sort.naturalCompareDocument()):r.p3xr.state.keysRaw=t.keys,r.p3xr.state.keysInfo=t.keysInfo,s((()=>{r.p3xr.state.reducedFunctions=r.p3xr.state.keysRaw.length>p3xr.settings.maxLightKeysCount,r.$digest(),console.timeEnd("loadRedisInfoResponse")}))},setTableZebraStyles:e=>{const{$odd:t}=e;if(!t)return"";let n="";return n+=`background-color: ${o.getThemeColor(p3xr.state.themeLayout+"-background-500-0.1")};`,n}};return d}]).controller("p3xrToastController",["$scope","$mdToast",function(e,t){e.closeToast=function(){t.hide()}}])},1931:()=>{p3xr.ng.factory("p3xrRedisParser",["$rootScope",function(e){return new function(){const t=this;this.array=e=>{const{line:t}=e;let{divider:n,fieldDivider:o}=e;void 0===n&&(n=","),void 0===o&&(o="=");const r=t.split(n),i={};for(let e of r){const t=e.split(o);i[t[0]]=t[1].trim()}return i},this.info=e=>{const n=e.split("\n"),o={};let r,i;for(let e of n)if(e.startsWith("#"))void 0!==r&&(o[r]=i),r=e.substring(1).toLowerCase().trim(),i={};else if(e.length>2){const n=e.split(":");i[n[0]]=n[1].includes(",")?t.array({line:n[1].trim()}):n[1].trim()}return void 0!==r&&(o[r]=i),o.hasOwnProperty("keyspace")&&(o.keyspaceDatabases={},Object.keys(o.keyspace).forEach((e=>{e=parseInt(e.substring(2)),o.keyspaceDatabases[e]=!0}))),o},this.keysToTreeControl=t=>{let{keys:n}=t,{divider:o}=t;void 0===o&&(o=p3xr.settings.redisTreeDivider);const r=[],i=[];e.expandedNodes=[];const s=(t,n=0,a=r)=>{let d=!1;if(n+1<t.length)for(let e in a){const o=a[e];o.label===t[n]&&"folder"===o.type&&(d=o)}if(!1===d){const r={label:t[n],key:t.slice(0,n+1).join(o),children:[],childCount:0};d=n+1===t.length?Object.assign(r,{type:"element",keysInfo:p3xr.state.keysInfo[r.key]}):Object.assign(r,{type:"folder"}),a.push(d);for(let t of e.savedExpandedNodes)t.key===d.key&&i.push(d)}n+1<t.length&&s(t,n+1,d.children)};e.expandedNodes=i;for(let e of n){let t;t=""===o?[e]:e.split(o),s(t)}const a={},d=e=>{a[e.key]=e.children.length;for(let t of e.children)d(t)};for(let e of r)d(e);const l=e=>{for(let t of Object.keys(a))(t.startsWith(e.key+":")||t===e.key)&&(e.childCount+=a[t]);for(let t of e.children)l(t)};for(let e of r)l(e);return e.savedExpandedNodes=[],r},this.console=new function(){this.parse=e=>{if("object"==typeof e){let t="";return Object.keys(e).forEach((n=>{""!==t&&(t+="\n"),t+=e[n]})),t}return e}}}}])},876:(e,t,n)=>{p3xr.ng.factory("p3xrSocket",["$rootScope","p3xrCommon","$state",function(e,t,o){const r=io.connect(p3xr.api.host,{rejectUnauthorized:!1,path:"/socket.io",secure:!0});let i=!1;r.on("connect",(async function(){i?console.log("p3xr-socket (socket) RE-connected",r.id):console.log("p3xr-socket (socket) connected",r.id),i=!0})),r.on("disconnect",(function(){location.reload()}));let s=void 0;r.on("info-interval",(t=>{e.p3xr.state.donated=t.donated,t.donated!==s&&(n.g.p3xr.isBot()||window.gtag("config",p3xr.settings.googleAnalytics,{page_path:p3xr.state.donated?"/donated":"/free"}),s=t.donated,e.$digest())}));let a=!1;const d=async function(e){if(!a){a=!0;try{t.generalHandleError(e),o.go("socketio-error",{error:e}),await t.confirm({disableCancel:!1,message:p3xr.strings.confirm.socketioConnectError}),location.reload()}catch(e){t.generalHandleError(e)}}};r.on("error",d),r.on("connect_error",d),r.on("connections",(n=>{t.generalHandleError(n)?(p3xr.state.connections=n.connections,e.$digest()):p3xr.connectionsReset()})),r.on("redis-disconnected",(async n=>{if(void 0!==e.p3xr.state.connection&&e.p3xr.state.connection.id===n.connectionId){e.p3xr.state.connection=void 0,"error"===n.status?t.toast({message:p3xr.strings.status.redisDisconnected(n)}):"code"===n.status&&(p3xr.strings.code.hasOwnProperty(n.code)?t.toast({message:p3xr.strings.code[n.code]}):t.toast({message:"unknown redis disconnect code: "+n.code})),o.go("main");try{await c({action:"trigger-redis-disconnect",enableResponse:!1})}catch(e){t.generalHandleError(e)}}})),r.on("redis-status",(t=>{e.p3xr.state.redisConnections=t.redisConnections}));let l=!1;r.on("configuration",(t=>{e.p3xr.state.cfg=t,!0===p3xr.state.cfg.snapshot?p3xr.state.version="SNAPSHOT":(p3xr.state.version="v"+p3xr.pkg.version,l||(l=!0,window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/version/"+p3xr.state.version}))),e.$digest()})),r.on("error",t.generalHandleError);const c=t=>{t.payload||(t.payload={}),"string"==typeof e.p3xr.state.search&&e.p3xr.state.search.length>0&&(e.p3xr.settings.searchStartsWith?t.payload.match=e.p3xr.state.search+"*":t.payload.match="*"+e.p3xr.state.search+"*"),t.payload.maxKeys=parseInt(p3xr.settings.maxKeys);let{enableResponse:n}=t;if(!1!==n&&(n=!0),n)return new Promise(((n,o)=>{t.requestId=p3xr.nextId();const i="p3xr-response-"+t.requestId;let s;const a=t=>{if(clearTimeout(s),r.off(i),"ok"===t.status)n(t);else{const e=new Error(t.error);o(e)}e.$digest()};s=setTimeout((()=>{r.off(i,a),o(new Error(p3xr.strings.label.socketIoTimeout({timeout:p3xr.settings.socket.timeout}))),e.$digest()}),p3xr.settings.socket.timeout),r.on(i,a),r.emit("p3xr-request",t)}));r.emit("p3xr-request",t)};return{ioClient:r,request:c}}])},7083:(e,t,n)=>{n(8808),n(7693),n(7028),n(556),n(6310),n(5583),n(305),n(7229),n(2942),n(1931),n(876),n(5092),n(3604),n(5879),n(3032),n(6129),n(3631),n(3613),n(6117),n(8012),n(5836),n(1378),n(7630),n(3886),n(5060),n(2036),n(4250),n(5943),n(1380),n(7871),n(3975),n(7698),n(6342),n(822),n(6961),n(3269),n(7327)},5092:(e,t,n)=>{p3xr.ng.component("p3xrLayout",{template:n(134),controller:["p3xrTheme","$rootScope","p3xrSocket","p3xrCommon","$state","$cookies","$timeout","$scope",function(e,t,o,r,i,s,a,d){let l;this.getThemeKey=e=>{if(void 0===l){const t=Object.keys(e);l=t.sort(((t,n)=>e[t].order-e[n].order))}return l},this.getVersionColor=()=>"p3xrThemeMatrix"===e.getCurrentThemeName()?"grey-900":"background-A100",this.setTheme=t=>{e.setTheme(e.generateThemeName(t))},this.openLink={github:()=>{window.open("https://github.com/patrikx3/redis-ui","github-patrikx3-"+p3xr.pkg.corifeus.reponame)},githubTodo:()=>{window.open("https://github.com/patrikx3/redis-ui/blob/master/todo.md#to-do",`github-patrikx3-${p3xr.pkg.corifeus.reponame}-todo`)},githubChangelog:()=>{window.open("https://github.com/patrikx3/redis-ui/blob/master/changelog.md#change-log",`github-patrikx3-${p3xr.pkg.corifeus.reponame}-changelog`)},donate:()=>{window.open("https://www.paypal.me/patrikx3","p3x-redis-ui-donate")}};const c=n(7310);let m;Object.defineProperty(this,"themeSelectedKey",{get:()=>{let e=p3xr.state.theme;return e=e.slice("p3xrTheme".length),e=c(e),e}});const p=()=>{m.css("left",document.documentElement.clientWidth/2-m.outerWidth()/2+"px")};this.reducedFunctionalty=()=>{r.confirm({disableCancel:!0,message:p3xr.strings.label.tooManyKeys({count:t.p3xr.state.keysRaw.length,maxLightKeysCount:p3xr.settings.maxLightKeysCount})})},this.$onInit=()=>{m=$("#p3xr-layout-reduced"),p(),$window.on("resize",p);const e=s.getObject(p3xr.settings.connectInfo.cookieName);void 0!==e&&this.connect(e),a((()=>{n.g.p3xrSetLanguage=e=>{t.$apply((()=>{t.isElectron=!0,this.setLanguage(e)}))},n.g.p3xrSetMenu=e=>{t.$apply((()=>{t.isElectron=!0,i.go(e)}))}}),3e3)},this.$onDestroy=function(){$window.off("resize",p)},n.g.p3xr.isBot()||t.$on("$locationChangeSuccess",(async function(e,t,n){const o=new URL(t);o.pathname.toLowerCase().startsWith("/main/key/")?window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/main/key"}):(console.log("$locationChangeSuccess gtag",o.pathname),window.gtag("config",p3xr.settings.googleAnalytics,{page_path:o.pathname}))})),this.connect=async e=>{console.time("connect"),e=angular.copy(e);try{const n=location.pathname.split("/");n.shift();let a=n.join(".");""===a&&(a="main"),p3xr.ui.overlay.show({message:p3xr.strings.title.connectingRedis});const d=s.get(p3xr.settings.connection.getCookieNameCurrentDatabase(e.id)),l=await o.request({action:"connection-connect",payload:{connection:e,db:d}});t.p3xr.state.page=1,p3xr.state.dbsize=l.dbsize;let c=0;const m=[];for(;c<l.databases;)m.push(c++);p3xr.state.commands=[],Object.keys(l.commands).forEach((e=>{p3xr.state.commands.push(l.commands[e][0])})),p3xr.state.commands.sort(),t.p3xr.state.databaseIndexes=m,t.p3xr.state.connection=e,r.loadRedisInfoResponse({response:l}),s.putObject(p3xr.settings.connectInfo.cookieName,e,{expires:p3xr.settings.cookieExpiry}),i.reload(),a.startsWith("main")?"main"===a&&i.go("main.statistics"):i.go(a)}catch(e){s.remove(p3xr.settings.connectInfo.cookieName),t.p3xr.state.connection=void 0,r.generalHandleError(e)}finally{p3xr.ui.overlay.hide()}console.timeEnd("connect")},this.disconnect=async()=>{try{s.remove(p3xr.settings.connectInfo.cookieName),await o.request({action:"connection-disconnect",payload:{connectionId:p3xr.state.connection.id}}),t.p3xr.state.connection=void 0}catch(e){r.generalHandleError(e)}finally{i.go("main")}},Object.defineProperty(this,"connectionName",{get:()=>void 0!==t.p3xr.state.connection?t.p3xr.strings.label.connected({name:t.p3xr.state.connection.name}):t.p3xr.strings.intention.connect}),this.isMain=()=>i.current.name.startsWith("main"),this.isElectronInitialized=!1,this.setLanguage=async e=>{try{t.p3xr.settings.language.current=e,t.isElectron&&(await o.request({action:"set-language",payload:{key:e}}),this.isElectronInitialized=!0,d.$digest())}catch(e){r.generalHandleError(e)}}}]})},3604:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyHash",{template:n(176),bindings:{p3xrValue:"=",p3xrKey:"<",p3xrResponse:"<"},controller:["p3xrCommon","p3xrSocket","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$rootScope",function(e,t,o,r,i){this.copy=t=>{n.g.p3xr.clipboard({value:t.value}),e.toast(p3xr.strings.status.dataCopied)},this.addHash=async t=>{try{await r.show({type:"append",$event:t.$event,model:{type:"hash",key:this.p3xrKey}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.deleteHashKey=async n=>{try{await e.confirm({event:n.$event,message:p3xr.strings.confirm.deleteHashKey}),await t.request({action:"key-hash-delete-field",payload:{key:this.p3xrKey,hashKey:n.hashKey}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.editValue=async t=>{try{const{hashKey:e,value:n}=t;await r.show({type:"edit",$event:t.$event,model:{type:"hash",value:n,hashKey:e,key:this.p3xrKey}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.showJson=e=>{const{value:t}=e;o.show({value:t})},this.setTableStyles=t=>e.setTableZebraStyles(t)}]})},5879:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyList",{template:n(2585),bindings:{p3xrValue:"=",p3xrKey:"<",p3xrResponse:"<"},controller:["$mdColors","p3xrCommon","p3xrSocket","$rootScope","p3xrDialogJsonView","p3xrDialogKeyNewOrSet",function(e,t,o,r,i,s){this.copy=e=>{n.g.p3xr.clipboard({value:e.value}),t.toast(p3xr.strings.status.dataCopied)},this.appendValue=async e=>{try{const{index:t,value:n}=e;await s.show({type:"append",$event:e.$event,model:{type:"list",key:this.p3xrKey}}),r.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.editValue=async e=>{try{const{index:t,value:n}=e;await s.show({type:"edit",$event:e.$event,model:{type:"list",value:n,index:e.index,key:this.p3xrKey}}),r.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.deleteListElement=async e=>{try{await t.confirm({event:e.$event,message:p3xr.strings.confirm.deleteListItem});await o.request({action:"key-list-delete-index",payload:{key:this.p3xrKey,index:e.index}});r.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.showJson=e=>{const{value:t}=e;i.show({value:t})},this.setTableStyles=e=>t.setTableZebraStyles(e)}]})},3032:(e,t,n)=>{p3xr.ng.component("p3xrMainKeySet",{template:n(7129),bindings:{p3xrValue:"=",p3xrKey:"<",p3xrResponse:"<"},controller:["p3xrCommon","p3xrSocket","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$rootScope",function(e,t,o,r,i){this.copy=t=>{n.g.p3xr.clipboard({value:t.value}),e.toast(p3xr.strings.status.dataCopied)},this.addSet=async t=>{try{await r.show({type:"append",$event:t.$event,model:{type:"set",key:this.p3xrKey}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.deleteSetMember=async n=>{try{await e.confirm({event:n.$event,message:p3xr.strings.confirm.deleteSetMember}),await t.request({action:"key-set-delete-member",payload:{key:this.p3xrKey,value:n.value}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.editValue=async t=>{try{const{value:e}=t;await r.show({type:"edit",$event:t.$event,model:{type:"set",value:e,key:this.p3xrKey}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.showJson=e=>{const{value:t}=e;o.show({value:t})},this.setTableStyles=t=>e.setTableZebraStyles(t)}]})},6129:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyString",{template:n(9263),bindings:{p3xrValue:"=",p3xrKey:"<",p3xrResponse:"<"},controller:["p3xrSocket","p3xrCommon","$rootScope","p3xrDialogJsonView","p3xrDialogJsonEditor",function(e,t,o,r,i){let s;this.copy=()=>{n.g.p3xr.clipboard({value:this.p3xrValue}),t.toast(p3xr.strings.status.dataCopied)},this.editable=!1,this.edit=()=>{s=angular.copy(this.p3xrValue),this.editable=!0},this.cancelEdit=()=>{this.p3xrValue=s,this.editable=!1},this.validateJson=!1,this.save=async()=>{try{if(!0===this.validateJson)try{JSON.parse(this.p3xrValue)}catch(e){return void t.toast({message:p3xr.strings.label.jsonViewNotParsable})}await e.request({action:"key-set",payload:{type:this.p3xrResponse.type,value:this.p3xrValue,key:this.p3xrKey}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/key-set"}),this.editable=!1,o.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.jsonViewer=e=>{r.show({event:e.$event,value:this.p3xrValue})},this.jsonEditor=async e=>{try{const t=await i.show({event:e.$event,value:this.p3xrValue});this.p3xrValue=t.obj,await this.save()}catch(e){t.generalHandleError(e)}},this.formatJson=async()=>{try{this.p3xrValue=JSON.stringify(JSON.parse(this.p3xrValue),null,p3xr.settings.jsonFormat),await this.save()}catch(e){t.toast({message:p3xr.strings.label.jsonViewNotParsable})}}}]})},3631:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyZset",{template:n(508),bindings:{p3xrValue:"=",p3xrKey:"<",p3xrResponse:"<"},controller:["$scope","p3xrCommon","p3xrSocket","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$rootScope",function(e,t,o,r,i,s){this.copy=e=>{n.g.p3xr.clipboard({value:e.value}),t.toast(p3xr.strings.status.dataCopied)};let a;e.$watch("$ctrl.p3xrValue",((e,t)=>{e!==a&&(a=e,this.generatedValue=(e=>{const t=[];let n=void 0;for(let o of e)void 0===n?n=o:(t.push([parseFloat(o),n]),n=void 0);return t})(this.p3xrValue))})),this.showJson=e=>{const{value:t}=e;r.show({value:t})},this.setTableStyles=e=>t.setTableZebraStyles(e),this.addZSet=async e=>{try{await i.show({type:"append",$event:e.$event,model:{type:"zset",key:this.p3xrKey}}),s.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.deleteZSet=async e=>{try{await t.confirm({event:e.$event,message:p3xr.strings.confirm.deleteZSetMember}),await o.request({action:"key-zset-delete-member",payload:{key:this.p3xrKey,value:e.member}}),s.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.editValue=async e=>{try{const{member:t}=e;await i.show({type:"edit",$event:e.$event,model:{type:"zset",score:e.score,value:t,key:this.p3xrKey}}),s.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}}}]})},3613:(e,t,n)=>{p3xr.ng.component("p3xrMainKey",{template:n(9868),bindings:{p3xrResize:"&"},controller:["p3xrCommon","p3xrRedisParser","p3xrSocket","$rootScope","$stateParams","$timeout","$scope","$mdDialog","$state","$interval","p3xrDialogTtl",function(e,t,o,r,i,s,a,d,l,c,m){this.$stateParams=i;let p=!1;const u=()=>!(this.response.ttl<-1||p&&this.response.ttl<1)||(e.toast({message:p3xr.strings.status.keyIsNotExisting}),c.cancel(g),p3xr.state.redisChanged=!0,l.go("main.statistics"),!1);let g;const x=n(2014),h=()=>{if(this.response.ttl>-1){const e=()=>{if(u()){let e;switch(p3xr.settings.language.current){case"zn":e="zh_CN";break;default:e="en"}this.ttlParsed=" "+x(1e3*this.response.ttl,{language:e,delimiter:" "})}else c.cancel(g)};e(),r.p3xr.state.reducedFunctions||(g=c((()=>{this.response.ttl=this.response.ttl-1,e()}),1e3))}},f=async(t={})=>{c.cancel(g);let{withoutParent:n}=t;void 0===n&&(n=!1);let r=void 0;try{p3xr.ui.overlay.show({message:p3xr.strings.intention.getKey});const e=await o.request({action:"key-get",payload:{key:i.key}});this.response=e;const t=e.type;if(-2===e.ttl)return void u();switch(t){case"string":e.length=e.value.length}e.ttl>-1&&(p=!0),h()}catch(t){r=t,console.error(t),e.alert(p3xr.strings.label.unableToLoadKey({key:i.key}))}finally{p3xr.ui.overlay.hide(),void 0!==r?l.go("main.statistics"):n||null===i.resize||i.resize()}};this.$onInit=()=>f(),this.$onDestroy=function(){c.cancel(g)},this.charactersPrettyBytes=e=>{if(e<1024||void 0===e)return"";return"("+n(7036)(e)+")"},this.refresh=e=>{window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/refresh"}),f(e)},this.rename=async e=>{r.$broadcast("p3xr-key-rename",{key:i.key,$event:e.$event})},this.delete=async()=>{r.$broadcast("p3xr-key-delete",{key:i.key})},this.setTtl=async t=>{try{const t=await m.show({model:{ttl:-1===this.response.ttl?"":this.response.ttl}});if(void 0===t)return;if(null==t.model.ttl||""===String(t.model.ttl).trim()){await o.request({action:"persist",payload:{key:i.key}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/persist"}),await this.refresh(),e.toast({message:p3xr.strings.status.persisted})}else if(String(t.model.ttl).match(/^-{0,1}\d+$/)){await o.request({action:"expire",payload:{key:i.key,ttl:parseInt(t.model.ttl)}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/expire"}),await this.refresh(),e.toast({message:p3xr.strings.status.ttlChanged})}else e.toast({message:p3xr.strings.status.notInteger})}catch(t){e.generalHandleError(t)}},a.$on("p3x-refresh",(()=>{this.refresh({withoutParent:!0})})),a.$on("p3x-refresh-key",(()=>{this.refresh({withoutParent:!0})}))}]})},6117:(e,t,n)=>{p3xr.ng.component("p3xrMainStatistics",{template:n(4498),controller:["p3xrCommon","p3xrRedisParser","p3xrSocket","$rootScope","$scope","$timeout","$stateParams",function(e,t,n,o,r,i,s){const a=["in","run","per"],d=["sha1"],l={perc:"percent",sec:"seconds"},c=$("#p3xr-main-content-container"),m=()=>{this.maxHeight=c[0].offsetHeight-50};$window.on("resize",m),this.$doCheck=m,this.$onInit=()=>{p3xr.state.redisChanged&&(p3xr.state.redisChanged=!1,o.$broadcast("p3x-refresh"))},this.$onDestroy=()=>{$window.off("resize",m)},this.hasDatabases=Object.keys(o.p3xr.state.info.keyspaceDatabases).length>0,this.generateKey=e=>{if(p3xr.strings.title.hasOwnProperty(e))return p3xr.strings.title[e];return e.split("_").map(((e,t)=>(l.hasOwnProperty(e)&&(e=l[e]),d.includes(e)||e.length<4&&!a.includes(e)?e.toUpperCase():0===t?e[0].toUpperCase()+e.substring(1):e))).join(" ")}}]})},8012:(e,t,n)=>{p3xr.ng.component("p3xrMainTreecontrolControls",{template:n(3646),bindings:{p3xrMainRef:"<"},controller:["$cookies","$rootScope","p3xrCommon","$timeout","p3xrDialogTreecontrolSettings","$scope",function(e,t,n,o,r,i){this.treeExpandAll=()=>{try{p3xr.ui.overlay.show({message:p3xr.strings.status.treeExpandAll});let e=[];const n=(t,o=0)=>{if(delete t.$inview,"folder"===t.type){e.push(t);for(let e of t.children)n(e,o++)}};for(let e of t.keysTreeRendered)n(e);t.expandedNodes=e}catch(e){n.generalHandleError(e)}finally{p3xr.ui.overlay.hide()}},this.treeCollapseAll=()=>{t.expandedNodes=[],t.$broadcast("p3xr-main-treecontrol-control-noop")},i.$on("p3xr-main-treecontrol-control-noop",(()=>{o((()=>{$("#p3xr-main-treecontrol-controls-click-noop").click()}))})),this.noop=()=>{},this.page=e=>{const{page:n}=e;switch(n){case"prev":t.p3xr.state.page-1>=1&&(t.p3xr.state.page=t.p3xr.state.page-1);break;case"next":t.p3xr.state.page+1<=t.p3xr.state.pages&&(t.p3xr.state.page=t.p3xr.state.page+1);break;case"last":t.p3xr.state.page=t.p3xr.state.pages;break;case"first":t.p3xr.state.page=1}o((()=>{t.$digest()}))},this.pageChange=()=>{t.p3xr.state.page<1?t.p3xr.state.page=1:t.p3xr.state.page>t.p3xr.state.pages&&(t.p3xr.state.page=t.p3xr.state.pages)},this.openTreeSettingDialog=e=>{e.p3xrMainRef=this.p3xrMainRef,r.show(e)},this.search="",this.$onInit=()=>{this.search=t.p3xr.state.search},this.onSearchChange=()=>{t.p3xr.settings.searchClientSide?t.p3xr.state.redisChanged=!0:this.p3xrMainRef.refresh(),t.p3xr.state.page=1},this.treeDividerChange=()=>{t.p3xr.state.redisChanged=!0,t.$broadcast("p3x-refresh")}}]})},5836:(e,t,n)=>{p3xr.ng.component("p3xrMainTree",{template:n(5484),bindings:{p3xrResize:"&",p3xrMainRef:"<"},controller:["p3xrCommon","p3xrRedisParser","p3xrSocket","$rootScope","$timeout","$state","$scope","$mdDialog","p3xrDialogKeyNewOrSet","p3xrTheme","$stateParams",function(e,t,o,r,i,s,a,d,l,c,m){let p=0;this.$doCheck=()=>{p<10&&(p++,this.p3xrMainRef.resizeRaw())},this.displayNode=(e,t)=>{e.$inview=t},this.getTreeTheme=()=>c.isDark()?"tree-dark":"tree-classic",this.keysTreeOptions={nodeChildren:"children",dirSelectable:!1,multiSelection:!1},this.selectTreeNode=function(e,t,n,o,r,i,a,d,l,c){s.go("main.key",{key:e.key,resize:this.p3xrResize})},this.showToggle=function(e,t,o,i,s,a,d,l,c,m){t||n(2453).recursive({nodes:r.keysTreeRendered}),r.$broadcast("p3xr-main-treecontrol-control-noop")},this.delete=async t=>{try{await e.confirm({message:p3xr.strings.confirm.deleteKey});const n=angular.copy(r.expandedNodes),a=await o.request({action:"delete",payload:{key:t.key}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/delete"}),i((()=>{r.savedExpandedNodes=n,e.loadRedisInfoResponse({response:a})})),s.go("main.statistics"),e.toast({message:p3xr.strings.status.deletedKey({key:t.key})})}catch(t){e.generalHandleError(t)}},this.rename=async t=>{try{const n=d.prompt().title(p3xr.strings.confirm.rename.title).textContent(p3xr.strings.confirm.rename.textContent).placeholder(p3xr.strings.confirm.rename.placeholder).ariaLabel(p3xr.strings.confirm.rename.placeholder).initialValue(t.key).targetEvent(t.$event).required(!0).ok(p3xr.strings.intention.rename).cancel(p3xr.strings.intention.cancel),a=await d.show(n),l=angular.copy(r.expandedNodes),c=await o.request({action:"rename",payload:{key:t.key,keyNew:a}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/rename"}),i((()=>{r.savedExpandedNodes=l,e.loadRedisInfoResponse({response:c}),s.go("main.key",{key:a,resize:this.p3xrResize})})),e.toast({message:p3xr.strings.status.renamedKey})}catch(t){e.generalHandleError(t)}},this.deleteTree=async t=>{try{const{event:n,node:a}=t;n.stopPropagation();const d=angular.copy(r.expandedNodes);await e.confirm({event:n,message:p3xr.strings.confirm.deleteAllKeys({key:a.key})});const l=await o.request({action:"key-del-tree",payload:{key:a.key,redisTreeDivider:p3xr.settings.redisTreeDivider}});i((()=>{r.savedExpandedNodes=d,e.loadRedisInfoResponse({response:l}),void 0!==m.key&&m.key.startsWith(a.key+p3xr.settings.redisTreeDivider)&&s.go("main.statistics")})),e.toast({message:p3xr.strings.status.treeDeleted({key:a.key})})}catch(t){e.generalHandleError(t)}},this.extractNodeTooltip=e=>"folder"!==e.type&&void 0!==e.keysInfo?void 0===e.keysInfo?"":p3xr.ui.htmlEncode(p3xr.strings.redisTypes[e.keysInfo.type]+" - "+e.key):p3xr.ui.htmlEncode(e.key),this.addKey=async t=>{const{event:n,node:o}=t;n.stopPropagation();const a=angular.copy(r.expandedNodes);try{const t=await l.show({$event:n,node:o,type:"add"});i((()=>{r.savedExpandedNodes=a,e.loadRedisInfoResponse({response:t}),s.go("main.key",{key:t.key,resize:this.p3xrResize})}))}catch(t){e.generalHandleError(t)}},a.$on("p3xr-key-delete",((e,t)=>{this.delete(t)})),a.$on("p3xr-key-rename",((e,t)=>{this.rename(t)})),a.$on("p3xr-key-new",((e,t)=>{this.addKey(t)}))}]})},1378:(e,t,n)=>{let o=[],r=-1;const i=n(230).htmlEncode;p3xr.ng.component("p3xrConsole",{template:n(8236),controller:["p3xrCommon","p3xrSocket","$state","$rootScope","p3xrRedisParser","$mdDialog","$timeout",function(e,t,s,a,d,l,c){const m=p3xr.state.commands;let p,u,g,x,h,f,y;a.hasConnected()||s.go("main");const b=n(6897),v=()=>{let e,t=0;e=[u,g,x];for(let n of e)t+=n.outerHeight();const n=$window.height(),o=Math.max(n-t-66,0);p.height(o),p.css("max-height",o+"px")},k=b(v,p3xr.settings.debounce);let w=0;this.$doCheck=()=>{w<10&&(w++,v())};const C=e=>{if(!1===p3xr.state.monitor)return;let t=i(String(e.message));f.append("<strong>PubSub channel:</strong> "+e.channel),f.append(`<pre>${t}</pre><br/>`),y.scrollTop=y.scrollHeight};let S,T,E,D;this.$onInit=()=>{p=$("#p3xr-console-content"),u=$("#p3xr-layout-header-container"),g=$("#p3xr-layout-footer-container"),x=$("#p3xr-console-header"),h=$("#p3xr-console-input"),f=$("#p3xr-console-content-output"),h.focus(),y=p[0],$window.on("resize",k),k(),this.clearConsole(),t.ioClient.on("pubsub-message",C)},this.$onDestroy=function(){$window.off("resize",k),t.ioClient.removeListener("pubsub-message",C)},this.inputValue="",this.actionEnter=async()=>{let e;const n=String(this.inputValue).trim();if(""!==n)try{f.append(`<div class="p3xr-console-content-output-item">${n}</div>`),this.inputValue="",e=await t.request({action:"console",payload:{command:n}});const s=i(String(d.console.parse(e.result)));f.append(`<pre>${s}</pre>`),e.hasOwnProperty("database")&&(a.p3xr.state.currentDatabase=e.database,a.p3xr.state.redisChanged=!0)}catch(e){console.error(e),f.append(`<pre>${e.message}</pre>`)}finally{let t;t=void 0!==e?e.generatedCommand:n;const i=o.indexOf(t);i>-1&&o.splice(i,1),o.push(t),r=-1,y.scrollTop=y.scrollHeight,h.focus()}};const P=()=>{c((()=>{const e=h.val();h.val("").focus().val(e)}))};this.action=e=>{switch(9!==e.keyCode&&!0!==event.shiftKey&&(S=void 0,T=-1,E=[],D=!1),e.keyCode){case 13:return this.actionEnter();case 38:if(o.length<1)return;-1===r&&(r=o.length),r--,r>-1||(r=o.length-1),this.inputValue=o[r],P();break;case 40:if(o.length<1)return;r++,r>=o.length||(r=0),this.inputValue=o[r],P();break;case 9:if(void 0===this.inputValue&&(this.inputValue=""),!D){const e=String(this.inputValue).trim();S=e,T=-1,E=""===S?m:m.filter((e=>e.startsWith(S.toLowerCase())))}!0===event.shiftKey?T--:T++,T>=E.length?T=0:T<0&&(T=E.length-1),this.inputValue=E[T],e.stopPropagation(),e.preventDefault(),D=!0;break;default:r=-1}},this.clearConsole=()=>{f.empty(),f.append('<div class="p3xr-console-content-output-item"><strong>'+a.p3xr.strings.label.welcomeConsole+"</strong></div>"),f.append('<div class="p3xr-console-content-output-item">'+a.p3xr.strings.label.welcomeConsoleInfo+"</div>"),f.append('<div class="p3xr-console-content-output-item">'+a.p3xr.strings.label.welcomeConsoleInfo2+"</div>"),h.focus()},this.commands=()=>{l.show({controller:["$scope","$mdDialog",function(e,t){e.ok=function(){t.hide()},e.$watch((function(){return $("#p3xr-console-commands").parent().height()}),((t,n)=>{e.height=t}))}],fullscreen:!0,template:'\n<md-dialog aria-label="{{ $root.p3xr.strings.intention.commands }}" layout-fill>\n  <md-toolbar md-theme="{{$root.p3xr.state.themeLayout}}">\n      <div class="md-toolbar-tools">\n        <md-icon>keyboard</md-icon>\n        &nbsp;\n        {{ $root.p3xr.strings.intention.commands }}\n        <span flex></span>\n         <md-button class="md-icon-button" ng-click="ok()" aria-label="{{ $root.p3xr.strings.intention.close }}">\n           <md-icon>close</md-icon>\n      </md-button>\n      </div>\n    </md-toolbar>\n\n    <md-dialog-content flex>\n      <div id="p3xr-console-commands">\n        <iframe seamless="seamless" src="https://redis.io/commands" frameborder="0" style="width: 100%; height: {{ height - 15 }}px;"></iframe>\n      </div>\n    </md-dialog-content>\n\n    <md-dialog-actions layout="row">\n      <span flex></span>\n      <md-button ng-click="ok()"  class="md-raised md-primary" aria-label="{{ $root.p3xr.strings.intention.close }}">\n        <md-icon>close</md-icon>\n        {{ $root.p3xr.strings.intention.close }}\n      </md-button>\n    </md-dialog-actions>\n</md-dialog>\n          '})}}]})},7630:(e,t,n)=>{p3xr.ng.component("p3xrError",{template:n(4007),controller:["$stateParams","$rootScope",function(e,t){this.$stateParams=e,t.p3xr.state.failed=!0}]})},3886:(e,t,n)=>{p3xr.ng.component("p3xrMain",{template:n(2315),controller:["$cookies","p3xrSocket","p3xrCommon","p3xrRedisParser","$rootScope","$state","$timeout","$scope","$mdMedia",function(e,t,o,r,i,s,a,d,l){let c,m,p,u,g,x,h=!1,f=!1,y=void 0;Object.defineProperty(d,"resizerColor",{get:()=>f||h?"accent-400":"accent",set:e=>{}});const b=p3xr.settings.resizeMinWidth,v=n(6897);let k,w=!1;d.$watch((function(){return l("xs")}),(function(e){e||!0!==w||(void 0!==k&&a.cancel(k),k=a(T,4*p3xr.settings.debounce)),w=e}));const C=v((()=>{i.$broadcast("p3x-refresh-statistics-tabs")}),p3xr.settings.debounce),S=(e={})=>{let{redrawTabs:t}=e;void 0===t&&(t=!1);let n,o=0;n=[m,p,u];for(let e of n)o+=e.outerHeight();const r=$window.outerHeight(),i=Math.max(r-o-10,100);c.height(i),c.css("max-height",i+"px");const s=p3xr.dom.getPosition(c[0]),a=$("#p3xr-main-treecontrol-container");if(a){const e=$("#p3xr-main-treecontrol-controls-container"),t=p3xr.dom.getPosition(e[0]);a.css("top",s.top+t.height+"px"),a.css("left",s.left+"px"),a.css("height",s.height-t.height+"px"),a.css("max-height",s.height+"px"),void 0!==y?a.css("width",y-s.left+"px"):a.css("width",b+"px"),a.css("min-width",b+"px");const n=p3xr.dom.getPosition(a[0]);void 0===x&&j();const o=5;void 0!==x&&(x=document.getElementById("p3xr-main-content-sizer"),null!==x&&(x.addEventListener("mouseover",E),x.addEventListener("mouseout",D),x.style.top=s.top+"px",x.style.height=s.height+"px",x.style.left=s.left+n.width+"px",x.style.width=o+"px"));const r=$("#p3xr-main-content-container");r.css("top",s.top+"px"),r.css("height",s.height+"px"),r.css("left",s.left+n.width+o+"px"),r.css("width",s.width-n.width-o+"px"),e.width(n.width)}else V();t&&C()},T=v((()=>{y=void 0,S()}),p3xr.settings.debounce),E=()=>{h=!0,d.$digest()},D=()=>{h=!1,d.$digest()},P=e=>{"mousedown"===e.type&&"p3xr-main-content-sizer"!==e.target.id||("mousedown"===e.type?(f=!0,document.documentElement.style.cursor="ew-resize",$body.addClass("p3xr-not-selectable")):"mouseup"===e.type&&(document.documentElement.style.cursor="auto",f=!1,$body.removeClass("p3xr-not-selectable")),!1===f&&S({redrawTabs:!0}),e.stopPropagation(),d.$digest())},N=e=>{if(f){const t=p3xr.dom.getPosition(c[0]);e.clientX<t.left+b||e.clientX>window.innerWidth-b?document.documentElement.style.cursor="not-allowed":(document.documentElement.style.cursor="ew-resize",x.style.left=e.clientX+"px",y=e.clientX,S())}},j=()=>{x=document.getElementById("p3xr-main-content-sizer"),null!==x?(x.addEventListener("mouseover",E),x.addEventListener("mouseout",D),document.addEventListener("mousemove",N),document.addEventListener("mousedown",P),document.addEventListener("mouseup",P)):x=void 0};d.$on("p3xr-main-resizer",((e,t)=>{console.info("p3xr-main-resizer dragging:",t.drag),!0===t.drag?(document.addEventListener("mousemove",N),document.addEventListener("mousedown",P),document.addEventListener("mouseup",P)):(document.removeEventListener("mousemove",N),document.removeEventListener("mousedown",P),document.removeEventListener("mouseup",P))}));const V=()=>{null!=x&&(x.removeEventListener("mouseover",E),x.removeEventListener("mouseout",D),x=void 0),document.removeEventListener("mousedown",P),document.removeEventListener("mouseup",P),document.removeEventListener("mousemove",N)};this.resize=v(S,p3xr.settings.debounce),this.resizeRaw=S,this.$onInit=()=>{c=$("#p3xr-main-content"),m=$("#p3xr-layout-header-container"),p=$("#p3xr-layout-footer-container"),u=$("#p3xr-main-header"),g=c[0],S(),$window.on("resize",S),n(2453).recursive({nodes:i.keysTreeRendered}),"/main"===s.current.url&&s.go("main.statistics"),p3xr.state.redisChanged&&(p3xr.state.redisChanged=!1,p3xr.state.connection&&this.refresh())},this.$onDestroy=function(){$window.off("resize",S),V()},i.p3xr.state.page=1;let I,R=0;Object.defineProperty(this,"currentDatabase",{get:()=>{let t=p3xr.state.currentDatabase;return void 0===t&&(t=e.get(p3xr.settings.connection.getCookieNameCurrentDatabase(p3xr.state.connection.id))),void 0===t&&(t=0),t},set:async n=>{if(I=n,R!==I){R=n;try{await t.request({action:"console",payload:{command:"select "+R}})}catch(e){o.generalHandleError(e)}}e.put(p3xr.settings.connection.getCookieNameCurrentDatabase(p3xr.state.connection.id),String(n),{expires:p3xr.settings.cookieExpiry})}}),this.selectDatabase=async e=>{this.currentDatabase=e;try{i.p3xr.state.page=1;await t.request({action:"console",payload:{command:"select "+e}});o.toast({message:p3xr.strings.status.dbChanged({db:e})}),await this.statistics()}catch(e){o.generalHandleError(e)}finally{this.resize()}},this.save=async()=>{try{const e=await t.request({action:"save"});i.p3xr.state.info=r.info(e.info),i.$digest(),o.toast({message:p3xr.strings.status.savedRedis})}catch(e){o.generalHandleError(e)}},this.statistics=async()=>{try{s.go("main.statistics"),await this.refresh()}catch(e){o.generalHandleError(e)}},this.refresh=async(e={})=>{console.time("refresh");let{withoutParent:n}=e;void 0===n&&(n=!1);try{p3xr.ui.overlay.show({message:p3xr.strings.status.reloadingDataInfo});const e={};!i.p3xr.settings.searchClientSide&&"string"==typeof i.p3xr.state.search&&i.p3xr.state.search.length>0&&(i.p3xr.settings.searchStartsWith?e.match=i.p3xr.state.search+"*":e.match="*"+i.p3xr.state.search+"*");const r=await t.request({action:"refresh",payload:e});p3xr.state.dbsize=r.dbsize,o.loadRedisInfoResponse({response:r}),n||i.$broadcast("p3x-refresh-key")}catch(e){o.generalHandleError(e)}finally{p3xr.ui.overlay.hide()}console.timeEnd("refresh")},d.$on("p3x-refresh",(()=>{this.refresh({withoutParent:!0})})),d.$on("p3x-resize",(()=>{S()})),this.addKey=e=>{const{event:t,node:n}=e;t.stopPropagation(),i.$broadcast("p3xr-key-new",{event:t,node:n})}}]})},5060:(e,t,n)=>{p3xr.ng.component("p3xrOverview",{template:n(1238),controller:["$rootScope","$state",function(e,t){e.hasConnected()||t.go("main")}]})},2036:(e,t,n)=>{p3xr.ng.component("p3xrSettings",{template:n(2305),controller:["p3xrCommon","p3xrDialogConnection","$mdDialog","p3xrSocket","p3xrDialogTreecontrolSettings",function(e,t,o,r,i){this.connectionForm=e=>{t.show(e)},this.setLicense=async t=>{try{const i=o.prompt().title(p3xr.strings.confirm.license.title).textContent(p3xr.strings.confirm.license.textContent).placeholder(p3xr.strings.confirm.license.placeholder).ariaLabel(p3xr.strings.confirm.license.placeholder).initialValue("").targetEvent(t.$event).ok(p3xr.strings.intention.license).cancel(p3xr.strings.intention.cancel),s=await o.show(i),a=await r.request({action:"set-license",payload:{license:s}});n.g.p3xr.isBot()||a.donated===p3xr.state.donated||window.gtag("config",p3xr.settings.googleAnalytics,{page_path:a.donated?"/donated":"/free"}),p3xr.state.donated=a.donated,e.toast({message:"ok"!==a.info?p3xr.strings.error[a.info]:p3xr.strings.status.licenseSaved})}catch(t){if(void 0===t)return;p3xr.strings.error[t.message]&&(t=new Error(p3xr.strings.error[t.message])),e.generalHandleError(t)}},this.openTreeSettingDialog=e=>{i.show(e)},this.deleteConnection=async t=>{const{model:n,ev:o}=t;try{await e.confirm({event:o,message:p3xr.strings.confirm.deleteConnectionText});await r.request({action:"connection-delete",payload:{id:n.id}});e.toast({message:p3xr.strings.status.deleted})}catch(t){if(void 0===t)return;e.generalHandleError(t)}}}]})},4250:()=>{p3xr.ng.provider("p3xrTheme",["$mdThemingProvider",function(e){e.generateThemesOnDemand(!0),e.alwaysWatchTheme(!0),e.setNonce();const t="p3xr-theme",n="p3xrThemeLight";this.start=()=>{Object.keys(p3xr.theme).forEach((t=>{p3xr.theme[t](e)})),e.setDefaultTheme(n)};const o={},r={dark:["p3xrThemeDarkNeu","p3xrThemeDark","p3xrThemeDarkoBluo","p3xrThemeMatrix"],light:["p3xrThemeLight","p3xrThemeEnterprise","p3xrThemeRedis"]};this.$get=["$mdTheming","$rootScope","$cookies","$mdColors",function(i,s,a,d){return new function(){const l=this;this.isDark=()=>r.dark.includes(this.getCurrentThemeName()),this.start=()=>{l.setTheme()},this.setTheme=l=>{void 0===l&&void 0===(l=a.get(t))&&(l=n),o.hasOwnProperty(l)||(i.generateTheme(l),i.generateTheme(l+"Layout"),i.generateTheme(l+"Common"),o[l]=!0),e.setDefaultTheme(l),s.p3xr.state.theme=l,a.put(t,l,{expires:p3xr.settings.cookieExpiry}),$body.removeClass("p3xr-theme-light"),$body.removeClass("p3xr-theme-dark"),r.dark.includes(l)?$body.addClass("p3xr-theme-dark"):$body.addClass("p3xr-theme-light"),$("#p3xr-theme-styles").remove();const c=p3xr.state.themeCommon+"-background",m=`\n.p3xr-toast-default .md-toast-content {\n    background-color: ${this.isDark()?d.getThemeColor(c):"auto"} !important;\n    border: solid 1px ${this.isDark()?"rgba(255, 255, 255, 0.5)":"auto"} !important;\n    ${this.isDark()?"box-shadow:  0 0 10px  rgba(0,0,0,0.6);":""}\n}\n\ntreecontrol i.tree-branch-head:before {\n    color: ${this.isDark()?d.getThemeColor("amber-A100"):d.getThemeColor("amber-A400")};\n    ${this.isDark()?"text-shadow: 1px 1px 1px rgba(55, 29, 27, 0.5);":"text-shadow: 1px 1px 0px rgba(55, 11, 0, 0.5);"}\n}\n`;$("head").append('<style id="p3xr-theme-styles">'+m+"</style>")},this.getCurrentThemeName=()=>a.get(t),this.generateThemeName=e=>"p3xrTheme"+e[0].toUpperCase()+e.substring(1)}}]}])},5943:()=>{p3xr.theme.darkNeu=function(e,t){p3xr.theme.darkNeu.order=1,e.theme("p3xrThemeDarkNeuLayout").primaryPalette("blue-grey",{default:"800","hue-1":"300","hue-2":"700","hue-3":"900"}).accentPalette("blue-grey",{default:"300"}).warnPalette("grey").backgroundPalette("grey",{default:"900"}).dark(),e.theme("p3xrThemeDarkNeu").primaryPalette("cyan").accentPalette("blue").warnPalette("yellow").dark(),e.theme("p3xrThemeDarkNeuCommon").primaryPalette("green").accentPalette("grey").warnPalette("blue").backgroundPalette("blue-grey",{default:"900"}).dark()}},1380:()=>{p3xr.theme.dark=function(e){p3xr.theme.dark.order=3,e.theme("p3xrThemeDarkLayout").primaryPalette("grey",{default:"800","hue-1":"500","hue-2":"700","hue-3":"900"}).accentPalette("grey").warnPalette("grey").backgroundPalette("grey",{default:"900","hue-1":"800","hue-2":"700","hue-3":"900"}),e.theme("p3xrThemeDarkLayout").dark(),e.theme("p3xrThemeDark").primaryPalette("indigo",{default:"300"}).accentPalette("blue").warnPalette("orange").backgroundPalette("grey"),e.theme("p3xrThemeDark").dark(),e.theme("p3xrThemeDarkCommon").primaryPalette("green").accentPalette("grey").warnPalette("indigo",{default:"200"}).backgroundPalette("grey"),e.theme("p3xrThemeDarkCommon").dark()}},7871:()=>{p3xr.theme.darkoBluo=function(e){p3xr.theme.darkoBluo.order=5,e.theme("p3xrThemeDarkoBluoLayout").primaryPalette("indigo",{default:"900","hue-1":"500","hue-2":"700","hue-3":"900"}).accentPalette("indigo",{default:"600","hue-1":"50","hue-2":"700","hue-3":"900"}).warnPalette("indigo").backgroundPalette("grey",{default:"900","hue-1":"900","hue-2":"500","hue-3":"100"}),e.theme("p3xrThemeDarkoBluoLayout").dark(),e.theme("p3xrThemeDarkoBluo").primaryPalette("indigo",{default:"300","hue-1":"50","hue-2":"700","hue-3":"900"}).accentPalette("blue").warnPalette("orange").backgroundPalette("grey"),e.theme("p3xrThemeDarkoBluo").dark(),e.theme("p3xrThemeDarkoBluoCommon").primaryPalette("green").accentPalette("grey").warnPalette("light-blue").backgroundPalette("indigo",{default:"700"}),e.theme("p3xrThemeDarkoBluoCommon").dark()}},3975:()=>{p3xr.theme.enterprise=function(e,t){p3xr.theme.enterprise.order=2,e.theme("p3xrThemeEnterpriseLayout").primaryPalette("grey",{default:"800","hue-1":"500","hue-2":"700","hue-3":"900"}).accentPalette("grey",{default:"600","hue-1":"50","hue-2":"700","hue-3":"900"}).warnPalette("grey").backgroundPalette("grey",{default:"400"}),e.theme("p3xrThemeEnterprise").primaryPalette("indigo").accentPalette("blue",{default:"700"}).warnPalette("red",{default:"700"}),e.theme("p3xrThemeEnterpriseCommon").primaryPalette("green").accentPalette("grey").warnPalette("light-blue")}},7698:()=>{p3xr.theme.light=function(e,t){return p3xr.theme.light.order=0,e.theme("p3xrThemeLightLayout").primaryPalette("blue-grey",{default:"800","hue-1":"200","hue-2":"700","hue-3":"900"}).accentPalette("blue-grey").warnPalette("grey").backgroundPalette("blue-grey",{default:"A100","hue-1":"50","hue-2":"700","hue-3":"900"}),e.theme("p3xrThemeLight").primaryPalette("deep-purple").accentPalette("purple",{default:"500"}).warnPalette("red",{default:"700"}).backgroundPalette("blue-grey"),e.theme("p3xrThemeLightCommon").primaryPalette("green").accentPalette("grey").warnPalette("blue-grey").backgroundPalette("blue-grey"),this}},6342:()=>{p3xr.theme.matrix=function(e){p3xr.theme.matrix.order=5,e.theme("p3xrThemeMatrixLayout").primaryPalette("light-green",{default:"A400","hue-1":"A400","hue-2":"700","hue-3":"900"}).accentPalette("light-green",{default:"A400","hue-1":"100","hue-2":"600","hue-3":"800"}).warnPalette("green").backgroundPalette("grey",{default:"900","hue-1":"900","hue-2":"500","hue-3":"100"}).dark(),e.theme("p3xrThemeMatrix").primaryPalette("light-green",{default:"A400","hue-1":"50","hue-2":"700","hue-3":"900"}).accentPalette("lime",{default:"A400"}).warnPalette("purple",{default:"A700"}).backgroundPalette("grey").dark(),e.theme("p3xrThemeMatrixCommon").primaryPalette("light-green",{default:"A400","hue-1":"A400","hue-2":"A400","hue-3":"A400"}).accentPalette("light-green",{default:"A400","hue-1":"A400","hue-2":"A400","hue-3":"A400"}).warnPalette("green").backgroundPalette("grey",{default:"900"}).dark()}},822:()=>{p3xr.theme.redis=function(e,t){p3xr.theme.redis.order=4,e.theme("p3xrThemeRedisLayout").primaryPalette("red",{default:"800","hue-1":"200","hue-2":"700","hue-3":"900"}).accentPalette("red",{default:"200"}).warnPalette("red").backgroundPalette("red",{default:"900","hue-1":"600","hue-2":"200","hue-3":"200"}),e.theme("p3xrThemeRedis").primaryPalette("grey",{default:"900"}).accentPalette("grey",{default:"600"}).warnPalette("amber"),e.theme("p3xrThemeRedisCommon").primaryPalette("green").accentPalette("grey").warnPalette("red").backgroundPalette("grey")}},5924:e=>{e.exports=(e,t)=>{e.state({name:"settings",url:"/settings",template:"<p3xr-settings></p3xr-settings>"}),e.state({name:"main",url:"/main",template:"<p3xr-main></p3xr-main>"}),e.state({name:"overview",url:"/overview",template:"<p3xr-overview></p3xr-overview>"}),e.state({name:"console",url:"/console",template:"<p3xr-console></p3xr-console>"}),e.state("main.statistics",{url:"/statistics",template:"<p3xr-main-statistics></p3xr-main-statistics>",params:{action:null,expandedNodes:null,response:null}}),e.state("main.key",{url:"/key/:key",template:"<p3xr-main-key></p3xr-main-key>",params:{resize:null}}),e.state("socketio-error",{url:"/socketio-error",template:"<p3xr-error></p3xr-error>",params:{error:null}})}},6961:(e,t,n)=>{let o=0;p3xr.ng.component("p3xrAccordion",{template:n(2862),bindings:{p3xrTitle:"<",p3xrAccordionKey:"@"},transclude:{actions:"?p3xrAccordionActions",content:"p3xrAccordionContent"},controller:["$transclude","$cookies",function(e,t){this.transcludePresent=function(t){return e.isSlotFilled(t)},this.$onInit=function(){void 0!==this.p3xrAccordionKey&&""!==this.p3xrAccordionKey||(this.p3xAccordionKey=++o);const e="p3xr-accordion-extended-"+this.p3xrAccordionKey;Object.defineProperty(this,"extended",{get:()=>{const n=t.get(e);return void 0===n||"true"===n},set:n=>{t.put(e,String(n),{expires:p3xr.settings.cookieExpiry})}})}}]})},3269:(e,t,n)=>{p3xr.ng.component("p3xrButton",{template:n(9670),bindings:{p3xrLabel:"<",p3xrMdIcon:"@",p3xrFaIcon:"@",p3xrTooltipDirection:"@",p3xrClasses:"@"}})},7327:()=>{p3xr.ng.directive("p3xrInput",["p3xrTheme",function(e){return{template:'<input ng-focus="focused=true" ng-blur="focused=false" class="p3xr-input" md-theme="{{ $root.p3xr.state.themeLayout }}" md-colors="{background: inputBackground(), \'border-color\': inputBorderColor()}"/>',replace:!0,link:function(t){t.focused=!1,t.inputBackground=()=>e.isDark()?"warn-900-0.5":"warn-50",t.inputBorderColor=()=>e.isDark()?t.focused?"primary-200":"primary-200-0.75":t.focused?"primary-900":"primary-800-0.75"}}}])},747:(e,t,n)=>{n.g.p3xr.api={host:void 0};const o=new URL(location.toString());"8080"===o.port?n.g.p3xr.api.host="http://localhost:7843":n.g.p3xr.api.host=`${o.protocol}//${o.host}`},278:(e,t,n)=>{n.g.p3xr.clipboard=e=>{var t=$("<textarea>"+e.value+"</textarea>");$("body").append(t),t.select();var n=!1;try{n=document.execCommand("copy")}catch(e){}return t.remove(),n}},6528:()=>{window.corifeus={core:{http:{counter:0,status:200}}}},2164:()=>{const e={getPosition:function(e){let t=0,n=0;if(void 0===e)return{left:0,top:0,width:0,height:0};const o=e.currentStyle||window.getComputedStyle(e),r={width:e.offsetWidth+(parseFloat(o.marginLeft)+parseFloat(o.marginRight))+(parseFloat(o.paddingLeft)+parseFloat(o.paddingRight))+(parseFloat(o.borderLeftWidth)+parseFloat(o.borderRightWidth)),height:e.offsetHeight+(parseFloat(o.marginTop)+parseFloat(o.marginBottom))+(parseFloat(o.paddingTop)+parseFloat(o.paddingBottom))+(parseFloat(o.borderTopWidth)+parseFloat(o.borderBottomWidth))};for(;e;){if("BODY"===e.tagName){const o=e.scrollLeft||document.documentElement.scrollLeft,r=e.scrollTop||document.documentElement.scrollTop;t+=e.offsetLeft-o+e.clientLeft,n+=e.offsetTop-r+e.clientTop}else t+=e.offsetLeft-e.scrollLeft+e.clientLeft,n+=e.offsetTop-e.scrollTop+e.clientTop;e=e.offsetParent}return r.left=t,r.top=n,r}};p3xr.dom=e},8347:(e,t,n)=>{const o=new RegExp("spider|bot|yahoo|bing|google|yandex|lynx|curl|embedly|quora|outbrain|pinterest|vkShare|W3C_Validator|crawl|borg|slurp|archiver|netresearch|lycos|scooter|altavista|teoma|oegp|charlotte|http client|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|semanticdiscovery|snappy|speedy|voila|vortex|voyager|zao|zeal|dataparksearch|findlinks|browsermob|httpmonitor|bingpreview|pagepeeker|webthumb|url2png|zooshot|gomeza|google sketchup|read later|pingdom|facebook|rackspace|scan|link|ezine|preview|dig|tarantula|urllib|jakarta|wget|rget|monitor|libwww|moozilla|seer|spice|snoopy|feedfetcher|wordpress|java|netfront|archive|xenu|feed|appmanager|covario|perl|host|lwp|page speed|ptst|digext|nutch|sleuth|yottaamonitor|bubing|corifeus","i");n.g.p3xr.isBot=()=>o.test(navigator.userAgent)},9137:(e,t,n)=>{let o=0,r=Date.now();n.g.p3xr.nextId=()=>{const e=Date.now();r!==e&&(o=0,r=e);const t=++o,i=n.g.p3xr.random().reverse().padStart(15,"0");return`P3Xid${r.toString(16).padStart(12,"0").reverse()}${t.toString(16).padStart(3,"0").reverse()}${i}`}},2453:e=>{const t=e=>{const{node:n,status:o,nodeCallback:r}=e;n.$inview=o,r&&r({node:n});for(let n of e.node.children)n.$inview=o,r&&r({node:n}),n.children.length>0&&t({node:n,status:e.status,nodeCallback:r})};e.exports.recursive=e=>{let{status:n,nodes:o,nodeCallback:r}=e;void 0===n&&(n=!1),Array.isArray(o)||(o=[o]);for(let e of o)t({node:e,status:n,nodeCallback:r})}},1216:(e,t,n)=>{n.g.p3xr.random=()=>(Math.floor(9e16*Math.random())+1e16).toString(16)},1990:()=>{const e=new Date;e.setFullYear(e.getFullYear()+5),p3xr.settings={maxLightKeysCount:11e4,resizeMinWidth:320,socket:{timeout:3e5},toast:{timeout:5e3,position:"bottom right"},debounce:250,debounceSearch:2e3,cookieExpiry:e,connection:{cookieNameCurrentDatabase:"p3xr-main-current-database",getCookieNameCurrentDatabase:e=>p3xr.settings.connection.cookieNameCurrentDatabase+"-"+e},tree:{cookieName:"p3xr-main-treecontrol-divider",defaultDivider:":"},redisTreeDivider:":",animation:0,animationSettings:{default:0,cookieName:"p3xr-animation-settings"},jsonFormat:4,googleAnalytics:"UA-169625044-1",jsonFormatSettings:{default:4,cookieName:"p3xr-json-format"},paging:{default:250,cookieName:"p3xr-main-treecontrol-page-size"},language:{defaultLanguage:"en",current:void 0,cookieName:"p3xr-language",translation:{}},pageCount:50,maxValueDisplay:1024,maxValueDisplaySetting:{default:1024,cookieName:"p3xr-main-treecontrol-max-value-display"},maxKeys:1e3,maxKeysSettings:{default:1e3,max:1e5,cookieName:"p3xr-max-keys"},keySortInfo:{default:!0,cookieName:"p3xr-main-treecontrol-key-sort"},keysSort:!0,searchClientSide:!1,searchInfoClientSide:{default:!1,cookieName:"p3xr-main-treecontrol-search-client-mode"},searchStartsWith:!1,searchInfoStartsWith:{default:!1,cookieName:"p3xr-main-treecontrol-search-starts-with"},connectInfo:{cookieName:"p3xr-layout-connect"}}},4421:()=>{p3xr.sort={naturalCompareDocument:()=>(e,t)=>{const n=/(\d+)|(\D+)/g,o=[],r=[];for(e.replace(n,(function(e,t,n){o.push([t||1/0,n||""])})),t.replace(n,(function(e,t,n){r.push([t||1/0,n||""])}));o.length&&r.length;){const e=o.shift(),t=r.shift(),n=parseFloat(e[0])-parseFloat(t[0])||e[1].localeCompare(t[1]);if(n)return n}return o.length-r.length}}},9293:()=>{p3xr.state={treeDividers:[],donated:!1,theme:void 0,connection:void 0,currentDatabase:void 0,redisChanged:!1,databaseIndexes:[0],connections:[],redisConnections:{},keys:[],cfg:void 0,version:void 0,keysInfo:void 0,failed:!1,keysRaw:[],search:"",commands:[],reducedFunctions:!1,dbsize:void 0,monitor:!1},Object.defineProperty(p3xr.state,"themeLayout",{get:()=>p3xr.state.theme+"Layout"}),Object.defineProperty(p3xr.state,"themeCommon",{get:()=>p3xr.state.theme+"Common"}),p3xr.connectionsReset=()=>{p3xr.state.connections={list:[]}},p3xr.connectionsReset()},7151:(e,t,n)=>{p3xr.translations={en:n(4185)},p3xr.strings=p3xr.translations.en},6242:()=>{String.prototype.reverse||(String.prototype.reverse=function(){return this.split("").reverse().join("")})},3440:()=>{p3xr.ui.overlay=new function(){this.show=(e={})=>{this.hide(),$body.append(((e={})=>`\n<div id="p3xr-overlay">\n    <div id="p3xr-overlay-info">\n        <i class="fas fa-cog fa-spin fa-4x"></i>\n        ${e.hasOwnProperty("message")?"<br/><br/>":""}\n        ${e.hasOwnProperty("message")?e.message:""}\n    </div>\n</div>\n        \n        `)(e))},this.hide=()=>{$body.find("#p3xr-overlay").remove()}}},3446:(e,t,n)=>{n(8565),n(6242),n.g.p3xr=n.g.p3xr||{},p3xr.pkg=n(306),p3xr.theme={dark:void 0,light:void 0},p3xr.ui={overlay:void 0,htmlEncode:n(230).htmlEncode},n(6528),n(1990),n(7151),n(1216),n(8347),n(9137),n(747),n(9293),n(2164),n(4421),n(278),n(3440),p3xr.settings.language.translation.en=n(4185),p3xr.settings.language.translation.zn=n(9526),n(3099)},4185:e=>{const t={error:{cleared_license:"Cleared license",invalid_license:"Invalid license",server_error:"Server error, please try again"},title:{donate:"Donate",jsonRecursive:"Expanding all leafs",name:"P3X Redis UI",nameDonated:"P3X Redis UI+",main:"You may choose a Redis connection to connect from the left bottom menu.",statistics:"Statistics",error:"Error",connectingRedis:"Connecting to Redis ...",socketioConnectError:"Socket.IO Error",db:"DB",server:"Server",clients:"Clients",memory:"Memory",persistence:"Persistance",stats:"Statistics",replication:"Replication",cpu:"CPU",cluster:"Cluster"},confirm:{title:"Confirm",alert:"Alert",info:"Info",deleteListItem:"Are you sure to delete this list item?",deleteHashKey:"Are you sure to delete this hash key item?",deleteSetMember:"Are you sure to delete this set member?",deleteZSetMember:"Are you sure to delete this sorted set member?",deleteConnection:"Confirm",deleteConnectionText:"Are you sure to delete this Redis connection?",deleteNode:"Are you sure to delete this Redis node?",deleteAllKeys:e=>`Delete this tree and all it's keys (${e.key})?`,socketioConnectError:"Socket.IO cannot connect to the server, you can reload and you might to resolve the connection error by yourself, the client does not know to solve it by itself.",deleteKey:"Are you sure to delete this key?",rename:{title:"Are you sure to rename this key?",textContent:"If you click the rename button, it will rename this key forever.",placeholder:"The Redis key (required)"},ttl:{title:"Are you to change this keys's TTL?",textContent:"If you click the change TTL button, it will rename this key's time to live, empty will persist this key keep forever.",placeholder:"The Redis key's TTL (integer or empty)",placeholderPlaceholder:"Empty means it persists forever, otherwise the used integer.",convertTextToTime:"Convert text to time",convertTextToTimePlaceholder:"Eg. 1d will be 86400"},license:{title:"Enable donated license?",textContent:"If you want to use the donated functions, please contact alabard@gmail.com to request a license. The donation is $1/month.",placeholder:"License key"}},language:{en:"English",zn:"Chinese / 中文"},intention:{copy:"Copy",saveWithFormatJson:"Save with format",formatJson:"Format Json",pubsubMonitor:"PubSub Monitor",language:"Language",ok:"OK",addKey:"Add to this key",addKeyRoot:"Add a root key",reloadKey:"Reload key",reload:"Reload",close:"Close",commands:"Commands",view:"View",statistics:"Statistics",refresh:"Refresh",clear:"Clear",rename:"Rename",main:"Home",cancel:"Cancel",theme:"Theme",github:"GitHub",githubRepo:"Repository",githubTodo:"To do",githubChangelog:"Change log",settings:"Settings",connect:"Connect",disconnect:"Disconnect",overview:"Overview",console:"Console",noConnections:"No connections, add a connection in the settings menu.",noConnectionsInSettings:"No connections, you may add a NEW CONNECTION above.",connectionAdd:"New connection",extend:"Extend",collapse:"Collapse",add:"Add",edit:"Edit",save:"Save",ttl:"Set TTL",license:"Set license",delete:"Delete",remove:"Remove",sure:"Sure",testConnection:"Test connection",getKey:"Loading Redis key and associated data ...",jsonViewShow:"Display JSON tree",jsonViewEditor:"Edit JSON"},label:{unableToLoadKey:({key:e})=>`Unable to load this key: ${e}. The exact error is in the console.`,bigJson:"This JSON object is over 10 kb, so make sure you know what you doing, because some functions can be slow rendering.",addNode:"Add node",validateJson:"Validate JSON",reducedFunction:"Reduced functionality",tooManyKeys:e=>`For the full maximum functions allowed keys total is ${e.maxLightKeysCount} count. This database has over the allowed keys in total ${e.count}. The key sorting and the additional fancy tree information is disabled. The searching is happening only on the server instead the client search.`,redisCommandNotFound:"No Redis command match found ...",treeKeyStore:"The sorting (natural compare) is executed on the client aka the browser, which means it has a penalty for big large sets, like over 10k keys, it might add a little time to the page rendering. There is no key sorting in Redis, only like this.",socketIoTimeout:e=>`The Socket.IO timed out for this request (max ${e.timeout/1e3} seconds) ...`,resizerInfo:e=>`Left or right panel minimum width is ${e.width}px`,jsonViewNotParsable:"This value is not JSON parsable  ",ttlTitle:"Set the TTL in seconds",passwordSecure:"The password might will be empty, but still it will show characters, this is a security feature.",treeSeparatorEmpty:"If the tree separator is empty, the tree wil have no nested nodes, just a pure list",treeSeparatorEmptyNote:"No nested nodes, just a pure list",welcomeConsole:"Welcome to the Redis Console",welcomeConsoleInfo:"TAB or SHIFT + TAB completion like bash is enabled",welcomeConsoleInfo2:"Cursor UP or DOWN history is enabled",redisListIndexInfo:"Empty to append, -1 to prepend or save it to the position shown.",console:"Console",connectiondAdd:"Add connection",connectiondEdit:"Edit connection",connectiondView:"View connection",connections:"Connections",keysSort:{on:"Key sorting on",off:"Key sorting off"},awsElastiCache:{on:"AWS ElastiCache / Gcloud memorystore on",off:"AWS ElastiCache / Gcloud memorystore off"},azure:{on:"Azure Redis on",off:"Azure Redis off"},cluster:{on:"Cluster on",off:"Cluster off"},theme:{light:"Light",dark:"Dark enterprise",darkNeu:"Dark",darkoBluo:"Darko bluo",enterprise:"Enterprise",redis:"Redis",matrix:"Matrix"},connected:e=>"Connected: "+e.name,tree:"Tree"},status:{dataCopied:"The data is in the clipboard",licenseSaved:"License saved",nodeRemoved:"Node removed",keyIsNotExisting:"This key could have been deleted or expired.",keyCount:e=>0===e.keyCount?"No key":1===e.keyCount?"1 key":e.keyCount+" keys",treeExpandAll:"Expand all tree leafs, this has a cost, might take time ...",noRedisKeys:"There are no keys in this database.",redisConnected:"Redis connected successful",reloadingDataInfo:"Reloading Redis data info",added:"Added",saved:"Updated",cancelled:"Cancelled",deleted:"Deleted",savedRedis:"Redis data is saved",redisDisconnected:e=>"The current connection had an error: "+e.error.message,dbChanged:e=>`The db index set to ${e.db}. `,treeDeleted:e=>`The tree key was deleted (${e.key}).`,deletedKey:e=>`The key was deleted (${e.key}).`,renamedKey:"This key has been renamed",ttlChanged:"This key's TTL has been changed",notInteger:"This input is not an integer",persisted:"This key is persisted forever",set:"The key is set/added"},code:{"delete-connection":"This connection was deleted, so you are disconnected to this Redis instance.","save-connection":"This connection was changed, so you are disconnected to this Redis instance. You may re-connect.","readonly-connections":"Connections add/save/delete are readonly only!","list-out-of-bounds":"This list index is out of bounds","donation-ware-feature":"This feature is present in the donation version."},form:{error:{required:"Required",port:"The port is between 1-65535",invalid:"The form is invalid"},connection:{label:{name:"Name",host:"Hostname",port:"Port",password:"Password"}},treeSettings:{maxValueDisplay:"Max value display string length",maxValueDisplayInfo:"If max value display zero, it shows everything, if it is bigger than 0, it will truncate. If it is -1, it will not show the value without edit for strings, for others, it display everything.",maxKeys:"The max key count",maxKeysInfo:"So that the GUI does not crash, we limit the max key count.",keyCount:()=>"Number of keys: "+p3xr.state.keysRaw.length,label:{animation:"Use animation",noAnimation:"No animation",jsonFormatTwoSpace:"Format JSON with 2 spaces",jsonFormatFourSpace:"Format JSON with 4 spaces",formName:"Redis settings",searchModeClient:"Client search mode",searchModeServer:"Server search mode",searchModeStartsWith:"Search with starts with mode",searchModeIncludes:"Search includes mode"},field:{treeSeparator:"Tree separator",treeSeparatorSelector:"Tree separator selector",page:"Paging count",keysSort:"Sort the keys",searchMode:"Search mode",searchModeStartsWith:"Search starts with / includes"},error:{page:"The page count must be an integer between 10 - 1000",maxValueDisplay:"The maximum display value must be an integer between -1 and 32768",maxKeys:"The maximum key count value must be an integer between 100 and 100000"}},key:{label:{formName:{add:"Add new Redis key",edit:"Edit Redis key",append:"Add to existing Redis key"}},field:{key:"Key",type:"Type",index:"Index",hashKey:"Hash key",score:"Score",value:"Value"},error:{key:"The key is, at least, one character",hashKey:"The hash table key is at least one character",score:"The sorted set score is required",value:"The value is required"}},main:{label:{database:"DB"}}},page:{overview:{noConnected:"There is no connection to Redis.",overviewClients:"List the connected by the count of clients",connectedCount:e=>1===e.length?"1 client":e.length+" clients"},key:{label:{key:"Key",encoding:"Encoding",length:"Size",ttl:"TTL",ttlTitle:"Time To Live",type:"Type",ttlNotExpire:"does not expire",lengthString:"characters",lengthItem:"items",actions:"Actions"},list:{table:{index:"Index",value:"Value"}},hash:{table:{hashkey:"Hashkey",value:"Value"}},set:{table:{value:"Member"}},zset:{table:{value:"Member",score:"Score"}}},treeControls:{settings:"Tree settings",expandAll:"Expand all",collapseAll:"Collapse all",search:{search:"Search in the keys",clear:"Clear current search to set empty",placeholderClient:"Search client side",placeholderServer:"Search server side",info:`The client side search means, that it matches the text in the search input. The server side search means, that is it like search in the keys patterns as *{search-text}*. For large search sets, it is better to use server side searching. For smaller search sets, it is better to use client side search mode. If the keys count is over ${p3xr.settings.maxLightKeysCount}, you can only search on server side.`,largeSetInfo:"In a large set, client side searching is disabled. so right now only server side searching is possible.",infoDetails:"To find out how the search works, please check out the settings"},pager:{next:"Next",prev:"Previous",first:"First",last:"Last"}}},time:{years:"years",months:"months",days:"days",year:"year",month:"month",day:"day"},redisTypes:{string:"String",list:"List",hash:"Hash table",set:"Set",zset:"Sorted set - zset"}};e.exports=t},9526:e=>{const t={error:{cleared_license:"清除许可证",invalid_license:"无效的许可证",server_error:"服务器错误,请重试"},title:{donate:"捐赠",jsonRecursive:"展开所有叶子",name:"P3X Redis UI",nameDonated:"P3X Redis UI+",main:"您可以从左下方菜单中选择要连接的Redis进行连接访问",statistics:"Statistics",error:"错误",connectingRedis:"连接到Redis ...",socketioConnectError:"Socket.IO 错误",db:"DB",server:"服务端",clients:"客户端",memory:"内存",persistence:"持久性",stats:"统计",replication:"同步复制",cpu:"CPU",cluster:"集群"},confirm:{title:"确认",alert:"警告",info:"信息",deleteListItem:"您确定要删除该列表项吗?",deleteHashKey:"您确定要删除该哈希键项吗?",deleteSetMember:"您确定要删除该集合成员?",deleteZSetMember:"您确定要删除该有序集合成员?",deleteConnection:"确认",deleteConnectionText:"您确定要删除此Redis连接吗?",deleteNode:"您确定要删除此Redis节点吗?",deleteAllKeys:e=>`删除此树及其所有键 (${e.key})?`,socketioConnectError:"Socket.IO 不能连接到该服务, 您可以重新加载及尝试自己解决该错误, 客户端自身无法解决该错误",deleteKey:"您确定要删除这个键吗?",rename:{title:"您确定要重命名该键名么?",textContent:"如果您点击重命名按钮,它将永久重命名此键。",placeholder:"该Redis键(必须存在)"},ttl:{title:"您要改变该键的TTL吗?",textContent:"如果您点击更改TTL按钮, 会改变该键的生存时间,设置为空则有效期永久",placeholder:"Redis键的TTL(整数或空)",placeholderPlaceholder:"空意味着它将永久存在,否则将使用所使用的整数。",convertTextToTime:"将文字转换为时间",convertTextToTimePlaceholder:"例如。 1d将是86400"},license:{title:"启用捐赠的许可证?",textContent:"如果要使用捐赠的功能,请联系alabard@gmail.com申请许可证。 捐款是每月1美元。",placeholder:"注册码"}},language:{en:"英语 / English",zn:"中文 / Chinese"},intention:{copy:"复制",saveWithFormatJson:"保存格式",formatJson:"格式化Json",pubsubMonitor:"PubSub监视器",language:"语言 / Language",ok:"确定",addKey:"加入此键",addKeyRoot:"加入一个根键",reloadKey:"重载键",reload:"重载",close:"关闭",commands:"命令",view:"视图",statistics:"统计",refresh:"刷新",clear:"清除",rename:"重命名",main:"主页",cancel:"取消",theme:"主题",github:"GitHub",githubRepo:"仓库",githubTodo:"待办",githubChangelog:"更新日志",settings:"设置",connect:"连接",disconnect:"断开",overview:"概览",console:"控制台",noConnections:"没有任何连接,请在设置菜单中添加一个连接。",noConnectionsInSettings:"没有连接,您可以在上面添加一个新的连接。",connectionAdd:"新连接",extend:"拓展",collapse:"折叠",add:"添加",edit:"编辑",save:"保存",ttl:"设置 TTL",license:"设定牌照",delete:"删除",remove:"删除",sure:"确定",testConnection:"测试连接",getKey:"加载Redis键及相关数据...",jsonViewShow:"显示 JSON 树",jsonViewEditor:"编辑JSON"},label:{unableToLoadKey:({key:e})=>`无法加载此密钥:: ${e}。确切的错误在控制台中。`,bigJson:"此JSON对象超过10 kb,因此请确保您知道自己在做什么,因为某些功能可能会缓慢呈现。",addNode:"添加节点",validateJson:"验证JSON",reducedFunction:"功能限制",tooManyKeys:e=>`对于最大函数允许的键个数为 ${e.maxLightKeysCount}. 该数据库允许共超过的键总数为 ${e.count}.但键的排序及范式树等相关信息会被禁用。搜索仅在服务器上进行,而不是客户端搜索。`,redisCommandNotFound:"找不到匹配的Redis命令...",treeKeyStore:"该排序(自然排序)运行在客户端的浏览器上, 意味着针对大型集合(例如超过1W个键),渲染的时长开销需要增加.Redis中没有键排序, 就像这样。",socketIoTimeout:e=>`Socket.IO 请求超时,请求时最长(最大 ${e.timeout/1e3}秒) ...`,resizerInfo:e=>`面板(左/右)的最小宽度是 ${e.width}像素`,jsonViewNotParsable:"该值JSON无法解析",ttlTitle:"设置TTL时间(秒)",passwordSecure:"密码可能为空,但仍会显示字符,这是一项安全功能。",treeSeparatorEmpty:"如果树分隔符为空,则树将没有嵌套节点,只有纯列表",treeSeparatorEmptyNote:"没有嵌套节点,只是一个纯列表",welcomeConsole:"欢迎来到Redis控制台",welcomeConsoleInfo:"启用类似Bash命令补全功能,按TAB 或 SHIFT + TAB 补全",welcomeConsoleInfo2:"上下方向键选择历史记录功能已启用",redisListIndexInfo:"空值追加, -1 到前置或保存到光标之处",console:"控制台",connectiondAdd:"添加连接",connectiondEdit:"编辑连接",connectiondView:"查看连接",connections:"连接",keysSort:{on:"开启键排序",off:"关闭键排序"},awsElastiCache:{on:"AWS ElastiCache / Gcloud memorystore on",off:"AWS ElastiCache / Gcloud memorystore off"},azure:{on:"Azure Redis on",off:"Azure Redis off"},cluster:{on:"群集",off:"集群关闭"},theme:{light:"浅棕",dark:"黑暗企业",darkNeu:"暗色",darkoBluo:"蓝色",enterprise:"企业风",redis:"Redis风格",matrix:"矩阵"},connected:e=>"已连接: "+e.name,tree:"树"},status:{dataCopied:"数据在剪贴板中",licenseSaved:"许可证已保存",nodeRemoved:"节点已删除",keyIsNotExisting:"此键可能已被删除或过期。",keyCount:e=>0===e.keyCount?"没有任何键":1===e.keyCount?"1 个键":e.keyCount+" 键",treeExpandAll:"展开所有树,该操作的代价就是有点费时...",noRedisKeys:"此数据库中没有任何键。",redisConnected:"Redis 连接成功",reloadingDataInfo:"重新加载Redis数据信息",added:"已添加",saved:"已更新",cancelled:"已取消",deleted:"已删除",savedRedis:"Redis数据已保存",redisDisconnected:e=>"该连接有一个错误: "+e.error.message,dbChanged:e=>`db索引设置为 ${e.db}. `,treeDeleted:e=>`该树已删除 (${e.key}).`,deletedKey:e=>`该键已删除 (${e.key}).`,renamedKey:"该键已重命名",ttlChanged:"该键TTL已被更改",notInteger:"输入值不是一个整数",persisted:"永久键",set:"键已设置/添加"},code:{"delete-connection":"此连接已删除,因此您与此Redis实例断开连接。","save-connection":"此连接已更改,因此您与此Redis实例断开连接。 你可以重新连接。","readonly-connections":"连接(添加/保存/删除)只是只读!","list-out-of-bounds":"此列表索引超出范围","donation-ware-feature":"捐赠版本中提供了此功能。"},form:{error:{required:"必填",port:"端口号范围是 1-65535",invalid:"值无效,请重新输入"},connection:{label:{name:"连接名字",host:"主机名",port:"端口",password:"密码"}},treeSettings:{maxValueDisplay:"最大值显示字符串长度",maxValueDisplayInfo:"如果最大值显示为零,则显示所有内容,如果大于0,则将截断。 如果它是-1,它将不显示没有编辑字符串的值,对于其他人,它显示所有内容。",maxKeys:"最大密钥数",maxKeysInfo:"为了避免GUI崩溃,我们限制了最大密钥数。",keyCount:()=>"键数: "+p3xr.state.keysRaw.length,label:{animation:"使用动画",noAnimation:"没有动画",jsonFormatTwoSpace:"用2个空格格式化JSON",jsonFormatFourSpace:"用4个空格格式化JSON",formName:"Redis设置",searchModeClient:"客户端搜索模式",searchModeServer:"服务端搜索模式",searchModeStartsWith:"以模式启动搜索",searchModeIncludes:"搜索包括模式"},field:{treeSeparator:"树分隔符",treeSeparatorSelector:"树分隔符选择器",page:"分页数",keysSort:"对键进行排序",searchMode:"搜索模式",searchModeStartsWith:"搜索以 / 开头"},error:{page:"页数必须是10  -  500之间的整数",maxValueDisplay:"最大显示值必须是介于-1和32768之间的整数",maxKeys:"最大密钥计数值必须是100到100000之间的整数"}},key:{label:{formName:{add:"添加新的Redis键",edit:"编辑 Redis key",append:"添加到现有的Redis键"}},field:{key:"键",type:"类型",index:"索引",hashKey:"哈希键",score:"分数",value:"值"},error:{key:"键至少存在一个字符",hashKey:"哈希表键至少是一个字符",score:"排序的集合分数是必需的",value:"该值是必填的"}},main:{label:{database:"DB"}}},page:{overview:{noConnected:"没有任何连接到Redis",overviewClients:"按客户端连接计数展示所有连接",connectedCount:e=>1===e.length?"1 客户端":e.length+" 客户端"},key:{label:{key:"键",encoding:"编码",length:"大小",ttl:"TTL",ttlTitle:"生存时间",type:"类型",ttlNotExpire:"不会过期",lengthString:"字符",lengthItem:"项数",actions:"操作"},list:{table:{index:"索引",value:"值"}},hash:{table:{hashkey:"哈希",value:"值"}},set:{table:{value:"成员"}},zset:{table:{value:"成员",score:"分数"}}},treeControls:{settings:"树设置",expandAll:"展开所有",collapseAll:"折叠所有",search:{search:"在键中搜索",clear:"清空当前搜索结果",placeholderClient:"客户端搜索",placeholderServer:"服务端搜索",info:`客户端搜索是匹配输入的文本,服务端搜索则遵循*{search-text}*模式搜索.对于大量数据的搜索最好在服务端进行搜索,而较小数据量可以考虑客户端搜索。如果键数超过  ${p3xr.settings.maxLightKeysCount}个的则只能在服务端搜索`,largeSetInfo:"在大型集合中,禁用客户端搜索。 所以现在只能进行服务器端搜索。",infoDetails:"要了解搜索的工作原理,请查看设置"},pager:{next:"下一页",prev:"上一页",first:"首页",last:"末页"}}},time:{years:"年份",months:"个月",days:"天",year:"年",month:"月",day:"天"},redisTypes:{string:"字符串",list:"列表",hash:"哈希表",set:"集合",zset:"有序集合 - zset"}};e.exports=t},9862:e=>{e.exports='<md-dialog aria-label="unused" style="min-width:320px"> <form novalidate name="p3xrConnectionForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.state.cfg.readonlyConnections ? $root.p3xr.strings.label.connectiondView : options.type === \'new\' ? $root.p3xr.strings.label.connectiondAdd : $root.p3xr.strings.label.connectiondEdit }}</h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content class="p3xr-padding"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.name }}</label> <input required name="name" ng-model="model.name" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm.name.$error"> <div ng-message="required">{{ $root.p3xr.strings.form.error.required }}</div> </div> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.host }}</label> <input name="host" ng-model="model.host" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.port }}</label> <input name="port" type="number" min="1" max="65535" ng-model="model.port" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm.port.$error"> <div ng-message-exp="[\'min\', \'max\']"> {{ $root.p3xr.strings.form.error.port }} </div> </div> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.connection.label.password }}</label> <input name="password" type="password" ng-model="model.password" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.passwordSecure }} </div> <span ng-if="$root.p3xr.state.donated"> <md-input-container style="margin:0"> <md-switch ng-model="model.awsElastiCache" name="awsElastiCache" aria-label="" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ model.awsElastiCache ? $root.p3xr.strings.label.awsElastiCache.on : $root.p3xr.strings.label.awsElastiCache.off }} </md-switch> </md-input-container> <md-input-container style="margin:0"> <md-switch ng-model="model.azure" name="azure" aria-label="" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ model.azure ? $root.p3xr.strings.label.azure.on : $root.p3xr.strings.label.azure.off }} </md-switch> </md-input-container> <md-input-container style="margin:0"> <md-switch ng-model="model.cluster" name="cluster" aria-label="" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ model.cluster ? $root.p3xr.strings.label.cluster.on : $root.p3xr.strings.label.cluster.off }} </md-switch> </md-input-container> <span ng-if="model.cluster === true && !$root.p3xr.state.cfg.readonlyConnections" ng-click="addNode()"> <md-button class="md-fab md-primary md-mini"> <md-icon>add</md-icon> </md-button> {{ $root.p3xr.strings.label.addNode }} </span> <div ng-if="model.cluster === true"> <div ng-repeat="node in model.nodes"> <fieldset> <legend>Node {{$index + 1}}</legend> <div style="float:right" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-button class="md-fab md-warn md-mini" ng-click="removeNode($event, $index)"> <md-tooltip>{{ $root.p3xr.strings.confirm.deleteConnectionText }}</md-tooltip> <md-icon>delete</md-icon> </md-button> <md-button class="md-fab md-primary md-mini" ng-click="addNode($index)"> <md-tooltip>{{ $root.p3xr.strings.label.addNode }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.host }}</label> <input name="host{{$index}}" ng-model="node.host" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.port }}</label> <input required name="port{{$index}}" type="number" min="1" max="65535" ng-model="node.port" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm[\'port\' +  $index].$error"> <div ng-message-exp="[\'min\', \'max\']"> {{ $root.p3xr.strings.form.error.port }} </div> <div ng-message="required">{{ $root.p3xr.strings.form.error.required }}</div> </div> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.connection.label.password }}</label> <input name="password{{$index}}" type="password" ng-model="node.password" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.passwordSecure }} </div> </fieldset> <div ng-if="$last !== true" style="margin-bottom:16px"> &nbsp; </div> <div style="clear:both"></div> </div> </div> </span> </md-content> </md-dialog-content> <md-dialog-actions layout="row" layout-align="end end" md-theme="{{ $root.p3xr.state.theme }}"> <md-button class="md-raised md-warn" ng-click="cancel()"> <md-icon>cancel</md-icon> {{ $root.p3xr.strings.intention.cancel }} </md-button> <md-button class="md-raised md-primary" type="submit" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-icon>{{ options.type === \'new\' ? \'add\' : \'save\' }}</md-icon> {{ options.type === \'new\' ? $root.p3xr.strings.intention.add : $root.p3xr.strings.intention.save }} </md-button> <span md-theme="{{ $root.p3xr.state.themeCommon }}"> <md-button class="md-raised md-primary" ng-click="testConnection()"> <i class="fas fa-plug"></i> {{ $root.p3xr.strings.intention.testConnection }} </md-button> </span> </md-dialog-actions> </form> </md-dialog> '},8133:e=>{e.exports='<md-dialog aria-label="{{ $root.p3xr.strings.intention.jsonViewShow }}" style="min-width:320px;width:75%;min-height:200px;height:75%"> <md-toolbar md-theme="{{$root.p3xr.state.themeLayout}}" class="md-hue-3"> <div class="md-toolbar-tools"> <md-icon>edit</md-icon> &nbsp; {{ $root.p3xr.strings.intention.jsonViewEditor }} <span flex></span> <md-button class="md-icon-button" ng-click="ok()" aria-label="{{ $root.p3xr.strings.intention.close }}"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content flex md-theme="{{ $root.p3xr.state.theme }}"> <md-content style="height:100%" class="p3xr-roboto-monospace"> <span id="p3xr-jsoneditor" style="width:100%;height:100%"></span> <div ng-if="!isJson" layout-padding> {{ $root.p3xr.strings.label.jsonViewNotParsable}} </div> </md-content> </md-dialog-content> <md-dialog-actions layout="row" md-theme="{{ $root.p3xr.state.theme }}"> <span flex></span> <md-button ng-click="ok()" class="md-raised md-warn" aria-label="{{ $root.p3xr.strings.intention.close }}"> <md-icon>cancel</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.cancel }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.cancel }}</md-tooltip> </md-button> <md-button ng-if="isJson" class="md-raised md-primary" ng-click="save({ format : false})"> <md-icon>save</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.save }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.save }}</md-tooltip> </md-button> <md-button ng-if="isJson" class="md-raised md-primary" ng-click="save({ format : true})"> <md-icon>save</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.saveWithFormatJson }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.saveWithFormatJson }}</md-tooltip> </md-button> </md-dialog-actions>  </md-dialog> '},3857:e=>{e.exports='<md-dialog aria-label="{{ $root.p3xr.strings.intention.jsonViewShow }}"> <md-toolbar md-theme="{{$root.p3xr.state.themeLayout}}"> <div class="md-toolbar-tools"> <md-icon>table_chart</md-icon> &nbsp; {{ $root.p3xr.strings.intention.jsonViewShow }} <span flex></span> <md-button class="md-icon-button" aria-label="" ng-if="isJson" ng-click="treeExpandAll()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.expandAll}}</md-tooltip> <md-icon>keyboard_arrow_down</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-if="isJson" ng-click="treeCollapseAll()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.collapseAll}}</md-tooltip> <md-icon>keyboard_arrow_up</md-icon> </md-button> <md-button class="md-icon-button" ng-click="ok()" aria-label="{{ $root.p3xr.strings.intention.close }}"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content flex> <md-content layout-padding class="p3xr-roboto-monospace"> <json-tree object="obj" root-name="$root.p3xr.strings.label.tree" ng-if="isJson && howExpanded === true" start-expanded="howExpanded"></json-tree> <json-tree object="obj" root-name="$root.p3xr.strings.label.tree" ng-if="isJson && howExpanded === \'recursive\'" start-expanded="howExpanded"></json-tree> <div ng-if="!isJson"> {{ $root.p3xr.strings.label.jsonViewNotParsable}} </div> </md-content> </md-dialog-content> <md-dialog-actions layout="row"> <span flex></span> <md-button ng-click="ok()" class="md-raised md-accent" aria-label="{{ $root.p3xr.strings.intention.close }}"> <md-icon>close</md-icon> {{ $root.p3xr.strings.intention.close }} </md-button> </md-dialog-actions>  </md-dialog> '},5817:e=>{e.exports='<md-dialog aria-label="{{$root.p3xr.strings.form.key.label.formName}}" style="min-width:75%"> <form novalidate name="p3xrKeyNewForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate> {{ options.type === \'edit\' ? $root.p3xr.strings.form.key.label.formName.edit : ( options.type === \'append\' ? $root.p3xr.strings.form.key.label.formName.append : $root.p3xr.strings.form.key.label.formName.add ) }} </h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content class="p3xr-padding"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.key }}</label> <input required minlength="1" ng-model="model.key" name="key" ng-disabled="options.type !== \'add\'"> <div ng-messages="p3xrKeyNewForm.key.$error"> <div ng-message-exp="[\'required\', \'minlength\']"> {{ $root.p3xr.strings.form.key.error.key }} </div> </div> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.type }}</label> <md-select ng-model="model.type" name="type" ng-disabled="options.type !== \'add\'"> <md-option ng-repeat="type in types" ng-value="type"> {{ $root.p3xr.strings.redisTypes[type] }} </md-option> </md-select> </md-input-container> <span ng-switch="model.type"> <span ng-switch-when="list"> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.key.field.index }}</label> <input type="number" step="1" ng-model="model.index" name="index"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.redisListIndexInfo }} </div> </span> <span ng-switch-when="hash"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.hashKey }}</label> <input required minlength="1" ng-model="model.hashKey" name="hashKey"> <div ng-messages="p3xrKeyNewForm.hashKey.$error"> <div ng-message-exp="[\'required\', \'minlength\']"> {{ $root.p3xr.strings.form.key.error.hashKey }} </div> </div> </md-input-container> </span> <span ng-switch-when="zset"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.score }}</label> <input type="number" required ng-model="model.score" name="score"> <div ng-messages="p3xrKeyNewForm.score.$error"> <div ng-message-exp="[\'required\']"> {{ $root.p3xr.strings.form.key.error.score }} </div> </div> </md-input-container> </span> </span> <md-button class="md-button md-raised md-primary" ng-if="$root.p3xr.state.donated" ng-click="jsonEditor({ $event: $event, value: model.value})"> <md-icon>edit</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewEditor }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewEditor }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-accent" ng-click="jsonViewer({ $event: $event, value: model.value})"> <md-icon>table_chart</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewShow }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewShow }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="formatJson({ $event: $event})"> <md-icon>format_line_spacing</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.formatJson }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.formatJson }} </md-tooltip> </md-button> <md-button class="md-icon-button md-primary" ng-click="copy({ $event: $event, value: model.value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-switch ng-model="validateJson" class="md-accent" style="margin-top:0"> {{ $root.p3xr.strings.label.validateJson }} </md-switch> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.value }}</label> <textarea ng-model="model.value" required p3x-validate-json p3x-validate-json-required="validateJson" name="value"></textarea> <div ng-messages="p3xrKeyNewForm.value.$error"> <div ng-message-exp="[\'required\']"> {{ $root.p3xr.strings.form.key.error.value }} </div> </div> <div ng-messages="p3xrKeyNewForm.value.$error"> <div ng-message-exp="[\'p3xValidateJson\']"> {{ $root.p3xr.strings.label.jsonViewNotParsable }} </div> </div> </md-input-container> </md-content> </md-dialog-content> <md-dialog-actions layout="row" layout-align="end end" md-theme="{{ $root.p3xr.state.theme }}"> <md-button class="md-raised md-warn" ng-click="cancel()"> <md-icon>cancel</md-icon> {{ $root.p3xr.strings.intention.cancel }} </md-button> <md-button class="md-raised md-primary" type="submit"> <md-icon>{{ options.type === \'edit\' ? \'edit\' : \'add\'}}</md-icon> {{ options.type === \'edit\' ? $root.p3xr.strings.intention.save : $root.p3xr.strings.intention.add }} </md-button> </md-dialog-actions> </form> </md-dialog> '},526:e=>{e.exports='<md-dialog aria-label="unused" style="min-width:320px"> <form novalidate name="p3xrDialogTreecontrolSettingsForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{$root.p3xr.strings.form.treeSettings.label.formName}}</h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content class="p3xr-padding"> <div ng-if="$root.p3xr.state.reducedFunctions"> <div> {{ $root.p3xr.strings.form.treeSettings.keyCount() }} </div> <br/> <div> {{ $root.p3xr.strings.label.tooManyKeys({ count: $root.p3xr.state.keysRaw.length, maxLightKeysCount: $root.p3xr.settings.maxLightKeysCount}) }} </div> <br/> </div> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.field.treeSeparator }}</label> <input name="treeSeparator" ng-model="model.treeSeparator"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.treeSeparatorEmpty }} </div> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.field.page }}</label> <input type="number" required min="10" max="1000" name="pageCount" step="1" pattern="\\d*" ng-model="model.pageCount"> <div ng-messages="p3xrDialogTreecontrolSettingsForm.pageCount.$error"> <div ng-message-exp="[\'required\', \'min\', \'max\', \'pattern\']"> {{ $root.p3xr.strings.form.treeSettings.error.page }} </div> </div> </md-input-container> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.maxValueDisplay }}</label> <input type="number" required min="-1" max="32768" name="maxValueDisplay" step="1" pattern="-?\\d*" ng-model="model.maxValueDisplay"> <div ng-messages="p3xrDialogTreecontrolSettingsForm.maxValueDisplay.$error"> <div ng-message-exp="[\'required\', \'min\', \'max\', \'pattern\']"> {{ $root.p3xr.strings.form.treeSettings.error.maxValueDisplay }} </div> </div> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.form.treeSettings.maxValueDisplayInfo }} </div> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.maxKeys }}</label> <input type="number" required min="5" max="100000" name="maxKeys" step="1" pattern="-?\\d*" ng-model="model.maxKeys"> <div ng-messages="p3xrDialogTreecontrolSettingsForm.maxKeys.$error"> <div ng-message-exp="[\'required\', \'min\', \'max\', \'pattern\']"> {{ $root.p3xr.strings.form.treeSettings.error.maxKeys }} </div> </div> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.form.treeSettings.maxKeysInfo }} </div> <span ng-if="!$root.p3xr.state.reducedFunctions" style="margin:0;padding:0"> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <md-switch ng-model="model.keysSort" name="keysSort" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.keysSort ? $root.p3xr.strings.label.keysSort.on : $root.p3xr.strings.label.keysSort.off }} </md-switch> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.treeKeyStore }} </div> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <md-switch ng-model="model.searchClientSide" name="searchClientSide" aria-label="" ng-disabled="$root.p3xr.state.dbsize > $root.p3xr.settings.maxLightKeysCount" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.searchClientSide ? $root.p3xr.strings.form.treeSettings.label.searchModeClient : $root.p3xr.strings.form.treeSettings.label.searchModeServer }} </md-switch> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.page.treeControls.search.info }} <div ng-if="$root.p3xr.state.dbsize > $root.p3xr.settings.maxLightKeysCount "> <br/> {{ $root.p3xr.strings.page.treeControls.search.largeSetInfo }} </div> </div> </span> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> <md-switch ng-model="model.searchStartsWith" name="searchStartsWith" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.searchStartsWith ? $root.p3xr.strings.form.treeSettings.label.searchModeStartsWith : $root.p3xr.strings.form.treeSettings.label.searchModeIncludes }} </md-switch> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> <md-switch ng-model="model.jsonFormat" name="jsonFormat" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.jsonFormat ? $root.p3xr.strings.form.treeSettings.label.jsonFormatTwoSpace : $root.p3xr.strings.form.treeSettings.label.jsonFormatFourSpace }} </md-switch> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> <md-switch ng-model="model.animation" name="animation" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.animation ? $root.p3xr.strings.form.treeSettings.label.animation : $root.p3xr.strings.form.treeSettings.label.noAnimation }} </md-switch> </md-input-container> </md-content> </md-dialog-content> <md-dialog-actions layout="row" layout-align="end end" md-theme="{{ $root.p3xr.state.theme }}"> <md-button class="md-raised md-warn" ng-click="cancel()"> <md-icon>cancel</md-icon> {{ $root.p3xr.strings.intention.cancel }} </md-button> <md-button class="md-raised md-primary" type="submit"> <md-icon>save</md-icon> {{ $root.p3xr.strings.intention.save }} </md-button> </md-dialog-actions> </form> </md-dialog> '},5006:e=>{e.exports='<md-dialog aria-label="unused" style="min-width:320px"> <form novalidate name="p3xrTtlForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.strings.confirm.ttl.title}}</h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content class="p3xr-padding"> <div class="md-text"> {{ $root.p3xr.strings.confirm.ttl.textContent }} </div> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.confirm.ttl.placeholder }}</label> <input type="number" name="ttl" ng-model="model.ttl" min="-1" placeholder="{{ $root.p3xr.strings.confirm.ttl.placeholderPlaceholder }}"> <div ng-messages="p3xrTtlForm.ttl.$error"> </div> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.confirm.ttl.convertTextToTime }}</label> <input name="convertTextToTime" ng-model="convertTextToTime" placeholder="{{ $root.p3xr.strings.confirm.ttl.convertTextToTimePlaceholder}}"> <div ng-messages="p3xrTtlForm.convertTextToTime.$error"> </div> </md-input-container> <md-button ng-click="openTimestringNpm()" class="md-accent">https://www.npmjs.com/package/timestring</md-button> </md-content> </md-dialog-content> <md-dialog-actions layout="row" layout-align="end end" md-theme="{{ $root.p3xr.state.theme }}"> <md-button class="md-raised md-warn" ng-click="cancel()"> <md-icon>cancel</md-icon> {{ $root.p3xr.strings.intention.cancel }} </md-button> <md-button class="md-raised md-primary" type="submit"> <md-icon>timer</md-icon> {{ $root.p3xr.strings.intention.ttl }} </md-button> </md-dialog-actions> </form> </md-dialog> '},134:e=>{e.exports=' <div id="p3xr-layout-header-container"> <md-toolbar md-whiteframe="3"> <div class="md-toolbar-tools"> <p3xr-button ng-if="!$root.p3xr.state.failed" ui-sref="main.statistics" p3xr-label="$root.p3xr.strings.title.name" p3xr-fa-icon="fas fa-database"></p3xr-button> <p3xr-button ng-if="$root.p3xr.state.failed" ng-click="$root.locationReload()" p3xr-label="$root.p3xr.strings.title.name" p3xr-fa-icon="fas fa-redo"></p3xr-button> <span flex></span> <p3xr-button ng-if="$root.hasConnected()" ui-sref="overview" p3xr-label="$root.p3xr.strings.intention.overview" p3xr-md-icon="info"></p3xr-button> <p3xr-button ng-if="!$root.p3xr.state.failed" ui-sref="settings" p3xr-label="$root.p3xr.strings.intention.settings" p3xr-md-icon="settings"></p3xr-button> <p3xr-button ng-if="$root.p3xr.state.connection" ui-sref="console" p3xr-label="$root.p3xr.strings.intention.console" p3xr-md-icon="keyboard"></p3xr-button> <p3xr-button ng-if="$root.p3xr.state.connection" ui-sref="main.statistics" p3xr-label="$root.p3xr.strings.intention.main" p3xr-md-icon="home"></p3xr-button> </div> </md-toolbar> </div> <div id="p3xr-layout-header-version-donated" md-colors="{ color: $ctrl.getVersionColor() }" ng-if="$root.isElectron === false && $root.p3xr.state.donated && $root.$mdMedia(\'(min-width: 699px)\')">{{ $root.p3xr.state.version }} </div> <div id="p3xr-layout-header-version-free" md-colors="{ color: $ctrl.getVersionColor() }" ng-if="$root.isElectron === false && !$root.p3xr.state.donated && $root.$mdMedia(\'(min-width: 699px)\')">{{ $root.p3xr.state.version }} </div> <div id="p3xr-layout-footer-container"> <md-toolbar> <div class="md-toolbar-tools"> <md-menu ng-if="$root.p3xr.state.connections.list.length > 0"> <p3xr-button ng-click="$mdMenu.open($event)" p3xr-label="$ctrl.connectionName" p3xr-md-icon="power" p3xr-tooltip-direction="top"></p3xr-button> <md-menu-content> <md-menu-item ng-repeat="connection in $root.p3xr.state.connections.list" ng-class="{\'p3xr-md-menu-item-selected\': $root.p3xr.state.connection.id  === connection.id}"> <md-button ng-click="$ctrl.connect(connection)"> {{ connection.name }} </md-button> </md-menu-item> </md-menu-content> </md-menu> <span ng-if="$root.p3xr.state.connection"> <md-button ng-click="$ctrl.disconnect()"> <i class="fa fa-power-off"></i> <span hide-xs hide-sm>{{ $root.p3xr.strings.intention.disconnect }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\') || $root.$mdMedia(\'sm\')" md-direction="top">{{ $root.p3xr.strings.intention.disconnect }} </md-tooltip> </md-button> </span> <span flex></span> <p3xr-button ng-click="$ctrl.openLink.donate()" p3xr-label="$root.p3xr.strings.title.donate" p3xr-fa-icon="fas fa-donate" p3xr-tooltip-direction="top"></p3xr-button> <md-menu ng-if="!$root.isElectron || ($root.isElectron && $ctrl.isElectronInitialized)"> <md-button ng-click="$mdMenu.open($event)"> <md-icon>language</md-icon> <span hide-xs hide-sm>{{ $root.p3xr.strings.intention.language }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\') || $root.$mdMedia(\'sm\')" md-direction="top">{{ $root.p3xr.strings.intention.language }} </md-tooltip> </md-button> <md-menu-content> <md-menu-item ng-repeat="(key, value) in $root.p3xr.strings.language" ng-class="{\'p3xr-md-menu-item-selected\': $root.p3xr.settings.language.current === key}"> <md-button ng-click="$ctrl.setLanguage(key)"> {{ $root.p3xr.strings.language[key] }} </md-button> </md-menu-item> </md-menu-content> </md-menu> <md-menu> <md-button ng-click="$mdMenu.open($event)"> <md-icon>color_lens</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.theme }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')" md-direction="top">{{ $root.p3xr.strings.intention.theme }} </md-tooltip> </md-button> <md-menu-content> <md-menu-item ng-repeat="key in $ctrl.getThemeKey($root.p3xr.theme)" ng-class="{\'p3xr-md-menu-item-selected\': $ctrl.themeSelectedKey === key}"> <md-button ng-click="$ctrl.setTheme(key)"> {{ $root.p3xr.strings.label.theme[key] }} </md-button> </md-menu-item> </md-menu-content> </md-menu> <md-menu> <md-button ng-click="$mdMenu.open($event)"> <i class="fab fa-github"></i> <span hide-xs hide-sm>{{ $root.p3xr.strings.intention.github }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\') || $root.$mdMedia(\'sm\')" md-direction="top">{{ $root.p3xr.strings.intention.github }} </md-tooltip> </md-button> <md-menu-content> <md-menu-item> <md-button ng-click="$ctrl.openLink.github()"> {{ $root.p3xr.strings.intention.githubRepo }} </md-button> </md-menu-item> <md-menu-item> <md-button ng-click="$ctrl.openLink.githubTodo()"> {{ $root.p3xr.strings.intention.githubTodo }} </md-button> </md-menu-item> <md-menu-item> <md-button ng-click="$ctrl.openLink.githubChangelog()"> {{ $root.p3xr.strings.intention.githubChangelog }} </md-button> </md-menu-item> </md-menu-content> </md-menu> </div> </md-toolbar> </div> <div flex layout="row"> <div flex class="p3xr-layout-content"> <ui-view></ui-view> </div> </div> <div id="p3xr-layout-reduced" ng-show="$root.p3xr.state.reducedFunctions" md-theme="{{ $root.p3xr.state.themeCommon }}" md-colors="{ background: \'warn\', \'border-color\': \'warn-900-0.5\'}" ng-click="$ctrl.reducedFunctionalty()"> <md-icon style="font-size:20px">warning</md-icon> {{ $root.p3xr.strings.label.reducedFunction }} </div> '},176:e=>{e.exports='<div layout-gt-xs="row" layout="column" layout-align="start center" md-colors="{ background: \'primary-300\' }"> <div flex="1px"></div> <div flex="15"> {{ $root.p3xr.strings.page.key.hash.table.hashkey }} </div> <div flex="60"> {{ $root.p3xr.strings.page.key.hash.table.value }} </div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button" ng-click="$ctrl.addHash({ $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align="start start" ng-repeat="(key, value) in $ctrl.p3xrValue" style=""> <div flex="1px"></div> <div flex="15" ng-click="$ctrl.editValue({ hashKey: key, value: value, $event: $event})"><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && key.length > $root.p3xr.settings.maxValueDisplay">{{ key.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || key.length <= $root.p3xr.settings.maxValueDisplay || $root.p3xr.settings.maxValueDisplay === -1 ">{{ key }}</span></div> <div flex="60" class="p3xr-pre" style="overflow:auto;align-items:flex-start;max-height:200px" ng-click="$ctrl.editValue({ hashKey: key, value: value, $event: $event})"><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value.length > $root.p3xr.settings.maxValueDisplay">{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value.length <= $root.p3xr.settings.maxValueDisplay || $root.p3xr.settings.maxValueDisplay === -1 ">{{ value }}</span></div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.copy({ $event: $event, value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ hashKey: key, value: value, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteHashKey({ hashKey: key, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> </div> </div> '},2585:e=>{e.exports='<div layout-gt-xs="row" layout="column" layout-align="start center" md-colors="{ background: \'primary-300\' }"> <div flex="20" style="text-align:right"> {{ $root.p3xr.strings.page.key.list.table.index }} &nbsp; </div> <div flex="60"> {{ $root.p3xr.strings.page.key.list.table.value }} </div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button" ng-click="$ctrl.appendValue({ $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align="start start" ng-repeat="value in $ctrl.p3xrValue track by $index" style=""> <div flex="20" ng-click="$ctrl.editValue({ index: $index, value: value, $event: $event})" style="text-align:right"> {{ $index }} &nbsp; </div> <div flex="60" class="p3xr-pre" style="overflow:auto;align-items:flex-start;max-height:200px" ng-click="$ctrl.editValue({ index: $index, value: value, $event: $event})"><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value.length > $root.p3xr.settings.maxValueDisplay">{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value.length <= $root.p3xr.settings.maxValueDisplay|| $root.p3xr.settings.maxValueDisplay === -1 ">{{ value }}</span></div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.copy({ $event: $event, value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ index: $index, value: value, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteListElement({ index: $index, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> </div> </div> '},7129:e=>{e.exports='<div layout-gt-xs="row" layout="column" layout-align="start center" md-colors="{ background: \'primary-300\' }"> <div flex style="padding-left:3px"> {{ $root.p3xr.strings.page.key.set.table.value }} </div> <div flex="5" style="text-align:right"> <md-button class="md-icon-button" ng-click="$ctrl.addSet({ $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align="start start" ng-repeat="value in $ctrl.p3xrValue" style=""> <div flex="95" class="p3xr-pre" style="padding-left:3px;align-items:flex-start;max-height:200px" ng-click="$ctrl.editValue({ value: value, $event: $event})"><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value.length > $root.p3xr.settings.maxValueDisplay">{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value.length <= $root.p3xr.settings.maxValueDisplay || $root.p3xr.settings.maxValueDisplay === -1 ">{{ value }}</span></div> <div flex="5" style="text-align:right"> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.copy({ $event: $event, value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ value: value, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteSetMember({ value: value, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> </div> </div> '},9263:e=>{e.exports='<div style="text-align:right"> <span ng-if="!$ctrl.editable"> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.jsonEditor({ $event: $event})" ng-if="$root.p3xr.state.donated"> <md-icon>edit</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewEditor }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewEditor }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-accent" ng-click="$ctrl.jsonViewer({ $event: $event})"> <md-icon>table_chart</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewShow }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewShow }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.copy({ $event: $event})"> <md-icon>content_copy</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.copy }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.copy }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.formatJson({ $event: $event})"> <md-icon>format_line_spacing</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.formatJson }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.formatJson }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.edit()"> <md-icon>edit</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.edit }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.edit }}</md-tooltip> </md-button> </span> <span ng-if="$ctrl.editable"> <div layout="row" layout-align="end center"> <div> <md-switch ng-model="$ctrl.validateJson" class="md-accent" style="float:right"> {{ $root.p3xr.strings.label.validateJson }} </md-switch> </div> <div> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.save()"> <md-icon>save</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.save }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.save }}</md-tooltip> </md-button> </div> <div> <md-button class="md-button md-raised md-warn" ng-click="$ctrl.cancelEdit()"> <md-icon>cancel</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.cancel }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.cancel }}</md-tooltip> </md-button> </div> </div> </span> </div> <div layout-padding> <div class="p3xr-pre" style="max-width:100%;overflow:auto" ng-click="$ctrl.edit()" ng-if="!$ctrl.editable"><span ng-if="$root.p3xr.settings.maxValueDisplay > -1"><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && $ctrl.p3xrValue.length > $root.p3xr.settings.maxValueDisplay">{{ $ctrl.p3xrValue.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || $ctrl.p3xrValue.length <= $root.p3xr.settings.maxValueDisplay">{{ $ctrl.p3xrValue }}</span></span></div> <div ng-if="$ctrl.editable"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.label.edit }}</label> <textarea ng-model="$ctrl.p3xrValue"></textarea> </md-input-container> </div> </div> '},508:e=>{e.exports='<div layout-gt-xs="row" layout="column" layout-align="start center" md-colors="{ background: \'primary-300\' }"> <div flex="20" style="text-align:right"> {{ $root.p3xr.strings.page.key.zset.table.score }} &nbsp; </div> <div flex="60"> {{ $root.p3xr.strings.page.key.zset.table.value }} </div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button" ng-click="$ctrl.addZSet({ $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align="start start" ng-repeat="value in $ctrl.generatedValue" style=""> <div flex="20" style="text-align:right" ng-click="$ctrl.editValue({ score: value[0], member: value[1], $event: $event})"> {{ value[0] }} &nbsp; </div> <div flex="60" class="p3xr-pre" style="overflow:auto;align-items:flex-start;max-height:200px" ng-click="$ctrl.editValue({ score: value[0], member: value[1], $event: $event})"><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value[1].length > $root.p3xr.settings.maxValueDisplay">{{ value[1].substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value[1].length <= $root.p3xr.settings.maxValueDisplay|| $root.p3xr.settings.maxValueDisplay === -1 ">{{ value[1] }}</span></div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value:  value[1]})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.copy({ $event: $event, value: value[1]})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ score: value[0], member: value[1], $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteZSet({ member: value[1], $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> </div> </div> '},9868:e=>{e.exports=' <div style="text-align:right"> <md-button class="md-button md-raised md-warn" ng-click="$ctrl.delete()"> <md-icon>delete</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.delete }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.delete }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.setTtl({ $event: $event})"> <md-icon>timer</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.ttl }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.ttl }} </md-tooltip> <md-tooltip ng-if="$root.$mdMedia(\'gt-sm\')">{{ $root.p3xr.strings.label.ttlTitle }}</md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.rename({ $event: $event})"> <md-icon>fingerprint</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.rename }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.rename }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-accent" ng-click="$ctrl.refresh()"> <md-icon>refresh</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.reloadKey }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\')" md-direction="bottom">{{ $root.p3xr.strings.intention.reloadKey }} </md-tooltip> </md-button> </div> <md-list flex md-theme="{{ $root.p3xr.state.theme}}"> <md-divider></md-divider> <md-list-item ng-click="$ctrl.rename({ $event: $event})"> <p>{{ $root.p3xr.strings.page.key.label.key }}:&nbsp;</p> <span class="p3xr-typography-ellipsis" title="{{ $root.p3xr.ui.htmlEncode($ctrl.$stateParams.key) }}">{{ $ctrl.$stateParams.key }}</span> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.setTtl({ $event: $event})" ng-if="$ctrl.response.ttl == -1"> <p title="{{ $root.p3xr.strings.page.key.label.ttlTitle  }}"><span class="p3xr-main-key-label-key-title">{{ $root.p3xr.strings.page.key.label.ttl }}</span>: </p> <span ng-if="$ctrl.response.ttl == -1"> {{ $root.p3xr.strings.page.key.label.ttlNotExpire }} </span> </md-list-item> <md-list-item class="md-2-line" ng-click="$ctrl.setTtl({ $event: $event})" ng-if="$ctrl.response.ttl != -1"> <div class="md-list-item-text"> <h3> <div layout="row" flex> <div flex class="p3xr-main-key-label-key-title"> <span>{{ $root.p3xr.strings.page.key.label.ttl }}</span>: </div> <div> <span ng-if="$ctrl.response.ttl == -1"> {{ $root.p3xr.strings.page.key.label.ttlNotExpire }} </span> <span ng-if="$ctrl.response.ttl != -1"> {{ $ctrl.response.ttl }} </span> </div> </div> </h3> <p ng-click="$ctrl.setTtl({ $event: $event})" style="text-align:right"> <span style="opacity:.5;font-weight:400" ng-click="$ctrl.setTtl({ $event: $event})"> {{ $ctrl.ttlParsed }} </span> </p> </div> </md-list-item> <md-divider></md-divider> <md-list-item> <p>{{ $root.p3xr.strings.page.key.label.type }}:</p> {{ $root.p3xr.strings.redisTypes[$ctrl.response.type] }} </md-list-item> <md-divider></md-divider> <md-list-item> <p>{{ $root.p3xr.strings.page.key.label.encoding }}:</p> {{ $ctrl.response.encoding }} </md-list-item> <md-divider></md-divider> <md-list-item> <p>{{ $root.p3xr.strings.page.key.label.length }}:</p> <span ng-if="$ctrl.response.type === \'string\'" style="opacity:.5"> {{ $ctrl.charactersPrettyBytes($ctrl.response.length) }} &nbsp; </span> {{ $ctrl.response.length }} &nbsp; <span ng-if="$ctrl.response-type === \'string\'"> {{ $root.p3xr.strings.page.key.label.lengthString }} </span> <span ng-if="$ctrl.response.type !== \'string\'"> {{ $root.p3xr.strings.page.key.label.lengthItem }} </span> </md-list-item> </md-list> <md-divider></md-divider> <span ng-switch="" on="$ctrl.response.type"> <p3xr-main-key-string ng-switch-when="string" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-string> <p3xr-main-key-list ng-switch-when="list" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-list> <p3xr-main-key-hash ng-switch-when="hash" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-hash> <p3xr-main-key-set ng-switch-when="set" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-set> <p3xr-main-key-zset ng-switch-when="zset" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-zset> </span> '},4498:e=>{e.exports='<md-tabs md-dynamic-height md-border-bottom> <md-tab label="{{ $root.p3xr.strings.title.db}}" ng-if="$ctrl.hasDatabases && $root.p3xr.state.connection.cluster !== true"> <md-content> <md-tabs md-dynamic-height md-border-bottom class="md-primary"> <md-tab label="{{ key }}" ng-repeat="(key, value) in $root.p3xr.state.info.keyspaceDatabases"> <md-content> <md-list flex ng-repeat="(itemKey, itemValue) in $root.p3xr.state.info.keyspace[\'db\' + key ]"> <md-list-item> <p><strong>{{ $ctrl.generateKey(itemKey) }}</strong></p> {{ itemValue }} </md-list-item> </md-list> </md-content> </md-tab> </md-tabs> </md-content> </md-tab> <md-tab label="{{ $ctrl.generateKey(key) }}" ng-repeat="(key, value) in $root.p3xr.state.info" ng-if="key !== \'keyspace\' &&  key !== \'keyspaceDatabases\'"> <md-content ng-style="{\'maxHeight\': $ctrl.maxHeight + \'px\'}"> <md-list flex> <md-list-item ng-repeat="(itemKey, itemValue) in value"> <p><strong>{{ $ctrl.generateKey(itemKey) }}</strong></p> {{ itemValue }} </md-list-item> </md-list> </md-content> </md-tab> </md-tabs> '},3646:e=>{e.exports='<div style="float:left"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.treeExpandAll()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.expandAll}}</md-tooltip> <md-icon>keyboard_arrow_down</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.treeCollapseAll()" id="p3xr-main-treecontrol-controls-collapse-all"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.collapseAll}}</md-tooltip> <md-icon>keyboard_arrow_up</md-icon> </md-button> <span ng-click="$ctrl.noop()" id="p3xr-main-treecontrol-controls-click-noop"></span> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.form.treeSettings.label.formName}}</md-tooltip> <md-icon>settings</md-icon> </md-button> <span> <p3xr-input id="p3xr-main-treecontrol-controls-tree-divider-input" ng-change="$ctrl.treeDividerChange()" style="width:10px;text-align:center;font-family:\'Roboto Mono\'" ng-model="$root.p3xr.settings.redisTreeDivider" ng-model-options="{debounce: 666 }"></p3xr-input> <md-tooltip>{{ $root.p3xr.strings.form.treeSettings.field.treeSeparator }}</md-tooltip> </span> <span ng-if="$root.p3xr.state.cfg.treeDividers.length > 0"> <md-select ng-model="$root.p3xr.settings.redisTreeDivider" ng-change="$ctrl.treeDividerChange()" class="p3xr-main-treecontrol-controls-divider-select md-no-underline" md-container-class="p3xr-main-treecontrol-controls-divider-select-container"> <md-option ng-repeat="divider in $root.p3xr.state.cfg.treeDividers" ng-value="divider"> {{ divider }} </md-option> </md-select> <md-tooltip>{{ $root.p3xr.strings.form.treeSettings.field.treeSeparatorSelector }}</md-tooltip> </span> </div> <span ng-if="$root.p3xr.state.pages > 1" class="p3xr-main-treecontrol-controls-pager"> <md-tooltip>{{ $root.p3xr.strings.status.keyCount({keyCount: $root.p3xr.state.keysRaw.length }) }}</md-tooltip> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.page({ page: \'first\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.first}}</md-tooltip> <md-icon>skip_previous</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.page({ page: \'prev\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.prev}}</md-tooltip> <md-icon>keyboard_arrow_left</md-icon> </md-button> <p3xr-input type="number" style="width:48px" step="1" min="1" ng-maxlength="$root.p3xr.state.pages" ng-change="$ctrl.pageChange()" ng-model="$root.p3xr.state.page"></p3xr-input> / {{ $root.p3xr.state.pages }} <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.page({ page: \'next\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.next}}</md-tooltip> <md-icon>keyboard_arrow_right</md-icon> </md-button> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.page({ page: \'last\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.last}}</md-tooltip> <md-icon>skip_next</md-icon> </md-button> </span> <span ng-if="$root.p3xr.state.pages < 2" class="p3xr-main-treecontrol-controls-keycount"> {{ $root.p3xr.strings.status.keyCount({keyCount: $root.p3xr.state.keysRaw.length }) }}&nbsp; </span> <div class="p3xr-main-treecontrol-controls-search"> <p3xr-input placeholder="{{ $root.p3xr.settings.searchClientSide ? $root.p3xr.strings.page.treeControls.search.placeholderClient : $root.p3xr.strings.page.treeControls.search.placeholderServer }}" ng-model="$root.p3xr.state.search" ng-class="{ \'withSearch\': $root.p3xr.state.search.length > 0, \'withoutSearch\': $root.p3xr.state.search.length  === 0}" ng-enter="$ctrl.onSearchChange()"></p3xr-input> <md-tooltip md-direction="top">{{ $root.p3xr.strings.page.treeControls.search.infoDetails }}</md-tooltip> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.onSearchChange()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.search.search}}</md-tooltip> <md-icon>search</md-icon> </md-button> <span ng-if="$root.p3xr.state.search.length > 0"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$root.p3xr.state.search = \'\'; $ctrl.onSearchChange()"><md-tooltip>{{ $root.p3xr.strings.page.treeControls.search.clear}}</md-tooltip> <md-icon>clear</md-icon> </md-button> </span> <span style="display:inline-block;position:relative;top:-2px"> <md-tooltip>{{ $root.p3xr.strings.intention.addKeyRoot }}</md-tooltip> <md-icon ng-click="$ctrl.p3xrMainRef.addKey({event: $event})" md-theme="{{ $root.p3xr.state.themeCommon }}" class="md-warn">add</md-icon> </span> </div> '},5484:e=>{e.exports='<treecontrol ng-if="$root.keysTree.length > 0" class="{{ $ctrl.getTreeTheme() }} p3xr-main-tree" tree-model="$root.keysTree" options="$ctrl.keysTreeOptions" expanded-nodes="$root.expandedNodes" on-selection="$ctrl.selectTreeNode(node, selected, $parentNode, $index, $first, $middle, $last, $odd, $even, $path)" on-node-toggle="$ctrl.showToggle(node, expanded, $parentNode, $index, $first, $middle, $last, $odd, $even, $path)"> <span in-view="$ctrl.displayNode(node, $inview)" ng-if="!node.$inview"> <span style="display:inline-block;width:90%;margin-left:4px;background-color:rgba(128,128,128,.5);height:2px;margin-bottom:10px;margin-top:10px"></span> </span> <span ng-if="node.$inview"> <md-tooltip md-direction="top">{{ $ctrl.extractNodeTooltip(node) }}</md-tooltip> <label class="p3xr-main-tree-node" ng-mouseover="node.show = true" ng-mouseleave="node.show = false"> <span ng-switch="node.keysInfo.type"> <i ng-switch-when="hash" class="p3xr-main-treecontrol-node-icon fas fa-hashtag" aria-hidden="true"></i> <i ng-switch-when="list" class="p3xr-main-treecontrol-node-icon fas fa-list-ol" aria-hidden="true"></i> <i ng-switch-when="set" class="p3xr-main-treecontrol-node-icon fas fa-list" aria-hidden="true"></i> <i ng-switch-when="string" class="p3xr-main-treecontrol-node-icon fas fa-ellipsis-h" aria-hidden="true"></i> <i ng-switch-when="zset" class="p3xr-main-treecontrol-node-icon fas fa-chart-line" aria-hidden="true"></i> </span> {{node.label}} <span class="p3xr-main-tree-node-count" ng-if="node.type === \'folder\'">{{$root.p3xr.settings.redisTreeDivider}}* ({{node.childCount}})</span> <span class="p3xr-main-tree-node-count" ng-if="node.type !== \'folder\' && node.keysInfo.type !== \'string\' && node.keysInfo !== undefined">({{node.keysInfo.length}})</span> <span ng-if="node.type === \'folder\'" ng-show="node.show" style="position:relative;top:-1px"> <span> <md-tooltip md-direction="right">{{ $root.p3xr.strings.confirm.deleteAllKeys({key: node.key}) }}</md-tooltip> <md-icon ng-click="$ctrl.deleteTree({event: $event, node: node})" class="md-warn p3xr-main-treecontrol-folder-icon">close</md-icon> </span> <span style="position:relative;top:-1px"> <md-tooltip md-direction="right">{{ $root.p3xr.strings.intention.addKey }}</md-tooltip> <md-icon ng-click="$ctrl.addKey({event: $event, node: node})" md-theme="{{ $root.p3xr.state.themeCommon }}" class="md-warn p3xr-main-treecontrol-folder-icon">add</md-icon> </span> </span> </label> </span> </treecontrol> '},8236:e=>{e.exports=' <div> <md-toolbar class="md-primary md-hue-1" md-theme="{{ $root.p3xr.state.themeLayout}}" id="p3xr-console-header"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.strings.label.console }}</h2> <span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.pubsubMonitor }}</md-tooltip> <md-checkbox ng-model="$root.p3xr.state.monitor" style="transform:scale(.75)"> <span hide-xs>{{ $root.p3xr.strings.intention.pubsubMonitor }}</span> </md-checkbox> </span> <p3xr-button p3xr-label="$root.p3xr.strings.intention.commands" p3xr-md-icon="menu" ng-click="$ctrl.commands()"></p3xr-button> <p3xr-button p3xr-label="$root.p3xr.strings.intention.clear" p3xr-md-icon="clear" ng-click="$ctrl.clearConsole()"></p3xr-button> </div> </md-toolbar> <md-content md-theme="{{ $root.p3xr.state.theme}}" layout-padding id="p3xr-console-content" md-whiteframe="1"> <div id="p3xr-console-content-output"> </div> <p3xr-input id="p3xr-console-input" ng-keydown="$ctrl.action($event)" ng-model="$ctrl.inputValue"></p3xr-input> </md-content> </div> '},4007:e=>{e.exports='<md-toolbar class="md-accent" md-theme="{{ $root.p3xr.state.themeLayout}}"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.strings.title.socketioConnectError }}</h2> </div> </md-toolbar> <md-content md-theme="{{ $root.p3xr.state.theme}}" layout-padding> <p3xr-button ng-click="$root.locationReload()" p3xr-label="$root.p3xr.strings.intention.reload" p3xr-fa-icon="fas fa-redo"></p3xr-button> <br/> <br/> {{ $ctrl.$stateParams.error.message }} </md-content> '},2315:e=>{e.exports='<md-toolbar class="md-primary md-hue-1" md-theme="{{ $root.p3xr.state.themeLayout}}" id="p3xr-main-header"> <div class="md-toolbar-tools"> <h2 flex md-truncate hide-xs> <a ui-sref="main.statistics"> {{ $root.p3xr.strings.intention.main }} </a> </h2> <span ng-if="$root.p3xr.state.connection !== undefined"> <button class="md-button" style="cursor:inherit!important;margin:0;padding:0" ng-if="$root.p3xr.state.connection.cluster !== true"> <span ng-if="!$root.$mdMedia(\'xs\')" style="position:relative;top:1px">{{ $root.p3xr.strings.form.main.label.database.toUpperCase() }}:</span> <md-input-container> <md-tooltip ng-if="$root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.form.main.label.database }}</md-tooltip> <md-select ng-model="$ctrl.currentDatabase" aria-label="{{ $root.p3xr.strings.form.main.label.database }}" class="md-accent p3xr-main-db-select"> <md-option ng-repeat="dbIndex in $root.p3xr.state.databaseIndexes" ng-value="dbIndex" ng-click="$ctrl.selectDatabase(dbIndex)"> <span ng-if="$root.p3xr.state.info.keyspaceDatabases[dbIndex]"> <md-icon>radio_button_checked</md-icon> </span> <span ng-if="!$root.p3xr.state.info.keyspaceDatabases[dbIndex]"> <md-icon>radio_button_unchecked</md-icon> </span> {{ dbIndex }} </md-option> </md-select> </md-input-container> </button> <p3xr-button class="p3xr-main-toolbar-button" ng-if="$root.p3xr.state.connection.awsElastiCache !== true" ng-click="$ctrl.save()" p3xr-label="$root.p3xr.strings.intention.save" p3xr-md-icon="save"></p3xr-button> <p3xr-button class="p3xr-main-toolbar-button" ng-click="$ctrl.statistics()" p3xr-label="$root.p3xr.strings.intention.statistics" p3xr-md-icon="show_chart"></p3xr-button> <p3xr-button class="p3xr-main-toolbar-button" ng-click="$ctrl.refresh()" p3xr-label="$root.p3xr.strings.intention.refresh" p3xr-md-icon="refresh"></p3xr-button> </span> </div> </md-toolbar> <md-content md-theme="{{ $root.p3xr.state.theme}}" id="p3xr-main-content" md-whiteframe="2"> <div class="md-title" layout-padding ng-if="$root.p3xr.state.connections.list.length > 0 && $root.p3xr.state.connection === undefined"> {{ $root.p3xr.strings.title.main }} </div> <div ng-if="$root.p3xr.state.connections.list.length === 0" layout-padding> <md-button ui-sref="settings" md-no-ink style="display:inline-block;word-wrap:break-word;white-space:normal"> {{ $root.p3xr.strings.intention.noConnections }} </md-button> </div> <div ng-if="$root.p3xr.state.connection !== undefined"> <p3xr-undefined hide-xs> <p3xr-main-treecontrol-controls id="p3xr-main-treecontrol-controls-container" p3xr-main-ref="$ctrl"></p3xr-main-treecontrol-controls> <p3xr-main-tree id="p3xr-main-treecontrol-container" p3xr-resize="$ctrl.resize()" p3xr-main-ref="$ctrl"></p3xr-main-tree> <div id="p3xr-main-content-sizer" md-colors="{ background: resizerColor }" md-theme="{{ $root.p3xr.state.themeLayout}}"> <md-tooltip md-direction="top">{{ $root.p3xr.strings.label.resizerInfo({ width: $root.p3xr.settings.resizeMinWidth}) }} </md-tooltip> </div> <div id="p3xr-main-content-container"> <ui-view> </ui-view> </div> </p3xr-undefined> <div layout="column" ng-if="$root.$mdMedia(\'xs\')"> <p3xr-main-treecontrol-controls p3xr-main-ref="$ctrl" flex></p3xr-main-treecontrol-controls> <p3xr-main-tree flex id="p3xr-main-treecontrol-container-directive-small" p3xr-resize="$ctrl.resize()" p3xr-main-ref="$ctrl"></p3xr-main-tree> <ui-view flex> </ui-view> </div> </div>  </md-content> '},1238:e=>{e.exports=' <p3xr-accordion p3xr-title="$root.p3xr.strings.intention.overview" p3xr-accordion-key="overview"> <p3xr-accordion-content> <md-list flex> <md-subheader class="md-no-sticky">{{ $root.p3xr.strings.page.overview.overviewClients }}</md-subheader> <md-list-item class="md-3-line" ng ng-repeat="(connectionKey, connectionValue) in $root.p3xr.state.redisConnections"> <div class="md-list-item-text" layout="column"> <h3>{{ connectionValue.connection.name }}</h3> <h4>{{ connectionValue.connection.host }}:{{ connectionValue.connection.port }}</h4> <p>{{ $root.p3xr.strings.page.overview.connectedCount({ length: connectionValue.clients.length }) }}</p> </div> <md-divider ng-if="!$last"></md-divider> </md-list-item> </md-list> </p3xr-accordion-content> </p3xr-accordion> '},2305:e=>{e.exports=' <p3xr-accordion p3xr-title="$root.p3xr.strings.label.connections" p3xr-accordion-key="settings"> <p3xr-accordion-actions ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <p3xr-button ng-click="$ctrl.connectionForm({ type: \'new\'})" p3xr-label="$root.p3xr.strings.intention.connectionAdd" p3xr-md-icon="add_box"></p3xr-button> </p3xr-accordion-actions> <p3xr-accordion-content> <div ng-if="$root.p3xr.state.connections.list.length == 0" layout-padding> {{ $root.p3xr.strings.intention.noConnectionsInSettings }} </div> <md-list ng-if="$root.p3xr.state.connections.list.length > 0"> <md-list-item class="md-2-line" ng-repeat="connection in $root.p3xr.state.connections.list"> <div class="md-list-item-text"> <h3>{{connection.name}}</h3> <p>{{connection.host}}:{{connection.port}}</p> </div> <md-button class="md-warn md-raised" ng-click="$ctrl.deleteConnection({ model: connection, ev: $event})" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-icon>delete_forever</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.delete }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')">{{ $root.p3xr.strings.intention.delete }}</md-tooltip> </md-button> <md-button class="md-primary md-raised" ng-click="$ctrl.connectionForm({ type: \'edit\', model: connection})" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-icon>edit</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.edit }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')">{{ $root.p3xr.strings.intention.edit }}</md-tooltip> </md-button> <md-button class="md-primary md-raised" ng-click="$ctrl.connectionForm({ type: \'edit\', model: connection})" ng-if="$root.p3xr.state.cfg.readonlyConnections"> <md-icon>mode_comment</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.view }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')">{{ $root.p3xr.strings.intention.view }}</md-tooltip> </md-button> <md-divider ng-if="!$last"></md-divider> </md-list-item> </md-list> </p3xr-accordion-content> </p3xr-accordion> <br/> <p3xr-accordion p3xr-title="$root.p3xr.strings.form.treeSettings.label.formName" p3xr-accordion-key="tree-settings"> <p3xr-accordion-actions> <p3xr-button ng-click="$ctrl.openTreeSettingDialog({ $event: $event})" p3xr-label="$root.p3xr.strings.intention.edit" p3xr-md-icon="edit"></p3xr-button> </p3xr-accordion-actions> <p3xr-accordion-content> <md-list> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.treeSeparator}} </div> <div> <span ng-if="$root.p3xr.settings.redisTreeDivider.length > 0"> {{ $root.p3xr.settings.redisTreeDivider}} </span> <span ng-if="$root.p3xr.settings.redisTreeDivider.length < 1 || $root.p3xr.settings.redisTreeDivider === undefined || $root.p3xr.settings.redisTreeDivider === \'\'"> {{ $root.p3xr.strings.label.treeSeparatorEmptyNote}} </span> </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.page}} </div> <div> {{ $root.p3xr.settings.pageCount}} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item class="md-2-line" ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div class="md-list-item-text"> <h3> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.maxValueDisplay}} </div> <div> {{ $root.p3xr.settings.maxValueDisplay}} </div> </div> </h3> <p> {{ $root.p3xr.strings.form.treeSettings.maxValueDisplayInfo }} </p> </div> </md-list-item> <md-divider></md-divider> <md-list-item class="md-2-line" ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div class="md-list-item-text"> <h3> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.maxKeys}} </div> <div> {{ $root.p3xr.settings.maxKeys}} </div> </div> </h3> <p> {{ $root.p3xr.strings.form.treeSettings.maxKeysInfo }} </p> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.keysSort}} </div> <div> {{ $root.p3xr.settings.keysSort ? $root.p3xr.strings.label.keysSort.on : $root.p3xr.strings.label.keysSort.off }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.searchMode}} </div> <div> {{ $root.p3xr.settings.searchClientSide ? $root.p3xr.strings.form.treeSettings.label.searchModeClient : $root.p3xr.strings.form.treeSettings.label.searchModeServer }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.searchModeStartsWith}} </div> <div> {{ $root.p3xr.settings.searchStartsWith ? $root.p3xr.strings.form.treeSettings.label.searchModeStartsWith : $root.p3xr.strings.form.treeSettings.label.searchModeIncludes }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.settings.jsonFormat == 2 ? $root.p3xr.strings.form.treeSettings.label.jsonFormatTwoSpace : $root.p3xr.strings.form.treeSettings.label.jsonFormatFourSpace }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.settings.animation ? $root.p3xr.strings.form.treeSettings.label.animation : $root.p3xr.strings.form.treeSettings.label.noAnimation }} </div> </div> </md-list-item> </md-list> </p3xr-accordion-content> </p3xr-accordion> '},2862:e=>{e.exports=' <div> <md-toolbar class="md-primary md-hue-1" md-theme="{{ $root.p3xr.state.themeLayout}}" md-whiteframe="{{ $ctrl.extended ? -1 : 1 }}"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $ctrl.p3xrTitle }}</h2> <span ng-if="$ctrl.transcludePresent(\'actions\')" ng-transclude="actions"></span> <md-button class="md-icon-button" ng-click="$ctrl.extended = !$ctrl.extended"> <md-icon>{{ !$ctrl.extended ? \'keyboard_arrow_down\' : \'keyboard_arrow_up\' }}</md-icon> <md-tooltip>{{ !$ctrl.extended ? $root.p3xr.strings.intention.extend : $root.p3xr.strings.intention.collapse}} </md-tooltip> </md-button> </div> </md-toolbar> <md-content ng-if="$ctrl.extended" md-theme="{{ $root.p3xr.state.theme}}" ng-transclude="content" md-whiteframe="2"> </md-content> </div> '},9670:e=>{e.exports='<md-button class="{{ $ctrl.p3xrClasses }}"> <md-icon ng-if="$ctrl.p3xrMdIcon !== undefined">{{ $ctrl.p3xrMdIcon }}</md-icon> <i ng-if="$ctrl.p3xrFaIcon !== undefined" class="{{ $ctrl.p3xrFaIcon }}"></i> <span ng-if="$root.$mdMedia(\'(min-width: 699px)\')">{{ $ctrl.p3xrLabel }}</span> <md-tooltip ng-if="$root.$mdMedia(\'(max-width: 699px)\')" md-direction="{{ $ctrl.p3xrTooltipDirection || \'bottom\' }}">{{ $ctrl.p3xrLabel }} </md-tooltip> </md-button> '},8565:(e,t,n)=>{"use strict";n.r(t)},2014:(e,t,n)=>{var o;!function(){var r={y:function(e){return 1===e?"χρόνος":"χρόνια"},mo:function(e){return 1===e?"μήνας":"μήνες"},w:function(e){return 1===e?"εβδομάδα":"εβδομάδες"},d:function(e){return 1===e?"μέρα":"μέρες"},h:function(e){return 1===e?"ώρα":"ώρες"},m:function(e){return 1===e?"λεπτό":"λεπτά"},s:function(e){return 1===e?"δευτερόλεπτο":"δευτερόλεπτα"},ms:function(e){return 1===e?"χιλιοστό του δευτερολέπτου":"χιλιοστά του δευτερολέπτου"},decimal:","},i={ar:{y:function(e){return 1===e?"سنة":"سنوات"},mo:function(e){return 1===e?"شهر":"أشهر"},w:function(e){return 1===e?"أسبوع":"أسابيع"},d:function(e){return 1===e?"يوم":"أيام"},h:function(e){return 1===e?"ساعة":"ساعات"},m:function(e){return e>2&&e<11?"دقائق":"دقيقة"},s:function(e){return 1===e?"ثانية":"ثواني"},ms:function(e){return 1===e?"جزء من الثانية":"أجزاء من الثانية"},decimal:","},bg:{y:function(e){return["години","година","години"][m(e)]},mo:function(e){return["месеца","месец","месеца"][m(e)]},w:function(e){return["седмици","седмица","седмици"][m(e)]},d:function(e){return["дни","ден","дни"][m(e)]},h:function(e){return["часа","час","часа"][m(e)]},m:function(e){return["минути","минута","минути"][m(e)]},s:function(e){return["секунди","секунда","секунди"][m(e)]},ms:function(e){return["милисекунди","милисекунда","милисекунди"][m(e)]},decimal:","},ca:{y:function(e){return"any"+(1===e?"":"s")},mo:function(e){return"mes"+(1===e?"":"os")},w:function(e){return"setman"+(1===e?"a":"es")},d:function(e){return"di"+(1===e?"a":"es")},h:function(e){return"hor"+(1===e?"a":"es")},m:function(e){return"minut"+(1===e?"":"s")},s:function(e){return"segon"+(1===e?"":"s")},ms:function(e){return"milisegon"+(1===e?"":"s")},decimal:","},cs:{y:function(e){return["rok","roku","roky","let"][p(e)]},mo:function(e){return["měsíc","měsíce","měsíce","měsíců"][p(e)]},w:function(e){return["týden","týdne","týdny","týdnů"][p(e)]},d:function(e){return["den","dne","dny","dní"][p(e)]},h:function(e){return["hodina","hodiny","hodiny","hodin"][p(e)]},m:function(e){return["minuta","minuty","minuty","minut"][p(e)]},s:function(e){return["sekunda","sekundy","sekundy","sekund"][p(e)]},ms:function(e){return["milisekunda","milisekundy","milisekundy","milisekund"][p(e)]},decimal:","},da:{y:"år",mo:function(e){return"måned"+(1===e?"":"er")},w:function(e){return"uge"+(1===e?"":"r")},d:function(e){return"dag"+(1===e?"":"e")},h:function(e){return"time"+(1===e?"":"r")},m:function(e){return"minut"+(1===e?"":"ter")},s:function(e){return"sekund"+(1===e?"":"er")},ms:function(e){return"millisekund"+(1===e?"":"er")},decimal:","},de:{y:function(e){return"Jahr"+(1===e?"":"e")},mo:function(e){return"Monat"+(1===e?"":"e")},w:function(e){return"Woche"+(1===e?"":"n")},d:function(e){return"Tag"+(1===e?"":"e")},h:function(e){return"Stunde"+(1===e?"":"n")},m:function(e){return"Minute"+(1===e?"":"n")},s:function(e){return"Sekunde"+(1===e?"":"n")},ms:function(e){return"Millisekunde"+(1===e?"":"n")},decimal:","},el:r,en:{y:function(e){return"year"+(1===e?"":"s")},mo:function(e){return"month"+(1===e?"":"s")},w:function(e){return"week"+(1===e?"":"s")},d:function(e){return"day"+(1===e?"":"s")},h:function(e){return"hour"+(1===e?"":"s")},m:function(e){return"minute"+(1===e?"":"s")},s:function(e){return"second"+(1===e?"":"s")},ms:function(e){return"millisecond"+(1===e?"":"s")},decimal:"."},es:{y:function(e){return"año"+(1===e?"":"s")},mo:function(e){return"mes"+(1===e?"":"es")},w:function(e){return"semana"+(1===e?"":"s")},d:function(e){return"día"+(1===e?"":"s")},h:function(e){return"hora"+(1===e?"":"s")},m:function(e){return"minuto"+(1===e?"":"s")},s:function(e){return"segundo"+(1===e?"":"s")},ms:function(e){return"milisegundo"+(1===e?"":"s")},decimal:","},et:{y:function(e){return"aasta"+(1===e?"":"t")},mo:function(e){return"kuu"+(1===e?"":"d")},w:function(e){return"nädal"+(1===e?"":"at")},d:function(e){return"päev"+(1===e?"":"a")},h:function(e){return"tund"+(1===e?"":"i")},m:function(e){return"minut"+(1===e?"":"it")},s:function(e){return"sekund"+(1===e?"":"it")},ms:function(e){return"millisekund"+(1===e?"":"it")},decimal:","},fa:{y:"سال",mo:"ماه",w:"هفته",d:"روز",h:"ساعت",m:"دقیقه",s:"ثانیه",ms:"میلی ثانیه",decimal:"."},fi:{y:function(e){return 1===e?"vuosi":"vuotta"},mo:function(e){return 1===e?"kuukausi":"kuukautta"},w:function(e){return"viikko"+(1===e?"":"a")},d:function(e){return"päivä"+(1===e?"":"ä")},h:function(e){return"tunti"+(1===e?"":"a")},m:function(e){return"minuutti"+(1===e?"":"a")},s:function(e){return"sekunti"+(1===e?"":"a")},ms:function(e){return"millisekunti"+(1===e?"":"a")},decimal:","},fo:{y:"ár",mo:function(e){return 1===e?"mánaður":"mánaðir"},w:function(e){return 1===e?"vika":"vikur"},d:function(e){return 1===e?"dagur":"dagar"},h:function(e){return 1===e?"tími":"tímar"},m:function(e){return 1===e?"minuttur":"minuttir"},s:"sekund",ms:"millisekund",decimal:","},fr:{y:function(e){return"an"+(e>=2?"s":"")},mo:"mois",w:function(e){return"semaine"+(e>=2?"s":"")},d:function(e){return"jour"+(e>=2?"s":"")},h:function(e){return"heure"+(e>=2?"s":"")},m:function(e){return"minute"+(e>=2?"s":"")},s:function(e){return"seconde"+(e>=2?"s":"")},ms:function(e){return"milliseconde"+(e>=2?"s":"")},decimal:","},gr:r,he:{y:function(e){return 1===e?"שנה":"שנים"},mo:function(e){return 1===e?"חודש":"חודשים"},w:function(e){return 1===e?"שבוע":"שבועות"},d:function(e){return 1===e?"יום":"ימים"},h:function(e){return 1===e?"שעה":"שעות"},m:function(e){return 1===e?"דקה":"דקות"},s:function(e){return 1===e?"שניה":"שניות"},ms:function(e){return 1===e?"מילישנייה":"מילישניות"},decimal:"."},hr:{y:function(e){return e%10==2||e%10==3||e%10==4?"godine":"godina"},mo:function(e){return 1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci"},w:function(e){return e%10==1&&11!==e?"tjedan":"tjedna"},d:function(e){return 1===e?"dan":"dana"},h:function(e){return 1===e?"sat":2===e||3===e||4===e?"sata":"sati"},m:function(e){var t=e%10;return 2!==t&&3!==t&&4!==t||!(e<10||e>14)?"minuta":"minute"},s:function(e){return 10===e||11===e||12===e||13===e||14===e||16===e||17===e||18===e||19===e||e%10==5?"sekundi":e%10==1?"sekunda":e%10==2||e%10==3||e%10==4?"sekunde":"sekundi"},ms:function(e){return 1===e?"milisekunda":e%10==2||e%10==3||e%10==4?"milisekunde":"milisekundi"},decimal:","},hi:{y:"साल",mo:function(e){return 1===e?"महीना":"महीने"},w:function(e){return 1===e?"हफ़्ता":"हफ्ते"},d:"दिन",h:function(e){return 1===e?"घंटा":"घंटे"},m:"मिनट",s:"सेकंड",ms:"मिलीसेकंड",decimal:"."},hu:{y:"év",mo:"hónap",w:"hét",d:"nap",h:"óra",m:"perc",s:"másodperc",ms:"ezredmásodperc",decimal:","},id:{y:"tahun",mo:"bulan",w:"minggu",d:"hari",h:"jam",m:"menit",s:"detik",ms:"milidetik",decimal:"."},is:{y:"ár",mo:function(e){return"mánuð"+(1===e?"ur":"ir")},w:function(e){return"vik"+(1===e?"a":"ur")},d:function(e){return"dag"+(1===e?"ur":"ar")},h:function(e){return"klukkutím"+(1===e?"i":"ar")},m:function(e){return"mínút"+(1===e?"a":"ur")},s:function(e){return"sekúnd"+(1===e?"a":"ur")},ms:function(e){return"millisekúnd"+(1===e?"a":"ur")},decimal:"."},it:{y:function(e){return"ann"+(1===e?"o":"i")},mo:function(e){return"mes"+(1===e?"e":"i")},w:function(e){return"settiman"+(1===e?"a":"e")},d:function(e){return"giorn"+(1===e?"o":"i")},h:function(e){return"or"+(1===e?"a":"e")},m:function(e){return"minut"+(1===e?"o":"i")},s:function(e){return"second"+(1===e?"o":"i")},ms:function(e){return"millisecond"+(1===e?"o":"i")},decimal:","},ja:{y:"年",mo:"月",w:"週",d:"日",h:"時間",m:"分",s:"秒",ms:"ミリ秒",decimal:"."},ko:{y:"년",mo:"개월",w:"주일",d:"일",h:"시간",m:"분",s:"초",ms:"밀리 초",decimal:"."},lo:{y:"ປີ",mo:"ເດືອນ",w:"ອາທິດ",d:"ມື້",h:"ຊົ່ວໂມງ",m:"ນາທີ",s:"ວິນາທີ",ms:"ມິນລິວິນາທີ",decimal:","},lt:{y:function(e){return e%10==0||e%100>=10&&e%100<=20?"metų":"metai"},mo:function(e){return["mėnuo","mėnesiai","mėnesių"][u(e)]},w:function(e){return["savaitė","savaitės","savaičių"][u(e)]},d:function(e){return["diena","dienos","dienų"][u(e)]},h:function(e){return["valanda","valandos","valandų"][u(e)]},m:function(e){return["minutė","minutės","minučių"][u(e)]},s:function(e){return["sekundė","sekundės","sekundžių"][u(e)]},ms:function(e){return["milisekundė","milisekundės","milisekundžių"][u(e)]},decimal:","},lv:{y:function(e){return g(e)?"gads":"gadi"},mo:function(e){return g(e)?"mēnesis":"mēneši"},w:function(e){return g(e)?"nedēļa":"nedēļas"},d:function(e){return g(e)?"diena":"dienas"},h:function(e){return g(e)?"stunda":"stundas"},m:function(e){return g(e)?"minūte":"minūtes"},s:function(e){return g(e)?"sekunde":"sekundes"},ms:function(e){return g(e)?"milisekunde":"milisekundes"},decimal:","},ms:{y:"tahun",mo:"bulan",w:"minggu",d:"hari",h:"jam",m:"minit",s:"saat",ms:"milisaat",decimal:"."},nl:{y:"jaar",mo:function(e){return 1===e?"maand":"maanden"},w:function(e){return 1===e?"week":"weken"},d:function(e){return 1===e?"dag":"dagen"},h:"uur",m:function(e){return 1===e?"minuut":"minuten"},s:function(e){return 1===e?"seconde":"seconden"},ms:function(e){return 1===e?"milliseconde":"milliseconden"},decimal:","},no:{y:"år",mo:function(e){return"måned"+(1===e?"":"er")},w:function(e){return"uke"+(1===e?"":"r")},d:function(e){return"dag"+(1===e?"":"er")},h:function(e){return"time"+(1===e?"":"r")},m:function(e){return"minutt"+(1===e?"":"er")},s:function(e){return"sekund"+(1===e?"":"er")},ms:function(e){return"millisekund"+(1===e?"":"er")},decimal:","},pl:{y:function(e){return["rok","roku","lata","lat"][c(e)]},mo:function(e){return["miesiąc","miesiąca","miesiące","miesięcy"][c(e)]},w:function(e){return["tydzień","tygodnia","tygodnie","tygodni"][c(e)]},d:function(e){return["dzień","dnia","dni","dni"][c(e)]},h:function(e){return["godzina","godziny","godziny","godzin"][c(e)]},m:function(e){return["minuta","minuty","minuty","minut"][c(e)]},s:function(e){return["sekunda","sekundy","sekundy","sekund"][c(e)]},ms:function(e){return["milisekunda","milisekundy","milisekundy","milisekund"][c(e)]},decimal:","},pt:{y:function(e){return"ano"+(1===e?"":"s")},mo:function(e){return 1===e?"mês":"meses"},w:function(e){return"semana"+(1===e?"":"s")},d:function(e){return"dia"+(1===e?"":"s")},h:function(e){return"hora"+(1===e?"":"s")},m:function(e){return"minuto"+(1===e?"":"s")},s:function(e){return"segundo"+(1===e?"":"s")},ms:function(e){return"milissegundo"+(1===e?"":"s")},decimal:","},ro:{y:function(e){return 1===e?"an":"ani"},mo:function(e){return 1===e?"lună":"luni"},w:function(e){return 1===e?"săptămână":"săptămâni"},d:function(e){return 1===e?"zi":"zile"},h:function(e){return 1===e?"oră":"ore"},m:function(e){return 1===e?"minut":"minute"},s:function(e){return 1===e?"secundă":"secunde"},ms:function(e){return 1===e?"milisecundă":"milisecunde"},decimal:","},ru:{y:function(e){return["лет","год","года"][m(e)]},mo:function(e){return["месяцев","месяц","месяца"][m(e)]},w:function(e){return["недель","неделя","недели"][m(e)]},d:function(e){return["дней","день","дня"][m(e)]},h:function(e){return["часов","час","часа"][m(e)]},m:function(e){return["минут","минута","минуты"][m(e)]},s:function(e){return["секунд","секунда","секунды"][m(e)]},ms:function(e){return["миллисекунд","миллисекунда","миллисекунды"][m(e)]},decimal:","},uk:{y:function(e){return["років","рік","роки"][m(e)]},mo:function(e){return["місяців","місяць","місяці"][m(e)]},w:function(e){return["тижнів","тиждень","тижні"][m(e)]},d:function(e){return["днів","день","дні"][m(e)]},h:function(e){return["годин","година","години"][m(e)]},m:function(e){return["хвилин","хвилина","хвилини"][m(e)]},s:function(e){return["секунд","секунда","секунди"][m(e)]},ms:function(e){return["мілісекунд","мілісекунда","мілісекунди"][m(e)]},decimal:","},ur:{y:"سال",mo:function(e){return 1===e?"مہینہ":"مہینے"},w:function(e){return 1===e?"ہفتہ":"ہفتے"},d:"دن",h:function(e){return 1===e?"گھنٹہ":"گھنٹے"},m:"منٹ",s:"سیکنڈ",ms:"ملی سیکنڈ",decimal:"."},sk:{y:function(e){return["rok","roky","roky","rokov"][p(e)]},mo:function(e){return["mesiac","mesiace","mesiace","mesiacov"][p(e)]},w:function(e){return["týždeň","týždne","týždne","týždňov"][p(e)]},d:function(e){return["deň","dni","dni","dní"][p(e)]},h:function(e){return["hodina","hodiny","hodiny","hodín"][p(e)]},m:function(e){return["minúta","minúty","minúty","minút"][p(e)]},s:function(e){return["sekunda","sekundy","sekundy","sekúnd"][p(e)]},ms:function(e){return["milisekunda","milisekundy","milisekundy","milisekúnd"][p(e)]},decimal:","},sv:{y:"år",mo:function(e){return"månad"+(1===e?"":"er")},w:function(e){return"veck"+(1===e?"a":"or")},d:function(e){return"dag"+(1===e?"":"ar")},h:function(e){return"timm"+(1===e?"e":"ar")},m:function(e){return"minut"+(1===e?"":"er")},s:function(e){return"sekund"+(1===e?"":"er")},ms:function(e){return"millisekund"+(1===e?"":"er")},decimal:","},sw:{y:function(e){return 1===e?"mwaka":"miaka"},mo:function(e){return 1===e?"mwezi":"miezi"},w:"wiki",d:function(e){return 1===e?"siku":"masiku"},h:function(e){return 1===e?"saa":"masaa"},m:"dakika",s:"sekunde",ms:"milisekunde",decimal:"."},tr:{y:"yıl",mo:"ay",w:"hafta",d:"gün",h:"saat",m:"dakika",s:"saniye",ms:"milisaniye",decimal:","},th:{y:"ปี",mo:"เดือน",w:"อาทิตย์",d:"วัน",h:"ชั่วโมง",m:"นาที",s:"วินาที",ms:"มิลลิวินาที",decimal:"."},vi:{y:"năm",mo:"tháng",w:"tuần",d:"ngày",h:"giờ",m:"phút",s:"giây",ms:"mili giây",decimal:","},zh_CN:{y:"年",mo:"个月",w:"周",d:"天",h:"小时",m:"分钟",s:"秒",ms:"毫秒",decimal:"."},zh_TW:{y:"年",mo:"個月",w:"周",d:"天",h:"小時",m:"分鐘",s:"秒",ms:"毫秒",decimal:"."}};function s(e){var t=function(e,n){return function(e,t){var n,o,r;e=Math.abs(e);var s,a,l,c=function(e){var t=[e.language];if(h(e,"fallbacks")){if(!x(e.fallbacks)||!e.fallbacks.length)throw new Error("fallbacks must be an array with at least one element");t=t.concat(e.fallbacks)}for(var n=0;n<t.length;n++){var o=t[n];if(h(e.languages,o))return e.languages[o];if(h(i,o))return i[o]}throw new Error("No language found.")}(t),m=[];for(n=0,o=t.units.length;n<o;n++){if(s=t.units[n],a=t.unitMeasures[s],n+1===o)if(h(t,"maxDecimalPoints")){var p=Math.pow(10,t.maxDecimalPoints),u=e/a;l=parseFloat((Math.floor(p*u)/p).toFixed(t.maxDecimalPoints))}else l=e/a;else l=Math.floor(e/a);m.push({unitCount:l,unitName:s}),e-=l*a}var g,f,y=0;for(n=0;n<m.length;n++)if(m[n].unitCount){y=n;break}if(t.round)for(n=m.length-1;n>=0&&((r=m[n]).unitCount=Math.round(r.unitCount),0!==n);n--)f=m[n-1],g=t.unitMeasures[f.unitName]/t.unitMeasures[r.unitName],(r.unitCount%g==0||t.largest&&t.largest-1<n-y)&&(f.unitCount+=r.unitCount/g,r.unitCount=0);var b=[];for(n=0,m.length;n<o&&((r=m[n]).unitCount&&b.push(d(r.unitCount,r.unitName,c,t)),b.length!==t.largest);n++);if(!b.length)return d(0,t.units[t.units.length-1],c,t);if(!t.conjunction||1===b.length)return b.join(t.delimiter);if(2===b.length)return b.join(t.conjunction);if(b.length>2)return b.slice(0,-1).join(t.delimiter)+(t.serialComma?",":"")+t.conjunction+b.slice(-1)}(e,l({},t,n||{}))};return l(t,{language:"en",delimiter:", ",spacer:" ",conjunction:"",serialComma:!0,units:["y","mo","w","d","h","m","s"],languages:{},round:!1,unitMeasures:{y:315576e5,mo:26298e5,w:6048e5,d:864e5,h:36e5,m:6e4,s:1e3,ms:1}},e)}var a=s({});function d(e,t,n,o){var r;r=h(o,"decimal")?o.decimal:h(n,"decimal")?n.decimal:".";var i,s=e.toString().replace(".",r),a=n[t];return i="function"==typeof a?a(e):a,s+o.spacer+i}function l(e){for(var t,n=1;n<arguments.length;n++)for(var o in t=arguments[n])h(t,o)&&(e[o]=t[o]);return e}function c(e){return 1===e?0:Math.floor(e)!==e?1:e%10>=2&&e%10<=4&&!(e%100>10&&e%100<20)?2:3}function m(e){return Math.floor(e)!==e?2:e%100>=5&&e%100<=20||e%10>=5&&e%10<=9||e%10==0?0:e%10==1?1:e>1?2:0}function p(e){return 1===e?0:Math.floor(e)!==e?1:e%10>=2&&e%10<=4&&e%100<10?2:3}function u(e){return 1===e||e%10==1&&e%100>20?0:Math.floor(e)!==e||e%10>=2&&e%100>20||e%10>=2&&e%100<10?1:2}function g(e){return e%10==1&&e%100!=11}var x=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function h(e,t){return Object.prototype.hasOwnProperty.call(e,t)}a.getSupportedLanguages=function(){var e=[];for(var t in i)h(i,t)&&"gr"!==t&&e.push(t);return e},a.humanizer=s,void 0===(o=function(){return a}.call(t,n,t,e))||(e.exports=o)}()},230:(e,t,n)=>{var o;!function(){"use strict";var t="object"==typeof window?window:{};!t.JS_HTMLENCODE_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node&&(t=n.g);var r=!t.JS_HTMLENCODE_NO_COMMON_JS&&e.exports,i=n.amdO,s={"&nbsp;":" ","&iexcl;":"¡","&cent;":"¢","&pound;":"£","&curren;":"¤","&yen;":"¥","&brvbar;":"¦","&sect;":"§","&uml;":"¨","&copy;":"©","&ordf;":"ª","&laquo;":"«","&not;":"¬","&shy;":"­","&reg;":"®","&macr;":"¯","&deg;":"°","&plusmn;":"±","&sup2;":"²","&sup3;":"³","&acute;":"´","&micro;":"µ","&para;":"¶","&middot;":"·","&cedil;":"¸","&sup1;":"¹","&ordm;":"º","&raquo;":"»","&frac14;":"¼","&frac12;":"½","&frac34;":"¾","&iquest;":"¿","&Agrave;":"À","&Aacute;":"Á","&Acirc;":"Â","&Atilde;":"Ã","&Auml;":"Ä","&Aring;":"Å","&AElig;":"Æ","&Ccedil;":"Ç","&Egrave;":"È","&Eacute;":"É","&Ecirc;":"Ê","&Euml;":"Ë","&Igrave;":"Ì","&Iacute;":"Í","&Icirc;":"Î","&Iuml;":"Ï","&ETH;":"Ð","&Ntilde;":"Ñ","&Ograve;":"Ò","&Oacute;":"Ó","&Ocirc;":"Ô","&Otilde;":"Õ","&Ouml;":"Ö","&times;":"×","&Oslash;":"Ø","&Ugrave;":"Ù","&Uacute;":"Ú","&Ucirc;":"Û","&Uuml;":"Ü","&Yacute;":"Ý","&THORN;":"Þ","&szlig;":"ß","&agrave;":"à","&aacute;":"á","&acirc;":"â","&atilde;":"ã","&auml;":"ä","&aring;":"å","&aelig;":"æ","&ccedil;":"ç","&egrave;":"è","&eacute;":"é","&ecirc;":"ê","&euml;":"ë","&igrave;":"ì","&iacute;":"í","&icirc;":"î","&iuml;":"ï","&eth;":"ð","&ntilde;":"ñ","&ograve;":"ò","&oacute;":"ó","&ocirc;":"ô","&otilde;":"õ","&ouml;":"ö","&divide;":"÷","&oslash;":"ø","&ugrave;":"ù","&uacute;":"ú","&ucirc;":"û","&uuml;":"ü","&yacute;":"ý","&thorn;":"þ","&yuml;":"ÿ","&quot;":'"',"&amp;":"&","&lt;":"<","&gt;":">","&apos;":"'","&OElig;":"Œ","&oelig;":"œ","&Scaron;":"Š","&scaron;":"š","&Yuml;":"Ÿ","&circ;":"ˆ","&tilde;":"˜","&ensp;":" ","&emsp;":" ","&thinsp;":" ","&zwnj;":"‌","&zwj;":"‍","&lrm;":"‎","&rlm;":"‏","&ndash;":"–","&mdash;":"—","&lsquo;":"‘","&rsquo;":"’","&sbquo;":"‚","&ldquo;":"“","&rdquo;":"”","&bdquo;":"„","&dagger;":"†","&Dagger;":"‡","&permil;":"‰","&lsaquo;":"‹","&rsaquo;":"›","&euro;":"€","&fnof;":"ƒ","&Alpha;":"Α","&Beta;":"Β","&Gamma;":"Γ","&Delta;":"Δ","&Epsilon;":"Ε","&Zeta;":"Ζ","&Eta;":"Η","&Theta;":"Θ","&Iota;":"Ι","&Kappa;":"Κ","&Lambda;":"Λ","&Mu;":"Μ","&Nu;":"Ν","&Xi;":"Ξ","&Omicron;":"Ο","&Pi;":"Π","&Rho;":"Ρ","&Sigma;":"Σ","&Tau;":"Τ","&Upsilon;":"Υ","&Phi;":"Φ","&Chi;":"Χ","&Psi;":"Ψ","&Omega;":"Ω","&alpha;":"α","&beta;":"β","&gamma;":"γ","&delta;":"δ","&epsilon;":"ε","&zeta;":"ζ","&eta;":"η","&theta;":"θ","&iota;":"ι","&kappa;":"κ","&lambda;":"λ","&mu;":"μ","&nu;":"ν","&xi;":"ξ","&omicron;":"ο","&pi;":"π","&rho;":"ρ","&sigmaf;":"ς","&sigma;":"σ","&tau;":"τ","&upsilon;":"υ","&phi;":"φ","&chi;":"χ","&psi;":"ψ","&omega;":"ω","&thetasym;":"ϑ","&upsih;":"ϒ","&piv;":"ϖ","&bull;":"•","&hellip;":"…","&prime;":"′","&Prime;":"″","&oline;":"‾","&frasl;":"⁄","&weierp;":"℘","&image;":"ℑ","&real;":"ℜ","&trade;":"™","&alefsym;":"ℵ","&larr;":"←","&uarr;":"↑","&rarr;":"→","&darr;":"↓","&harr;":"↔","&crarr;":"↵","&lArr;":"⇐","&uArr;":"⇑","&rArr;":"⇒","&dArr;":"⇓","&hArr;":"⇔","&forall;":"∀","&part;":"∂","&exist;":"∃","&empty;":"∅","&nabla;":"∇","&isin;":"∈","&notin;":"∉","&ni;":"∋","&prod;":"∏","&sum;":"∑","&minus;":"−","&lowast;":"∗","&radic;":"√","&prop;":"∝","&infin;":"∞","&ang;":"∠","&and;":"∧","&or;":"∨","&cap;":"∩","&cup;":"∪","&int;":"∫","&there4;":"∴","&sim;":"∼","&cong;":"≅","&asymp;":"≈","&ne;":"≠","&equiv;":"≡","&le;":"≤","&ge;":"≥","&sub;":"⊂","&sup;":"⊃","&nsub;":"⊄","&sube;":"⊆","&supe;":"⊇","&oplus;":"⊕","&otimes;":"⊗","&perp;":"⊥","&sdot;":"⋅","&lceil;":"⌈","&rceil;":"⌉","&lfloor;":"⌊","&rfloor;":"⌋","&lang;":"〈","&rang;":"〉","&loz;":"◊","&spades;":"♠","&clubs;":"♣","&hearts;":"♥","&diams;":"♦"},a=function(e){if("#"!==e.charAt(1))return s[e]||e;var t,n=e.charAt(2);return"x"===n||"X"===n?(n=e.substring(3,e.length-1),t=parseInt(n,16)):(n=e.substring(2,e.length-1),t=parseInt(n)),isNaN(t)?e:String.fromCharCode(t)},d=function(e){return e.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},l=function(e){return e.replace(/&#?\w+;/g,a)},c=d;d.htmlEncode=d,d.htmlDecode=l,r?e.exports=c:(t.htmlEncode=d,t.htmlDecode=l,i&&(void 0===(o=function(){return c}.call(c,n,c,e))||(e.exports=o)))}()},4937:(e,t,n)=>{var o=n(158).Symbol;e.exports=o},7041:e=>{e.exports=function(e,t){for(var n=-1,o=null==e?0:e.length,r=Array(o);++n<o;)r[n]=t(e[n],n,e);return r}},5276:e=>{e.exports=function(e,t,n,o){var r=-1,i=null==e?0:e.length;for(o&&i&&(n=e[++r]);++r<i;)n=t(n,e[r],r,e);return n}},9333:e=>{e.exports=function(e){return e.split("")}},1982:e=>{var t=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;e.exports=function(e){return e.match(t)||[]}},194:(e,t,n)=>{var o=n(4937),r=n(5401),i=n(2445),s=o?o.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":s&&s in Object(e)?r(e):i(e)}},5653:e=>{e.exports=function(e){return function(t){return null==e?void 0:e[t]}}},8163:e=>{e.exports=function(e,t,n){var o=-1,r=e.length;t<0&&(t=-t>r?0:r+t),(n=n>r?r:n)<0&&(n+=r),r=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(r);++o<r;)i[o]=e[o+t];return i}},430:(e,t,n)=>{var o=n(4937),r=n(7041),i=n(3706),s=n(1878),a=o?o.prototype:void 0,d=a?a.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(i(t))return r(t,e)+"";if(s(t))return d?d.call(t):"";var n=t+"";return"0"==n&&1/t==-Infinity?"-0":n}},6253:(e,t,n)=>{var o=n(8163);e.exports=function(e,t,n){var r=e.length;return n=void 0===n?r:n,!t&&n>=r?e:o(e,t,n)}},847:(e,t,n)=>{var o=n(6253),r=n(4481),i=n(8042),s=n(3270);e.exports=function(e){return function(t){t=s(t);var n=r(t)?i(t):void 0,a=n?n[0]:t.charAt(0),d=n?o(n,1).join(""):t.slice(1);return a[e]()+d}}},8292:(e,t,n)=>{var o=n(5276),r=n(7567),i=n(4973),s=RegExp("['’]","g");e.exports=function(e){return function(t){return o(i(r(t).replace(s,"")),e,"")}}},8064:(e,t,n)=>{var o=n(5653)({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"});e.exports=o},4528:(e,t,n)=>{var o="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=o},5401:(e,t,n)=>{var o=n(4937),r=Object.prototype,i=r.hasOwnProperty,s=r.toString,a=o?o.toStringTag:void 0;e.exports=function(e){var t=i.call(e,a),n=e[a];try{e[a]=void 0;var o=!0}catch(e){}var r=s.call(e);return o&&(t?e[a]=n:delete e[a]),r}},4481:e=>{var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return t.test(e)}},405:e=>{var t=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;e.exports=function(e){return t.test(e)}},2445:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},158:(e,t,n)=>{var o=n(4528),r="object"==typeof self&&self&&self.Object===Object&&self,i=o||r||Function("return this")();e.exports=i},8042:(e,t,n)=>{var o=n(9333),r=n(4481),i=n(5642);e.exports=function(e){return r(e)?i(e):o(e)}},5642:e=>{var t="[\\ud800-\\udfff]",n="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",r="[^\\ud800-\\udfff]",i="(?:\\ud83c[\\udde6-\\uddff]){2}",s="[\\ud800-\\udbff][\\udc00-\\udfff]",a="(?:"+n+"|"+o+")"+"?",d="[\\ufe0e\\ufe0f]?",l=d+a+("(?:\\u200d(?:"+[r,i,s].join("|")+")"+d+a+")*"),c="(?:"+[r+n+"?",n,i,s,t].join("|")+")",m=RegExp(o+"(?="+o+")|"+c+l,"g");e.exports=function(e){return e.match(m)||[]}},8667:e=>{var t="\\u2700-\\u27bf",n="a-z\\xdf-\\xf6\\xf8-\\xff",o="A-Z\\xc0-\\xd6\\xd8-\\xde",r="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",i="["+r+"]",s="\\d+",a="[\\u2700-\\u27bf]",d="["+n+"]",l="[^\\ud800-\\udfff"+r+s+t+n+o+"]",c="(?:\\ud83c[\\udde6-\\uddff]){2}",m="[\\ud800-\\udbff][\\udc00-\\udfff]",p="["+o+"]",u="(?:"+d+"|"+l+")",g="(?:"+p+"|"+l+")",x="(?:['’](?:d|ll|m|re|s|t|ve))?",h="(?:['’](?:D|LL|M|RE|S|T|VE))?",f="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",y="[\\ufe0e\\ufe0f]?",b=y+f+("(?:\\u200d(?:"+["[^\\ud800-\\udfff]",c,m].join("|")+")"+y+f+")*"),v="(?:"+[a,c,m].join("|")+")"+b,$=RegExp([p+"?"+d+"+"+x+"(?="+[i,p,"$"].join("|")+")",g+"+"+h+"(?="+[i,p+u,"$"].join("|")+")",p+"?"+u+"+"+x,p+"+"+h,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",s,v].join("|"),"g");e.exports=function(e){return e.match($)||[]}},7310:(e,t,n)=>{var o=n(9923),r=n(8292)((function(e,t,n){return t=t.toLowerCase(),e+(n?o(t):t)}));e.exports=r},9923:(e,t,n)=>{var o=n(3270),r=n(3483);e.exports=function(e){return r(o(e).toLowerCase())}},6897:(e,t,n)=>{var o=n(3619),r=n(8253),i=n(5053),s=Math.max,a=Math.min;e.exports=function(e,t,n){var d,l,c,m,p,u,g=0,x=!1,h=!1,f=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function y(t){var n=d,o=l;return d=l=void 0,g=t,m=e.apply(o,n)}function b(e){return g=e,p=setTimeout($,t),x?y(e):m}function v(e){var n=e-u;return void 0===u||n>=t||n<0||h&&e-g>=c}function $(){var e=r();if(v(e))return k(e);p=setTimeout($,function(e){var n=t-(e-u);return h?a(n,c-(e-g)):n}(e))}function k(e){return p=void 0,f&&d?y(e):(d=l=void 0,m)}function w(){var e=r(),n=v(e);if(d=arguments,l=this,u=e,n){if(void 0===p)return b(u);if(h)return clearTimeout(p),p=setTimeout($,t),y(u)}return void 0===p&&(p=setTimeout($,t)),m}return t=i(t)||0,o(n)&&(x=!!n.leading,c=(h="maxWait"in n)?s(i(n.maxWait)||0,t):c,f="trailing"in n?!!n.trailing:f),w.cancel=function(){void 0!==p&&clearTimeout(p),g=0,d=u=l=p=void 0},w.flush=function(){return void 0===p?m:k(r())},w}},7567:(e,t,n)=>{var o=n(8064),r=n(3270),i=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,s=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");e.exports=function(e){return(e=r(e))&&e.replace(i,o).replace(s,"")}},3706:e=>{var t=Array.isArray;e.exports=t},3619:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},1653:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},1878:(e,t,n)=>{var o=n(194),r=n(1653);e.exports=function(e){return"symbol"==typeof e||r(e)&&"[object Symbol]"==o(e)}},8253:(e,t,n)=>{var o=n(158);e.exports=function(){return o.Date.now()}},5053:(e,t,n)=>{var o=n(3619),r=n(1878),i=/^\s+|\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,d=/^0o[0-7]+$/i,l=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(r(e))return NaN;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(i,"");var n=a.test(e);return n||d.test(e)?l(e.slice(2),n?2:8):s.test(e)?NaN:+e}},3270:(e,t,n)=>{var o=n(430);e.exports=function(e){return null==e?"":o(e)}},3483:(e,t,n)=>{var o=n(847)("toUpperCase");e.exports=o},4973:(e,t,n)=>{var o=n(1982),r=n(405),i=n(3270),s=n(8667);e.exports=function(e,t,n){return e=i(e),void 0===(t=n?void 0:t)?r(e)?s(e):o(e):e.match(t)||[]}},7036:e=>{"use strict";const t=["B","kB","MB","GB","TB","PB","EB","ZB","YB"],n=["B","kiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],o=["b","kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],r=["b","kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],i=(e,t)=>{let n=e;return"string"==typeof t?n=e.toLocaleString(t):!0===t&&(n=e.toLocaleString()),n};e.exports=(e,s)=>{if(!Number.isFinite(e))throw new TypeError(`Expected a finite number, got ${typeof e}: ${e}`);const a=(s=Object.assign({bits:!1,binary:!1},s)).bits?s.binary?r:o:s.binary?n:t;if(s.signed&&0===e)return" 0 "+a[0];const d=e<0,l=d?"-":s.signed?"+":"";if(d&&(e=-e),e<1){return l+i(e,s.locale)+" "+a[0]}const c=Math.min(Math.floor(s.binary?Math.log(e)/Math.log(1024):Math.log10(e)/3),a.length-1);e=Number((e/Math.pow(s.binary?1024:1e3,c)).toPrecision(3));return l+i(e,s.locale)+" "+a[c]}},9567:e=>{e.exports=function(e,n,r){r=Object.assign({},t,r||{});let i=0,s=function(e){let t={ms:.001,s:1,m:60,h:3600};return t.d=e.hoursPerDay*t.h,t.w=e.daysPerWeek*t.d,t.mth=e.daysPerYear/e.monthsPerYear*t.d,t.y=e.daysPerYear*t.d,t}(r),a=e.toLowerCase().replace(/[^.\w+-]+/g,"").match(/[-+]?[0-9.]+[a-z]+/g);if(null===a)throw new Error(`The string [${e}] could not be parsed by timestring`);if(a.forEach((e=>{let t=e.match(/[0-9.]+/g)[0],n=e.match(/[a-z]+/g)[0];i+=function(e,t,n){return e*n[o(t)]}(t,n,s)})),n)return function(e,t,n){return e/n[o(t)]}(i,n,s);return i};const t={hoursPerDay:24,daysPerWeek:7,weeksPerMonth:4,monthsPerYear:12,daysPerYear:365.25},n={ms:["ms","milli","millisecond","milliseconds"],s:["s","sec","secs","second","seconds"],m:["m","min","mins","minute","minutes"],h:["h","hr","hrs","hour","hours"],d:["d","day","days"],w:["w","week","weeks"],mth:["mon","mth","mths","month","months"],y:["y","yr","yrs","year","years"]};function o(e){for(let t of Object.keys(n))if(n[t].indexOf(e)>-1)return t;throw new Error(`The unit [${e}] is not supported by timestring`)}},306:e=>{"use strict";e.exports=JSON.parse('{"name":"p3x-redis-ui-material","version":"2020.10.453","description":"💿 The p3x-redis-ui-material web interface that connects to the p3x-redis-ui-server via http and socket.io","corifeus":{"icon":"fas fa-database","code":"Fireball","opencollective":false,"build":true,"nodejs":"v12.19.0","reponame":"redis-ui-material","publish":true,"prefix":"p3x-","type":"p3x"},"main":"src/index.js","scripts":{"test":"grunt","dev":"concurrently \\"grunt watch:js\\"  \\"grunt watch:sass\\" \\"webpack serve --hot --inline  --config ./src/builder/webpack.config.js\\"","dev-webpack":"webpack serve --hot --inline  --config ./src/builder/webpack.config.js","build":"grunt build && webpack --config ./src/builder/webpack.config.js --mode=production"},"repository":{"type":"git","url":"https://github.com/patrikx3/redis-ui-material.git"},"keywords":["redis","ui","gui","web","electron","desktop","server","angularjs","javascript","material","dark","light"],"author":"Patrik Laszlo <alabard@gmail.com>","license":"MIT","devDependencies":{"@babel/core":"^7.12.3","@babel/preset-env":"^7.12.1","@fortawesome/fontawesome-free":"^5.15.1","@uirouter/angularjs":"^1.0.28","angular":"^1.8.1","angular-animate":"^1.8.1","angular-aria":"^1.8.1","angular-cookies":"^1.8.1","angular-json-tree":"^1.1.0","angular-material":"=1.2.1","angular-messages":"^1.8.1","angular-sanitize":"^1.8.1","angular-tree-control":"git+https://github.com/wix/angular-tree-control.git","babel-loader":"^8.1.0","babel-plugin-angularjs-annotate":"^0.10.0","clean-webpack-plugin":"^3.0.0","concurrently":"^5.3.0","copy-webpack-plugin":"^6.2.1","corifeus-builder":"^2020.10.129","css-loader":"^5.0.0","file-loader":"^6.1.1","grunt-injector":"^1.1.0","html-loader":"^1.3.2","html-webpack-plugin":"^4.5.0","jquery":"^3.5.1","js-htmlencode":"^0.3.0","lodash":"^4.17.20","material-design-icons-iconfont":"^6.1.0","mini-css-extract-plugin":"^1.0.0","node-sass":"^4.14.1","optimize-css-assets-webpack-plugin":"^5.0.4","pretty-bytes":"^5.4.1","raw-loader":"^4.0.2","sass-loader":"^10.0.3","socket.io-client":"^2.3.1","source-map-loader":"^1.1.1","style-loader":"^2.0.0","terser-webpack-plugin":"^5.0.0","fontsource-roboto":"^3.0.3","fontsource-roboto-mono":"^3.0.3","webpack":"^5.1.3","webpack-cli":"^4.0.0","webpack-dev-server":"^3.11.0","angular-inview":"^3.1.0","humanize-duration":"^3.24.0","jsoneditor":"^9.1.1","timestring":"^6.0.0"},"engines":{"node":">=12.13.0"},"homepage":"https://corifeus.com/redis-ui-material","dependencies":{}}')}},r={};function i(e){if(r[e])return r[e].exports;var t=r[e]={id:e,loaded:!1,exports:{}};return o[e](t,t.exports,i),t.loaded=!0,t.exports}i.m=o,i.x=()=>{i(3446)},i.amdD=function(){throw new Error("define cannot be used indirect")},i.amdO={},i.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);i.r(n);var o={};if(2&t&&"object"==typeof e&&e)for(const t in e)o[t]=()=>e[t];return o.default=()=>e,i.d(n,o),n},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,n)=>(i.f[n](e,t),t)),[])),i.u=e=>e+".chunk.js",i.miniCssF=e=>179===e?"main.undefined.css":e+"."+{362:"31d6cfe0d16ae931b73c",478:"31d6cfe0d16ae931b73c"}[e]+".css",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="p3x-redis-ui-material:",i.l=(n,o,r)=>{if(e[n])e[n].push(o);else{var s,a;if(void 0!==r)for(var d=document.getElementsByTagName("script"),l=0;l<d.length;l++){var c=d[l];if(c.getAttribute("src")==n||c.getAttribute("data-webpack")==t+r){s=c;break}}s||(a=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+r),s.src=n),e[n]=[o];var m=(t,o)=>{s.onerror=s.onload=null,clearTimeout(p);var r=e[n];if(delete e[n],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((e=>e(o))),t)return t(o)},p=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),a&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),i.F={},i.E=e=>{Object.keys(i.F).map((t=>{i.F[t](e)}))},i.p="",n=i.x,i.x=()=>{var e=n();return i.E(362),i.E(478),e},(()=>{var e={179:0};i.f.j=(t,n)=>{var o=i.o(e,t)?e[t]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise(((n,r)=>{o=e[t]=[n,r]}));n.push(o[2]=r);var s=i.p+i.u(t),a=new Error;i.l(s,(n=>{if(i.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),s=n&&n.target&&n.target.src;a.message="Loading chunk "+t+" failed.\n("+r+": "+s+")",a.name="ChunkLoadError",a.type=r,a.request=s,o[1](a)}}),"chunk-"+t)}},i.F.j=t=>{if(!i.o(e,t)||void 0===e[t]){e[t]=null;var n=document.createElement("link");i.nc&&n.setAttribute("nonce",i.nc),n.rel="prefetch",n.as="script",n.href=i.p+i.u(t),document.head.appendChild(n)}};var t=self.webpackChunkp3x_redis_ui_material=self.webpackChunkp3x_redis_ui_material||[],n=t.push.bind(t);t.push=t=>{for(var o,r,[s,a,d]=t,l=0,c=[];l<s.length;l++)r=s[l],i.o(e,r)&&e[r]&&c.push(e[r][0]),e[r]=0;for(o in a)i.o(a,o)&&(i.m[o]=a[o]);for(d&&d(i),n(t);c.length;)c.shift()()}})(),i.x()})();