Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
c3c2eba
chore(deps): upgrade dependencies to vue3
max-nextcloud May 19, 2026
fc15170
chore(deps): replace new Vue with createApp
max-nextcloud May 19, 2026
136dcca
chore(upgrade): `<var>.sync` to `v-model:<var>`
max-nextcloud May 19, 2026
b7bf806
chore(upgrade): fix imports
max-nextcloud May 19, 2026
b50fe40
chore(upgrade): Vue.observable to reactive
max-nextcloud May 19, 2026
12457ff
chore(upgrade): from beforeDestroy() to beforeUnmount()
max-nextcloud May 19, 2026
4c425ab
chore(upgrade): key attribute in v-for component
max-nextcloud May 19, 2026
7eaed0b
chore(upgrade): use eslint@10 and @nextcloud/eslint@9
max-nextcloud May 22, 2026
67e30f6
chore(lint): configure vitest globals
max-nextcloud May 23, 2026
ba56601
chore(lint): fix what prettier and eslint can agree upon
max-nextcloud May 23, 2026
c046bf1
chore(lint): let eslint sort the imports
max-nextcloud May 23, 2026
825978e
chore(lint): remove outdated eslint disable lines
max-nextcloud May 23, 2026
8a09566
chore(lint): separate type imports
max-nextcloud May 24, 2026
948377c
chore(lint): use ts extension for local imports
max-nextcloud May 24, 2026
2c2c908
chore(lint): drop prettier and autolint with eslint
max-nextcloud May 26, 2026
84ac26a
chore(lint): drop unused prop
max-nextcloud May 26, 2026
44b0c61
chore(lint): disable no-boolean-default for Viewer api
max-nextcloud May 27, 2026
c7dec63
chore(type): more event bus events
max-nextcloud May 29, 2026
c218c98
chore(type): and split editor.js
max-nextcloud May 31, 2026
2fe2936
chore(cleanup): do not emit even for parent
max-nextcloud May 31, 2026
6f22753
chore(type): add global for `_oc_debug`
max-nextcloud May 31, 2026
2ca0610
chore(cleanup): change default for `EDITOR_UPLOAD` to false
max-nextcloud May 31, 2026
f5dea3c
chore(lint): fix some errors
max-nextcloud May 31, 2026
68f6847
chore(lint): y-websocket
max-nextcloud Jun 1, 2026
493779e
chore(lint) src/services
max-nextcloud Jun 1, 2026
e440361
chore(lint) src/plugins
max-nextcloud Jun 1, 2026
5025de8
chore(lint) src/nodes
max-nextcloud Jun 1, 2026
a1c7eda
chore(lint) src/marks and src/mixins
max-nextcloud Jun 1, 2026
a96e9ce
chore(lint) src/markdownit
max-nextcloud Jun 1, 2026
a84a128
chore(lint): src/helpers
max-nextcloud Jun 1, 2026
72f8b09
chore(lint) src/extensions
max-nextcloud Jun 2, 2026
0cf5c57
chore(rename) useTableOfContents -> hasTableOfContents
max-nextcloud Jun 2, 2026
f01c1c3
chore(lint): src/composables
max-nextcloud Jun 2, 2026
619ce96
chore(import): vitest in spec.ts files
max-nextcloud Jun 2, 2026
dde02fb
chore(upgrade): use tsconfig from collectives plus ESNext
max-nextcloud Jun 2, 2026
cdeb798
chore(upgrade): vue-tsc and fix errors
max-nextcloud Jun 2, 2026
eaf7f1d
chore(scripts): use vue-tsc in separate ts:check script
max-nextcloud Jun 3, 2026
56f883e
chore(types): EditorReloader to explicitely type exports
max-nextcloud Jun 3, 2026
f3c0e30
chore(lint): src/tests
max-nextcloud Jun 3, 2026
a35f5a2
chore(lint): some of src/components
max-nextcloud Jun 3, 2026
f48c656
chore(tests): drop mock for vue config
max-nextcloud Jun 3, 2026
af06e78
chore(tests): fix import
max-nextcloud Jun 3, 2026
0fc032b
chore(tests): fix fixture syntax
max-nextcloud Jun 3, 2026
6594065
chore(lint)
max-nextcloud Jun 4, 2026
0556a7c
chore(lint): src/components/Suggestion
max-nextcloud Jun 4, 2026
5d289e1
chore(lint): src/components/Menu
max-nextcloud Jun 4, 2026
7ec18b3
chore(lint): src/components
max-nextcloud Jun 4, 2026
df5b229
chore(type): fix vue-tsc
max-nextcloud Jun 4, 2026
87f264c
chore(lint): cypress and playwright
max-nextcloud Jun 4, 2026
e744380
chore(cleanup): and list emits in Editor.vue
max-nextcloud Jun 4, 2026
fc9ff53
chore(lint): add missing types and docs for parameters
max-nextcloud Jun 5, 2026
822c748
chore(lint): use logger in src/apis
max-nextcloud Jun 5, 2026
2ca35c3
chore(lint): use camel case `clickLink` event
max-nextcloud Jun 5, 2026
1c51228
chore(lint): showMenuBar->hideMenuBar with default false
max-nextcloud Jun 5, 2026
a2cacd1
chore(style): leave out true value for boolean props
max-nextcloud Jun 5, 2026
a7eb9fd
chore(cleanup): drop Reader component
max-nextcloud Jun 8, 2026
dd593c9
chore(rename): Status to SessionStatus
max-nextcloud Jun 8, 2026
3444f8d
chore(rename): Wrapper -> EditorWrapper
max-nextcloud Jun 8, 2026
b73d735
chore(rename): Editor -> CollaborativeEditor
max-nextcloud Jun 8, 2026
883c370
fix(vue3): use props instead of propsData for tiptap VueRenderer
max-nextcloud Jun 8, 2026
749773c
chore(tests): test list conversion in minimal editor
max-nextcloud Jun 8, 2026
232f2dc
chore(tests): use custom editor for Mathematics spec
max-nextcloud Jun 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 0 additions & 4 deletions .eslintignore

