Initial commit: Angular frontend and Expressjs backend

This commit is contained in:
chamikaJ
2024-05-17 09:32:30 +05:30
parent eb0a0d77d6
commit 298ca6beeb
3548 changed files with 193558 additions and 3 deletions

View File

@@ -0,0 +1,106 @@
mixin list(teams)
for $team of teams
if $team.projects.length
tr
td
h5(style='font-size:1em;margin-top: 12px;margin-bottom:0')
div(style='color:rgba(0, 0, 0, 0.45);font-size:12px')
img(src='https://worklenz.s3.amazonaws.com/assets/team-icon.png' style='width: 12px;height:12px;')
| #{$team.name}
for $project of $team.projects
b
a(href=$project.url style='color:inherit;text-decoration:none;color:#1890ff;color:inherit!important;text-decoration:none!important' target='_blank') #{$project.name}
table(width='100%')
for $task of $project.tasks
tbody
tr
td(style='color:#bfbfbe;vertical-align:top;width:15px;padding-right:5px;display:inline-block;text-align:center')
a(style='color:inherit;text-decoration:none;color:#1890ff;color:inherit!important;text-decoration:none!important' href=$task.url target='_blank') ▢
td(style='vertical-align:top;width:100%')
span
a(style='color:inherit;color:#1890ff;text-decoration:underline;' href=$task.url target='_blank')=$task.name
span(style='color:#6d6e6f')  #{$task.members}
doctype html
html(lang='en')
head
meta(charset='UTF-8')
meta(http-equiv='X-UA-Compatible' content='IE=edge')
meta(name='viewport' content='width=device-width, initial-scale=1.0')
title Worklenz Daily Digest
body
style.
td {
font-family : 'Helvetica Neue', helvetica, arial, sans-serif;
background : #fff;
margin : 0;
padding : 0;
border : 0;
border-collapse: collapse;
border-spacing : 0;
}
div(style="margin : 0;padding : 0;background : #fff;text-align : left;font-size : 15px;line-height: 1.4;font-family: 'Helvetica Neue', helvetica, 'Segoe UI', arial, sans-serif;font-weight: 400;"): div(style='padding:15px 25px')
table(style='width: 100%;max-width: 40em;')
tbody
tr
td
table(width='100%')
tbody
tr: td: img(width='50' height='50' src='https://worklenz.s3.amazonaws.com/assets/icon-96x96.png')
tr: td(style='height:0.625em')
table(width='100%')
tbody
tr
td
h3(style='margin:0;line-height:1.2;font-size:1.3em')
| #{greeting}
br
| #{note}
tr
td
table
if recently_assigned && recently_assigned.length
tbody
tr
td
h3(style='display: flex;margin-top: 30px;margin-bottom: 0;font-size: 1.1em;padding-bottom: 6px;border-bottom: 1px solid #d8d8d8;color: #2b2b2b;font-weight: 500;')
img(src="https://worklenz.s3.amazonaws.com/assets/clock.png" style="width: 16px;height: 16px;margin-right: 10px;margin-top: 4px;")
| Recently assigned to you
+list(recently_assigned)
if overdue && overdue.length
tbody
tr
td
h3(style='display: flex;margin-top: 30px;margin-bottom: 0;font-size: 1.1em;padding-bottom: 6px;border-bottom: 1px solid #d8d8d8;color: #2b2b2b;font-weight: 500;')
img(src="https://worklenz.s3.amazonaws.com/assets/clock-warn-icon.png" style="width: 16px;height: 16px;margin-right: 10px;margin-top: 4px;")
| Overdue
+list(overdue)
if recently_completed && recently_completed.length
tbody
tr
td
h3(style='display: flex;margin-top: 30px;margin-bottom: 0;font-size: 1.1em;padding-bottom: 6px;border-bottom: 1px solid #d8d8d8;color: #2b2b2b;font-weight: 500;')
img(src="https://worklenz.s3.amazonaws.com/assets/check-icon.png" style="width: 16px;height: 16px;margin-right: 10px;margin-top: 4px;")
| Today completed
+list(recently_completed)
tr
td(style='padding-top:20px')
table
tbody
tr
td(bgcolor='#3cb371' style='display:block;height:32px;padding:0 20px;text-align:center;background-color:#1890ff;border-radius:4px;color:#fff')
a(href=base_url style='color:inherit;color:#1890ff;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:inline-block;width:100%;font-size: 15px;font-family:Helvetica,Arial,sans-serif;text-decoration:none;line-height: 32px;color:#fff' target='_blank')
span(style='color:#fff') Go to Worklenz
tr
td
table(width='100%')
tbody
tr
td(style='padding-bottom:10px;padding-top:20px')
hr(style='margin:0;border-left:0;border-right:0;border-top:0;border-bottom:1px solid #d8d8d8')
tr
td(style='padding-top:10px;padding-bottom:10px')
p(style='color:#000;margin:0 0 19px;font-size:12px;line-height:15px;color:#6d6d6d;margin-bottom:0')
| Worklenz emails this report every evening. 
a(href=settings_url style='color:inherit;text-decoration:underline;color:#1890ff;color:#6d6d6d' target='_blank') Stop sending it to me.

