Compare commits

...

125 Commits

Author SHA1 Message Date
renovate edd9738ddb Update dependency highlight.js to v10.6.0 (#407)
continuous-integration/drone/push Build is passing Details
2 years ago
renovate eff427fc3f Update dependency marked to v2 (#405)
continuous-integration/drone/push Build is passing Details
2 years ago
monkeynaleo 11de5cac56 Update ShowTasks view to sort tasks by ascending (#406)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 53ea3c0eaf
Fix editor placeholder color
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 5fb003ed4c Update dependency vue-advanced-cropper to v1.3.0 (#404)
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 684fb49aad Update dependency vue-advanced-cropper to v1 (#393)
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 36fa8cfc13 Update dependency date-fns to v2.17.0 (#403)
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 09073e34c4
Make sure all arm64 build steps run in parallel
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente e756178797
Fix map_hash_max_size for docker images
2 years ago
kolaente 75a96c0b8d
Add arm64 builds
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente be92db49a9
Fix setting dates in safari
continuous-integration/drone/push Build is passing Details
2 years ago
renovate f4cc230e62 Update dependency marked to v1.2.9 (#401)
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 966352a702 Update dependency faker to v5.3.1 (#400)
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 43e19eab57 Update dependency cypress to v6.4.0 (#399)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 467f866c9d
Fix resetting colors from the color picker
continuous-integration/drone/push Build is passing Details
2 years ago
renovate a33ce3a5b6 Update dependency eslint to v7.19.0 (#398)
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 7f5140bbb4
Play a sound when marking a task as done
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 91a4a39527
Add button to un-archive a namespace
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 46831e5132
Don't save the editor text when it is loaded
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente c49345c31b
Persist show archived state
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 826d90c7eb
Cleanup font caching and requesting
continuous-integration/drone/push Build is passing Details
2 years ago
konrad e0be77d88f Move list edit/namespace to separate pages and in a menu (#397)
continuous-integration/drone/push Build is passing Details
2 years ago
adrinux 649714e8a9 Make the scrollbars a lighter grey (#394)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 4df33d1152
Fix attachment not being added if the task was not a kanban task
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 23552b2b1b
Fix attachments being added mutliple times
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente c5da0fcba4
Change bucket background color
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 6624568faf
Fix attachment hover
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 7049607b28 Update vue monorepo (#390)
continuous-integration/drone/push Build was killed Details
2 years ago
renovate 3fd1b03472 Update dependency marked to v1.2.8 (#391)
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 69c14fc91e Update dependency bulma to v0.9.2 (#392)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 3659577b57
Fix text color
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 30cb970deb
Fix button height
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente c041eab7a2
Fix login or register not working when pressing enter
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 63726ed59f Update dependency faker to v5.2.0 (#389)
continuous-integration/drone/push Build is failing Details
2 years ago
renovate ea6b507df2 Update dependency vue-router to v3.5.0 (#388)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 9ef201c27c
Fix task id spacing
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 06a160f26c
Fix defer due date popup
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 769975b42b
Fix spacing for lists with no rights to add new tasks
continuous-integration/drone/push Build is passing Details
2 years ago
konrad 8828426c91 Move all content to cards (#387)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente e0d120da5d
Fix kanban height on mobile
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 2ee2dffaa7
Make message undo button secondary
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 7e4c5f16e2 Update dependency cypress-file-upload to v5 (#379)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 850e4ecc15
Show list if the search result for a task belongs to a different list
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 0d64506d73
Make sure all popups & dropdowns are animated
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente a4fb3e19be
Fix no color selected in the color picket
continuous-integration/drone/push Build is failing Details
2 years ago
konrad d1a2eefca6 Improve consistency of the layout (#386)
continuous-integration/drone/push Build is passing Details
2 years ago
renovate b2098d65fd Update vue monorepo to v4.5.11 (#385)
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 36f35391a3 Update dependency eslint-plugin-vue to v7.5.0 (#384)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente eaec8c77d2
Fix flaky test part 2
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente d172d99b49
Fix flaky test
continuous-integration/drone/push Build is failing Details
2 years ago
konrad ddadd89c64 Move all create views to better looking popups (#383)
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 0d34d01689
Hide task elements while the task is loading
continuous-integration/drone/push Build is passing Details
2 years ago
konrad a8ada57e81 Fix team edit test (#382)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 901f76ae3b
Fix team edit test
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 0667a96376
Fix empty call to actions
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente bdfbe8857a
Fix task filter toggle button if the list has a background
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 9f35ac372b
Show call to action for task description if there is none
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 4dac10454e
Remove the shadow at the "+" button for related tasks
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 08ea135211
Open links to external sites in a new window
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 83748bd484
Fix transition between pages
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 890d9b3f11
Make sure no cta's are visible while the page is loading
continuous-integration/drone/push Build was killed Details
2 years ago
kolaente 981a230b14
Fix kanban board slightly scrolling
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 528de75c3e
Add github sponsoring
continuous-integration/drone/push Build is failing Details
2 years ago
renovate c5b3667b1a Update dependency cypress to v6.3.0 (#381)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 198633c51d
Fix test
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente a9e58a8e21
Make filter buttons look better on mobile
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 0b23e91f8d
Make sure attachements are only added once to the list after uploading
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente a0664ecb29
Fix multiselect on mobile
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 427a702bd4
Add clearer call to action when no lists are available yet
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 2139d4d528
Make sure all empty pages have a call to action
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente ec4c941fb1
Make the button shadow lighter
continuous-integration/drone/push Build was killed Details
2 years ago
kolaente ef608aacd1
Only show the llama background for unauthenticated users
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente d34fe5dadc
Only use dark shadows for buttons
continuous-integration/drone/push Build is passing Details
2 years ago
konrad 2aceca54ca Move buttons to separate component (#380)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente f3e0b79b26
Fix edit task description test
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 0afd5005a4
Fix tests after changing button classes
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 4f872c92d8
Rename .noshadow to .has-no-shadow
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente e960202607
Use buttons more consistently
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 0102709d92
Fix create new namespace test
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente dde28a9710
Better wording of new namespace and list buttons
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente b12869e509
Fix labels randomly changing color after saving
continuous-integration/drone/push Build is passing Details
2 years ago
konrad 3313801174 Fix closing popups when clicking outside of them (#378)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 6ef4a36bbc
Fix label spacing
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 20a82ee8ae
Make the icons in the menu light grey
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente c6086ddf6c
Fix create new list test
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 3f81f2837a
Fix delete buttons in forms
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente aa5d0d437d
Fix namespace actions alignment in the menu
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente b644c00f59
Add view image modal for image attachments
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente e473a6b70b
Make the "upload attachment" button less obvious
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente f4b47ec374
Fix task detail view spacings
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 60baa3353f
Fix task icon size
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente cf951d2846
Hide new related tasks form when related tasks exist
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 01a1e29db0
Add repeat after one-click intervals
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 2f45b63157
Rearrange task actions
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 212cd86987
Don't show the "new bucket" button when buckets are still loading
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente c31015bd70
Add "today" task filter
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 9a2be2afff
Fix filter container positioning
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 65ce1de445
Fix filter container positioning in link shares
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 0c13caf4fa Update dependency eslint to v7.18.0 (#376)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente b778c76cbd
Fix task title heading ux
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 09b7a903d2
Add success message when modifying buckets
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 873b36e6cd
Rework attachments list to look great everywhere
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente bd3f54e51b
Fix editor buttons alignment
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente c1148bcbda
Fix datepicker popup not fully aligned on mobile
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 2b852de06f
Make full task in task list clickable
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente db90a8cde4
Fix caldav url not containing the api url if the frontend and api are on the same domain
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente a2ad84fefd
Fix task relation search test
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente cad2d06b41
Make release steps on master depend on building/testing
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 5e67934bfe
Fix list counter in the navigation counting archived lists
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente c051baf9d1
Fix iterating over check boxes and attachment images in the editor rendering
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 55b9b68258
Make sure the loading spinner is always visible at the end of the page
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente 526eee361f
Show label colors when searching for labels
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 6db151d57a
Make the input full width by default
continuous-integration/drone/push Build is failing Details
2 years ago
renovate e5ce9e619d Update Font Awesome (#374)
continuous-integration/drone/push Build is failing Details
2 years ago
renovate f539653e65 Update dependency sass-loader to v10.1.1 (#372)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 85eeccee28
Inline mutliselect search input for multiple elements
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente eb31798f06
Fix getting back to the default task view when navigating back from a task modal
continuous-integration/drone/push Build is failing Details
2 years ago
kolaente d7112c99c7
Fix getting back to the kanban board after closing a task popup
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 3e71b76c25
Fix adding a label twice when selecting it and pressing enter
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente d89a855ca7
Fix priority label width in task list
continuous-integration/drone/push Build is passing Details
2 years ago
renovate 8366296d4b Pin dependency highlight.js to 10.5.0 (#371)
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente f1206e8274
Add code highlighting for rendered user input text
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente 0c833af72f
Fix font caching in docker image
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente d384c048ed
Show "powered by Vikunja" in link shares
continuous-integration/drone/push Build is passing Details
2 years ago
kolaente e87642026b
Fix task icons on kanban if there were multiple different ones
continuous-integration/drone/push Build is passing Details
2 years ago

@ -95,6 +95,7 @@ steps:
CYPRESS_TEST_SECRET: averyLongSecretToSe33dtheDB
YARN_CACHE_FOLDER: .cache/yarn/
CYPRESS_CACHE_FOLDER: .cache/cypress/
CYPRESS_DEFAULT_COMMAND_TIMEOUT: 10000
commands:
- sed -i 's/localhost/api/g' public/index.html
- yarn serve & npx wait-on http://localhost:8080
@ -128,6 +129,9 @@ steps:
kind: pipeline
name: release-latest
depends_on:
- build
trigger:
branch:
- master
@ -200,6 +204,9 @@ steps:
kind: pipeline
name: release-version
depends_on:
- build
trigger:
event:
- tag
@ -300,7 +307,7 @@ depends_on:
platform:
os: linux
arch: arm
arch: arm64
trigger:
ref:
@ -325,6 +332,8 @@ steps:
when:
ref:
- refs/heads/master
depends_on:
- clone
- name: docker-version
image: plugins/docker:linux-arm
@ -343,6 +352,48 @@ steps:
when:
ref:
- "refs/tags/**"
depends_on:
- clone
- name: docker-latest-arm64
image: plugins/docker:linux-arm64
pull: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/frontend
auto_tag: true
auto_tag_suffix: linux-arm64
build_args:
- USE_RELEASE=true
- RELEASE_VERSION=master
when:
ref:
- refs/heads/master
depends_on:
- clone
- name: docker-version-arm64
image: plugins/docker:linux-arm64
pull: true
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: vikunja/frontend
auto_tag: true
auto_tag_suffix: linux-arm64
build_args:
- USE_RELEASE=true
- RELEASE_VERSION=${DRONE_TAG##v}
when:
ref:
- "refs/tags/**"
depends_on:
- clone
---
kind: pipeline

@ -1 +1,2 @@
github: kolaente
custom: https://www.buymeacoffee.com/kolaente

@ -21,16 +21,19 @@ describe('Lists', () => {
it('Should create a new list', () => {
cy.visit('/')
cy.get('a.nsettings[href="/namespaces/1/list"]')
cy.get('.namespace-title .dropdown-trigger')
.click()
cy.get('.namespace-title .dropdown .dropdown-item')
.contains('New list')
.click()
cy.url()
.should('contain', '/namespaces/1/list')
cy.get('h3')
cy.get('.card-header-title')
.contains('Create a new list')
cy.get('input.input')
.type('New List')
cy.get('button.is-success')
.contains('Add')
cy.get('.button')
.contains('Create')
.click()
cy.wait(1000) // Waiting until the request to create the new list is done
@ -58,11 +61,11 @@ describe('Lists', () => {
.should('contain', '/lists/1/list')
cy.get('.list-title h1')
.should('contain', 'First List')
cy.get('.list-title a.icon')
.should('have.attr', 'href')
.and('include', '/lists/1/edit')
cy.get('.list-is-empty-notice')
.should('contain', 'This list is currently empty.')
cy.get('.list-title .dropdown')
.should('exist')
cy.get('p')
.contains('This list is currently empty.')
.should('exist')
})
it('Should navigate to the task when the title is clicked', () => {
@ -141,9 +144,8 @@ describe('Lists', () => {
})
cy.visit('/lists/1/table')
cy.get('.table-view table.table a')
cy.get('.table-view table.table')
.contains(tasks[0].title)
.first()
.click()
cy.url()
@ -156,7 +158,7 @@ describe('Lists', () => {
TaskFactory.create(1)
cy.visit('/lists/1/gantt')
cy.get('.gantt-chart-container .gantt-chart.box .tasks')
cy.get('.gantt-chart-container .gantt-chart .tasks')
.should('be.empty')
})
@ -164,7 +166,7 @@ describe('Lists', () => {
const now = new Date()
cy.visit('/lists/1/gantt')
cy.get('.gantt-chart-container .gantt-chart.box .months')
cy.get('.gantt-chart-container .gantt-chart .months')
.should('contain', format(now, 'MMMM'))
.should('contain', format(now.setMonth(now.getMonth() + 1), 'MMMM'))
})
@ -177,9 +179,9 @@ describe('Lists', () => {
})
cy.visit('/lists/1/gantt')
cy.get('.gantt-chart-container .gantt-chart.box .tasks')
cy.get('.gantt-chart-container .gantt-chart .tasks')
.should('not.be.empty')
cy.get('.gantt-chart-container .gantt-chart.box .tasks')
cy.get('.gantt-chart-container .gantt-chart .tasks')
.should('contain', tasks[0].title)
})
@ -194,9 +196,9 @@ describe('Lists', () => {
.contains('Show tasks which don\'t have dates set')
.click()
cy.get('.gantt-chart-container .gantt-chart.box .tasks')
cy.get('.gantt-chart-container .gantt-chart .tasks')
.should('not.be.empty')
cy.get('.gantt-chart-container .gantt-chart.box .tasks .task.nodate')
cy.get('.gantt-chart-container .gantt-chart .tasks .task.nodate')
.should('exist')
})
@ -208,7 +210,7 @@ describe('Lists', () => {
})
cy.visit('/lists/1/gantt')
cy.get('.gantt-chart-container .gantt-chart.box .tasks .task')
cy.get('.gantt-chart-container .gantt-chart .tasks .task')
.first()
.trigger('mousedown', {which: 1})
.trigger('mousemove', {clientX: 500, clientY: 0})
@ -361,9 +363,9 @@ describe('Lists', () => {
})
cy.visit('/lists/1/kanban')
cy.get('.kanban .bucket .tasks .task')
cy.getAttached('.kanban .bucket .tasks .task')
.contains(tasks[0].title)
.first()
.should('be.visible')
.click()
cy.url()

@ -22,16 +22,16 @@ describe('Namepaces', () => {
it('Should create a new Namespace', () => {
cy.visit('/namespaces')
cy.get('a.button')
.contains('Create new namespace')
.contains('Create namespace')
.click()
cy.url()
.should('contain', '/namespaces/new')
cy.get('h3')
cy.get('.card-header-title')
.should('contain', 'Create a new namespace')
cy.get('input.input')
.type('New Namespace')
cy.get('button.is-success')
.contains('Add')
cy.get('.button')
.contains('Create')
.click()
cy.url()
.should('contain', '/namespaces')

@ -8,26 +8,25 @@ describe('Team', () => {
TeamFactory.truncate()
cy.visit('/teams')
const newTeamName = 'New Team'
cy.get('a.button')
.contains('New Team')
.click()
cy.url()
.should('contain', '/teams/new')
cy.get('h3')
cy.get('.card-header-title')
.contains('Create a new team')
cy.get('input.input')
.type('New Team')
cy.get('button.is-success')
.contains('Add')
.type(newTeamName)
cy.get('.button')
.contains('Create')
.click()
cy.get('.fullpage')
.should('not.exist')
cy.url()
.should('contain', '/edit')
cy.get('.card-header .card-header-title')
.first()
.should('contain', 'Edit Team')
cy.get('input#teamtext')
.should('have.value', newTeamName)
})
it('Shows all teams', () => {
@ -113,7 +112,7 @@ describe('Team', () => {
.click()
cy.get('.card')
.contains('Team Members')
.get('.card-content button.button')
.get('.card-content .button')
.contains('Add To Team')
.click()

@ -28,7 +28,7 @@ describe('Task', () => {
cy.visit('/lists/1/list')
cy.get('input.input[placeholder="Add a new task..."')
.type('New Task')
cy.get('button.button.is-success')
cy.get('.button')
.contains('Add')
.click()
cy.get('.tasks .task .tasktext')
@ -44,7 +44,7 @@ describe('Task', () => {
.should('not.exist')
cy.get('input.input[placeholder="Add a new task..."')
.type('New Task')
cy.get('button.button.is-success')
cy.get('.button')
.contains('Add')
.click()
@ -163,7 +163,6 @@ describe('Task', () => {
cy.visit(`/tasks/${tasks[0].id}`)
cy.get('.task-view .details.content.description .editor a')
.contains('Edit')
.click()
cy.get('.task-view .details.content.description .editor .vue-easymde .EasyMDEContainer .CodeMirror-scroll')
.type('{selectall}New Description')
@ -184,7 +183,7 @@ describe('Task', () => {
cy.get('.task-view .comments .media.comment .editor .vue-easymde .EasyMDEContainer .CodeMirror-scroll')
.type('{selectall}New Comment')
cy.get('.task-view .comments .media.comment .button.is-primary')
cy.get('.task-view .comments .media.comment .button:not([disabled])')
.contains('Comment')
.click()
@ -205,7 +204,7 @@ describe('Task', () => {
cy.get('.task-view .action-buttons .button')
.contains('Move task')
.click()
cy.get('.task-view .content.details .field .multiselect.control .input-wrapper .input-loader-wrapper input')
cy.get('.task-view .content.details .field .multiselect.control .input-wrapper input')
.type(`${lists[1].title}{enter}`)
// The requests happen with a 200ms timeout. Because of that, the results are not yet there when cypress
// presses enter and we can't simulate pressing on enter to select the item.
@ -378,5 +377,34 @@ describe('Task', () => {
cy.get('.task-view .details.labels-list .multiselect .input-wrapper')
.should('not.contain', labels[0].title)
})
it('Can set a due date for a task', () => {
const tasks = TaskFactory.create(1, {
id: 1,
done: false,
})
cy.visit(`/tasks/${tasks[0].id}`)
cy.get('.task-view .action-buttons .button')
.contains('Set Due Date')
.click()
cy.get('.task-view .columns.details .column')
.contains('Due Date')
.get('.date-input .datepicker .show')
.click()
cy.get('.datepicker .datepicker-popup a')
.contains('Tomorrow')
.click()
cy.get('.datepicker .datepicker-popup a.button')
.contains('Confirm')
.click()
cy.get('.task-view .columns.details .column')
.contains('Due Date')
.get('.date-input .datepicker-popup')
.should('not.exist')
cy.get('.global-notification')
.should('contain', 'Success')
})
})
})

@ -4,7 +4,7 @@ const testAndAssertFailed = fixture => {
cy.visit('/login')
cy.get('input[id=username]').type(fixture.username)
cy.get('input[id=password]').type(fixture.password)
cy.get('button').contains('Login').click()
cy.get('.button').contains('Login').click()
cy.wait(5000) // It can take waaaayy too long to log the user in
cy.url().should('include', '/')
@ -32,7 +32,7 @@ context('Login', () => {
cy.visit('/login')
cy.get('input[id=username]').type(fixture.username)
cy.get('input[id=password]').type(fixture.password)
cy.get('button').contains('Login').click()
cy.get('.button').contains('Login').click()
cy.url().should('include', '/')
cy.get('h2').should('contain', `Hi ${fixture.username}!`)
})

@ -26,7 +26,7 @@ context('Registration', () => {
cy.get('#email').type(fixture.email)
cy.get('#password1').type(fixture.password)
cy.get('#password2').type(fixture.password)
cy.get('button#register-submit').click()
cy.get('#register-submit').click()
cy.url().should('include', '/')
cy.get('h2').should('contain', `Hi ${fixture.username}!`)
})
@ -43,7 +43,7 @@ context('Registration', () => {
cy.get('#email').type(fixture.email)
cy.get('#password1').type(fixture.password)
cy.get('#password2').type(fixture.password)
cy.get('button#register-submit').click()
cy.get('#register-submit').click()
cy.get('div.notification.is-danger').contains('A user with this username already exists.')
})
})

@ -32,7 +32,7 @@ describe('User Settings', () => {
cy.get('input#newName')
.type('Lorem Ipsum')
cy.get('.card.update-name button.button.is-primary')
cy.get('.card.general-settings .button.is-primary')
.contains('Save')
.click()

@ -0,0 +1,17 @@
/**
* getAttached(selector)
* getAttached(selectorFn)
*
* Waits until the selector finds an attached element, then yields it (wrapped).
* selectorFn, if provided, is passed $(document). Don't use cy methods inside selectorFn.
*
* Source: https://github.com/cypress-io/cypress/issues/5743#issuecomment-650421731
*/
Cypress.Commands.add('getAttached', selector => {
const getElement = typeof selector === 'function' ? selector : $d => $d.find(selector);
let $el = null;
return cy.document().should($d => {
$el = getElement(Cypress.$($d));
expect(Cypress.dom.isDetached($el)).to.be.false;
}).then(() => cy.wrap($el));
});

@ -1,2 +1,3 @@
import './commands'
import 'cypress-file-upload'

@ -11,6 +11,11 @@ manifests:
platform:
architecture: amd64
os: linux
-
image: vikunja/frontend:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm64
platform:
architecture: arm64
os: linux
-
image: vikunja/frontend:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm
platform:

@ -34,16 +34,27 @@ http {
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml font/woff2 image/x-icon;
gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml font/woff2 image/x-icon audio/wav;
map_hash_max_size 128;
map_hash_bucket_size 128;
# Expires map
map $sent_http_content_type $expires {
default off;
text/html max;
text/css max;
application/javascript max;
~image/ max;
~font/ max;
default off;
text/html max;
text/css max;
application/javascript max;
text/javascript max;
application/vnd.ms-fontobject max;
application/x-font-ttf max;
font/opentype max;
font/woff2 max;
image/svg+xml max;
image/x-icon max;
audio/wav max;
~image/ max;
~font/ max;
}
server {

@ -13,47 +13,48 @@
"test:frontend": "cypress run"
},
"dependencies": {
"bulma": "0.9.1",
"bulma": "0.9.2",
"camel-case": "4.1.2",
"copy-to-clipboard": "3.3.1",
"date-fns": "2.16.1",
"date-fns": "2.17.0",
"dompurify": "2.2.6",
"highlight.js": "10.6.0",
"lodash": "4.17.20",
"marked": "1.2.7",
"marked": "2.0.0",
"register-service-worker": "1.7.2",
"snake-case": "3.0.4",
"verte": "0.0.12",
"vue": "2.6.12",
"vue-advanced-cropper": "0.20.1",
"vue-advanced-cropper": "1.3.0",
"vue-drag-resize": "1.4.2",
"vue-easymde": "1.3.2",
"vue-shortkey": "3.1.7",
"vue-smooth-dnd": "0.8.1",
"vuex": "3.6.0"
"vuex": "3.6.2"
},
"devDependencies": {
"@fortawesome/fontawesome-svg-core": "1.2.32",
"@fortawesome/free-regular-svg-icons": "5.15.1",
"@fortawesome/free-solid-svg-icons": "5.15.1",
"@fortawesome/fontawesome-svg-core": "1.2.34",
"@fortawesome/free-regular-svg-icons": "5.15.2",
"@fortawesome/free-solid-svg-icons": "5.15.2",
"@fortawesome/vue-fontawesome": "2.0.2",
"@vue/cli": "4.5.10",
"@vue/cli-plugin-babel": "4.5.10",
"@vue/cli-plugin-eslint": "4.5.10",
"@vue/cli-plugin-pwa": "4.5.10",
"@vue/cli-service": "4.5.10",
"@vue/cli": "4.5.11",
"@vue/cli-plugin-babel": "4.5.11",
"@vue/cli-plugin-eslint": "4.5.11",
"@vue/cli-plugin-pwa": "4.5.11",
"@vue/cli-service": "4.5.11",
"axios": "0.21.1",
"babel-eslint": "10.1.0",
"cypress": "6.2.1",
"cypress-file-upload": "4.1.1",
"eslint": "7.17.0",
"eslint-plugin-vue": "7.4.1",
"faker": "5.1.0",
"cypress": "6.4.0",
"cypress-file-upload": "5.0.2",
"eslint": "7.19.0",
"eslint-plugin-vue": "7.5.0",
"faker": "5.3.1",
"jest": "26.6.3",
"node-sass": "5.0.0",
"sass-loader": "10.1.0",
"sass-loader": "10.1.1",
"vue-flatpickr-component": "8.1.6",
"vue-notification": "1.3.20",
"vue-router": "3.4.9",
"vue-router": "3.5.1",
"vue-template-compiler": "2.6.12",
"wait-on": "5.2.1"
},

Binary file not shown.

@ -1,334 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<defs >
<font id="OpenSans" horiz-adv-x="1295" ><font-face
font-family="Open Sans"
units-per-em="2048"
panose-1="2 11 8 6 3 5 4 2 2 4"
ascent="2189"
descent="-600"
alphabetic="0" />
<glyph unicode=" " glyph-name="space" horiz-adv-x="532" />
<glyph unicode="!" glyph-name="exclam" horiz-adv-x="586" d="M416 485H172L121 1462H467L416 485ZM117 143Q117 227 162 270T293 313Q376 313 421 269T467 143Q467 64 421 19T293 -27Q209 -27 163 17T117 143Z" />
<glyph unicode="&quot;" glyph-name="quotedbl" horiz-adv-x="967" d="M412 1462L371 934H174L133 1462H412ZM834 1462L793 934H596L555 1462H834Z" />
<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="1323" d="M999 844L952 612H1210V406H913L836 0H616L694 406H500L424 0H209L283 406H45V612H322L369 844H117V1053H406L483 1460H702L625 1053H823L901 1460H1116L1038 1053H1278V844H999ZM539 612H735L782
844H586L539 612Z" />
<glyph unicode="$" glyph-name="dollar" horiz-adv-x="1169" d="M1092 457Q1092 298 977 202T655 86V-119H518V82Q274 87 90 168V432Q177 389 299 356T518 317V627L451 653Q253 731 171 822T88 1049Q88 1194 201 1287T518 1401V1554H655V1405Q884 1395 1069 1313L975
1079Q819 1143 655 1157V862Q850 787 932 732T1053 611T1092 457ZM791 442Q791 484 757 513T655 573V324Q791 347 791 442ZM389 1049Q389 1005 419 977T518 918V1153Q389 1134 389 1049Z" />
<glyph unicode="%" glyph-name="percent" horiz-adv-x="1845" d="M315 1024Q315 897 337 835T410 772Q506 772 506 1024Q506 1274 410 1274Q360 1274 338 1213T315 1024ZM758 1026Q758 796 669 681T408 565Q243 565 153 683T63 1026Q63 1483 408 1483Q577 1483
667 1365T758 1026ZM1446 1462L635 0H395L1206 1462H1446ZM1339 440Q1339 313 1361 251T1434 188Q1530 188 1530 440Q1530 690 1434 690Q1384 690 1362 629T1339 440ZM1782 442Q1782 213 1693 98T1432 -18Q1267 -18 1177 100T1087 442Q1087 899 1432 899Q1601 899
1691 781T1782 442Z" />
<glyph unicode="&amp;" glyph-name="ampersand" horiz-adv-x="1536" d="M1536 0H1159L1044 113Q853 -20 612 -20Q368 -20 225 92T82 395Q82 532 142 628T350 809Q275 895 241 973T207 1145Q207 1297 323 1390T635 1483Q821 1483 932 1397T1044 1165Q1044 1046
975 948T752 760L1036 483Q1107 600 1159 784H1477Q1441 649 1378 521T1235 293L1536 0ZM403 424Q403 338 467 287T633 236Q759 236 860 297L528 627Q470 583 437 535T403 424ZM762 1133Q762 1186 726 1216T633 1247Q566 1247 528 1215T489 1124Q489 1036 584 930Q670
978 716 1024T762 1133Z" />
<glyph unicode="&apos;" glyph-name="quotesingle" horiz-adv-x="545" d="M412 1462L371 934H174L133 1462H412Z" />
<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="694" d="M82 561Q82 826 159 1057T383 1462H633Q492 1269 420 1038T348 563Q348 318 421 90T631 -324H383Q236 -154 159 73T82 561Z" />
<glyph unicode=")" glyph-name="parenright" horiz-adv-x="694" d="M612 561Q612 298 535 71T311 -324H63Q198 -140 272 88T346 563Q346 807 274 1038T61 1462H311Q458 1287 535 1056T612 561Z" />
<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="1116" d="M688 1556L647 1188L1020 1292L1053 1040L713 1016L936 719L709 598L553 911L416 600L180 719L401 1016L63 1042L102 1292L467 1188L426 1556H688Z" />
<glyph unicode="+" glyph-name="plus" horiz-adv-x="1169" d="M475 612H88V831H475V1221H694V831H1081V612H694V227H475V612Z" />
<glyph unicode="," glyph-name="comma" horiz-adv-x="594" d="M459 215Q407 13 283 -264H63Q128 2 164 238H444L459 215Z" />
<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="659" d="M61 424V674H598V424H61Z" />
<glyph unicode="." glyph-name="period" horiz-adv-x="584" d="M117 143Q117 227 162 270T293 313Q376 313 421 269T467 143Q467 64 421 19T293 -27Q209 -27 163 17T117 143Z" />
<glyph unicode="/" glyph-name="slash" horiz-adv-x="846" d="M836 1462L291 0H14L559 1462H836Z" />
<glyph unicode="0" glyph-name="zero" horiz-adv-x="1169" d="M1096 731Q1096 348 971 164T584 -20Q331 -20 203 170T74 731Q74 1118 199 1301T584 1485Q837 1485 966 1293T1096 731ZM381 731Q381 462 427 346T584 229Q692 229 740 347T788 731Q788 1000 740 1117T584
1235Q475 1235 428 1118T381 731Z" />
<glyph unicode="1" glyph-name="one" horiz-adv-x="1169" d="M846 0H537V846L540 985L545 1137Q468 1060 438 1036L270 901L121 1087L592 1462H846V0Z" />
<glyph unicode="2" glyph-name="two" horiz-adv-x="1169" d="M1104 0H82V215L449 586Q612 753 662 817T734 937T756 1051Q756 1139 708 1182T578 1225Q493 1225 413 1186T246 1075L78 1274Q186 1366 257 1404T412 1462T600 1483Q737 1483 842 1433T1005 1293T1063
1087Q1063 986 1028 898T918 716T655 451L467 274V260H1104V0Z" />
<glyph unicode="3" glyph-name="three" horiz-adv-x="1169" d="M1047 1135Q1047 998 964 902T731 770V764Q908 742 999 657T1090 426Q1090 215 937 98T500 -20Q262 -20 78 59V322Q163 279 265 252T467 225Q620 225 693 277T766 444Q766 547 682 590T414 633H303V870H416Q586
870 664 914T743 1067Q743 1233 535 1233Q463 1233 389 1209T223 1126L80 1339Q280 1483 557 1483Q784 1483 915 1391T1047 1135Z" />
<glyph unicode="4" glyph-name="four" horiz-adv-x="1169" d="M1137 303H961V0H659V303H35V518L676 1462H961V543H1137V303ZM659 543V791Q659 853 664 971T672 1108H664Q627 1026 575 948L307 543H659Z" />
<glyph unicode="5" glyph-name="five" horiz-adv-x="1169" d="M614 934Q826 934 951 815T1077 489Q1077 244 926 112T494 -20Q250 -20 100 59V326Q179 284 284 258T483 231Q766 231 766 463Q766 684 473 684Q420 684 356 674T252 651L129 717L184 1462H977V1200H455L428
913L463 920Q524 934 614 934Z" />
<glyph unicode="6" glyph-name="six" horiz-adv-x="1169" d="M72 621Q72 1055 255 1267T805 1479Q930 1479 1001 1464V1217Q912 1237 825 1237Q666 1237 566 1189T415 1047T356 780H369Q468 950 686 950Q882 950 993 827T1104 487Q1104 253 972 117T606 -20Q444
-20 324 55T138 274T72 621ZM600 227Q699 227 752 293T805 483Q805 590 756 651T606 713Q512 713 446 652T379 510Q379 391 441 309T600 227Z" />
<glyph unicode="7" glyph-name="seven" horiz-adv-x="1169" d="M227 0L776 1200H55V1460H1104V1266L551 0H227Z" />
<glyph unicode="8" glyph-name="eight" horiz-adv-x="1169" d="M586 1481Q796 1481 924 1386T1053 112