newest version of timetracker
This commit is contained in:
55
.air.toml
Normal file
55
.air.toml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
#:schema https://json.schemastore.org/any.json
|
||||||
|
|
||||||
|
root = "."
|
||||||
|
testdata_dir = "testdata"
|
||||||
|
tmp_dir = "tmp"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
args_bin = []
|
||||||
|
bin = "./tmp/main"
|
||||||
|
cmd = "go build -o ./tmp/main app/cmd/main.go"
|
||||||
|
delay = 1000
|
||||||
|
entrypoint = ["./tmp/main"]
|
||||||
|
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
|
||||||
|
exclude_file = []
|
||||||
|
exclude_regex = ["_test.go"]
|
||||||
|
exclude_unchanged = false
|
||||||
|
follow_symlink = false
|
||||||
|
full_bin = ""
|
||||||
|
include_dir = []
|
||||||
|
include_ext = ["go", "tpl", "tmpl", "html"]
|
||||||
|
include_file = []
|
||||||
|
kill_delay = "0s"
|
||||||
|
log = "build-errors.log"
|
||||||
|
poll = false
|
||||||
|
poll_interval = 0
|
||||||
|
post_cmd = []
|
||||||
|
pre_cmd = []
|
||||||
|
rerun = false
|
||||||
|
rerun_delay = 500
|
||||||
|
send_interrupt = false
|
||||||
|
stop_on_error = false
|
||||||
|
|
||||||
|
[color]
|
||||||
|
app = ""
|
||||||
|
build = "yellow"
|
||||||
|
main = "magenta"
|
||||||
|
runner = "green"
|
||||||
|
watcher = "cyan"
|
||||||
|
|
||||||
|
[log]
|
||||||
|
main_only = false
|
||||||
|
silent = false
|
||||||
|
time = false
|
||||||
|
|
||||||
|
[misc]
|
||||||
|
clean_on_exit = false
|
||||||
|
|
||||||
|
[proxy]
|
||||||
|
app_port = 0
|
||||||
|
enabled = false
|
||||||
|
proxy_port = 0
|
||||||
|
|
||||||
|
[screen]
|
||||||
|
clear_on_rebuild = false
|
||||||
|
keep_scroll = true
|
||||||
46
.env
Normal file
46
.env
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# Server Configuration
|
||||||
|
SERVER_PORT=3000
|
||||||
|
SERVER_HOST=0.0.0.0
|
||||||
|
|
||||||
|
# Database Configuration
|
||||||
|
DB_HOST=localhost
|
||||||
|
DB_PORT=5432
|
||||||
|
DB_USER=gitea
|
||||||
|
DB_PASSWORD=gitea
|
||||||
|
DB_NAME=gitea
|
||||||
|
PROJECT_NAME=gitea-ext
|
||||||
|
DB_SERVICE_NAME=postgres
|
||||||
|
DB_SSLMODE=disable
|
||||||
|
|
||||||
|
# App COnfig
|
||||||
|
APP_NAME="User Management System"
|
||||||
|
APP_VERSION=2.1.0
|
||||||
|
APP_ENVIRONMENT=development
|
||||||
|
|
||||||
|
# JWT Configuration
|
||||||
|
AUTH_JWT_SECRET=511900e67f2db873e72b0b24e51352227b067fc03c5d7b3d321e3baba317c83a
|
||||||
|
AUTH_JWT_EXPIRATION=86400
|
||||||
|
AUTH_REFRESH_EXPIRATION=604800
|
||||||
|
|
||||||
|
# Google OAuth2
|
||||||
|
OAUTH_GOOGLE_CLIENT_ID=331979954218-9vrpe08oqhhcgj6bvu6d4lds0dt630m9.apps.googleusercontent.com
|
||||||
|
OAUTH_GOOGLE_CLIENT_SECRET=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
|
||||||
|
OAUTH_GOOGLE_REDIRECT_URL=http://localhost:3000/api/v1/public/auth/google/callback
|
||||||
|
# Email Configuration (SMTP)
|
||||||
|
# Set EMAIL_ENABLED=true to require email verification
|
||||||
|
EMAIL_ENABLED=true
|
||||||
|
EMAIL_SMTP_HOST=mail.ma-al.com
|
||||||
|
EMAIL_SMTP_PORT=587
|
||||||
|
EMAIL_SMTP_USER=test@ma-al.com
|
||||||
|
EMAIL_SMTP_PASSWORD=maal12345678
|
||||||
|
EMAIL_FROM=test@ma-al.com
|
||||||
|
EMAIL_FROM_NAME=Gitea Manager
|
||||||
|
EMAIL_ADMIN=goc_marek@ma-al.pl
|
||||||
|
|
||||||
|
I18N_LANGS=en,pl,cs
|
||||||
|
|
||||||
|
PDF_SERVER_URL=http://localhost:8000
|
||||||
|
|
||||||
|
|
||||||
|
FILE_MAAL_PL_USER=git_operator
|
||||||
|
FILE_MAAL_PL_PASSWORD=1FnwqcEgIUjQHjt1
|
||||||
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
***/node_modules/***
|
||||||
|
tmp
|
||||||
|
assets/public/dist
|
||||||
|
bin/
|
||||||
|
i18n/*.json
|
||||||
|
*_templ.go
|
||||||
1
assets/public/dist/assets/Alert-CvejfPQL.js
vendored
1
assets/public/dist/assets/Alert-CvejfPQL.js
vendored
File diff suppressed because one or more lines are too long
1
assets/public/dist/assets/Button-Dys5wjZc.js
vendored
1
assets/public/dist/assets/Button-Dys5wjZc.js
vendored
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
import{I as e,J as t,S as n,Y as r,_t as i,d as a,ot as o,ut as s,w as c,y as l}from"./vue.runtime.esm-bundler-BM5WPBHd.js";import{E as u,i as d}from"./tv-uB0-NqWK.js";import{f}from"./usePortal-BgeZHop8.js";function p(e){let t=f({dir:s(`ltr`)});return a(()=>e?.value||t.dir?.value||`ltr`)}function m(e){return a(()=>i(e)?!!u(e)?.closest(`form`):!0)}function h(){let e=s();return{primitiveElement:e,currentElement:a(()=>[`#text`,`#comment`].includes(e.value?.$el.nodeName)?e.value?.$el.nextElementSibling:u(e))}}var g=`data-reka-collection-item`;function _(i={}){let{key:u=``,isProvider:f=!1}=i,p=`${u}CollectionProvider`,m;if(f){let t=s(new Map);m={collectionRef:s(),itemMap:t},e(p,m)}else m=c(p);let _=(e=!1)=>{let t=m.collectionRef.value;if(!t)return[];let n=Array.from(t.querySelectorAll(`[${g}]`)),r=Array.from(m.itemMap.value.values()).sort((e,t)=>n.indexOf(e.ref)-n.indexOf(t.ref));return e?r:r.filter(e=>e.ref.dataset.disabled!==``)},v=l({name:`CollectionSlot`,inheritAttrs:!1,setup(e,{slots:r,attrs:i}){let{primitiveElement:a,currentElement:o}=h();return t(o,()=>{m.collectionRef.value=o.value}),()=>n(d,{ref:a,...i},r)}}),y=l({name:`CollectionItem`,inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(e,{slots:t,attrs:i}){let{primitiveElement:a,currentElement:s}=h();return r(t=>{if(s.value){let n=o(s.value);m.itemMap.value.set(n,{ref:s.value,value:e.value}),t(()=>m.itemMap.value.delete(n))}}),()=>n(d,{...i,[g]:``,ref:a},t)}});return{getItems:_,reactiveItems:a(()=>Array.from(m.itemMap.value.values())),itemMapSize:a(()=>m.itemMap.value.size),CollectionSlot:v,CollectionItem:y}}export{p as i,h as n,m as r,_ as t};
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
import{F as e,Q as t,_ as n,f as r,g as i,h as a,m as o,o as s,p as c,ut as l,wt as u,y as d,yt as f}from"./vue.runtime.esm-bundler-BM5WPBHd.js";import"./useFetchJson-BTB9doG4.js";import{g as p,t as m}from"./Button-Dys5wjZc.js";import{Z as h,s as g}from"./tv-uB0-NqWK.js";import{t as _}from"./auth-DHyg2egq.js";import{n as v,r as y,t as b}from"./useValidation-pSaoyCcB.js";import{n as x}from"./settings-84EZt-NQ.js";import{t as S}from"./Alert-CvejfPQL.js";var C={class:`h-[100vh] flex flex-col items-center justify-center px-4 sm:px-6 lg:px-8`},w={class:`text-center mb-15`},T={class:`inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-primary-500 text-white mb-4 shadow-lg shadow-primary-500/30`},E={class:`w-full max-w-md flex flex-col gap-4`},D={key:0,class:`text-center flex flex-col gap-4`},O={class:`text-xl font-semibold dark:text-white text-black`},k={class:`text-sm text-gray-600 dark:text-gray-400`},A={class:`text-center`},j={class:`text-sm text-gray-600 dark:text-gray-400`},M={class:`text-center flex flex-col gap-3 border-t dark:border-(--border-dark) border-(--border-light) pt-4`},N=[`loading`],P={class:`text-sm text-gray-600 dark:text-gray-400`},F=d({__name:`PasswordRecoveryView`,setup(d){let F=h(),I=_(),L=b(),R=l(``),z=l(!1);async function B(){await I.requestPasswordReset(R.value)&&(z.value=!0)}function V(){F.push({name:`login`})}function H(){F.push({name:`register`})}function U(){return L.reset(),L.validateEmail(R,`email`,p.t(`validate_error.email_required`)),L.errors}return(l,d)=>{let p=g,h=m,_=S,b=x,F=v,L=y;return e(),a(`div`,C,[r(`div`,w,[r(`div`,T,[n(p,{name:`i-heroicons-clock`,class:`w-8 h-8`})]),d[1]||=r(`h1`,{class:`text-3xl font-bold text-gray-900 dark:text-white`},`TimeTracker`,-1)]),r(`div`,E,[z.value?(e(),a(`div`,D,[n(p,{name:`i-heroicons-envelope`,class:`w-12 h-12 mx-auto text-primary-500`}),r(`h2`,O,u(l.$t(`general.check_your_email`)),1),r(`p`,k,u(l.$t(`general.password_reset_link_sent_notice`)),1),n(h,{color:`neutral`,variant:`outline`,block:``,onClick:V,class:`dark:text-white text-black cursor-pointer`},{default:t(()=>[i(u(l.$t(`general.back_to_sign_in`)),1)]),_:1})])):(e(),a(s,{key:1},[r(`div`,A,[r(`p`,j,u(l.$t(`general.enter_email_for_password_reset`)),1)]),n(L,{validate:U,onSubmit:B,class:`flex flex-col gap-3`},{default:t(()=>[f(I).error?(e(),c(_,{key:0,color:`error`,variant:`subtle`,icon:`i-heroicons-exclamation-triangle`,title:f(I).error,"close-button":{icon:`i-heroicons-x-mark-20-solid`,variant:`link`},onClose:f(I).clearError},null,8,[`title`,`onClose`])):o(``,!0),n(F,{label:l.$t(`general.email_address`),name:`email`,required:``,class:`w-full dark:text-white text-black`},{default:t(()=>[n(b,{modelValue:R.value,"onUpdate:modelValue":d[0]||=e=>R.value=e,placeholder:l.$t(`general.enter_your_email`),disabled:f(I).loading,class:`w-full dark:text-white text-black placeholder:text-(--placeholder)`},null,8,[`modelValue`,`placeholder`,`disabled`])]),_:1},8,[`label`]),n(h,{type:`submit`,block:``,loading:f(I).loading,class:`text-white bg-(--color-blue-600) dark:bg-(--color-blue-500) cursor-pointer`},{default:t(()=>[i(u(l.$t(`general.send_password_reset_link`)),1)]),_:1},8,[`loading`])]),_:1}),r(`div`,M,[r(`button`,{color:`neutral`,variant:`outline`,loading:f(I).loading,class:`w-full flex items-center gap-2 justify-center text-[15px] dark:text-white text-black cursor-pointer`,onClick:V},[n(p,{name:`mingcute:arrow-left-line`,class:`text-(--color-blue-600) dark:text-(--color-blue-500) text-[16px]`}),i(` `+u(l.$t(`general.back_to_sign_in`)),1)],8,N),r(`p`,P,[i(u(l.$t(`general.dont_have_an_account`))+` `,1),r(`button`,{variant:`link`,size:`sm`,onClick:H,class:`text-[15px] text-(--color-blue-600) dark:text-(--color-blue-500) cursor-pointer`},u(l.$t(`general.create_account_now`)),1)])])],64))])])}}});export{F as default};
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
|||||||
import{F as e,M as t,Q as n,_ as r,f as i,g as a,h as o,m as s,p as c,ut as l,wt as u,y as d,yt as f}from"./vue.runtime.esm-bundler-BM5WPBHd.js";import"./useFetchJson-BTB9doG4.js";import{g as p,t as m}from"./Button-Dys5wjZc.js";import{X as h,Z as g,s as _}from"./tv-uB0-NqWK.js";import{t as v}from"./auth-DHyg2egq.js";import{n as y,r as b,t as x}from"./useValidation-pSaoyCcB.js";import{n as S}from"./settings-84EZt-NQ.js";import{t as C}from"./Alert-CvejfPQL.js";var w={class:`h-[100vh] flex flex-col items-center justify-center px-4 sm:px-6 lg:px-8`},T={class:`text-center mb-15`},E={class:`inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-primary-500 text-white mb-4 shadow-lg shadow-primary-500/30`},D={class:`w-full max-w-md flex flex-col gap-4`},O={key:0,class:`text-center flex flex-col gap-4`},k={class:`text-xl font-semibold dark:text-white text-black`},A={class:`text-sm text-gray-600 dark:text-gray-400`},j={class:`text-center border-t dark:border-(--border-dark) border-(--border-light) pt-4`},M=d({__name:`ResetPasswordForm`,setup(d){let M=g(),N=h(),P=v(),F=x(),I=l(``),L=l(``),R=l(!1),z=l(!1),B=l(``),V=l(!1);t(()=>{B.value=N.query.token||``,B.value||M.push({name:`password-recovery`})});async function H(){await P.resetPassword(B.value,I.value)&&(V.value=!0)}function U(){M.push({name:`login`})}function W(){return F.reset(),F.validatePasswords(I,`new_password`,L,`confirm_new_password`,p.t(`validate_error.confirm_password_required`)),F.errors}return(t,l)=>{let d=_,p=m,h=C,g=S,v=y,x=b;return e(),o(`div`,w,[i(`div`,T,[i(`div`,E,[r(d,{name:`i-heroicons-clock`,class:`w-8 h-8`})]),l[4]||=i(`h1`,{class:`text-3xl font-bold text-gray-900 dark:text-white`},`TimeTracker`,-1)]),i(`div`,D,[V.value?(e(),o(`div`,O,[r(d,{name:`i-heroicons-check-circle`,class:`w-12 h-12 mx-auto text-green-800`}),i(`h2`,k,u(t.$t(`general.password_updated`)),1),i(`p`,A,u(t.$t(`general.password_updated_description`)),1),r(p,{block:``,onClick:U,class:`dark:text-white text-black`},{default:n(()=>[a(u(t.$t(`general.back_to_sign_in`)),1)]),_:1})])):(e(),c(x,{key:1,validate:W,onSubmit:H,class:`flex flex-col gap-3`},{default:n(()=>[f(P).error?(e(),c(h,{key:0,color:`error`,variant:`subtle`,icon:`i-heroicons-exclamation-triangle`,title:f(P).error,"close-button":{icon:`i-heroicons-x-mark-20-solid`,variant:`link`},onClose:f(P).clearError},null,8,[`title`,`onClose`])):s(``,!0),r(v,{label:t.$t(`general.new_password`),name:`new_password`,required:``,class:`w-full dark:text-white text-black`},{default:n(()=>[r(g,{modelValue:I.value,"onUpdate:modelValue":l[1]||=e=>I.value=e,type:R.value?`text`:`password`,placeholder:t.$t(`general.enter_your_new_password`),disabled:f(P).loading,class:`w-full dark:text-white text-black placeholder:text-(--placeholder)`,ui:{trailing:`pe-1`}},{trailing:n(()=>[r(d,{color:`neutral`,variant:`link`,size:`sm`,name:R.value?`i-lucide-eye-off`:`i-lucide-eye`,"aria-label":R.value?`Hide password`:`Show password`,"aria-pressed":R.value,"aria-controls":`new_password`,onClick:l[0]||=e=>R.value=!R.value,class:`mr-2`},null,8,[`name`,`aria-label`,`aria-pressed`])]),_:1},8,[`modelValue`,`type`,`placeholder`,`disabled`])]),_:1},8,[`label`]),r(v,{label:t.$t(`general.confirm_password`),name:`confirm_new_password`,required:``,class:`w-full dark:text-white text-black`},{default:n(()=>[r(g,{modelValue:L.value,"onUpdate:modelValue":l[3]||=e=>L.value=e,type:z.value?`text`:`password`,placeholder:t.$t(`general.confirm_your_new_password`),disabled:f(P).loading,class:`w-full dark:text-white text-black placeholder:text-(--placeholder)`,ui:{trailing:`pe-1`}},{trailing:n(()=>[r(d,{color:`neutral`,variant:`ghost`,size:`sm`,name:z.value?`i-lucide-eye-off`:`i-lucide-eye`,onClick:l[2]||=e=>z.value=!z.value,class:`mr-2`},null,8,[`name`])]),_:1},8,[`modelValue`,`type`,`placeholder`,`disabled`])]),_:1},8,[`label`]),r(p,{type:`submit`,block:``,loading:f(P).loading,class:`text-white! bg-(--color-blue-600) dark:bg-(--color-blue-500) cursor-pointer`},{default:n(()=>[a(u(t.$t(`general.reset_password`)),1)]),_:1},8,[`loading`]),i(`div`,j,[i(`button`,{color:`neutral`,variant:`ghost`,onClick:U,class:`text-[15px] flex items-center gap-2 text-(--color-blue-600) dark:text-(--color-blue-500) cursor-pointer`},[r(d,{name:`mingcute:arrow-left-line`}),a(` `+u(t.$t(`general.back_to_sign_in`)),1)])])]),_:1}))])])}}});export{M as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{F as e,M as t,Q as n,_ as r,f as i,g as a,h as o,m as s,ut as c,wt as l,y as u}from"./vue.runtime.esm-bundler-BM5WPBHd.js";import{t as d}from"./useFetchJson-BTB9doG4.js";import{g as f,t as p}from"./Button-Dys5wjZc.js";import{$ as m,X as h,Z as g,s as _}from"./tv-uB0-NqWK.js";import{t as v}from"./Card-DJGrWflS.js";import{t as y}from"./Alert-CvejfPQL.js";var b={class:`min-h-screen bg-gradient-to-br from-primary-50 via-white to-primary-100 dark:from-gray-900 dark:via-gray-800 dark:to-gray-900`},x={class:`pt-20 pb-8 flex items-center justify-center px-4 sm:px-6 lg:px-8`},S={class:`w-full max-w-md`},C={class:`text-center mb-8`},w={class:`inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-primary-500 text-white mb-4 shadow-lg shadow-primary-500/30`},T={class:`text-center`},E={key:0},D={class:`text-xl font-semibold text-gray-900 dark:text-white`},O={key:1},k={class:`inline-flex items-center justify-center w-12 h-12 rounded-full bg-green-100 text-green-600 mb-4`},A={class:`text-xl font-semibold text-gray-900 dark:text-white`},j={class:`mt-1 text-sm text-gray-500 dark:text-gray-400`},M={key:2},N={class:`inline-flex items-center justify-center w-12 h-12 rounded-full bg-red-100 text-red-600 mb-4`},P={class:`text-xl font-semibold text-gray-900 dark:text-white`},F={class:`mt-1 text-sm text-gray-500 dark:text-gray-400`},I={key:0,class:`text-center py-4`},L={class:`text-gray-600 dark:text-gray-400 mb-4`},R={key:1,class:`text-center py-4`},z={key:2,class:`text-center py-4`},B={class:`text-gray-500 dark:text-gray-400`},V={class:`text-center`},H={class:`text-sm text-gray-600 dark:text-gray-400`},U=u({__name:`VerifyEmailView`,setup(u){let{t:U,te:W}=m(),G=g(),K=h(),q=c(``),J=c(!1),Y=c(null),X=c(!1),Z=c(!0);t(()=>{if(q.value=K.query.token||``,!q.value){Y.value=f.t(`verify_email.invalid_token`),Z.value=!1;return}Q()});async function Q(){if(!q.value){Y.value=f.t(`verify_email.invalid_token`);return}J.value=!0,Y.value=null;try{await d(`/api/v1/public/auth/complete-registration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:q.value})}),X.value=!0,Z.value=!1,setTimeout(()=>{G.push({name:`login`})},3e3)}catch(e){Y.value=e?.message??f.t(`verify_email.verification_failed`),Z.value=!1}finally{J.value=!1}}function $(){G.push({name:`login`})}return(t,c)=>{let u=_,d=p,f=y,m=v;return e(),o(`div`,b,[i(`div`,x,[i(`div`,S,[i(`div`,C,[i(`div`,w,[r(u,{name:`i-heroicons-clock`,class:`w-8 h-8`})]),c[0]||=i(`h1`,{class:`text-3xl font-bold text-gray-900 dark:text-white`},`TimeTracker`,-1)]),r(m,{class:`shadow-xl shadow-gray-200/50 dark:shadow-gray-900/50`},{header:n(()=>[i(`div`,T,[Z.value&&J.value?(e(),o(`div`,E,[r(u,{name:`i-heroicons-arrow-path`,class:`w-8 h-8 animate-spin text-primary-500 mx-auto mb-4`}),i(`h2`,D,l(t.$t(`verify_email.verifying`)),1)])):X.value?(e(),o(`div`,O,[i(`div`,k,[r(u,{name:`i-heroicons-check-circle`,class:`w-6 h-6`})]),i(`h2`,A,l(t.$t(`verify_email.success_title`)),1),i(`p`,j,l(t.$t(`verify_email.success_message`)),1)])):Y.value?(e(),o(`div`,M,[i(`div`,N,[r(u,{name:`i-heroicons-exclamation-circle`,class:`w-6 h-6`})]),i(`h2`,P,l(t.$t(`verify_email.error_title`)),1),i(`p`,F,l(t.$t(`verify_email.error_message`)),1)])):s(``,!0)])]),footer:n(()=>[i(`div`,V,[i(`p`,H,[a(l(t.$t(`verify_email.already_registered`))+` `,1),i(`button`,{variant:`link`,size:`sm`,onClick:$,class:`cursor-pointer text-(--color-blue-600) dark:text-(--color-blue-500)`},l(t.$t(`general.sign_in`)),1)])])]),default:n(()=>[X.value?(e(),o(`div`,I,[i(`p`,L,l(t.$t(`verify_email.redirect_message`)),1),r(d,{color:`primary`,onClick:$},{default:n(()=>[a(l(t.$t(`verify_email.go_to_login`)),1)]),_:1})])):Y.value?(e(),o(`div`,R,[r(f,{color:`error`,variant:`subtle`,icon:`i-heroicons-exclamation-triangle`,title:Y.value,class:`mb-4`},null,8,[`title`]),r(d,{color:`primary`,onClick:$,class:`cursor-pointer`},{default:n(()=>[a(l(t.$t(`verify_email.go_to_login`)),1)]),_:1})])):Z.value&&J.value?(e(),o(`div`,z,[i(`p`,B,l(t.$t(`verify_email.please_wait`)),1)])):s(``,!0)]),_:1})])])])}}});export{U as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{D as e,F as t,J as n,L as r,d as i,h as a,m as o,o as s,p as c,y as l}from"./vue.runtime.esm-bundler-BM5WPBHd.js";import{h as u,n as d}from"./usePortal-BgeZHop8.js";import{n as f}from"./Collection-Dmox1UHc.js";var p={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function m(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function h(e,t,n){let r=m(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return p[r]}function g(e,t=!1){let n=u();for(let r of e)if(r===n||(r.focus({preventScroll:t}),u()!==n))return}function _(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var v=l({inheritAttrs:!1,__name:`VisuallyHiddenInputBubble`,props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:`fully-hidden`}},setup(r){let a=r,{primitiveElement:o,currentElement:s}=f();return n(i(()=>a.checked??a.value),(e,t)=>{if(!s.value)return;let n=s.value,r=window.HTMLInputElement.prototype,i=Object.getOwnPropertyDescriptor(r,`value`).set;if(i&&e!==t){let t=new Event(`input`,{bubbles:!0}),r=new Event(`change`,{bubbles:!0});i.call(n,e),n.dispatchEvent(t),n.dispatchEvent(r)}}),(n,r)=>(t(),c(d,e({ref_key:`primitiveElement`,ref:o},{...a,...n.$attrs},{as:`input`}),null,16))}}),y=l({inheritAttrs:!1,__name:`VisuallyHiddenInput`,props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:`fully-hidden`}},setup(n){let l=n,u=i(()=>typeof l.value==`object`&&Array.isArray(l.value)&&l.value.length===0&&l.required),d=i(()=>typeof l.value==`string`||typeof l.value==`number`||typeof l.value==`boolean`||l.value===null||l.value===void 0?[{name:l.name,value:l.value}]:typeof l.value==`object`&&Array.isArray(l.value)?l.value.flatMap((e,t)=>typeof e==`object`?Object.entries(e).map(([e,n])=>({name:`${l.name}[${t}][${e}]`,value:n})):{name:`${l.name}[${t}]`,value:e}):l.value!==null&&typeof l.value==`object`&&!Array.isArray(l.value)?Object.entries(l.value).map(([e,t])=>({name:`${l.name}[${e}]`,value:t})):[]);return(n,i)=>(t(),a(s,null,[o(` We render single input if it's required `),u.value?(t(),c(v,e({key:n.name},{...l,...n.$attrs},{name:n.name,value:n.value}),null,16,[`name`,`value`])):(t(!0),a(s,{key:1},r(d.value,r=>(t(),c(v,e({key:r.name},{ref_for:!0},{...l,...n.$attrs},{name:r.name,value:r.value}),null,16,[`name`,`value`]))),128))],2112))}});export{_ as a,h as i,p as n,g as r,y as t};
|
|
||||||
File diff suppressed because one or more lines are too long
2
assets/public/dist/assets/auth-DHyg2egq.js
vendored
2
assets/public/dist/assets/auth-DHyg2egq.js
vendored
File diff suppressed because one or more lines are too long
1
assets/public/dist/assets/auth-O--VICRG.js
vendored
1
assets/public/dist/assets/auth-O--VICRG.js
vendored
@@ -1 +0,0 @@
|
|||||||
import"./useFetchJson-BTB9doG4.js";import{t as e}from"./auth-DHyg2egq.js";export{e as useAuthStore};
|
|
||||||
4
assets/public/dist/assets/esm-BmwkJimY.js
vendored
4
assets/public/dist/assets/esm-BmwkJimY.js
vendored
File diff suppressed because one or more lines are too long
15
assets/public/dist/assets/index-DpkssS-Q.js
vendored
15
assets/public/dist/assets/index-DpkssS-Q.js
vendored
File diff suppressed because one or more lines are too long
2
assets/public/dist/assets/router-DDV1eCGp.js
vendored
2
assets/public/dist/assets/router-DDV1eCGp.js
vendored
File diff suppressed because one or more lines are too long
1
assets/public/dist/assets/router-gBqs4bkw.js
vendored
1
assets/public/dist/assets/router-gBqs4bkw.js
vendored
@@ -1 +0,0 @@
|
|||||||
import"./useFetchJson-BTB9doG4.js";import"./Button-Dys5wjZc.js";import"./tv-uB0-NqWK.js";import"./auth-DHyg2egq.js";import{t as e}from"./router-DDV1eCGp.js";import"./settings-84EZt-NQ.js";export{e as default};
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
|
|||||||
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/auth-O--VICRG.js","assets/auth-DHyg2egq.js","assets/vue.runtime.esm-bundler-BM5WPBHd.js"])))=>i.map(i=>d[i]);
|
|
||||||
var e=`modulepreload`,t=function(e){return`/`+e},n={};const r=function(r,i,a){let o=Promise.resolve();if(i&&i.length>0){let r=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}o=l(i.map(i=>{if(i=t(i,a),i in n)return;n[i]=!0;let o=i.endsWith(`.css`),s=o?`[rel="stylesheet"]`:``;if(a)for(let e=r.length-1;e>=0;e--){let t=r[e];if(t.href===i&&(!o||t.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${i}"]${s}`))return;let l=document.createElement(`link`);if(l.rel=o?`stylesheet`:e,o||(l.as=`script`),l.crossOrigin=``,l.href=i,c&&l.setAttribute(`nonce`,c),document.head.appendChild(l),o)return new Promise((e,t)=>{l.addEventListener(`load`,e),l.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${i}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(e=>{for(let t of e||[])t.status===`rejected`&&s(t.reason);return r().catch(s)})};async function i(e,t){let n=a(``,e),i=new Headers(t?.headers);i.has(`Content-Type`)||i.set(`Content-Type`,`application/json`);let o={...t,headers:i,credentials:`same-origin`};try{let e=await fetch(n,o);if(!(e.headers.get(`content-type`)??``).includes(`application/json`))throw{message:`this is not proper json format`};let t=await e.json();if(e.status===401){let{useAuthStore:e}=await r(async()=>{let{useAuthStore:e}=await import(`./auth-O--VICRG.js`);return{useAuthStore:e}},__vite__mapDeps([0,1,2])),i=e();if(await i.refreshAccessToken()){let e=await fetch(n,o);if(!(e.headers.get(`content-type`)??``).includes(`application/json`))throw{message:`this is not proper json format`};let t=await e.json();if(!e.ok)throw t;return t}throw i.logout(),t}if(!e.ok)throw t;return t}catch(e){throw e}}function a(...e){let t=e.filter(Boolean).join(`/`).replace(/\/{2,}/g,`/`);return t.startsWith(`/`)?t:`/${t}`}export{r as n,i as t};
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
assets/public/dist/assets/utils-B6UXHYph.js
vendored
1
assets/public/dist/assets/utils-B6UXHYph.js
vendored
@@ -1 +0,0 @@
|
|||||||
import{h as e}from"./usePortal-BgeZHop8.js";var t=[`Enter`,` `],n=[`ArrowDown`,`PageUp`,`Home`],r=[`ArrowUp`,`PageDown`,`End`];[...n,...r],[...t],[...t];function i(e){return e?`open`:`closed`}function a(t){let n=e();for(let r of t)if(r===n||(r.focus(),e()!==n))return}export{i as n,a as t};
|
|
||||||
20
assets/public/dist/index.html
vendored
20
assets/public/dist/index.html
vendored
@@ -16,19 +16,19 @@
|
|||||||
var pageName = "default";
|
var pageName = "default";
|
||||||
globalThis.appInit = [];
|
globalThis.appInit = [];
|
||||||
</script>
|
</script>
|
||||||
<script type="module" crossorigin src="/assets/index-DpkssS-Q.js"></script>
|
<script type="module" crossorigin src="/assets/index-DkQbBNTz.js"></script>
|
||||||
<link rel="modulepreload" crossorigin href="/assets/vue.runtime.esm-bundler-BM5WPBHd.js">
|
<link rel="modulepreload" crossorigin href="/assets/vue.runtime.esm-bundler-BM5WPBHd.js">
|
||||||
<link rel="modulepreload" crossorigin href="/assets/useFetchJson-BTB9doG4.js">
|
<link rel="modulepreload" crossorigin href="/assets/useFetchJson-jOnQsk3s.js">
|
||||||
<link rel="modulepreload" crossorigin href="/assets/tv-uB0-NqWK.js">
|
<link rel="modulepreload" crossorigin href="/assets/tv-uB0-NqWK.js">
|
||||||
<link rel="modulepreload" crossorigin href="/assets/Button-Dys5wjZc.js">
|
<link rel="modulepreload" crossorigin href="/assets/Button-BXAyuyRY.js">
|
||||||
<link rel="modulepreload" crossorigin href="/assets/useForwardExpose-CEpqU5vT.js">
|
<link rel="modulepreload" crossorigin href="/assets/useForwardExpose-CEpqU5vT.js">
|
||||||
<link rel="modulepreload" crossorigin href="/assets/usePortal-BgeZHop8.js">
|
<link rel="modulepreload" crossorigin href="/assets/usePortal-BN0HgbYf.js">
|
||||||
<link rel="modulepreload" crossorigin href="/assets/esm-BmwkJimY.js">
|
<link rel="modulepreload" crossorigin href="/assets/esm-BOSevWwL.js">
|
||||||
<link rel="modulepreload" crossorigin href="/assets/settings-84EZt-NQ.js">
|
<link rel="modulepreload" crossorigin href="/assets/settings-CuKZNbpU.js">
|
||||||
<link rel="modulepreload" crossorigin href="/assets/auth-DHyg2egq.js">
|
<link rel="modulepreload" crossorigin href="/assets/auth-nMJSXbCC.js">
|
||||||
<link rel="modulepreload" crossorigin href="/assets/Collection-Dmox1UHc.js">
|
<link rel="modulepreload" crossorigin href="/assets/Collection-Dntc3bmH.js">
|
||||||
<link rel="modulepreload" crossorigin href="/assets/VisuallyHiddenInput-DPrwdEvl.js">
|
<link rel="modulepreload" crossorigin href="/assets/VisuallyHiddenInput-B1GXqDS_.js">
|
||||||
<link rel="modulepreload" crossorigin href="/assets/router-DDV1eCGp.js">
|
<link rel="modulepreload" crossorigin href="/assets/router-BBH257zw.js">
|
||||||
<link rel="stylesheet" crossorigin href="/assets/index-DLyy94LM.css">
|
<link rel="stylesheet" crossorigin href="/assets/index-DLyy94LM.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
BIN
bin/timetracker
BIN
bin/timetracker
Binary file not shown.
@@ -27,7 +27,7 @@ const authStore = useAuthStore()
|
|||||||
<!-- Logout Button (only when authenticated) -->
|
<!-- Logout Button (only when authenticated) -->
|
||||||
<button v-if="authStore.isAuthenticated" @click="authStore.logout()"
|
<button v-if="authStore.isAuthenticated" @click="authStore.logout()"
|
||||||
class="px-3 py-1.5 text-sm font-medium text-black dark:text-white hover:text-black dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-600 rounded-lg transition-colors border border-(--border-light) dark:border-(--border-dark)">
|
class="px-3 py-1.5 text-sm font-medium text-black dark:text-white hover:text-black dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-600 rounded-lg transition-colors border border-(--border-light) dark:border-(--border-dark)">
|
||||||
Logout
|
{{ $t('general.logout') }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ const PrivacyComponent = computed(() =>
|
|||||||
<component :is="TermsComponent" />
|
<component :is="TermsComponent" />
|
||||||
</template>
|
</template>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<UButton @click="showTherms = false" class="mx-auto px-12">close</UButton>
|
<UButton @click="showTherms = false" class="mx-auto px-12">{{ $t('general.close') }}</UButton>
|
||||||
</template>
|
</template>
|
||||||
</UDrawer>
|
</UDrawer>
|
||||||
<!-- PrivacyPolicyView -->
|
<!-- PrivacyPolicyView -->
|
||||||
@@ -71,7 +71,7 @@ const PrivacyComponent = computed(() =>
|
|||||||
<component :is="PrivacyComponent" />
|
<component :is="PrivacyComponent" />
|
||||||
</template>
|
</template>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<UButton @click="showPrivacy = false" class="mx-auto px-12">close</UButton>
|
<UButton @click="showPrivacy = false" class="mx-auto px-12">{{ $t('general.close') }}</UButton>
|
||||||
</template>
|
</template>
|
||||||
</UDrawer>
|
</UDrawer>
|
||||||
<div class="h-[100vh] flex flex-col items-center justify-center px-4 sm:px-6 lg:px-8">
|
<div class="h-[100vh] flex flex-col items-center justify-center px-4 sm:px-6 lg:px-8">
|
||||||
@@ -120,7 +120,7 @@ const PrivacyComponent = computed(() =>
|
|||||||
<!-- Divider -->
|
<!-- Divider -->
|
||||||
<div class="flex items-center gap-3 my-1">
|
<div class="flex items-center gap-3 my-1">
|
||||||
<div class="flex-1 h-px bg-gray-200 dark:bg-gray-700" />
|
<div class="flex-1 h-px bg-gray-200 dark:bg-gray-700" />
|
||||||
<span class="text-xs text-gray-400 dark:text-gray-500">or</span>
|
<span class="text-xs text-gray-400 dark:text-gray-500">{{ $t('general.or') }}</span>
|
||||||
<div class="flex-1 h-px bg-gray-200 dark:bg-gray-700" />
|
<div class="flex-1 h-px bg-gray-200 dark:bg-gray-700" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -14,11 +14,13 @@ import { getRepos, getYears, getQuarters, getIssues, type QuarterData, type Issu
|
|||||||
import { useAuthStore } from '@/stores/auth'
|
import { useAuthStore } from '@/stores/auth'
|
||||||
import { i18n } from '@/plugins/02_i18n'
|
import { i18n } from '@/plugins/02_i18n'
|
||||||
import type { TableColumn } from '@nuxt/ui'
|
import type { TableColumn } from '@nuxt/ui'
|
||||||
|
import { useI18n } from 'vue-i18n'
|
||||||
|
|
||||||
ChartJS.register(Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale)
|
ChartJS.register(Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale)
|
||||||
|
|
||||||
const authStore = useAuthStore()
|
const authStore = useAuthStore()
|
||||||
|
|
||||||
|
const { t } = useI18n()
|
||||||
const repos = ref<number[]>([])
|
const repos = ref<number[]>([])
|
||||||
const years = ref<number[]>([])
|
const years = ref<number[]>([])
|
||||||
const quarters = ref<QuarterData[]>([])
|
const quarters = ref<QuarterData[]>([])
|
||||||
@@ -47,7 +49,7 @@ async function loadData<T>(fetchFn: () => Promise<any>, target: Ref<T[]>, errorM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => loadData(() => getRepos(), repos, i18n.t('repo_chart.failed_to_load_repositories')))
|
onMounted(() => loadData(() => getRepos(), repos, t('repo_chart.failed_to_load_repositories')))
|
||||||
|
|
||||||
watch(selectedRepo, async (newRepo) => {
|
watch(selectedRepo, async (newRepo) => {
|
||||||
selectedYear.value = null
|
selectedYear.value = null
|
||||||
@@ -55,7 +57,7 @@ watch(selectedRepo, async (newRepo) => {
|
|||||||
quarters.value = []
|
quarters.value = []
|
||||||
issues.value = []
|
issues.value = []
|
||||||
if (newRepo) {
|
if (newRepo) {
|
||||||
await loadData(() => getYears(newRepo), years, i18n.t('repo_chart.failed_to_load_years'))
|
await loadData(() => getYears(newRepo), years, t('repo_chart.failed_to_load_years'))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -63,7 +65,7 @@ watch(selectedYear, async (newYear) => {
|
|||||||
selectedQuarter.value = null
|
selectedQuarter.value = null
|
||||||
issues.value = []
|
issues.value = []
|
||||||
if (newYear && selectedRepo.value) {
|
if (newYear && selectedRepo.value) {
|
||||||
await loadData(() => getQuarters(selectedRepo.value!, newYear), quarters, i18n.t('repo_chart.failed_to_load_quarters'))
|
await loadData(() => getQuarters(selectedRepo.value!, newYear), quarters, t('repo_chart.failed_to_load_quarters'))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -91,7 +93,7 @@ async function loadIssues(repoID: number, year: number, quarterStr: string) {
|
|||||||
issues.value = response.items || []
|
issues.value = response.items || []
|
||||||
totalItems.value = response.items_count || 0
|
totalItems.value = response.items_count || 0
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
error.value = e?.message || i18n.t('repo_chart.failed_to_load_issues')
|
error.value = e?.message || t('repo_chart.failed_to_load_issues')
|
||||||
} finally {
|
} finally {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
@@ -101,24 +103,36 @@ const chartData = computed(() => ({
|
|||||||
labels: quarters.value.map((q) => q.quarter),
|
labels: quarters.value.map((q) => q.quarter),
|
||||||
datasets: [
|
datasets: [
|
||||||
{
|
{
|
||||||
label: i18n.t('repo_chart.hours_worked'),
|
label: t('repo_chart.hours_worked'),
|
||||||
backgroundColor: '#3b82f6',
|
backgroundColor: '#3b82f6',
|
||||||
data: quarters.value.map((q) => q.time),
|
data: quarters.value.map((q) => q.time),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}))
|
}))
|
||||||
|
|
||||||
const chartOptions = {
|
const chartOptions = computed(() => ({
|
||||||
responsive: true,
|
responsive: true,
|
||||||
maintainAspectRatio: false,
|
maintainAspectRatio: false,
|
||||||
|
onClick: (_event: any, elements: any[]) => {
|
||||||
|
if (elements.length > 0) {
|
||||||
|
const index = elements[0].index
|
||||||
|
const quarter = quarters.value[index]
|
||||||
|
if (quarter) {
|
||||||
|
selectedQuarter.value = quarter.quarter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
plugins: {
|
plugins: {
|
||||||
legend: { position: 'top' as const },
|
legend: { position: 'top' as const },
|
||||||
title: { display: true, text: i18n.t('repo_chart.work_by_quarter') },
|
title: { display: true, text: t('repo_chart.work_by_quarter') },
|
||||||
},
|
},
|
||||||
scales: {
|
scales: {
|
||||||
y: { beginAtZero: true, title: { display: true, text: i18n.t('repo_chart.hours') } },
|
y: {
|
||||||
|
beginAtZero: true,
|
||||||
|
title: { display: true, text: t('repo_chart.hours') },
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}))
|
||||||
|
|
||||||
const hasData = computed(() => quarters.value.length > 0)
|
const hasData = computed(() => quarters.value.length > 0)
|
||||||
const hasIssues = computed(() => issues.value.length > 0)
|
const hasIssues = computed(() => issues.value.length > 0)
|
||||||
@@ -126,31 +140,27 @@ const hasIssues = computed(() => issues.value.length > 0)
|
|||||||
const items = computed(() => repos.value.map(r => ({ value: r, label: `Repo ${r}` })))
|
const items = computed(() => repos.value.map(r => ({ value: r, label: `Repo ${r}` })))
|
||||||
|
|
||||||
const yearItems = computed(() => [
|
const yearItems = computed(() => [
|
||||||
{ value: null, label: i18n.t('repo_chart.select_a_year') },
|
{ value: null, label: t('repo_chart.select_a_year') },
|
||||||
...years.value.map(y => ({ value: y, label: String(y) }))
|
...years.value.map(y => ({ value: y, label: String(y) }))
|
||||||
])
|
])
|
||||||
|
|
||||||
const quarterItems = computed(() => [
|
const quarterItems = computed(() => [
|
||||||
{ value: null, label: i18n.t('repo_chart.all_quarters') },
|
{ value: null, label: t('repo_chart.all_quarters') },
|
||||||
...quarters.value.map(q => ({
|
...quarters.value.map(q => ({
|
||||||
value: q.quarter,
|
value: q.quarter,
|
||||||
label: `${q.quarter} (${q.time.toFixed(1)}h)`
|
label: `${q.quarter} (${q.time.toFixed(1)}h)`
|
||||||
}))
|
}))
|
||||||
])
|
])
|
||||||
|
|
||||||
const columns: TableColumn<IssueTimeSummary>[] = [
|
const columns = computed<TableColumn<IssueTimeSummary>[]>(() => [
|
||||||
{
|
{
|
||||||
accessorKey: 'IssueID',
|
accessorKey: 'IssueID',
|
||||||
header: 'ID',
|
header: 'ID'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: 'IssueName',
|
accessorKey: 'IssueName',
|
||||||
header: i18n.t('repo_chart.issue_name'),
|
header: i18n.t('repo_chart.issue_name'),
|
||||||
},
|
},
|
||||||
// {
|
|
||||||
// accessorKey: 'Initials',
|
|
||||||
// header: i18n.t('repo_chart.user_initials'),
|
|
||||||
// },
|
|
||||||
{
|
{
|
||||||
accessorKey: 'CreatedDate',
|
accessorKey: 'CreatedDate',
|
||||||
header: i18n.t('repo_chart.created_on'),
|
header: i18n.t('repo_chart.created_on'),
|
||||||
@@ -159,29 +169,15 @@ const columns: TableColumn<IssueTimeSummary>[] = [
|
|||||||
return date.toLocaleDateString(i18n.locale.value)
|
return date.toLocaleDateString(i18n.locale.value)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
accessorKey: 'CreatedDate',
|
|
||||||
header: i18n.t('repo_chart.created_on'),
|
|
||||||
cell: ({ row }) => {
|
|
||||||
const date = new Date(row.getValue('CreatedDate'))
|
|
||||||
return date.toLocaleTimeString(i18n.locale.value)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
accessorKey: 'TotalHoursSpent',
|
accessorKey: 'TotalHoursSpent',
|
||||||
header: i18n.t('repo_chart.hours_spent'),
|
header: i18n.t('repo_chart.hours_spent'),
|
||||||
meta: {
|
meta: {
|
||||||
class: {
|
class: { th: 'text-right', td: 'text-right font-medium' }
|
||||||
th: 'text-right',
|
|
||||||
td: 'text-right font-medium'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
cell: ({ row }) => {
|
cell: ({ row }) => `${row.getValue('TotalHoursSpent')}h`
|
||||||
const hours = row.getValue('TotalHoursSpent')
|
|
||||||
return `${hours}h`
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
]
|
])
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -211,14 +207,16 @@ const columns: TableColumn<IssueTimeSummary>[] = [
|
|||||||
}}</label>
|
}}</label>
|
||||||
<USelect v-model="selectedYear" :items="yearItems"
|
<USelect v-model="selectedYear" :items="yearItems"
|
||||||
:disabled="loading || !selectedRepo || years.length === 0"
|
:disabled="loading || !selectedRepo || years.length === 0"
|
||||||
:placeholder="$t('repo_chart.select_a_year')" class="dark:text-white text-black placeholder:text-(--placeholder)" />
|
:placeholder="$t('repo_chart.select_a_year')"
|
||||||
|
class="dark:text-white text-black placeholder:text-(--placeholder)" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col min-w-[192px]">
|
<div class="flex flex-col min-w-[192px]">
|
||||||
<label class="mb-1 text-sm font-medium text-black dark:text-white">{{ $t('repo_chart.quarter')
|
<label class="mb-1 text-sm font-medium text-black dark:text-white">{{ $t('repo_chart.quarter')
|
||||||
}}</label>
|
}}</label>
|
||||||
<USelect v-model="selectedQuarter" :items="quarterItems"
|
<USelect v-model="selectedQuarter" :items="quarterItems"
|
||||||
:disabled="loading || !selectedYear || quarters.length === 0"
|
:disabled="loading || !selectedYear || quarters.length === 0"
|
||||||
:placeholder="$t('repo_chart.all_quarters')" class="dark:text-white text-black placeholder:text-(--placeholder)" />
|
:placeholder="$t('repo_chart.all_quarters')"
|
||||||
|
class="dark:text-white text-black placeholder:text-(--placeholder)" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
|
|||||||
(1, 3, 300, 'back_to_sign_in', 'Powrót do logowania'),
|
(1, 3, 300, 'back_to_sign_in', 'Powrót do logowania'),
|
||||||
(1, 3, 300, 'by_signing_in_you_agree_to_our', 'Logując się, zgadzasz się z naszymi'),
|
(1, 3, 300, 'by_signing_in_you_agree_to_our', 'Logując się, zgadzasz się z naszymi'),
|
||||||
(1, 3, 300, 'check_your_email', 'Sprawdź swoją skrzynkę e-mail'),
|
(1, 3, 300, 'check_your_email', 'Sprawdź swoją skrzynkę e-mail'),
|
||||||
|
(1, 3, 300, 'close', 'zamknij'),
|
||||||
(1, 3, 300, 'confirm_password', 'Potwierdź hasło'),
|
(1, 3, 300, 'confirm_password', 'Potwierdź hasło'),
|
||||||
(1, 3, 300, 'confirm_your_new_password', 'Potwierdź swoje nowe hasło'),
|
(1, 3, 300, 'confirm_your_new_password', 'Potwierdź swoje nowe hasło'),
|
||||||
(1, 3, 300, 'confirm_your_password', 'Potwierdź swoje hasło'),
|
(1, 3, 300, 'confirm_your_password', 'Potwierdź swoje hasło'),
|
||||||
@@ -43,7 +44,9 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
|
|||||||
(1, 3, 300, 'forgot_password', 'Zapomniałeś hasła'),
|
(1, 3, 300, 'forgot_password', 'Zapomniałeś hasła'),
|
||||||
(1, 3, 300, 'i_agree_to_the', 'Zgadzam się z'),
|
(1, 3, 300, 'i_agree_to_the', 'Zgadzam się z'),
|
||||||
(1, 3, 300, 'last_name', 'Nazwisko'),
|
(1, 3, 300, 'last_name', 'Nazwisko'),
|
||||||
|
(1, 3, 300, 'logout', 'Wyloguj się'),
|
||||||
(1, 3, 300, 'new_password', 'Nowe hasło'),
|
(1, 3, 300, 'new_password', 'Nowe hasło'),
|
||||||
|
(1, 3, 300, 'or', 'albo'),
|
||||||
(1, 3, 300, 'password', 'Hasło'),
|
(1, 3, 300, 'password', 'Hasło'),
|
||||||
(1, 3, 300, 'password_reset_link_sent_notice', 'Jeśli konto z tym adresem e-mail istnieje, wysłaliśmy link do resetowania hasła. Sprawdź swoją skrzynkę odbiorczą'),
|
(1, 3, 300, 'password_reset_link_sent_notice', 'Jeśli konto z tym adresem e-mail istnieje, wysłaliśmy link do resetowania hasła. Sprawdź swoją skrzynkę odbiorczą'),
|
||||||
(1, 3, 300, 'password_updated', 'Hasło zaktualizowane'),
|
(1, 3, 300, 'password_updated', 'Hasło zaktualizowane'),
|
||||||
@@ -58,6 +61,7 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
|
|||||||
(2, 3, 300, 'back_to_sign_in', 'Back to Sign In'),
|
(2, 3, 300, 'back_to_sign_in', 'Back to Sign In'),
|
||||||
(2, 3, 300, 'by_signing_in_you_agree_to_our', 'By signing in, you agree to our terms'),
|
(2, 3, 300, 'by_signing_in_you_agree_to_our', 'By signing in, you agree to our terms'),
|
||||||
(2, 3, 300, 'check_your_email', 'Check your email'),
|
(2, 3, 300, 'check_your_email', 'Check your email'),
|
||||||
|
(2, 3, 300, 'close', 'close'),
|
||||||
(2, 3, 300, 'confirm_password', 'Confirm password'),
|
(2, 3, 300, 'confirm_password', 'Confirm password'),
|
||||||
(2, 3, 300, 'confirm_your_new_password', 'Confirm your new password'),
|
(2, 3, 300, 'confirm_your_new_password', 'Confirm your new password'),
|
||||||
(2, 3, 300, 'confirm_your_password', 'Confirm your password'),
|
(2, 3, 300, 'confirm_your_password', 'Confirm your password'),
|
||||||
@@ -74,7 +78,9 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
|
|||||||
(2, 3, 300, 'forgot_password', 'Forgot password'),
|
(2, 3, 300, 'forgot_password', 'Forgot password'),
|
||||||
(2, 3, 300, 'i_agree_to_the', 'I agree to the'),
|
(2, 3, 300, 'i_agree_to_the', 'I agree to the'),
|
||||||
(2, 3, 300, 'last_name', 'Last name'),
|
(2, 3, 300, 'last_name', 'Last name'),
|
||||||
|
(2, 3, 300, 'logout', 'Logout'),
|
||||||
(2, 3, 300, 'new_password', 'New password'),
|
(2, 3, 300, 'new_password', 'New password'),
|
||||||
|
(2, 3, 300, 'or', 'or'),
|
||||||
(2, 3, 300, 'password', 'Password'),
|
(2, 3, 300, 'password', 'Password'),
|
||||||
(2, 3, 300, 'password_reset_link_sent_notice', 'If an account with that email exists, we have sent a password reset link. Please check your inbox.'),
|
(2, 3, 300, 'password_reset_link_sent_notice', 'If an account with that email exists, we have sent a password reset link. Please check your inbox.'),
|
||||||
(2, 3, 300, 'password_updated', 'Password updated'),
|
(2, 3, 300, 'password_updated', 'Password updated'),
|
||||||
@@ -89,6 +95,7 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
|
|||||||
(3, 3, 300, 'back_to_sign_in', 'Zpět k přihlášení'),
|
(3, 3, 300, 'back_to_sign_in', 'Zpět k přihlášení'),
|
||||||
(3, 3, 300, 'by_signing_in_you_agree_to_our', 'Přihlášením souhlasíte s našimi'),
|
(3, 3, 300, 'by_signing_in_you_agree_to_our', 'Přihlášením souhlasíte s našimi'),
|
||||||
(3, 3, 300, 'check_your_email', 'Zkontrolujte svůj e-mail'),
|
(3, 3, 300, 'check_your_email', 'Zkontrolujte svůj e-mail'),
|
||||||
|
(3, 3, 300, 'close', 'zavřít'),
|
||||||
(3, 3, 300, 'confirm_password', 'Potvrzení hesla'),
|
(3, 3, 300, 'confirm_password', 'Potvrzení hesla'),
|
||||||
(3, 3, 300, 'confirm_your_new_password', 'Potvrďte své nové heslo'),
|
(3, 3, 300, 'confirm_your_new_password', 'Potvrďte své nové heslo'),
|
||||||
(3, 3, 300, 'confirm_your_password', 'Potvrďte své heslo'),
|
(3, 3, 300, 'confirm_your_password', 'Potvrďte své heslo'),
|
||||||
@@ -105,7 +112,9 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
|
|||||||
(3, 3, 300, 'forgot_password', 'Zapomněli jste heslo'),
|
(3, 3, 300, 'forgot_password', 'Zapomněli jste heslo'),
|
||||||
(3, 3, 300, 'i_agree_to_the', 'Souhlasím s'),
|
(3, 3, 300, 'i_agree_to_the', 'Souhlasím s'),
|
||||||
(3, 3, 300, 'last_name', 'Příjmení'),
|
(3, 3, 300, 'last_name', 'Příjmení'),
|
||||||
|
(3, 3, 300, 'logout', 'Odhlásit se'),
|
||||||
(3, 3, 300, 'new_password', 'Nové heslo'),
|
(3, 3, 300, 'new_password', 'Nové heslo'),
|
||||||
|
(3, 3, 300, 'or', 'nebo'),
|
||||||
(3, 3, 300, 'password', 'Heslo'),
|
(3, 3, 300, 'password', 'Heslo'),
|
||||||
(3, 3, 300, 'password_reset_link_sent_notice', 'Pokud účet s touto e-mailovou adresou existuje, poslali jsme odkaz pro obnovení hesla. Zkontrolujte svůj inbox.'),
|
(3, 3, 300, 'password_reset_link_sent_notice', 'Pokud účet s touto e-mailovou adresou existuje, poslali jsme odkaz pro obnovení hesla. Zkontrolujte svůj inbox.'),
|
||||||
(3, 3, 300, 'password_updated', 'Heslo aktualizováno'),
|
(3, 3, 300, 'password_updated', 'Heslo aktualizováno'),
|
||||||
@@ -237,7 +246,7 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
|
|||||||
(1, 3, 303, 'success_title', 'E-mail zweryfikowany!'),
|
(1, 3, 303, 'success_title', 'E-mail zweryfikowany!'),
|
||||||
(1, 3, 303, 'verification_failed', 'Weryfikacja e-maila nie powiodła się'),
|
(1, 3, 303, 'verification_failed', 'Weryfikacja e-maila nie powiodła się'),
|
||||||
(1, 3, 303, 'verifying', 'Sprawdzanie Twojego adresu e-mail...'),
|
(1, 3, 303, 'verifying', 'Sprawdzanie Twojego adresu e-mail...'),
|
||||||
(2, 3, 303, 'already_registered', 'already registered?'),
|
(2, 3, 303, 'already_registered', 'Already have an account?'),
|
||||||
(2, 3, 303, 'error_message', 'We could not verify your email.'),
|
(2, 3, 303, 'error_message', 'We could not verify your email.'),
|
||||||
(2, 3, 303, 'error_title', 'Verification Failed'),
|
(2, 3, 303, 'error_title', 'Verification Failed'),
|
||||||
(2, 3, 303, 'go_to_login', 'Go to Login'),
|
(2, 3, 303, 'go_to_login', 'Go to Login'),
|
||||||
|
|||||||
@@ -270,6 +270,63 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "close",
|
||||||
|
"scope_id": 3,
|
||||||
|
"component_id": 300,
|
||||||
|
"lang_id": 1,
|
||||||
|
"data": "",
|
||||||
|
"locations": [
|
||||||
|
{
|
||||||
|
"file": "../bo/src/views/LoginView.vue",
|
||||||
|
"line": 7,
|
||||||
|
"column": 66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "../bo/src/views/LoginView.vue",
|
||||||
|
"line": 16,
|
||||||
|
"column": 67
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "close",
|
||||||
|
"scope_id": 3,
|
||||||
|
"component_id": 300,
|
||||||
|
"lang_id": 2,
|
||||||
|
"data": "",
|
||||||
|
"locations": [
|
||||||
|
{
|
||||||
|
"file": "../bo/src/views/LoginView.vue",
|
||||||
|
"line": 7,
|
||||||
|
"column": 66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "../bo/src/views/LoginView.vue",
|
||||||
|
"line": 16,
|
||||||
|
"column": 67
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "close",
|
||||||
|
"scope_id": 3,
|
||||||
|
"component_id": 300,
|
||||||
|
"lang_id": 3,
|
||||||
|
"data": "",
|
||||||
|
"locations": [
|
||||||
|
{
|
||||||
|
"file": "../bo/src/views/LoginView.vue",
|
||||||
|
"line": 7,
|
||||||
|
"column": 66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "../bo/src/views/LoginView.vue",
|
||||||
|
"line": 16,
|
||||||
|
"column": 67
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "confirm_password",
|
"key": "confirm_password",
|
||||||
"scope_id": 3,
|
"scope_id": 3,
|
||||||
@@ -1092,6 +1149,48 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "logout",
|
||||||
|
"scope_id": 3,
|
||||||
|
"component_id": 300,
|
||||||
|
"lang_id": 1,
|
||||||
|
"data": "",
|
||||||
|
"locations": [
|
||||||
|
{
|
||||||
|
"file": "../bo/src/components/TopBar.vue",
|
||||||
|
"line": 22,
|
||||||
|
"column": 13
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "logout",
|
||||||
|
"scope_id": 3,
|
||||||
|
"component_id": 300,
|
||||||
|
"lang_id": 2,
|
||||||
|
"data": "",
|
||||||
|
"locations": [
|
||||||
|
{
|
||||||
|
"file": "../bo/src/components/TopBar.vue",
|
||||||
|
"line": 22,
|
||||||
|
"column": 13
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "logout",
|
||||||
|
"scope_id": 3,
|
||||||
|
"component_id": 300,
|
||||||
|
"lang_id": 3,
|
||||||
|
"data": "",
|
||||||
|
"locations": [
|
||||||
|
{
|
||||||
|
"file": "../bo/src/components/TopBar.vue",
|
||||||
|
"line": 22,
|
||||||
|
"column": 13
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "new_password",
|
"key": "new_password",
|
||||||
"scope_id": 3,
|
"scope_id": 3,
|
||||||
@@ -1134,6 +1233,48 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "or",
|
||||||
|
"scope_id": 3,
|
||||||
|
"component_id": 300,
|
||||||
|
"lang_id": 1,
|
||||||
|
"data": "",
|
||||||
|
"locations": [
|
||||||
|
{
|
||||||
|
"file": "../bo/src/views/LoginView.vue",
|
||||||
|
"line": 65,
|
||||||
|
"column": 64
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "or",
|
||||||
|
"scope_id": 3,
|
||||||
|
"component_id": 300,
|
||||||
|
"lang_id": 2,
|
||||||
|
"data": "",
|
||||||
|
"locations": [
|
||||||
|
{
|
||||||
|
"file": "../bo/src/views/LoginView.vue",
|
||||||
|
"line": 65,
|
||||||
|
"column": 64
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "or",
|
||||||
|
"scope_id": 3,
|
||||||
|
"component_id": 300,
|
||||||
|
"lang_id": 3,
|
||||||
|
"data": "",
|
||||||
|
"locations": [
|
||||||
|
{
|
||||||
|
"file": "../bo/src/views/LoginView.vue",
|
||||||
|
"line": 65,
|
||||||
|
"column": 64
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "password",
|
"key": "password",
|
||||||
"scope_id": 3,
|
"scope_id": 3,
|
||||||
@@ -1601,8 +1742,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 134,
|
"line": 148,
|
||||||
"column": 34
|
"column": 29
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1620,8 +1761,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 134,
|
"line": 148,
|
||||||
"column": 34
|
"column": 29
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1639,8 +1780,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 134,
|
"line": 148,
|
||||||
"column": 34
|
"column": 29
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1653,12 +1794,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 156,
|
"line": 166,
|
||||||
"column": 24
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
|
||||||
"line": 164,
|
|
||||||
"column": 24
|
"column": 24
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1672,12 +1808,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 156,
|
"line": 166,
|
||||||
"column": 24
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
|
||||||
"line": 164,
|
|
||||||
"column": 24
|
"column": 24
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1691,12 +1822,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 156,
|
"line": 166,
|
||||||
"column": 24
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
|
||||||
"line": 164,
|
|
||||||
"column": 24
|
"column": 24
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1710,8 +1836,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 94,
|
"line": 96,
|
||||||
"column": 44
|
"column": 39
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1724,8 +1850,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 94,
|
"line": 96,
|
||||||
"column": 44
|
"column": 39
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1738,8 +1864,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 94,
|
"line": 96,
|
||||||
"column": 44
|
"column": 39
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1752,8 +1878,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 66,
|
"line": 68,
|
||||||
"column": 90
|
"column": 85
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1766,8 +1892,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 66,
|
"line": 68,
|
||||||
"column": 90
|
"column": 85
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1780,8 +1906,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 66,
|
"line": 68,
|
||||||
"column": 90
|
"column": 85
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1794,8 +1920,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 50,
|
"line": 52,
|
||||||
"column": 58
|
"column": 53
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1808,8 +1934,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 50,
|
"line": 52,
|
||||||
"column": 58
|
"column": 53
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1822,25 +1948,25 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 50,
|
"line": 52,
|
||||||
|
"column": 53
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "failed_to_load_years",
|
||||||
|
"scope_id": 3,
|
||||||
|
"component_id": 302,
|
||||||
|
"lang_id": 1,
|
||||||
|
"data": "",
|
||||||
|
"locations": [
|
||||||
|
{
|
||||||
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
|
"line": 60,
|
||||||
"column": 58
|
"column": 58
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "failed_to_load_years",
|
|
||||||
"scope_id": 3,
|
|
||||||
"component_id": 302,
|
|
||||||
"lang_id": 1,
|
|
||||||
"data": "",
|
|
||||||
"locations": [
|
|
||||||
{
|
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
|
||||||
"line": 58,
|
|
||||||
"column": 63
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "failed_to_load_years",
|
"key": "failed_to_load_years",
|
||||||
"scope_id": 3,
|
"scope_id": 3,
|
||||||
@@ -1850,8 +1976,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 58,
|
"line": 60,
|
||||||
"column": 63
|
"column": 58
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1864,8 +1990,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 58,
|
"line": 60,
|
||||||
"column": 63
|
"column": 58
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1878,8 +2004,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 119,
|
"line": 132,
|
||||||
"column": 70
|
"column": 45
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1892,8 +2018,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 119,
|
"line": 132,
|
||||||
"column": 70
|
"column": 45
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1906,8 +2032,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 119,
|
"line": 132,
|
||||||
"column": 70
|
"column": 45
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1920,7 +2046,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 172,
|
"line": 174,
|
||||||
"column": 24
|
"column": 24
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1934,7 +2060,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 172,
|
"line": 174,
|
||||||
"column": 24
|
"column": 24
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1948,7 +2074,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 172,
|
"line": 174,
|
||||||
"column": 24
|
"column": 24
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -1962,8 +2088,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 104,
|
"line": 106,
|
||||||
"column": 27
|
"column": 22
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1976,8 +2102,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 104,
|
"line": 106,
|
||||||
"column": 27
|
"column": 22
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -1990,8 +2116,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 104,
|
"line": 106,
|
||||||
"column": 27
|
"column": 22
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -2004,7 +2130,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 148,
|
"line": 162,
|
||||||
"column": 24
|
"column": 24
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2018,7 +2144,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 148,
|
"line": 162,
|
||||||
"column": 24
|
"column": 24
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2032,7 +2158,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 148,
|
"line": 162,
|
||||||
"column": 24
|
"column": 24
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2046,7 +2172,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 51,
|
"line": 52,
|
||||||
"column": 81
|
"column": 81
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2060,7 +2186,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 51,
|
"line": 52,
|
||||||
"column": 81
|
"column": 81
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2074,7 +2200,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 51,
|
"line": 52,
|
||||||
"column": 81
|
"column": 81
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2130,7 +2256,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 13,
|
"line": 12,
|
||||||
"column": 17
|
"column": 17
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2144,7 +2270,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 13,
|
"line": 12,
|
||||||
"column": 17
|
"column": 17
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2158,7 +2284,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 13,
|
"line": 12,
|
||||||
"column": 17
|
"column": 17
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2172,7 +2298,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 70,
|
"line": 71,
|
||||||
"column": 57
|
"column": 57
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2186,7 +2312,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 70,
|
"line": 71,
|
||||||
"column": 57
|
"column": 57
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2200,7 +2326,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 70,
|
"line": 71,
|
||||||
"column": 57
|
"column": 57
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2256,7 +2382,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 18,
|
"line": 17,
|
||||||
"column": 88
|
"column": 88
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2270,7 +2396,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 18,
|
"line": 17,
|
||||||
"column": 88
|
"column": 88
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2284,7 +2410,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 18,
|
"line": 17,
|
||||||
"column": 88
|
"column": 88
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2340,7 +2466,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 21,
|
"line": 20,
|
||||||
"column": 25
|
"column": 25
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2354,7 +2480,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 21,
|
"line": 20,
|
||||||
"column": 25
|
"column": 25
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2368,7 +2494,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 21,
|
"line": 20,
|
||||||
"column": 25
|
"column": 25
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2382,13 +2508,13 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 29,
|
"line": 28,
|
||||||
"column": 25
|
"column": 25
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 129,
|
"line": 143,
|
||||||
"column": 34
|
"column": 29
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -2401,13 +2527,13 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 29,
|
"line": 28,
|
||||||
"column": 25
|
"column": 25
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 129,
|
"line": 143,
|
||||||
"column": 34
|
"column": 29
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -2420,13 +2546,13 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 29,
|
"line": 28,
|
||||||
"column": 25
|
"column": 25
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 129,
|
"line": 143,
|
||||||
"column": 34
|
"column": 29
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -2439,7 +2565,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 69,
|
"line": 70,
|
||||||
"column": 52
|
"column": 52
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2453,7 +2579,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 69,
|
"line": 70,
|
||||||
"column": 52
|
"column": 52
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2467,7 +2593,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 69,
|
"line": 70,
|
||||||
"column": 52
|
"column": 52
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2481,7 +2607,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 67,
|
"line": 68,
|
||||||
"column": 44
|
"column": 44
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2495,7 +2621,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 67,
|
"line": 68,
|
||||||
"column": 44
|
"column": 44
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2509,7 +2635,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 67,
|
"line": 68,
|
||||||
"column": 44
|
"column": 44
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2523,7 +2649,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 68,
|
"line": 69,
|
||||||
"column": 49
|
"column": 49
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2537,7 +2663,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 68,
|
"line": 69,
|
||||||
"column": 49
|
"column": 49
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2551,53 +2677,11 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 68,
|
"line": 69,
|
||||||
"column": 49
|
"column": 49
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "user_initials",
|
|
||||||
"scope_id": 3,
|
|
||||||
"component_id": 302,
|
|
||||||
"lang_id": 1,
|
|
||||||
"data": "",
|
|
||||||
"locations": [
|
|
||||||
{
|
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
|
||||||
"line": 152,
|
|
||||||
"column": 24
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "user_initials",
|
|
||||||
"scope_id": 3,
|
|
||||||
"component_id": 302,
|
|
||||||
"lang_id": 2,
|
|
||||||
"data": "",
|
|
||||||
"locations": [
|
|
||||||
{
|
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
|
||||||
"line": 152,
|
|
||||||
"column": 24
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "user_initials",
|
|
||||||
"scope_id": 3,
|
|
||||||
"component_id": 302,
|
|
||||||
"lang_id": 3,
|
|
||||||
"data": "",
|
|
||||||
"locations": [
|
|
||||||
{
|
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
|
||||||
"line": 152,
|
|
||||||
"column": 24
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "work_by_quarter",
|
"key": "work_by_quarter",
|
||||||
"scope_id": 3,
|
"scope_id": 3,
|
||||||
@@ -2607,8 +2691,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 116,
|
"line": 127,
|
||||||
"column": 46
|
"column": 41
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -2621,8 +2705,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 116,
|
"line": 127,
|
||||||
"column": 46
|
"column": 41
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -2635,8 +2719,8 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
|
||||||
"line": 116,
|
"line": 127,
|
||||||
"column": 46
|
"column": 41
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -2649,7 +2733,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 42,
|
"line": 43,
|
||||||
"column": 81
|
"column": 81
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2663,7 +2747,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 42,
|
"line": 43,
|
||||||
"column": 81
|
"column": 81
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2677,7 +2761,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 42,
|
"line": 43,
|
||||||
"column": 81
|
"column": 81
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2691,7 +2775,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 25,
|
"line": 24,
|
||||||
"column": 88
|
"column": 88
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2705,7 +2789,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 25,
|
"line": 24,
|
||||||
"column": 88
|
"column": 88
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2719,7 +2803,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 25,
|
"line": 24,
|
||||||
"column": 88
|
"column": 88
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2946,7 +3030,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 62,
|
"line": 63,
|
||||||
"column": 17
|
"column": 17
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2960,7 +3044,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 62,
|
"line": 63,
|
||||||
"column": 17
|
"column": 17
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -2974,7 +3058,7 @@
|
|||||||
"locations": [
|
"locations": [
|
||||||
{
|
{
|
||||||
"file": "../bo/src/views/RepoChartView.vue",
|
"file": "../bo/src/views/RepoChartView.vue",
|
||||||
"line": 62,
|
"line": 63,
|
||||||
"column": 17
|
"column": 17
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -3615,18 +3699,18 @@
|
|||||||
],
|
],
|
||||||
"dynamic": [],
|
"dynamic": [],
|
||||||
"summary": {
|
"summary": {
|
||||||
"total_keys": 228,
|
"total_keys": 234,
|
||||||
"static_keys": 76,
|
"static_keys": 78,
|
||||||
"dynamic_keys": 0,
|
"dynamic_keys": 0,
|
||||||
"by_component": {
|
"by_component": {
|
||||||
"300": 31,
|
"300": 34,
|
||||||
"301": 8,
|
"301": 8,
|
||||||
"302": 26,
|
"302": 25,
|
||||||
"303": 11
|
"303": 11
|
||||||
},
|
},
|
||||||
"by_component_name": {
|
"by_component_name": {
|
||||||
"general": 31,
|
"general": 34,
|
||||||
"repo_chart": 26,
|
"repo_chart": 25,
|
||||||
"validate_error": 8,
|
"validate_error": 8,
|
||||||
"verify_email": 11
|
"verify_email": 11
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user