View File

@@ -0,0 +1,111 @@
mixin dataBlock(tasks, emptyMessage)
tr
td
table(width='100%')
if tasks.length
for task of tasks
tbody
tr
td(style='color:#bfbfbe;vertical-align:top;width:15px;padding-right:5px;display:inline-block;text-align:center')
a(style='color:inherit;text-decoration:none;color:#1890ff;color:inherit!important;text-decoration:none!important' target='_blank') ▢
td(style='vertical-align:top;width:100%')
span
a(style='color:inherit;color:#1890ff;text-decoration:underline;' href=task.url target='_blank')=task.name
span(style='color:#6d6e6f')  #{task.members}
else
tbody
tr
td(style='vertical-align:top;width:100%')
span(style='color:#6d6e6f')=emptyMessage
doctype html
html(lang='en')
head
meta(charset='UTF-8')
meta(http-equiv='X-UA-Compatible' content='IE=edge')
meta(name='viewport' content='width=device-width, initial-scale=1.0')
title Worklenz Project Daily Digest
body
style.
td {
font-family: 'Helvetica Neue', helvetica, arial, sans-serif;
background: #fff;
margin: 0;
padding: 0;
border: 0;
border-collapse: collapse;
border-spacing: 0;
}
div(style="margin : 0;padding : 0;background : #fff;text-align : left;font-size : 15px;line-height: 1.4;font-family: 'Helvetica Neue', helvetica, 'Segoe UI', arial, sans-serif;font-weight: 400;")
div(style='padding:15px 25px')
table(style='width: 100%;max-width: 40em;')
tbody
tr
td
table(width='100%')
tbody
tr
td
img(width='50' height='50' src='https://worklenz.s3.amazonaws.com/assets/icon-96x96.png')
tr
td(style='height:0.625em')
table(width='100%')
tbody
tr
td
h3(style='margin:0;line-height:1.2;font-size:1.3em')
| #{greeting}
br
| #{summary}
tr
td
table
tbody
tr
td
h3(style='display: flex;margin-top: 30px;margin-bottom: 0;font-size: 1.1em;padding-bottom: 6px;border-bottom: 1px solid #d8d8d8;color: #2b2b2b;font-weight: 500;')
img(src='https://worklenz.s3.amazonaws.com/assets/clock.png' style='width: 16px;height: 16px;margin-right: 10px;margin-top: 4px;')
| Today New
+dataBlock(today_new, "No new tasks today")
tbody
tr
td
h3(style='display: flex;margin-top: 30px;margin-bottom: 0;font-size: 1.1em;padding-bottom: 6px;border-bottom: 1px solid #d8d8d8;color: #2b2b2b;font-weight: 500;')
img(src='https://worklenz.s3.amazonaws.com/assets/clock-warn-icon.png' style='width: 16px;height: 16px;margin-right: 10px;margin-top: 4px;')
| Due Tomorrow
+dataBlock(due_tomorrow, "No due tasks tomorrow")
tbody
tr
td
h3(style='display: flex;margin-top: 30px;margin-bottom: 0;font-size: 1.1em;padding-bottom: 6px;border-bottom: 1px solid #d8d8d8;color: #2b2b2b;font-weight: 500;')
img(src='https://worklenz.s3.amazonaws.com/assets/check-icon.png' style='width: 16px;height: 16px;margin-right: 10px;margin-top: 4px;')
| Today Completed
+dataBlock(today_completed, "No completed tasks today")
tr
td(style='padding-top:20px')
table
tbody
tr
td(bgcolor='#3cb371' style='display:block;height:32px;padding:0 20px;text-align:center;background-color:#1890ff;border-radius:4px;color:#fff')
a(style='color:inherit;color:#1890ff;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:inline-block;width:100%;font-size: 15px;font-family:Helvetica,Arial,sans-serif;text-decoration:none;line-height: 32px;color:#fff' href=project_url target='_blank')
span(style='color:#fff') Go to Project
tr
td
table(width='100%')
tbody
tr
td(style='padding-bottom:5px;padding-top:20px')
hr(style='margin:0;border-left:0;border-right:0;border-top:0;border-bottom:1px solid #d8d8d8')
tr
td(style='padding-top:5px;padding-bottom:0px')
p(style='color:#000;margin:0 0 19px;font-size:12px;line-height:15px;color:#6d6d6d;margin-bottom:0')
| To stop sending this email, you can goto project and click "Stop Summary". 
a(style='color:inherit;text-decoration:underline;color:#1890ff;color:#6d6d6d' href=project_url target='_blank') Stop sending it to me.
tr
td(style='padding-bottom:10px;padding-top:10px')
hr(style='margin:0;border-left:0;border-right:0;border-top:0;border-bottom:1px solid #d8d8d8')
tr
td(style='padding-top:10px;padding-bottom:10px')
p(style='color:#000;margin:0 0 19px;font-size:12px;line-height:15px;color:#6d6d6d;margin-bottom:0')
a(style='color:inherit;text-decoration:underline;color:#1890ff;color:#6d6d6d' href=settings_url target='_blank') Unsubscribe

