Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
e5b1dfe
fix: Add scoped z-index to viewer for proper header stacking
silverkszlo Apr 27, 2026
bf785ca
Merge pull request #5599 from nextcloud/fix/overlapping-header-btns
elzody Apr 29, 2026
533f877
fix(settings): only allow setting auth token types to request config …
elzody Apr 13, 2026
794e541
fix(wopi): properly validate old timestamp
elzody Mar 26, 2026
67d7e1a
Merge pull request #5607 from nextcloud/fix/wopi-timestamp
elzody Apr 29, 2026
0bf027a
Merge pull request #5605 from nextcloud/fix/guest-user-owner-userconfig
elzody Apr 29, 2026
f6c2d34
fix: Make preview timeout an info log instead of error
CarlSchwan Apr 30, 2026
d9ee14d
Merge pull request #5613 from nextcloud/carl/info-debug
emberfiend Apr 30, 2026
c5a9010
fix(wopi): rate limit wopi endpoints
elzody Mar 27, 2026
59c2976
Merge pull request #5606 from nextcloud/fix/brute-force-version-history
elzody Apr 30, 2026
07d2f89
fix(l10n): Update translations from Transifex
nextcloud-bot May 1, 2026
7b605dd
refactor(Wopi): drop unused PUT_RELATIVE branch from putFile()
joshtrichards May 1, 2026
28f2526
chore(deps): Bump phpseclib/phpseclib from 3.0.51 to 3.0.52
dependabot[bot] May 2, 2026
3e3f03e
chore(deps-dev): Bump cypress from 15.14.1 to 15.14.2
dependabot[bot] May 2, 2026
f06561f
Merge pull request #5623 from nextcloud/dependabot/composer/phpseclib…
github-actions[bot] May 2, 2026
e86fb98
Merge pull request #5625 from nextcloud/dependabot/npm_and_yarn/cypre…
github-actions[bot] May 2, 2026
d22dbff
fix(l10n): Update translations from Transifex
nextcloud-bot May 3, 2026
8683c40
chore(dev-deps): Bump nextcloud/ocp package
nextcloud-command May 3, 2026
3222278
Merge pull request #5628 from nextcloud/automated/noid/main-update-ne…
github-actions[bot] May 3, 2026
cc31439
revert: temporarily revert pdf viewer assertion
elzody May 7, 2026
a3bf993
Merge pull request #5637 from nextcloud/revert-5578-fix/pdf-viewer-tests
elzody May 7, 2026
720ea33
chore(release): bump version
elzody May 7, 2026
2c85017
chore(release): update changelog
elzody May 7, 2026
7070ab1
Merge pull request #5636 from nextcloud/release/v11.0.0-beta.1
elzody May 7, 2026
a1e8411
chore(dev-deps): Bump nextcloud/ocp package
nextcloud-command May 7, 2026
00c5f7b
Merge pull request #5640 from nextcloud/automated/noid/main-update-ne…
github-actions[bot] May 7, 2026
19b1096
fix(CachedRequestService): improve isProxyStarting robustness, diagno…
joshtrichards Feb 1, 2026
750d8a7
style: formatting
elzody May 8, 2026
5b9d69c
Merge pull request #5326 from nextcloud/jtr/cached-isProxyStarting-ro…
elzody May 8, 2026
f51190e
chore(deps): Bump fast-xml-builder from 1.1.4 to 1.2.0
dependabot[bot] May 8, 2026
bf9853e
Merge pull request #5643 from nextcloud/dependabot/npm_and_yarn/fast-…
github-actions[bot] May 8, 2026
0dccc71
chore(deps-dev): Bump fast-uri from 3.1.0 to 3.1.2
dependabot[bot] May 8, 2026
ef279b8
Merge pull request #5645 from nextcloud/dependabot/npm_and_yarn/fast-…
github-actions[bot] May 8, 2026
577583f
chore(deps): Bump @babel/plugin-transform-modules-systemjs
dependabot[bot] May 8, 2026
40aa1c0
Merge pull request #5646 from nextcloud/dependabot/npm_and_yarn/babel…
github-actions[bot] May 8, 2026
bf682f0
chore(dev-deps): Bump nextcloud/ocp package
nextcloud-command May 10, 2026
a22995a
Merge pull request #5650 from nextcloud/automated/noid/main-update-ne…
github-actions[bot] May 10, 2026
1a165ef
fix(l10n): Update translations from Transifex
nextcloud-bot May 12, 2026
2f1c6dd
fix(templates): Remove hardcoded language from document template
juliusknorr May 12, 2026
0cfcb03
test: use correct app content selecator
elzody May 13, 2026
2d80b86
Merge pull request #5657 from nextcloud/fix/settings-failure
elzody May 14, 2026
d453a44
Merge pull request #5653 from nextcloud/fix/template-localization-rem…
juliusknorr May 15, 2026
3898819
feat(deps): Add Nextcloud 35 support on main
nickvergessen May 15, 2026
cdf704e
Merge pull request #5620 from nextcloud/jtr/refacor-wopiController-un…
juliusknorr May 15, 2026
c0181ea
Merge pull request #5661 from nextcloud/update-main-version
elzody May 15, 2026
735c253
chore(deps-dev): Bump systeminformation from 5.31.1 to 5.31.6
dependabot[bot] May 15, 2026
35bba4d
chore(deps-dev): Bump protobufjs from 7.5.5 to 7.5.8
dependabot[bot] May 15, 2026
dfd18ce
Merge pull request #5658 from nextcloud/dependabot/npm_and_yarn/syste…
github-actions[bot] May 15, 2026
09a2e08
Merge pull request #5655 from nextcloud/dependabot/npm_and_yarn/proto…
github-actions[bot] May 15, 2026
1383777
feat(overview): add office overview page
elzody May 8, 2026
3eb9d87
feat(overview): office overview vue component
elzody May 8, 2026
1d97879
feat(overview): support keyboard navigation
elzody May 8, 2026
eb2736f
fix(overview): update Vue mount point
elzody May 8, 2026
7ca6f87
feat(overview): re-use office file type icons
elzody May 8, 2026
cfc086d
style(overview): resolve lint errors
elzody May 8, 2026
14615f7
test: add overview page tests
elzody May 8, 2026
c505e52
feat(overview): display documents in overview
elzody May 8, 2026
b0e57a0
fix(overview): use snowflake id
elzody May 8, 2026
f4f6bb4
fix(overview): dispatch `LoadViewer` event
elzody May 8, 2026
556088c
refactor(overview): use event dispatcher
elzody May 8, 2026
3cecd2d
test: remove event dispatcher expectation
elzody May 8, 2026
f75a284
test(overview): check for LoadViewer class before dispatching event
elzody May 8, 2026
bb1092f
feat(overview): display document previews
elzody May 8, 2026
9bbe0ec
fix(overview): do not display txt files
elzody May 13, 2026
16447d7
feat(overview): file card component
elzody May 13, 2026
1b16d79
feat(overview): get rid of extra component
elzody May 13, 2026
309c711
test(overview): add more tests
elzody May 13, 2026
2507557
fix(overview): do not display previews if disabled
elzody May 14, 2026
6602c5d
feat(overview): use file type icons when previews disabled
elzody May 14, 2026
03f47b0
style: code formatting
elzody May 14, 2026
9d6a42d
test(overview): preview tests
elzody May 14, 2026
7e8e925
test(overview): organize unit tests
elzody May 14, 2026
60f74d5
fix(overview): left-align card name and subname
elzody May 14, 2026
e562809
feat(overview): add diagram support
elzody May 14, 2026
242c2fe
feat(overview): search bar
elzody May 14, 2026
04e06fe
test(overview): adds test for search bar
elzody May 14, 2026
6668472
fix(overview): ensure cursor pointer for slotted content
elzody May 15, 2026
6605e52
feat(overview): use dav search
elzody May 15, 2026
96f0178
feat(overview): sort files by recent edit, favourites first
moodyjmz May 20, 2026
ceca2f0
feat(overview): add templates service using NC Files API
moodyjmz May 20, 2026
90506cb
refactor(overview): remove hardcoded OFFICE_MIME_FILTERS, accept MIME…
moodyjmz May 20, 2026
54eb244
feat(overview): derive nav categories from template providers, use ba…
moodyjmz May 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@
-->
# Changelog