This file was deleted.

28 changes: 0 additions & 28 deletions .eslintrc.cjs

This file was deleted.

3 changes: 3 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@
810eb74a3f5502ef6485efdda7066c6848878bff
0d4ada6304f951cdf28b2d045f7fc56629807c11
eef5dde0838f4e80a420eec19442f9d73533e413

# drop prettier
020464633c2303a1c6b4a817c8a7e35b3c067341
101 changes: 0 additions & 101 deletions .github/workflows/lint-prettier.yml

This file was deleted.

2 changes: 1 addition & 1 deletion cypress.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

import vue from '@vitejs/plugin-vue2'
import vue from '@vitejs/plugin-vue'
import { defineConfig } from 'cypress'
import cypressSplit from 'cypress-split'
import vitePreprocessor from 'cypress-vite'
Expand Down
6 changes: 1 addition & 5 deletions cypress/e2e/Assistant.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,11 @@ describe('Assistant', () => {
})
cy.get('.assistant-modal--content .submit-button').click()

// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.wait(2000)

cy.get('.assistant-modal--content button').contains('Get notified').click()

cy.get('.assistant-modal--content button .bell-ring-outline-icon').should(
'be.visible',
)
cy.get('.assistant-modal--content button .bell-ring-outline-icon').should('be.visible')