View File

@@ -0,0 +1,120 @@
doctype html
html(lang='en')
head
meta(charset='UTF-8')
meta(http-equiv='X-UA-Compatible' content='IE=edge')
meta(name='viewport' content='width=device-width, initial-scale=1.0')
title Task Assignee Change
body
style.
td {
font-family : 'Helvetica Neue', helvetica, arial, sans-serif;
background : #fff;
margin : 0;
padding : 0;
border : 0;
border-collapse : collapse;
border-spacing : 0;
}
div(style="margin : 0;padding : 0;background : #fff;text-align : left;font-size : 15px;line-height: 1.4;font-family: 'Helvetica Neue', helvetica, 'Segoe UI', arial, sans-serif;font-weight: 400;"): div(style='padding:15px 25px')
table(style="width: 100%;max-width: 40em;")
tbody
tr
td
table(width='100%')
tbody
tr: td: img(width='50' height='50' src='https://worklenz.com/assets/icons/icon-96x96.png' style="box-shadow : 0 3px 6px -4px rgb(0 0 0 / 12%), 0 6px 16px 0 rgb(0 0 0 / 8%), 0 9px 28px 8px rgb(0 0 0 / 5%);border-radius: 10px;")
tr: td(style="height:0.625em")
table(width='100%')
tbody
tr: td
h3(style='margin:0;line-height:1.2;font-size:1.3em')
| Hey #{name},
br
| here are your new assignments...
tr
td
table
tbody
for $team in teams
if $team.projects && $team.projects.length
tr
td
h5(style='font-size:1em;margin-bottom:0')
div(style="color:rgba(0, 0, 0, 0.45);font-size:12px")
img(src="https://worklenz.s3.amazonaws.com/assets/team-icon.png" style="width: 12px;height:12px;")
|  
!=$team.name
for $project in $team.projects
if $project.tasks && $project.tasks.length
b: a(href=$project.url style='color:inherit;text-decoration:none;color:#1890ff;color:inherit!important;text-decoration:none!important' target='_blank')=$project.name
for $task in $project.tasks
table(width='100%')
tbody
tr
td(style="color:#bfbfbe;vertical-align:top;width:15px;padding-right:5px;display:inline-block;text-align:center")
a(href=$task.url style='color:inherit;text-decoration:none;color:#1890ff;color:inherit!important;text-decoration:none!important' target='_blank') ▢
td(style="vertical-align:top;width:100%")
span
a(href=$task.url style='color:inherit;color:#1890ff;text-decoration:underline;' target='_blank')
!=$task.name
span(style='color:#6d6e6f')
|  #{$task.members} 
span(style='color:#6d6e6f') Assigned by #{$task.updater_name}
//tr
td(style="padding-top:20px")
table
tbody
tr
td(bgcolor='#3cb371' style="display:block;height:32px;padding:0 20px;text-align:center;background-color:#1890ff;border-radius:4px;color:#fff")
a(href=url style='color:inherit;color:#1890ff;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:inline-block;width:100%;font-size: 15px;font-family:Helvetica,Arial,sans-serif;text-decoration:none;line-height: 32px;color:#fff' target='_blank')
span(style='color:#fff') View all assignments on Worklenz
tr
td
table(width='100%')
tbody
tr
td(style="padding-bottom:10px;padding-top:20px")
hr(style='margin:0;border-left:0;border-right:0;border-top:0;border-bottom:1px solid #d8d8d8')
tr
td(style="padding-top:10px;padding-bottom:10px")
p(style='color:#000;margin:0 0 19px;font-size:12px;line-height:15px;color:#6d6d6d;margin-bottom:0')
a(href=settings_url style='color:inherit;text-decoration:underline;color:#1890ff;color:#6d6d6d' target='_blank')
| Change your notification settings
//-
<tr>
<td style="">
<p style="color:#000;margin:0 0 19px;font-size:12px;line-height:15px;color:#6d6d6d;margin-bottom:0">
Get easier, faster access to <span class="il">Basecamp</span> when it's on your phone. Grab an
app!</p>
<table
style="">
<tbody>
<tr>
<td style="height:0.625em"></td>
</tr>
<tr>
<td
style="padding-bottom:4px;padding-right:4px">
<a href="https://apps.apple.com/us/app/basecamp-3/id1015603248"
style="color:inherit;text-decoration:none;color:#1890ff" target="_blank"
data-saferedirecturl="https://www.google.com/url?q=https://apps.apple.com/us/app/basecamp-3/id1015603248&amp;source=gmail&amp;ust=1672293797860000&amp;usg=AOvVaw0fNCpso-3Wtcy6AdNyKoED"><img
class="CToWUd" alt="Download on the App Store" width="90"
src="https://ci4.googleusercontent.com/proxy/3Q4GSp5V4b1D-0lrS11QAX7NkMdkZYR88__pGyukcDpc_oQF8z_wnVs6j2hSrWtTDf9keULZvePkEI8Qe0DBwxs10OGnDAyRrlnJnNaCqpUaq-mbE4L-0ehLk0EjOvk_bKpu6T5sG0Y6eJ_pimO2ChNgV45jMzM6L6hqTJqgpGvrkHy2hBTRa0q2OUofgo5JkFOeE96WWFzLzKSv01JEISyO2kl9TSlcQQ=s0-d-e1-ft#https://bc3-production-assets-cdn.basecamp-static.com/assets/icons/app_store_ios-47da2a2f17d0ffd3faa9a86598460040c352906ab7ba3a7ff123d6e5aa21516b.png"
data-bit="iit" /></a>
</td>
<td
style="padding-bottom:4px;padding-right:4px">
<a href="https://play.google.com/store/apps/details?id=com.basecamp.bc3"
style="color:inherit;text-decoration:none;color:#1890ff" target="_blank"
data-saferedirecturl="https://www.google.com/url?q=https://play.google.com/store/apps/details?id%3Dcom.basecamp.bc3&amp;source=gmail&amp;ust=1672293797860000&amp;usg=AOvVaw35cidW9K_xB90Z-YpfeRJb"><img
class="CToWUd" alt="Download on the Play Store" width="90"
src="https://ci3.googleusercontent.com/proxy/rwwxW8AqEIHiiufD2rybIZ8qirAZckCC4DHvy82MQm43omDQY6UXQhKQzJJIGg9tPqp42XALADsD1aXKp9aszvbHI3Opl7hLR1hrRg8oKsYl0nQDr2e0P-S7tSXwu9Fl8pW3QykAVJDnRCVn7CbUJByULQ5OiHIlpsL2jcbY1vy25hjAJJqNOyFhMuZcS7yxyH6nZYnGjeqC47F23nVt3x_WYZbnfEA6mprG22c=s0-d-e1-ft#https://bc3-production-assets-cdn.basecamp-static.com/assets/icons/app_store_android-443248f2c61596d07d906fe612354e1ae774ee80462ff809918645b3a9ffec5d.png"
data-bit="iit" /></a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>