## 11.0.0-beta.1

### Fixed
- Make preview timeout an info log instead of error by @CarlSchwan in [#5613](https://github.com/nextcloud/richdocuments/pull/5613)

### Other
- Temporarily revert pdf viewer assertion by @elzody in [#5578](https://github.com/nextcloud/richdocuments/pull/5578)
- Enhance direct editing test with postMessage handling by @elzody in [#5555](https://github.com/nextcloud/richdocuments/pull/5555)

## 10.0.0-beta.1

### Added
Expand Down
12 changes: 10 additions & 2 deletions appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<description><![CDATA[This application can connect to a Collabora Online (or other) server (WOPI-like Client). Nextcloud is the WOPI Host. Please read the documentation to learn more about that.

You can also edit your documents off-line with the Collabora Office app from the **[Android](https://play.google.com/store/apps/details?id=com.collabora.libreoffice)** and **[iOS](https://apps.apple.com/us/app/collabora-office/id1440482071)** store.]]></description>
<version>11.0.0-dev.0</version>
<version>12.0.0-dev.0</version>
<licence>agpl</licence>
<author>Collabora Productivity based on work of Frank Karlitschek, Victor Dubiniuk</author>
<types>
Expand All @@ -32,7 +32,7 @@ You can also edit your documents off-line with the Collabora Office app from the
<screenshot>https://github.com/nextcloud/richdocuments/raw/main/screenshots/Nextcloud-spreadsheet.png</screenshot>
<screenshot>https://github.com/nextcloud/richdocuments/raw/main/screenshots/Nextcloud-presentation.png</screenshot>
<dependencies>
<nextcloud min-version="34" max-version="34"/>
<nextcloud min-version="35" max-version="35"/>
</dependencies>
<background-jobs>
<job>OCA\Richdocuments\Backgroundjobs\ObtainCapabilities</job>
Expand All @@ -55,4 +55,12 @@ You can also edit your documents off-line with the Collabora Office app from the
<personal>OCA\Richdocuments\Settings\Personal</personal>
<personal-section>OCA\Richdocuments\Settings\Section</personal-section>
</settings>
<navigations>
<navigation>
<name>Office</name>
<route>richdocuments.overview.index</route>
<icon>app.svg</icon>
<order>10</order>
</navigation>
</navigations>
</info>
3 changes: 3 additions & 0 deletions appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
// external api access
['name' => 'document#extAppGetData', 'url' => '/ajax/extapp/data/{fileId}', 'verb' => 'POST'],

// Office overview page
['name' => 'overview#index', 'url' => '/overview', 'verb' => 'GET'],

// Settings
['name' => 'settings#setPersonalSettings', 'url' => 'ajax/personal.php', 'verb' => 'POST'],
['name' => 'settings#setSettings', 'url' => 'ajax/admin.php', 'verb' => 'POST'],
Expand Down
20 changes: 10 additions & 10 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 1 addition & 3 deletions cypress/e2e/open.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,7 @@ describe('Open PDF with richdocuments', () => {
.its('body').should('not.be.empty')
.as('pdfViewer')

// TODO: Once fixed upstream, this will start failing again and can be reverted
// https://github.com/nextcloud/files_pdfviewer/pull/1422
cy.get('@pdfViewer').find('.pdfViewer').should('not.exist')
cy.get('@pdfViewer').find('.pdfViewer').should('exist')
})

// Verify that using the file action 'Edit with Nextcloud Office'
Expand Down
158 changes: 158 additions & 0 deletions cypress/e2e/overview.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
/**
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

const CATEGORY_FILES = [
{
category: 'Documents',
emptyMessage: 'No documents found',
fixture: 'document.odt',
mimeType: 'application/vnd.oasis.opendocument.text',
},
{
category: 'Presentations',
emptyMessage: 'No presentations found',
fixture: 'presentation.odp',
mimeType: 'application/vnd.oasis.opendocument.presentation',
},
{
category: 'Spreadsheets',
emptyMessage: 'No spreadsheets found',
fixture: 'spreadsheet.ods',
mimeType: 'application/vnd.oasis.opendocument.spreadsheet',
},
{
category: 'Diagrams',
emptyMessage: 'No diagrams found',
fixture: 'drawing.odg',
mimeType: 'application/vnd.oasis.opendocument.graphics',
},
]

describe('Office overview page', function() {
describe('without files', function() {
let randUser

before(function() {
cy.createRandomUser().then(user => {
randUser = user
})
})

beforeEach(function() {
cy.login(randUser)
cy.visit('/apps/richdocuments/overview')
})

it('Shows the navigation sidebar with appropriate entries', function() {
CATEGORY_FILES.forEach(({ category }) => {
cy.contains('.app-navigation-entry', category).should('exist')
})
})

it('Highlights the active navigation item and shows empty state on click', function() {
CATEGORY_FILES.forEach(({ category, emptyMessage }) => {
cy.contains('.app-navigation-entry', category).click()
cy.contains('.app-navigation-entry', category)
.should('have.class', 'active')
cy.get('.empty-content')
.should('be.visible')
.and('contain', emptyMessage)
})
})
})

describe('with files', function() {
let randUser

before(function() {
cy.createRandomUser().then(user => {
randUser = user
cy.login(user)

CATEGORY_FILES.forEach(({ fixture, mimeType }) => {
cy.uploadFile(user, fixture, mimeType, `/${fixture}`)
})

cy.createFolder(user, 'subfolder').then(() => {
CATEGORY_FILES.forEach(({ fixture, mimeType }) => {
cy.uploadFile(user, fixture, mimeType, `/subfolder/${fixture}`)
})
})
})
})

beforeEach(function() {
cy.login(randUser)
cy.visit('/apps/richdocuments/overview', {
onBeforeLoad(win) {
cy.spy(win, 'postMessage').as('postMessage')
},
})
})

CATEGORY_FILES.forEach(({ category, fixture }) => {
it(`Shows ${category} file cards in the correct category`, function() {
cy.contains('.app-navigation-entry', category).click()

cy.contains('.file-card__name', fixture)
.should('be.visible')

cy.get('.file-card__preview img')
.should('exist')

cy.get('.input-field__label')
.should('contain', `Search ${category.toLowerCase()}`)
})

it(`Opens the viewer when clicking a ${category} file card`, function() {
cy.contains('.app-navigation-entry', category).click()
cy.contains('.file-card', fixture).click()

cy.waitForViewer()
cy.waitForCollabora()

cy.closeDocument()
})
})

it('Shows file cards for files in subdirectories', function() {
CATEGORY_FILES.forEach(({ category }) => {
cy.contains('.app-navigation-entry', category).click()
cy.get('.file-card').should('have.length.at.least', 2)
})
})

it('Filters file cards by search query', function() {
const { category, fixture } = CATEGORY_FILES[0]
const stem = fixture.split('.')[0]

cy.contains('.app-navigation-entry', category).click()

cy.get('.office-overview__search [type="search"]').type(stem)
cy.contains('.file-card__name', fixture).should('be.visible')
})

it('Shows empty state when search matches nothing', function() {
const { category } = CATEGORY_FILES[0]

cy.contains('.app-navigation-entry', category).click()

cy.get('.office-overview__search [type="search"]').type('xyz123noresults')
cy.get('.empty-content').should('be.visible')
})

it('Resets search when switching categories', function() {
const [first, second] = CATEGORY_FILES

cy.contains('.app-navigation-entry', first.category).click()
cy.get('.office-overview__search [type="search"]').type('xyz123noresults')

cy.contains('.app-navigation-entry', second.category).click()

cy.get('.office-overview__search [type="search"]').should('have.value', '')
cy.contains('.file-card__name', second.fixture).should('be.visible')
})
})
})
8 changes: 4 additions & 4 deletions cypress/e2e/settings.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ describe('Office admin settings', function() {
})

it('Error for invalid url', function() {
cy.get('#app-content')
cy.get('#app-content-vue')
.scrollTo('topLeft')

cy.get('#app-content')
cy.get('#app-content-vue')
.scrollIntoView()
.should('be.visible')
cy.screenshot()
Expand All @@ -40,10 +40,10 @@ describe('Office admin settings', function() {
})

it('Opens settings and configure a valid url', function() {
cy.get('#app-content')
cy.get('#app-content-vue')
.scrollTo('topLeft')

cy.get('#app-content')
cy.get('#app-content-vue')
.scrollIntoView()
.should('be.visible')
cy.screenshot()
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/templates.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ describe('Global templates', function() {
.scrollIntoView()

cy.intercept('DELETE', '**/richdocuments/template/*').as('templateDeleteRequest')
cy.get('.template-btn[data-cy-template-btn-name="systemtemplate"]').click()
cy.get('.file-card[data-cy-template-btn-name="systemtemplate"]').click()

cy.wait('@templateDeleteRequest').then(({ response }) => {
expect(response.statusCode).to.equal(204)
Expand Down
Binary file modified emptyTemplates/document.ott
Binary file not shown.
2 changes: 1 addition & 1 deletion l10n/de.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion l10n/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
"Empty" : "Leer",
"Anonymous guest" : "Anonymer Gast",
"%s (Guest)" : "%s (Gast)",
"Edit office documents directly in your browser." : "Bearbeite Office-Dokumente direkt in deinem Browser",
"Edit office documents directly in your browser." : "Office-Dokumente direkt im Browser bearbeiten.",
"This application can connect to a Collabora Online (or other) server (WOPI-like Client). Nextcloud is the WOPI Host. Please read the documentation to learn more about that.\n\nYou can also edit your documents off-line with the Collabora Office app from the **[Android](https://play.google.com/store/apps/details?id=com.collabora.libreoffice)** and **[iOS](https://apps.apple.com/us/app/collabora-office/id1440482071)** store." : "Diese App kann sich mit einem Collabora Online (oder anderem) Server (als WOPI-ähnlicher Client) verbinden. Nextcloud ist der WOPI-Host. Weitere Einzelheiten hierzu sind in der Dokumentation zu finden.\n\nDokumente können auch offline mit der Collabora Office App aus dem **[Android](https://play.google.com/store/apps/details?id=com.collabora.libreoffice)** und **[iOS](https://apps.apple.com/us/app/collabora-office/id1440482071)** Store bearbeitet werden.",
"Instance-wide templates that should be available to all users." : "Instanzweite Vorlagen, die allen Benutzern zur Verfügung stehen sollten.",
"Uploaded template \"{name}\"" : "Hochgeladene Vorlage \"{name}\"",
Expand Down
2 changes: 1 addition & 1 deletion l10n/de_DE.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion l10n/de_DE.json
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
"Empty" : "Leer",
"Anonymous guest" : "Anonymer Gast",
"%s (Guest)" : "%s (Gast)",
"Edit office documents directly in your browser." : "Bearbeiten Sie Office-Dokumente direkt in Ihrem Browser.",
"Edit office documents directly in your browser." : "Office-Dokumente direkt im Browser bearbeiten.",
"This application can connect to a Collabora Online (or other) server (WOPI-like Client). Nextcloud is the WOPI Host. Please read the documentation to learn more about that.\n\nYou can also edit your documents off-line with the Collabora Office app from the **[Android](https://play.google.com/store/apps/details?id=com.collabora.libreoffice)** and **[iOS](https://apps.apple.com/us/app/collabora-office/id1440482071)** store." : "Diese App kann sich mit einem Collabora Online (oder anderem) Server (als WOPI-ähnlicher Client) verbinden. Nextcloud ist der WOPI-Host. Weitere Einzelheiten hierzu sind in der Dokumentation zu finden.\n\nDokumente können auch offline mit der Collabora Office App aus dem **[Android](https://play.google.com/store/apps/details?id=com.collabora.libreoffice)** und **[iOS](https://apps.apple.com/us/app/collabora-office/id1440482071)** Store bearbeitet werden.",
"Instance-wide templates that should be available to all users." : "Instanzweite Vorlagen, die allen Benutzern zur Verfügung stehen sollten.",
"Uploaded template \"{name}\"" : "Hochgeladene Vorlage \"{name}\"",
Expand Down
Loading
Loading