cy.get('.assistant-modal--content .close-button').click()
cy.getActionEntry('assistant').click()
Expand All @@ -78,7 +75,6 @@ describe('Assistant', () => {
cy.getActionEntry('assistant').click()
cy.get('.action-button').contains('Translate').click()

// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.wait(1000)

cy.get('.assistant-modal--content #input-input').type('Hello World', {
Expand Down
45 changes: 19 additions & 26 deletions cypress/e2e/Links.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ import { randUser } from '../utils/index.js'
const user = randUser()
const fileName = 'empty.md'

describe('test link marks', function () {
before(function () {
describe('test link marks', function() {
before(function() {
cy.createUser(user)
})

beforeEach(function () {
beforeEach(function() {
cy.login(user)
cy.isolateTest({
sourceFile: fileName,
Expand All @@ -24,7 +24,7 @@ describe('test link marks', function () {
cy.openFile(fileName, { force: true })
})

describe('link bubble', function () {
describe('link bubble', function() {
/**
* Find link and click on it
*
Expand Down Expand Up @@ -134,14 +134,12 @@ describe('test link marks', function () {
cy.insertLine(`[text](${link})`)
cy.getContent().find(`a[href*="${link}"]`).should('not.exist')
clickLink('#')
cy.get('.link-view-bubble__title', { timeout: 10000 }).contains(
'other://protocol',
)
cy.get('.link-view-bubble__title', { timeout: 10000 }).contains('other://protocol')
cy.get('.link-view-bubble a').should('not.exist')
})
})

describe('autolink', function () {
describe('autolink', function() {
it('with protocol to files app and fileId', () => {
cy.getFile(fileName).then(($el) => {
const id = $el.data('cyFilesListRowFileid')
Expand All @@ -167,11 +165,11 @@ describe('test link marks', function () {
})
})

describe('link menu', function () {
describe('link menu', function() {
beforeEach(() => cy.clearContent())
const text = 'some text'

describe('link to website', function () {
describe('link to website', function() {
const url = 'https://example.org/'
// Helper to reduce duplicated code, checking inserting with and without selected text
const checkLinkWebsite = (url, text) => {
Expand All @@ -187,27 +185,26 @@ describe('test link marks', function () {

beforeEach(cy.clearContent)
it('Link website without selection', () => {
cy.getFile(fileName).then(($el) => {
cy.getFile(fileName).then(() => {
checkLinkWebsite(url, url)
})
})

it('Link website with selection', () => {
cy.getFile(fileName).then(($el) => {
cy.getFile(fileName).then(() => {
cy.getContent().type(`${text}{selectAll}`)
checkLinkWebsite(url, text)
})
})
})

describe('link to local file', function () {
describe('link to local file', function() {
let fileId = null
// Helper to reduce duplicated code, checking inserting with and without selected text
const checkLinkFile = (filename, text, isFolder = false) => {
cy.getSubmenuEntry('insert-link', 'insert-link-file').click()
cy.get('.file-picker').within(() => {
cy.get(
`[data-testid="file-list-row"][data-filename="${filename}"]`,
).click()
cy.get(`[data-testid="file-list-row"][data-filename="${filename}"]`).click()
cy.get(isFolder ? '.empty-content__name' : '.file-picker__files')
cy.contains(
'button',
Expand All @@ -221,15 +218,13 @@ describe('test link marks', function () {
.should('have.text', text === undefined ? filename : text)
}

let fileId = null

beforeEach(() => cy.clearContent())

it('without text', () => {
cy.getFileId(fileName).then((id) => {
fileId = id
})
cy.getFile(fileName).then(($el) => {
cy.getFile(fileName).then(() => {
checkLinkFile(fileName)
cy.get('.modal-header__name').should('include.text', fileName)
})
Expand All @@ -238,19 +233,17 @@ describe('test link marks', function () {
cy.getFileId(fileName).then((id) => {
fileId = id
})
cy.getFile(fileName).then(($el) => {
cy.getFile(fileName).then(() => {
cy.getContent().type(`${text}{selectAll}`)
checkLinkFile(fileName, text)
cy.get('.modal-header__name').should('include.text', fileName)
})
})
it('link to directory', () => {
cy.createFolder(`${window.__currentDirectory}/dummy folder`).then(
(folderId) => {
fileId = folderId
},
)
cy.getFile(fileName).then(($el) => {
cy.createFolder(`${window.__currentDirectory}/dummy folder`).then((folderId) => {
fileId = folderId
})
cy.getFile(fileName).then(() => {
cy.getContent().type(`${text}{selectAll}`)
checkLinkFile('dummy folder', text, true)
})
Expand Down
22 changes: 11 additions & 11 deletions cypress/e2e/MenuBar.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@ import { randUser } from '../utils/index.js'

const user = randUser()

describe('Test the rich text editor menu bar', function () {
before(function () {
describe('Test the rich text editor menu bar', function() {
before(function() {
cy.createUser(user)
})

beforeEach(function () {
beforeEach(function() {
cy.login(user)
cy.uploadTestFile()
})

describe('word count', function () {
describe('word count', function() {
/**
*
*/
Expand All @@ -27,7 +27,7 @@ describe('Test the rich text editor menu bar', function () {
.get('[data-text-action-entry="character-count"]')
}

beforeEach(function () {
beforeEach(function() {
cy.visit('/apps/files')
cy.openTestFile()
})
Expand All @@ -51,7 +51,7 @@ describe('Test the rich text editor menu bar', function () {
})
})

describe('text width toggle', function () {
describe('text width toggle', function() {
beforeEach(() => {
cy.configureText('is_full_width_editor', 0)
cy.visit('/apps/files')
Expand All @@ -61,19 +61,19 @@ describe('Test the rich text editor menu bar', function () {
.as('maxWidth')
})

it('applys default', function () {
it('applys default', function() {
cy.openTestFile()
cy.get('@maxWidth').should('equal', 'min(80ch, (100% - 2 * 40px))')
})

it('toggles value', function () {
it('toggles value', function() {
cy.openTestFile()
cy.getActionEntry('remain').click()
cy.contains('Full width editor').click()
cy.get('@maxWidth').should('equal', 'calc(100% - 2 * 40px)')
})

it('preserves on reopen', function () {
it('preserves on reopen', function() {
cy.openTestFile()
cy.getActionEntry('remain').click()
cy.contains('Full width editor').click()
Expand All @@ -82,7 +82,7 @@ describe('Test the rich text editor menu bar', function () {
cy.get('@maxWidth').should('equal', 'calc(100% - 2 * 40px)')
})

it('preserves on reload', function () {
it('preserves on reload', function() {
cy.openTestFile()
cy.getActionEntry('remain').click()
cy.contains('Full width editor').click()
Expand All @@ -91,7 +91,7 @@ describe('Test the rich text editor menu bar', function () {
cy.get('@maxWidth').should('equal', 'calc(100% - 2 * 40px)')
})

it('does not interfere if width is already set', function () {
it('does not interfere if width is already set', function() {
cy.window()
.its('document.body.style')
.invoke('setProperty', '--text-editor-max-width', '987px')
Expand Down
Loading