View File

@@ -0,0 +1,82 @@
- const button_style = 'white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:inline-block;width:100%;font-size: 15px;font-family:Helvetica,Arial,sans-serif;text-decoration:none;line-height: 32px;color:#fff'
- const container_style = "margin : 0;padding : 0;background : #fff;text-align : left;font-size : 15px;line-height: 1.4;font-family: 'Helvetica Neue', helvetica, 'Segoe UI', arial, sans-serif;font-weight: 400;"
doctype html
html(lang='en')
head
meta(charset='UTF-8')
meta(http-equiv='X-UA-Compatible' content='IE=edge')
meta(name='viewport' content='width=device-width, initial-scale=1.0')
title Worklenz Daily Digest
body
style.
td {
font-family: 'Helvetica Neue', helvetica, arial, sans-serif;
background: #fff;
margin: 0;
padding: 0;
border: 0;
border-collapse: collapse;
border-spacing: 0;
}
div(style=container_style)
div(style='padding:15px 25px')
table(style='width: 100%;max-width: 40em;')
tbody
tr
td
table(width='100%')
tbody
tr
td
img(width='50' height='50' src='https://worklenz.s3.amazonaws.com/assets/icon-96x96.png')
tr
td(style='height:0.625em')
table(width='100%')
tbody
tr
td
h3(style='margin:0;line-height:1.2;font-size:1.3em')
| #{greeting},
tr
td
table
tbody
tr
td
h3(style='display: flex;margin-top: 0px;margin-bottom: 0;font-size: 1.1em;padding-bottom: 6px;border-bottom: 1px solid #d8d8d8;color: #2b2b2b;font-weight: 500;')
//- img(src='https://worklenz.s3.amazonaws.com/assets/clock.png' style='width: 16px;height: 16px;margin-right: 10px;margin-top: 4px;')
| #{summary}
tr
td
h5(style='font-size:1em;margin-top: 12px;margin-bottom:0')
div(style='color:rgba(0, 0, 0, 0.45);font-size:12px')
img(src='https://worklenz.s3.amazonaws.com/assets/team-icon.png' style='width: 12px;height:12px;')
| #{team}
b
a(style='color:inherit;text-decoration:none;color:#1890ff;color:inherit!important;text-decoration:none!important' target='_blank')=project_name
table(width='100%')
tbody
tr
td(style='vertical-align:top;width:100%')
span(style='color:#6d6e6f')=comment
tr
td(style='padding-top:20px')
table
tbody
tr
td(bgcolor='#3cb371' style='display:block;height:32px;padding:0 20px;text-align:center;background-color:#1890ff;border-radius:4px;color:#fff')
a(style=button_style href=task_url target='_blank')
span(style='color:#fff') Reply to this
tr
td
table(width='100%')
tbody
tr
td(style='padding-bottom: 6px;padding-top: 10px;')
hr(style='margin:0;border-left:0;border-right:0;border-top:0;border-bottom:1px solid #d8d8d8')
tr
td(style='padding-top:10px;padding-bottom:10px')
p(style='color:#000;margin:0 0 19px;font-size:12px;line-height:15px;color:#6d6d6d;margin-bottom:0')
| This email sending to you because you have enabled email notifications.&nbsp;
a(style='color:inherit;text-decoration:underline;color:#1890ff;color:#6d6d6d' href=settings_url target='_blank') Stop sending it to me.

View File

@@ -0,0 +1,85 @@
mixin list(task)
tr
td
h5(style='font-size:1em;margin-top: 12px;margin-bottom:0')
div(style='color:rgba(0, 0, 0, 0.45);font-size:12px')
img(src='https://worklenz.s3.amazonaws.com/assets/team-icon.png' style='width: 12px;height:12px;')
| #{task.team_name}
b
a(href=task.url style='color:inherit;text-decoration:none;color:#1890ff;color:inherit!important;text-decoration:none!important' target='_blank') #{task.project_name}
table(width='100%')
tbody
tr
td(style='color:#bfbfbe;vertical-align:top;width:15px;padding-right:5px;display:inline-block;text-align:center')
a(style='color:inherit;text-decoration:none;color:#1890ff;color:inherit!important;text-decoration:none!important' href=task.url target='_blank') ▢
td(style='vertical-align:top;width:100%')
span
a(style='color:inherit;color:#1890ff;text-decoration:underline;' href=task.url target='_blank')=task.name
span(style='color:#6d6e6f') &nbsp;#{task.members}
doctype html
html(lang='en')
head
meta(charset='UTF-8')
meta(http-equiv='X-UA-Compatible' content='IE=edge')
meta(name='viewport' content='width=device-width, initial-scale=1.0')
title Worklenz Task Done!
body
style.
td {
font-family : 'Helvetica Neue', helvetica, arial, sans-serif;
background : #fff;
margin : 0;
padding : 0;
border : 0;
border-collapse: collapse;
border-spacing : 0;
}
div(style="margin : 0;padding : 0;background : #fff;text-align : left;font-size : 15px;line-height: 1.4;font-family: 'Helvetica Neue', helvetica, 'Segoe UI', arial, sans-serif;font-weight: 400;"): div(style='padding:15px 25px')
table(style='width: 100%;max-width: 40em;')
tbody
tr
td
table(width='100%')
tbody
tr: td: img(width='50' height='50' src='https://worklenz.s3.amazonaws.com/assets/icon-96x96.png')
tr: td(style='height:0.625em')
table(width='100%')
tbody
tr
td
h3(style='margin:0;line-height:1.2;font-size:1.3em')
//- | #{greeting}
//- br
| #{note}
tr
td
table
tbody
tr
td
h3(style='display: flex;margin-top: 0;margin-bottom: 0;font-size: 1.1em;padding-bottom: 6px;border-bottom: 1px solid #d8d8d8;color: #2b2b2b;font-weight: 500;')
img(src="https://worklenz.s3.amazonaws.com/assets/check-icon.png" style="width: 16px;height: 16px;margin-right: 10px;margin-top: 4px;")
!=summary
+list(task)
//- tr
td(style='padding-top:20px')
table
tbody
tr
td(bgcolor='#3cb371' style='display:block;height:32px;padding:0 20px;text-align:center;background-color:#1890ff;border-radius:4px;color:#fff')
a(href=base_url style='color:inherit;color:#1890ff;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:inline-block;width:100%;font-size: 15px;font-family:Helvetica,Arial,sans-serif;text-decoration:none;line-height: 32px;color:#fff' target='_blank')
span(style='color:#fff') Go to Worklenz
tr
td
table(width='100%')
tbody
//- tr
td(style='padding-bottom:10px;padding-top:20px')
hr(style='margin:0;border-left:0;border-right:0;border-top:0;border-bottom:1px solid #d8d8d8')
tr
td(style='padding-top:10px;padding-bottom:10px')
p(style='color:#000;margin:0 0 19px;font-size:12px;line-height:15px;color:#6d6d6d;margin-bottom:0')
//- | You are receving this because you have subscribed to notify about this in a task.&nbsp;
a(href=settings_url style='color:inherit;text-decoration:underline;color:#1890ff;color:#6d6d6d' target='_blank') Stop sending it to me.