Compare commits

...

128 Commits

Author SHA1 Message Date
c4de5afd4b java-raw: inner 2025-07-07 15:52:44 +03:00
f6e04d5ab9 java-raw: set config 2025-07-07 15:52:43 +03:00
925c6e96fc java-raw: add custom cors 2025-07-07 15:52:30 +03:00
bf873519de java-raw: idk project file 2025-07-07 15:52:29 +03:00
0df41b9e36 java-raw: add docker files 2025-07-07 15:52:29 +03:00
00296b90c8 update demo files 2025-07-04 16:42:09 +03:00
3eae49253f nodejs: отображать в логах отсутствие WOPI заголовков ( for Bug 75684 ) 2025-07-02 11:55:24 +03:00
c8d28ec950 nodejs: 403 if verification fails 2025-07-02 11:47:00 +03:00
403ff78807 Merge pull request 'feature/request-users-pagination' from feature/request-users-pagination into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/68
2025-07-02 06:08:01 +00:00
bfa121f343 Merge remote-tracking branch 'remotes/origin/develop' into feature/request-users-pagination
# Conflicts:
#	CHANGELOG.md
2025-07-02 09:06:12 +03:00
f38e2779be Merge pull request 'fix/convert-box-checkmark-color' from fix/convert-box-checkmark-color into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/67
2025-07-02 06:04:03 +00:00
afdd56388c Merge remote-tracking branch 'remotes/origin/master' into develop 2025-07-01 17:19:56 +03:00
c73eece042 Merge pull request 'ci: added create-tag.yml and run release on create tag' from ci/git-actions into master
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/70
2025-07-01 14:19:30 +00:00
e8a68fad5a Merge remote-tracking branch 'remotes/origin/master' into develop 2025-07-01 17:14:05 +03:00
8701cc53e9 Merge pull request 'release/1.14.0' from release/1.14.0 into master
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/69
2025-07-01 14:09:50 +00:00
5a214b80d9 ci: added create-tag.yml and run release on create tag 2025-07-01 17:08:29 +03:00
f231b1cd72 nodejs: fix lint 2025-07-01 16:46:51 +03:00
1654d4978f changelog: set users by parts 2025-06-25 17:02:02 +07:00
86bf4d083a feat(ruby): set users by parts with infinite scroll for pagination 2025-06-25 17:00:43 +07:00
540a8ea98b feat(python): set users by parts with infinite scroll for pagination 2025-06-25 17:00:27 +07:00
729c67ab8f feat(php-laravel): set users by parts with infinite scroll for pagination 2025-06-25 17:00:09 +07:00
3d529bf57c feat(php): set users by parts with infinite scroll for pagination 2025-06-25 16:59:48 +07:00
7f2dfc37d4 feat(java-spring): set users by parts with infinite scroll for pagination 2025-06-25 16:59:33 +07:00
6c386f852d feat(java): set users by parts with infinite scroll for pagination 2025-06-25 16:59:06 +07:00
7469285d0c feat(go): set users by parts with infinite scroll for pagination 2025-06-25 16:58:54 +07:00
863eee6db7 feat(csharp-mvc): set users by parts with infinite scroll for pagination 2025-06-25 16:58:34 +07:00
74ff4cec88 feat(csharp): set users by parts with infinite scroll for pagination 2025-06-25 16:58:15 +07:00
209881f280 Merge branch 'release/1.14.0' into develop 2025-06-25 11:11:49 +03:00
32b4c49f6e changelog: conversion dialog starts with gray check mark on step 1 2025-06-24 15:16:08 +07:00
9545bd4375 fix(ruby): conversion dialog starts with gray check mark on step 1 2025-06-24 15:15:41 +07:00
2bc8081b04 fix(python): conversion dialog starts with gray check mark on step 1 2025-06-24 15:15:27 +07:00
9ce708913b fix(php-laravel): conversion dialog starts with gray check mark on step 1 2025-06-24 15:15:02 +07:00
0db101a270 fix(php): conversion dialog starts with gray check mark on step 1 2025-06-24 15:14:39 +07:00
5660b1f1c2 fix(nodejs): conversion dialog starts with gray check mark on step 1 2025-06-24 15:14:22 +07:00
ef294de17f fix(java-spring): conversion dialog starts with gray check mark on step 1 2025-06-24 15:13:52 +07:00
1759180e13 fix(java): conversion dialog starts with gray check mark on step 1 2025-06-24 15:13:30 +07:00
1ef8d40b50 fix(go): conversion dialog starts with gray check mark on step 1 2025-06-24 15:13:01 +07:00
8f9d99faf8 fix(csharp-mvc): conversion dialog starts with gray check mark on step 1 2025-06-24 15:12:26 +07:00
0d0ecc73f8 fix(csharp): conversion dialog starts with gray check mark on step 1 2025-06-24 15:12:12 +07:00
2166b31858 nodejs: infinite scroll for users pagination 2025-06-20 16:11:13 +03:00
3117231ac8 Merge pull request 'feature/load-scripts-not-in-popup' from feature/load-scripts-not-in-popup into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/66
2025-06-19 08:03:46 +00:00
0b61d7ff21 Merge remote-tracking branch 'remotes/origin/develop' into feature/load-scripts-not-in-popup
# Conflicts:
#	CHANGELOG.md
2025-06-19 11:00:21 +03:00
cda6534e5b Merge pull request 'feature/change-tab-title-on-rename' from feature/change-tab-title-on-rename into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/65
2025-06-19 07:52:30 +00:00
c51e3b8837 formats update 2025-06-18 16:03:36 +03:00
a18a5ee73f Merge remote-tracking branch 'remotes/origin/release/1.14.0' into develop 2025-06-18 15:35:03 +03:00
07b7615efd nodejs: formats update 2025-06-18 15:04:25 +03:00
a0651092f7 feat(ruby): loading scripts on page load 2025-06-18 15:55:55 +07:00
aba434f46d feat(python): loading scripts on page load 2025-06-18 15:53:28 +07:00
edb43ab59d feat(php-laravel): loading scripts on page load 2025-06-18 15:50:57 +07:00
dabd5816f1 feat(php): loading scripts on page load 2025-06-18 15:48:07 +07:00
0c7eabdf3c feat(java-spring): loading scripts on page load 2025-06-18 15:44:45 +07:00
11ef9d8a80 feat(java): loading scripts on page load 2025-06-18 15:37:16 +07:00
eb9e9f7db4 feat(go): loading scripts on page load 2025-06-18 15:28:12 +07:00
eb0a556333 feat(csharp-mvc): loading scripts on page load 2025-06-18 15:15:50 +07:00
1f661f588b feat(csharp): loading scripts on page load 2025-06-18 15:05:44 +07:00
b6577bd184 change tab title on rename 2025-06-18 14:03:08 +07:00
5e1e23176c feat(ruby): change document.title when renaming 2025-06-18 14:01:34 +07:00
6045fefe43 feat(python): change document.title when renaming 2025-06-18 14:01:34 +07:00
68f73f543a feat(php-laravel): change document.title when renaming 2025-06-18 14:01:34 +07:00
ff745e0b71 feat(php): change document.title when renaming 2025-06-18 14:01:34 +07:00
b7e267842f feat(java-spring): change document.title when renaming 2025-06-18 14:01:34 +07:00
dc54716171 feat(java): change document.title when renaming 2025-06-18 14:01:34 +07:00
60376861ce feat(go): change document.title when renaming 2025-06-18 14:01:34 +07:00
108f655fec feat(csharp-mvc): change document.title when renaming 2025-06-18 14:01:34 +07:00
4a5da5ee4e feat(csharp): change document.title when renaming 2025-06-18 14:01:33 +07:00
6a10d55e2b feat(nodejs): change document.title when renaming 2025-06-18 14:01:33 +07:00
af53ccb534 Merge pull request 'fix/popup-converted-filename' from fix/popup-converted-filename into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/64
2025-06-17 12:39:38 +00:00
acf09aa5ef change filename to changelog 2025-06-17 15:25:07 +03:00
36866764ce Merge remote-tracking branch 'remotes/origin/develop' into fix/popup-converted-filename 2025-06-17 15:24:05 +03:00
b1df939a1a Merge remote-tracking branch 'remotes/origin/release/1.14.0' into develop 2025-06-17 15:20:49 +03:00
307f15581b fix changelog 2025-06-17 15:19:53 +03:00
ada58ecb95 fix(ruby): change uploaded file name if converted 2025-06-17 16:49:03 +07:00
c78f1bd2ce fix(python): change uploaded file name if converted 2025-06-17 16:48:17 +07:00
91643fe247 fix(php-laravel): change uploaded file name if converted 2025-06-17 16:47:35 +07:00
538666f6c1 fix(php): change uploaded file name if converted 2025-06-17 16:44:53 +07:00
9402f769c6 fix(java-spring): change uploaded file name if converted 2025-06-17 16:44:02 +07:00
94f4995f3b fix(java): change uploaded file name if converted 2025-06-17 16:42:57 +07:00
bb736d85f8 fix(go): change uploaded file name if converted 2025-06-17 16:41:44 +07:00
721f2fbf6c fix(csharp-mvc): change uploaded file name if converted 2025-06-17 16:40:37 +07:00
bb22b73431 fix(csharp): change uploaded file name if converted 2025-06-17 16:39:38 +07:00
704d8bceb9 fix(nodejs): change uploaded file name if converted 2025-06-17 14:44:59 +07:00
74097ec485 Merge branch 'release/v9.0.0' into develop 2025-06-09 16:07:10 +03:00
e15d9a3163 1.14.0 2025-06-09 16:04:30 +03:00
0dd9cbca36 docs: fix api link 2025-06-03 16:40:06 +03:00
cd47a8e0de Merge remote-tracking branch 'remotes/origin/feature/setUsers' into release/v9.0.0 2025-06-02 12:39:34 +03:00
cf1541bf3a nodejs: set users by parts 2025-05-31 23:08:54 +03:00
fe0d985555 Merge remote-tracking branch 'remotes/origin/release/v9.0.0' into develop
# Conflicts:
#	CHANGELOG.md
2025-05-12 17:22:35 +03:00
d533cca184 nodejs: support md 2025-05-12 17:18:15 +03:00
9aa6e58bfc nodejs: set Content-Type for response 2025-05-12 15:10:11 +03:00
537d7eaeb9 nodejs: changed preloading (71c937ae37) 2025-05-12 15:07:23 +03:00
0d894df803 Merge pull request 'dependabot-updates' from dependabot-updates into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/63
2025-04-30 09:47:22 +00:00
b93338d5e9 build(nodejs): bump formidable from 3.5.1 to 3.5.4 2025-04-30 13:56:06 +07:00
8c18df7e4c build(java-spring): bump org.apache.httpcomponents.client5:httpclient5 from 5.4 to 5.4.3 2025-04-30 13:46:57 +07:00
5b5593240f build(php-laravel): update axios, vite, laravel-vite-plugin, rollup and esbuild 2025-04-30 13:17:15 +07:00
770b8bbe70 build(php-laravel): bump laravel/framework to 11.44.7 2025-04-30 12:52:37 +07:00
dd0987a6fc build(ruby): bump nokogiri to 1.18.8 and net-imap to 0.4.20 2025-04-30 12:18:46 +07:00
70affcc0e8 Merge pull request 'refactor(php-laravel): rename exception class file to comply with psr-4 standards' from fix/php-laravel-psr4-classname-rename into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/62
2025-04-29 12:40:35 +00:00
ceacac691d refactor(php-laravel): rename exception class file to comply with psr-4 standards 2025-04-29 12:28:36 +05:00
a5e8db73f8 ur skin language 2025-04-28 13:17:40 +03:00
05f22b9e24 nodejs: auto-convert for odg 2025-04-24 15:22:00 +03:00
84936a506f nodejs: move preload to changelog (71c937ae37) 2025-04-22 16:25:16 +03:00
501fbeacaf Merge remote-tracking branch 'remotes/origin/hotfix/v8.3.3' into release/v9.0.0
# Conflicts:
#	CHANGELOG.md
2025-04-15 09:26:36 +03:00
71c937ae37 nodejs: preload frame moved from uploading popap 2025-04-14 16:25:47 +03:00
71bcc65522 nodejs: fix host on verification (9faf628fba) 2025-04-14 15:52:47 +03:00
345e272cbb Merge remote-tracking branch 'remotes/origin/release/v9.0.0' into develop
# Conflicts:
#	CHANGELOG.md
2025-04-14 13:33:50 +03:00
9116eae2a1 nodejs: changeshistory is not used (bd784224b9) 2025-04-14 13:30:19 +03:00
e8b384f49a Merge pull request 'fix(php-laravel): fix download failure during attempt to get a token from a custom jwt header' from fix/php-laravel-jwt-header into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/61
2025-04-14 10:29:55 +00:00
8cf84391c0 php-laravel: fix to changelog 2025-04-14 13:29:34 +03:00
13554abfcb Merge branch 'feature/preload' into release/v9.0.0 2025-04-14 13:26:59 +03:00
f5e279ca11 change preload address 2025-04-14 13:22:17 +03:00
9395d183b0 nodejs: use default config 2025-04-14 12:50:04 +03:00
09600d91c2 nodejs: edit xlsb, view odg 2025-04-11 17:00:11 +03:00
dec01fe8b2 manually extract the bearer token from a jwt header 2025-04-10 22:04:24 +05:00
46d308c1b8 Merge branch 'release/v9.0.0' into develop
# Conflicts:
#	CHANGELOG.md
2025-03-28 13:48:37 +03:00
a7552677eb Merge branch 'hotfix/v8.3.3' into release/v9.0.0
# Conflicts:
#	CHANGELOG.md
#	web/documentserver-example/nodejs/public/assets/document-formats
#	web/documentserver-example/nodejs/public/images/diagram.ico
2025-03-28 13:45:09 +03:00
c585e30eb8 Merge remote-tracking branch 'remotes/origin/master' into hotfix/v8.3.3
# Conflicts:
#	CHANGELOG.md
2025-03-28 13:42:34 +03:00
4af422acb3 Merge pull request 'release/1.13.0' from release/1.13.0 into master
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/60
2025-03-28 10:34:05 +00:00
6bac7ffc5b upload-artifact v4 2025-03-28 12:49:27 +03:00
b6a9a4ba77 nodejs: fix lint
# Conflicts:
#	web/documentserver-example/nodejs/helpers/users.js
2025-03-28 12:41:50 +03:00
76ee327af8 fix readme 2025-03-28 12:35:21 +03:00
2df44605c3 3rd-party license 2025-03-28 12:24:35 +03:00
888fb0e12c Merge pull request 'fix(ruby): replacing host when version download url is present. Fix Bug 73693' from fix/ruby-restore into release/1.13.0
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/59
2025-03-27 07:57:59 +00:00
f1c4e8d875 fix(ruby): replacing host when version download url is present. Fix Bug 73693 2025-03-26 12:44:04 +07:00
f394be17a4 Merge pull request '1.13.0-bugfix' from 1.13.0-bugfix into release/1.13.0
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/57
2025-03-25 08:06:11 +00:00
ebd306d2b2 fix(python): correct version author when changes exist. Fix Bug 73505 2025-03-25 14:11:12 +07:00
2447aaef12 fix(ruby): correct version author when changes exist. Fix Bug 73505 2025-03-25 13:15:01 +07:00
ed586de8c8 fix(ruby): replace public hostname in the intermediate version download url. Fix Bug 73655 2025-03-25 13:14:05 +07:00
a759f97508 fix(ruby): sort files by modification time. Fix Bug 73654 2025-03-25 11:48:16 +07:00
129 changed files with 1961 additions and 1398 deletions

View File

@ -25,7 +25,7 @@ jobs:
rsync -av --exclude='deploy' ./ ./deploy/'DotNet (Csharp MVC) Example'
rm -rf ./deploy/'DotNet (Csharp MVC) Example'/assets/.git
- name: Upload Artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: DotNet.Csharp.MVC.Example
path: ${{ github.workspace }}/web/documentserver-example/csharp-mvc/deploy

View File

@ -24,7 +24,7 @@ jobs:
rsync -av --exclude='deploy' ./ ./deploy/'DotNet (Csharp) Example'
rm -rf ./deploy/'DotNet (Csharp) Example'/assets/.git
- name: Upload Artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: DotNet.Csharp.Example
path: ${{ github.workspace }}/web/documentserver-example/csharp/deploy

View File

@ -25,7 +25,7 @@ jobs:
rm -rf ./deploy/'Java Example'/src/main/resources/assets/document-formats/.git
rm -rf ./deploy/'Java Example'/src/main/resources/assets/document-templates/.git
- name: Upload Artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: Java.Example
path: ${{ github.workspace }}/web/documentserver-example/java/deploy

View File

@ -25,7 +25,7 @@ jobs:
rm -rf ./deploy/'Node.js Example'/public/assets/document-formats/.git
rm -rf ./deploy/'Node.js Example'/public/assets/document-templates/.git
- name: Upload Artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: Node.js.Example
path: ${{ github.workspace }}/web/documentserver-example/nodejs/deploy

View File

@ -25,7 +25,7 @@ jobs:
rm -rf ./deploy/'PHP Example'/assets/document-formats/.git
rm -rf ./deploy/'PHP Example'/assets/document-templates/.git
- name: Upload Artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: PHP.Example
path: ${{ github.workspace }}/web/documentserver-example/php/deploy

View File

@ -25,7 +25,7 @@ jobs:
rm -rf ./deploy/'Python Example'/assets/document-formats/.git
rm -rf ./deploy/'Python Example'/assets/document-templates/.git
- name: Upload Artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: Python.Example
path: ${{ github.workspace }}/web/documentserver-example/python/deploy

View File

@ -25,7 +25,7 @@ jobs:
rm -rf ./deploy/'Ruby Example'/public/assets/document-formats/.git
rm -rf ./deploy/'Ruby Example'/public/assets/document-templates/.git
- name: Upload Artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: Ruby.Example
path: ${{ github.workspace }}/web/documentserver-example/ruby/deploy

View File

@ -26,7 +26,7 @@ jobs:
rm -rf ./deploy/'Java Spring Example'/src/main/resources/assets/document-formats/.git
rm -rf ./deploy/'Java Spring Example'/src/main/resources/assets/document-templates/.git
- name: Upload Artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: Java.Spring.Example
path: ${{ github.workspace }}/web/documentserver-example/java-spring/deploy

27
.github/workflows/create-tag.yml vendored Normal file
View File

@ -0,0 +1,27 @@
name: Create Tag
on:
push:
branches: [master]
paths-ignore:
- '.github/**'
- '**/AUTHORS.md'
- '**/LICENSE'
- '**/README.md'
jobs:
create-tag:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Get Info
run: |
echo "version=$(grep -Eo '[0-9]+(\.[0-9]+)+' CHANGELOG.md | head -n 1)" >> $GITHUB_OUTPUT
id: info
- name: Create Tag
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
git tag -a 'v${{ steps.info.outputs.version }}' -m 'Release/v${{ steps.info.outputs.version }}'
git push origin 'v${{ steps.info.outputs.version }}'

View File

@ -2,7 +2,8 @@ name: Release
on:
push:
branches: [master]
tags:
- 'v*'
permissions:
contents: write

8
.gitmodules vendored
View File

@ -5,7 +5,6 @@
[submodule "web/documentserver-example/nodejs/public/assets/document-formats"]
path = web/documentserver-example/nodejs/public/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats
branch = feature/diagram
[submodule "web/documentserver-example/csharp-mvc/assets/document-templates"]
path = web/documentserver-example/csharp-mvc/assets/document-templates
url = https://github.com/ONLYOFFICE/document-templates
@ -13,7 +12,6 @@
[submodule "web/documentserver-example/csharp-mvc/assets/document-formats"]
path = web/documentserver-example/csharp-mvc/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats
branch = feature/diagram
[submodule "web/documentserver-example/php/assets/document-templates"]
path = web/documentserver-example/php/assets/document-templates
url = https://github.com/ONLYOFFICE/document-templates
@ -21,7 +19,6 @@
[submodule "web/documentserver-example/php/assets/document-formats"]
path = web/documentserver-example/php/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats
branch = feature/diagram
[submodule "web/documentserver-example/python/assets/document-templates"]
path = web/documentserver-example/python/assets/document-templates
url = https://github.com/ONLYOFFICE/document-templates
@ -45,19 +42,15 @@
[submodule "web/documentserver-example/go/static/assets/document-formats"]
path = web/documentserver-example/go/static/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats
branch = feature/diagram
[submodule "web/documentserver-example/python/assets/document-formats"]
path = web/documentserver-example/python/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats
branch = feature/diagram
[submodule "web/documentserver-example/ruby/assets/document-formats"]
path = web/documentserver-example/ruby/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats
branch = feature/diagram
[submodule "web/documentserver-example/java/src/main/resources/assets/document-formats"]
path = web/documentserver-example/java/src/main/resources/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats
branch = feature/diagram
[submodule "web/documentserver-example/csharp/assets/document-templates"]
path = web/documentserver-example/csharp/assets/document-templates
url = https://github.com/ONLYOFFICE/document-templates
@ -65,7 +58,6 @@
[submodule "web/documentserver-example/csharp/assets/document-formats"]
path = web/documentserver-example/csharp/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats
branch = feature/diagram
[submodule "web/documentserver-example/php-laravel/public/assets/document-templates"]
path = web/documentserver-example/php-laravel/public/assets/document-templates
url = https://github.com/ONLYOFFICE/document-templates

View File

@ -361,6 +361,41 @@ License: MIT
License File: serializer.license
web/documentserver-example/php-laravel
jQuery.BlockUI - The jQuery BlockUI Plugin lets you simulate synchronous behavior when using AJAX, without locking the browser. (https://github.com/malsup/blockui/)
License: MIT, GPL
License File: jQuery.BlockUI.license
jQuery.FileUpload - File Upload widget with multiple file selection, drag&drop support, progress bar, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads. (https://github.com/blueimp/jQuery-File-Upload/blob/master/LICENSE.txt)
License: MIT
License File: jQuery.FileUpload.license
jQuery.iframe-transport - jQuery Iframe Transport Plugin for File Upload (https://github.com/blueimp/jQuery-File-Upload/blob/master/LICENSE.txt)
License: MIT
License File: jQuery.iframe-transport.license
jQuery - jQuery is a new kind of JavaScript Library. jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript. NOTE: This package is maintained on behalf of the library owners by the NuGet Community Packages project at https://nugetpackages.codeplex.com/ (https://jquery.org/license/)
License: MIT
License File: jQuery.license
jQuery.Migrate - Upgrading libraries such as jQuery can be a lot of work, when breaking changes have been introduced. jQuery Migrate makes this easier, by restoring the APIs that were removed, and additionally shows warnings in the browser console (development version of jQuery Migrate only) when removed and/or deprecated APIs are used. (https://github.com/jquery/jquery-migrate/blob/main/LICENSE.txt)
License: OpenJS
License File: jQuery.Migrate.license
jQuery.UI - jQuery UI is an open source library of interface components — interactions, full-featured widgets, and animation effects — based on the stellar jQuery javascript library . Each component is built according to jQuery's event-driven architecture (find something, manipulate it) and is themeable, making it easy for developers of any skill level to integrate and extend into their own code. (https://jquery.org/license/)
License: MIT
License File: jQuery.UI.license
JWT - PHP package for JWT (https://github.com/firebase/php-jwt/blob/main/LICENSE)
License: BSD-3-Clause
License File: jwt.license
Laravel - Laravel is a web application framework with expressive, elegant syntax. Weve already laid the foundation for your next big idea — freeing you to create without sweating the small things. (https://github.com/laravel/framework/blob/master/LICENSE.md)
License - MIT
License File - laravel.license
web/documentserver-example/python
django-stubs - PEP-484 stubs for Django. (https://github.com/typeddjango/django-stubs/blob/master/LICENSE.md)

View File

@ -1,9 +1,28 @@
# Change Log
- update demo files
- set users by parts
- open the conversion dialog box with a gray check mark on the type selection step
- preload frame moved from uploading popap
- change tab title on rename
- change uploaded file name in popap if converted
- php-laravel: fix custom jwt header
- features tips for anonymous
- view odg, md
- edit xlsb
- support vsdx in diagram editor
## 1.14.0
- nodejs: set users by parts
- nodejs: preload frame moved from uploading popap
- nodejs: view odg, md
- nodejs: edit xlsb
- nodejs: support vsdx in diagram editor
- nodejs: fix wopi verification
- nodejs: user role
- nodejs: start filling
- support vsdx in diagram editor
- ur skin language
- change preload.html address
## 1.13.0
- nodejs: rename in wopi

View File

@ -5,7 +5,7 @@ Do NOT use these integration examples on your own server without proper code mod
In case you enabled any of the test examples, disable it before going for production.
These examples show the way to integrate [ONLYOFFICE Docs][2] into your own website or application using one of the programming languages.
The package contains examples written in .Net (C# MVC), .Net (C#), Java, Java Spring, Node.js, PHP, Python and Ruby.
The package contains examples written in .Net (C# MVC), .Net (C#), Go, Java, Java Spring, Node.js, PHP, PHP (Laravel), Python and Ruby.
You should change `http://documentserver` to your server address in these files:
* [.Net (C# MVC)](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/csharp-mvc) - `web/documentserver-example/csharp-mvc/web.appsettings.config`
@ -15,10 +15,11 @@ You should change `http://documentserver` to your server address in these files:
* [Java Spring](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/java-spring) - `web/documentserver-example/java-spring/src/main/resources/application.properties`
* [Node.js](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/nodejs) - `web/documentserver-example/nodejs/config/default.json`
* [PHP](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/php) - `web/documentserver-example/php/src/configuration/ConfigurationManager.php`
* [PHP (Laravel)](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/php-laravel) - `web/documentserver-example/php-laravel/.env.example`
* [Python](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/python) - `web/documentserver-example/python/src/configuration/configuration.py`
* [Ruby](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/ruby) - `web/documentserver-example/ruby/app/configuration/configuration.rb`
More information on how to use these examples can be found here: [http://api.onlyoffice.com/editors/demopreview](http://api.onlyoffice.com/editors/demopreview "http://api.onlyoffice.com/editors/demopreview")
More information on how to use these examples can be found here: [https://api.onlyoffice.com/docs/docs-api/samples/language-specific-examples/](https://api.onlyoffice.com/docs/docs-api/samples/language-specific-examples/)
## API methods for test examples

View File

@ -511,10 +511,6 @@ label .checkbox {
line-height: 150%;
}
#loadScripts {
display: none;
}
#iframeScripts {
position: absolute;
visibility: hidden;

View File

@ -12,7 +12,7 @@ See the detailed guide to learn how to install Document Server [for Windows](htt
## Step 2. Download the .Net (C# MVC) code for the editors integration
Download the [.Net (C# MVC) example](https://api.onlyoffice.com/editors/demopreview) from our site.
Download the [.Net (C# MVC) example](https://api.onlyoffice.com/docs/docs-api/samples/language-specific-examples/) from our site.
To connect the editors to your website, specify the path to the editors installation and the path to the storage folder in the *web.appsettings.config* file:
```
@ -21,7 +21,7 @@ To connect the editors to your website, specify the path to the editors installa
```
where the **documentserver** is the name of the server with the ONLYOFFICE Document Server installed and the **storage-path** is the path where files will be created and stored. You can set an absolute path.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/editors/advanced) in the *DocEditor.aspx* file.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/docs/docs-api/usage-api/advanced-parameters/) in the *DocEditor.aspx* file.
## Step 3. Install the prerequisites
Сheck if your system meets the system requirements:

View File

@ -126,7 +126,7 @@ if (typeof jQuery != "undefined") {
if (!formatManager.isAutoConvertible(posExt)) {
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
return;
}
@ -182,36 +182,16 @@ if (typeof jQuery != "undefined") {
if (response.step && response.step < 100) {
checkConvert(filePass, fileType);
} else {
jq("#uploadFileName").text(response.filename);
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
}
}
});
}, 1000);
};
var loadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("current");
if (jq("#loadScripts").is(":empty")) {
var urlScripts = jq("#loadScripts").attr("data-docs");
var frame = '<iframe id="iframeScripts" width=1 height=1 style="position: absolute; visibility: hidden;" ></iframe>';
jq("#loadScripts").html(frame);
document.getElementById("iframeScripts").onload = onloadScripts;
jq("#loadScripts iframe").attr("src", urlScripts);
} else {
onloadScripts();
}
};
var onloadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("done").removeClass("current");
var onuploaded = function () {
jq("#beginView, #beginEmbedded").removeClass("disable");
var fileName = jq("#hiddenFileName").val();
@ -273,7 +253,7 @@ if (typeof jQuery != "undefined") {
jq(document).on("click", "#skipPass", function () {
jq("#blockPassword").hide();
loadScripts();
onuploaded();
});
jq(document).on("click", "#beginEdit:not(.disable)", function () {
@ -354,7 +334,7 @@ if (typeof jQuery != "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -364,6 +344,7 @@ if (typeof jQuery != "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -117,6 +117,10 @@
// the meta information of the document is changed via the meta command
var onMetaChange = function (event) {
if (event.data.title !== undefined) {
document.title = event.data.title + " - ONLYOFFICE";
}
if (event.data.favorite !== undefined) {
var favorite = !!event.data.favorite;
var title = document.title.replace(/^\☆/g, "");
@ -358,10 +362,33 @@
default:
users = <%= usersForMentions %>;
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function (event) {

View File

@ -125,7 +125,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -362,10 +362,7 @@
<span class="errorPass"></span>
<br />
</div>
<span id="step3" class="step">3. Loading editor scripts.</span>
<span class="step-descr">They are loaded only once, they will be cached on your computer.</span>
<input type="hidden" name="hiddenFileName" id="hiddenFileName" />
<br />
<span class="progress-descr">Note the speed of all operations depends on your connection quality and server location.</span>
<br />
<div class="error-message">
@ -410,7 +407,7 @@
</div>
</div>
<span id="loadScripts" data-docs="<%= WebConfigurationManager.AppSettings["files.docservice.url.site"] + WebConfigurationManager.AppSettings["files.docservice.url.preloader"] %>"></span>
<iframe id="iframeScripts" src="<%= WebConfigurationManager.AppSettings["files.docservice.url.site"] + WebConfigurationManager.AppSettings["files.docservice.url.preloader"] %>" width=1 height=1 style="position: absolute; visibility: hidden; top: 0;" ></iframe>
<footer>
<div class="center">
@ -418,7 +415,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<appSettings>
<clear />
<add key="version" value="1.13.0"/>
<add key="version" value="1.14.0"/>
<add key="filesize-max" value="52428800"/>
<add key="storage-path" value=""/>
@ -17,13 +17,13 @@
<add key="files.docservice.verify-peer-off" value="true"/>
<add key="files.docservice.languages" value="en:English|sq-AL:Albanian (Albania)|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|en-GB:English (United Kingdom)|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|he-IL:Hebrew (Israel)|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Cyrl-RS:Serbian (Cyrillic)|sr-Latn-RS:Serbian (Latin)|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|vi:Vietnamese|aa-AA:Test Language"/>
<add key="files.docservice.languages" value="en:English|sq-AL:Albanian (Albania)|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|en-GB:English (United Kingdom)|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|he-IL:Hebrew (Israel)|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Cyrl-RS:Serbian (Cyrillic)|sr-Latn-RS:Serbian (Latin)|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|ur:Urdu|vi:Vietnamese|aa-AA:Test Language"/>
<add key="files.docservice.url.site" value="http://documentserver/"/>
<add key="files.docservice.url.converter" value="converter"/>
<add key="files.docservice.url.api" value="web-apps/apps/api/documents/api.js"/>
<add key="files.docservice.url.preloader" value="web-apps/apps/api/documents/cache-scripts.html"/>
<add key="files.docservice.url.preloader" value="web-apps/apps/api/documents/preload.html"/>
<add key="files.docservice.url.command" value="command"/>
<add key="files.docservice.url.example" value=""/>

View File

@ -511,10 +511,6 @@ label .checkbox {
line-height: 150%;
}
#loadScripts {
display: none;
}
#iframeScripts {
position: absolute;
visibility: hidden;

View File

@ -364,10 +364,7 @@
<span class="errorPass"></span>
<br />
</div>
<span id="step3" class="step">3. Loading editor scripts.</span>
<span class="step-descr">They are loaded only once, they will be cached on your computer.</span>
<input type="hidden" name="hiddenFileName" id="hiddenFileName" />
<br />
<span class="progress-descr">Note the speed of all operations depends on your connection quality and server location.</span>
<br />
<div class="error-message">
@ -412,7 +409,7 @@
</div>
</div>
<span id="loadScripts" data-docs="<%= UrlPreloadScripts %>"></span>
<iframe id="iframeScripts" src="<%= UrlPreloadScripts %>" width=1 height=1 style="position: absolute; visibility: hidden; top: 0;" ></iframe>
<footer>
<div class="center">
@ -420,7 +417,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -135,6 +135,10 @@
// the meta information of the document is changed via the meta command
var onMetaChange = function (event) {
if (event.data.title !== undefined) {
document.title = event.data.title + " - ONLYOFFICE";
}
if (event.data.favorite !== undefined) {
var favorite = !!event.data.favorite;
var title = document.title.replace(/^\☆/g, "");
@ -323,10 +327,33 @@
default:
users = <%= UsersForMentions %>;
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function (event) {

View File

@ -126,7 +126,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -12,7 +12,7 @@ See the detailed guide to learn how to install Document Server [for Windows](htt
## Step 2. Download the .Net (C#) code for the editors integration
Download the [.Net (C#) example](https://api.onlyoffice.com/editors/demopreview) from our site.
Download the [.Net (C#) example](https://api.onlyoffice.com/docs/docs-api/samples/language-specific-examples/) from our site.
To connect the editors to your website, specify the path to the editors installation and the path to the storage folder in the *settings.config* file:
```
@ -21,7 +21,7 @@ To connect the editors to your website, specify the path to the editors installa
```
where the **documentserver** is the name of the server with the ONLYOFFICE Document Server installed and the **storage-path** is the path where files will be created and stored. You can set an absolute path.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/editors/advanced) in the *DocEditor.aspx* file.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/docs/docs-api/usage-api/advanced-parameters/) in the *DocEditor.aspx* file.
## Step 3. Install the prerequisites

View File

@ -126,7 +126,7 @@ if (typeof jQuery != "undefined") {
if (!formatManager.isAutoConvertible(posExt)) {
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
return;
}
@ -182,36 +182,16 @@ if (typeof jQuery != "undefined") {
if (response.step && response.step < 100) {
checkConvert(filePass, fileType);
} else {
jq("#uploadFileName").text(response.filename);
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
}
}
});
}, 1000);
};
var loadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("current");
if (jq("#loadScripts").is(":empty")) {
var urlScripts = jq("#loadScripts").attr("data-docs");
var frame = '<iframe id="iframeScripts" width=1 height=1 style="position: absolute; visibility: hidden;" ></iframe>';
jq("#loadScripts").html(frame);
document.getElementById("iframeScripts").onload = onloadScripts;
jq("#loadScripts iframe").attr("src", urlScripts);
} else {
onloadScripts();
}
};
var onloadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("done").removeClass("current");
var onuploaded = function () {
jq("#beginView, #beginEmbedded").removeClass("disable");
var fileName = jq("#hiddenFileName").val();
@ -273,7 +253,7 @@ if (typeof jQuery != "undefined") {
jq(document).on("click", "#skipPass", function () {
jq("#blockPassword").hide();
loadScripts();
onuploaded();
});
jq(document).on("click", "#beginEdit:not(.disable)", function () {
@ -354,7 +334,7 @@ if (typeof jQuery != "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -364,6 +344,7 @@ if (typeof jQuery != "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<clear />
<add key="version" value="1.13.0"/>
<add key="version" value="1.14.0"/>
<add key="filesize-max" value="52428800"/>
<add key="storage-path" value=""/>
@ -16,13 +16,13 @@
<add key="files.docservice.token.useforrequest" value="true" />
<add key="files.docservice.token.expires-in" value="5"/>
<add key="files.docservice.languages" value="en:English|sq-AL:Albanian (Albania)|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|en-GB:English (United Kingdom)|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|he-IL:Hebrew (Israel)|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Cyrl-RS:Serbian (Cyrillic)|sr-Latn-RS:Serbian (Latin)|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|vi:Vietnamese|aa-AA: Test Language"/>
<add key="files.docservice.languages" value="en:English|sq-AL:Albanian (Albania)|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|en-GB:English (United Kingdom)|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|he-IL:Hebrew (Israel)|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Cyrl-RS:Serbian (Cyrillic)|sr-Latn-RS:Serbian (Latin)|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|ur:Urdu|vi:Vietnamese|aa-AA: Test Language"/>
<add key="files.docservice.url.site" value="http://documentserver/"/>
<add key="files.docservice.url.converter" value="converter"/>
<add key="files.docservice.url.api" value="web-apps/apps/api/documents/api.js"/>
<add key="files.docservice.url.preloader" value="web-apps/apps/api/documents/cache-scripts.html"/>
<add key="files.docservice.url.preloader" value="web-apps/apps/api/documents/preload.html"/>
<add key="files.docservice.url.command" value="command"/>
<add key="files.docservice.url.example" value=""/>

View File

@ -13,7 +13,7 @@ See the detailed guide to learn how to install Document Server [for Windows](htt
### Step 2. Download the Go code for the editors integration
Download the [Go example](https://api.onlyoffice.com/editors/demopreview) from our site.
Download the [Go example](https://api.onlyoffice.com/docs/docs-api/samples/language-specific-examples/) from our site.
To connect the editors to your website, specify the path to the editors installation, server protocol, address and port in the *configuration.env* file:
@ -31,7 +31,7 @@ JWT_HEADER=Authorization
where the **documentserver** is the name of the server with the ONLYOFFICE Document Server installed.
**address** is the address of the server, **port** is the server port.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/editors/advanced) it the *templates/editor.html* file.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/docs/docs-api/usage-api/advanced-parameters/) it the *templates/editor.html* file.
### Step 3. Install the prerequisites
To run the Go example code, install the Go compiler:

View File

@ -1,5 +1,5 @@
{
"VERSION": "1.13.0",
"VERSION": "1.14.0",
"SERVER_ADDRESS" : "",
"SERVER_PORT" : 3000,
@ -7,7 +7,7 @@
"DOC_SERVER_HOST" : "http://documentserver/",
"DOC_SERVER_CONVERTER_URL" : "converter",
"DOC_SERVER_API_URL" : "web-apps/apps/api/documents/api.js",
"DOC_SERVER_PRELOADER_URL" : "web-apps/apps/api/documents/cache-scripts.html",
"DOC_SERVER_PRELOADER_URL" : "web-apps/apps/api/documents/preload.html",
"DOC_SERVER_COMMAND_URL" : "command",
"JWT_IS_ENABLED" : false,
@ -67,6 +67,7 @@
"sv": "Swedish",
"tr": "Turkish",
"uk": "Ukrainian",
"ur": "Urdu",
"vi": "Vietnamese",
"aa-AA": "Test Language"
}

View File

@ -114,7 +114,7 @@ if (typeof jQuery !== "undefined") {
if (!formatManager.isAutoConvertible(posExt)) {
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
return;
}
@ -169,36 +169,16 @@ if (typeof jQuery !== "undefined") {
if (response.step != undefined && response.step < 100) {
checkConvert(filePass, fileType);
} else {
jq("#uploadFileName").text(response.filename);
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
}
}
});
}, 1000);
};
var loadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("current");
if (jq("#loadScripts").is(":empty")) {
var urlScripts = jq("#loadScripts").attr("data-docs");
var frame = "<iframe id=\"iframeScripts\" width=1 height=1 style=\"position: absolute; visibility: hidden;\" ></iframe>";
jq("#loadScripts").html(frame);
document.getElementById("iframeScripts").onload = onloadScripts;
jq("#loadScripts iframe").attr("src", urlScripts);
} else {
onloadScripts();
}
};
var onloadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("done").removeClass("current");
var onuploaded = function () {
jq("#beginView, #beginEmbedded").removeClass("disable");
var fileName = jq("#hiddenFileName").val();
@ -260,7 +240,7 @@ if (typeof jQuery !== "undefined") {
jq(document).on("click", "#skipPass", function () {
jq("#blockPassword").hide();
loadScripts();
onuploaded();
});
jq(document).on("click", "#beginEdit:not(.disable)", function () {
@ -341,7 +321,7 @@ if (typeof jQuery !== "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -351,6 +331,7 @@ if (typeof jQuery !== "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -511,10 +511,6 @@ label .checkbox {
line-height: 150%;
}
#loadScripts {
display: none;
}
#iframeScripts {
position: absolute;
visibility: hidden;

View File

@ -83,6 +83,10 @@
};
var onMetaChange = function (event) { // the meta information of the document is changed via the meta command
if (event.data.title !== undefined) {
document.title = event.data.title + " - ONLYOFFICE";
}
if (event.data.favorite) {
var favorite = !!event.data.favorite;
var title = document.title.replace(/^\☆/g, "");
@ -236,10 +240,33 @@
users = {{.usersForMentions}};
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function(event) { // the user is mentioned in a comment

View File

@ -118,7 +118,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -341,10 +341,7 @@
<span class="errorPass"></span>
<br />
</div>
<span id="step3" class="step">3. Loading editor scripts.</span>
<span class="step-descr">They are loaded only once, they will be cached on your computer.</span>
<input type="hidden" name="hiddenFileName" id="hiddenFileName" />
<br />
<span class="progress-descr">Note the speed of all operations depends on your connection quality and server location.</span>
<br />
<div class="error-message">
@ -388,7 +385,7 @@
</div>
</div>
<span id="loadScripts" data-docs="{{ .Preloader }}"></span>
<iframe id="iframeScripts" src="{{ .Preloader }}" width=1 height=1 style="position: absolute; visibility: hidden; top: 0;" ></iframe>
<footer>
<div class="center">
@ -396,7 +393,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -18,7 +18,7 @@ See the detailed guide to learn how to install Document Server [for Windows](htt
### Step 2. Download the Java code for the editors integration
Download the [Java-Spring example](https://api.onlyoffice.com/editors/demopreview) from our site.
Download the [Java-Spring example](https://api.onlyoffice.com/docs/docs-api/samples/language-specific-examples/) from our site.
To connect the editors to your website, specify the path to the editors installation, server port and the path to the storage folder in the *src/main/resources/application.properties* file:
@ -30,7 +30,7 @@ To connect the editors to your website, specify the path to the editors installa
where the **documentserver** is the name of the server with the ONLYOFFICE Docs installed, **port** is any available port and **files.storage** is the path where files will be created and stored (in the project folder by default). You can set an absolute path. For example, *D:\\\\folder*. Please note that on Windows OS the double backslash must be used as a separator.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/editors/advanced) it the *\src\main\resources\editor.html* file.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/docs/docs-api/usage-api/advanced-parameters/) it the *\src\main\resources\editor.html* file.
### Step 3. Install the prerequisites
To run the Java example code, install the Java version 11 appropriate for your OS and framework **Apache Maven**:

View File

@ -94,7 +94,7 @@
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.4</version>
<version>5.4.3</version>
</dependency>
</dependencies>

View File

@ -1,4 +1,4 @@
server.version=1.13.0
server.version=1.14.0
server.address=
server.port=4000
@ -15,7 +15,7 @@ files.docservice.history.postfix=-hist
files.docservice.url.example=
files.docservice.languages=en:English|sq-AL:Albanian (Albania)|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|en-GB:English (United Kingdom)|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|he-IL:Hebrew (Israel)|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Cyrl-RS:Serbian (Cyrillic)|sr-Latn-RS:Serbian (Latin)|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|vi:Vietnamese|aa-AA:Test Language
files.docservice.languages=en:English|sq-AL:Albanian (Albania)|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|en-GB:English (United Kingdom)|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|he-IL:Hebrew (Israel)|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Cyrl-RS:Serbian (Cyrillic)|sr-Latn-RS:Serbian (Latin)|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|ur:Urdu|vi:Vietnamese|aa-AA:Test Language
docservice.url=http://documentserver/
docservice.ignoreSSLCertificate=false

View File

@ -511,10 +511,6 @@ label .checkbox {
line-height: 150%;
}
#loadScripts {
display: none;
}
#iframeScripts {
position: absolute;
visibility: hidden;

View File

@ -114,7 +114,7 @@ if (typeof jQuery !== "undefined") {
if (!formatManager.isAutoConvertible(posExt)) {
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
return;
}
@ -168,36 +168,16 @@ if (typeof jQuery !== "undefined") {
checkConvert(filePass, fileType);
} else {
jq("#hiddenFileName").val(response.filename);
jq("#uploadFileName").text(response.filename);
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
}
}
});
}, 1000);
};
var loadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("current");
if (jq("#loadScripts").is(":empty")) {
var urlScripts = jq("#loadScripts").attr("data-docs");
var frame = "<iframe id=\"iframeScripts\" width=1 height=1 style=\"position: absolute; visibility: hidden;\" ></iframe>";
jq("#loadScripts").html(frame);
document.getElementById("iframeScripts").onload = onloadScripts;
jq("#loadScripts iframe").attr("src", urlScripts);
} else {
onloadScripts();
}
};
var onloadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("done").removeClass("current");
var onuploaded = function () {
jq("#beginView, #beginEmbedded").removeClass("disable");
var fileName = jq("#hiddenFileName").val();
@ -265,7 +245,7 @@ if (typeof jQuery !== "undefined") {
jq(document).on("click", "#skipPass", function () {
jq("#blockPassword").hide();
loadScripts();
onuploaded();
});
jq(document).on("click", "#beginEdit:not(.disable)", function () {
@ -346,7 +326,7 @@ if (typeof jQuery !== "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -356,6 +336,7 @@ if (typeof jQuery !== "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -100,6 +100,10 @@
// the meta information of the document is changed via the meta command
var onMetaChange = function (event) {
if (event.data.title !== undefined) {
document.title = event.data.title + " - ONLYOFFICE";
}
if (event.data.favorite !== undefined) {
var favorite = !!event.data.favorite;
var title = document.title.replace(/^\☆/g, "");
@ -352,10 +356,33 @@
users = [[${usersForMentions}]];
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function(event) { // the user is mentioned in a comment

View File

@ -114,7 +114,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -327,10 +327,7 @@
<span class="errorPass"></span>
<br />
</div>
<span id="step3" class="step">3. Loading editor scripts.</span>
<span class="step-descr">They are loaded only once, they will be cached on your computer.</span>
<input type="hidden" name="hiddenFileName" id="hiddenFileName" />
<br />
<span class="progress-descr">Note the speed of all operations depends on your connection quality and server location.</span>
<br />
<div class="error-message">
@ -375,7 +372,7 @@
</div>
</div>
<span id="loadScripts" th:attr="data-docs=${datadocs}"></span>
<iframe id="iframeScripts" th:attr="src=${datadocs}" width=1 height=1 style="position: absolute; visibility: hidden; top: 0;" ></iframe>
<footer>
<div class="center">
@ -383,7 +380,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -1,23 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>OnlineEditorsExampleJava</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
<name>OnlineEditorsExampleJava</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
<filteredResources>
<filter>
<id>1690280351006</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>

View File

@ -1,8 +1,22 @@
FROM maven:3.6.1-jdk-8-alpine AS MVN_BLDR
COPY ./ /tmp/
WORKDIR /tmp/
# FROM maven:3.9.3-eclipse-temurin-11-alpine AS example-build
# WORKDIR /srv
# COPY . .
# RUN mvn package
FROM maven:3.6.1-jdk-8-alpine AS example-build
WORKDIR /srv
COPY . .
RUN mvn package
FROM tomcat:alpine
RUN rm -fr /usr/local/tomcat/webapps/ROOT
COPY --from=MVN_BLDR /tmp/target/*.war $CATALINA_HOME/webapps/ROOT.war
# no main manifest attribute, in example.war
# FROM eclipse-temurin:11-jdk-alpine AS example
# WORKDIR /srv
# COPY --from=example-build /srv/target/*.war example.war
# CMD ["java", "-jar", "example.war"]
FROM tomcat:9.0.20-jre8-alpine AS example
RUN rm -rf /usr/local/tomcat/webapps/ROOT
COPY --from=example-build /srv/target/*.war $CATALINA_HOME/webapps/ROOT.war
FROM nginx:1.23.4-alpine3.17 AS proxy
COPY proxy/nginx.conf /etc/nginx/nginx.conf

View File

@ -14,7 +14,7 @@ See the detailed guide to learn how to [install Document Server for Windows](htt
### Step 2. Download the Java code for the editors integration
Download the [Java example](https://api.onlyoffice.com/editors/demopreview) from our site.
Download the [Java example](https://api.onlyoffice.com/docs/docs-api/samples/language-specific-examples/) from our site.
To connect the editors to your website, specify the path to the editors installation and the path to the storage folder in the *src/main/resources/settings.properties* file:
@ -25,7 +25,7 @@ files.docservice.url.site=https://documentserver/
where the **documentserver** is the name of the server with the ONLYOFFICE Document Server installed and the **storage-folder** is the path where files will be created and stored. You can set an absolute path. For example, *D:\\\\folder*. Please note that on Windows OS the double backslash must be used as a separator.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/editors/advanced) in the *\src\main\webapp\editor.jsp* file.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/docs/docs-api/usage-api/advanced-parameters/) in the *\src\main\webapp\editor.jsp* file.
### Step 3. Install the prerequisites

View File

@ -1,9 +1,31 @@
version: '3'
version: "3.8"
services:
java-intg-ex:
build:
context: ./
dockerfile: Dockerfile
ports:
- 8080:8080
document-server:
container_name: document-server
image: onlyoffice/documentserver:7.3.3.50
expose:
- "80"
environment:
- JWT_SECRET=your-256-bit-secret
example:
container_name: example
build:
context: .
target: example
# platform: linux/amd64
expose:
# - "80"
- "8080"
proxy:
container_name: proxy
build:
context: .
target: proxy
ports:
# - "80:80"
# - "8080:8080"
- "8080:8080"
- "3000:3000"

View File

@ -0,0 +1,41 @@
worker_processes auto;
events {
worker_connections 512;
}
http {
include /etc/nginx/mime.types;
server {
# listen 80;
listen 8080;
server_name localhost;
location / {
proxy_http_version 1.1;
# proxy_pass http://example;
proxy_pass http://example:8080;
}
}
server {
# listen 8080;
listen 3000;
server_name localhost;
location / {
client_max_body_size 100m;
proxy_http_version 1.1;
proxy_pass http://document-server;
proxy_redirect off;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_x_forwarded_host;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_set_header X-Real-IP $remote_addr;
}
}
}

View File

@ -0,0 +1,59 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package controllers;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CorsFilter implements Filter {
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
@Override
public void doFilter(final ServletRequest request,
final ServletResponse response,
final FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Credentials", "false");
res.setHeader("Access-Control-Allow-Methods", "*");
res.setHeader("Access-Control-Allow-Headers", "*");
if ("OPTIONS".equalsIgnoreCase(req.getMethod())) {
res.setStatus(HttpServletResponse.SC_OK);
} else {
filterChain.doFilter(request, response);
}
}
}

View File

@ -137,10 +137,24 @@ public final class TrackManager {
return body;
}
public static JSONObject resolveProcessSaveBody(final JSONObject body) {
JSONObject copied = body;
String url = (String) copied.get("url");
copied.put("url", url.replace("localhost", "proxy"));
String changesURL = (String) copied.get("changesurl");
copied.put("changesurl", changesURL.replace("localhost", "proxy"));
return copied;
}
// file saving process
public static void processSave(final JSONObject body,
public static void processSave(final JSONObject rawBody,
final String fileName,
final String userAddress) throws Exception {
JSONObject body = TrackManager.resolveProcessSaveBody(rawBody);
if (body.get("url") == null) {
throw new Exception("DownloadUrl is null");
}

View File

@ -1,4 +1,4 @@
version=1.13.0
version=1.14.0
filesize-max=5242880
storage-folder=app_data
@ -7,16 +7,16 @@ enable-forgotten=TRUE
files.docservice.timeout=120000
files.docservice.url.site=http://documentserver/
files.docservice.url.site=http://localhost:3000/
files.docservice.url.converter=converter
files.docservice.url.command=command
files.docservice.url.api=web-apps/apps/api/documents/api.js
files.docservice.url.preloader=web-apps/apps/api/documents/cache-scripts.html
files.docservice.url.example=
files.docservice.url.preloader=web-apps/apps/api/documents/preload.html
files.docservice.url.example=http://proxy:8080/
files.docservice.languages=en:English|sq-AL:Albanian (Albania)|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|en-GB:English (United Kingdom)|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|he-IL:Hebrew (Israel)|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Cyrl-RS:Serbian (Cyrillic)|sr-Latn-RS:Serbian (Latin)|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|vi:Vietnamese|aa-AA:Test Language
files.docservice.languages=en:English|sq-AL:Albanian (Albania)|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|en-GB:English (United Kingdom)|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|he-IL:Hebrew (Israel)|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Cyrl-RS:Serbian (Cyrillic)|sr-Latn-RS:Serbian (Latin)|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|ur:Urdu|vi:Vietnamese|aa-AA:Test Language
files.docservice.secret=
files.docservice.secret=your-256-bit-secret
files.docservice.header=Authorization
files.docservice.token-use-for-request=TRUE
files.docservice.token-expiration=5

View File

@ -2,23 +2,7 @@
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Methods</param-value>
</init-param>
<filter-class>controllers.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>

View File

@ -511,10 +511,6 @@ label .checkbox {
line-height: 150%;
}
#loadScripts {
display: none;
}
#iframeScripts {
position: absolute;
visibility: hidden;

View File

@ -107,6 +107,10 @@
// the meta information of the document is changed via the meta command
var onMetaChange = function (event) {
if (event.data.title !== undefined) {
document.title = event.data.title + " - ONLYOFFICE";
}
if (event.data.favorite !== undefined) {
var favorite = !!event.data.favorite;
var title = document.title.replace(/^\☆/g, "");
@ -355,10 +359,33 @@
users = <%=(String) request.getAttribute("usersForMentions")%>;
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function(event) { // the user is mentioned in a comment

View File

@ -122,7 +122,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -366,10 +366,7 @@
<span class="errorPass"></span>
<br />
</div>
<span id="step3" class="step">3. Loading editor scripts.</span>
<span class="step-descr">They are loaded only once, they will be cached on your computer.</span>
<input type="hidden" name="hiddenFileName" id="hiddenFileName" />
<br />
<span class="progress-descr">Note the speed of all operations depends on your connection quality and server location.</span>
<br />
<div class="error-message">
@ -414,7 +411,7 @@
</div>
</div>
<span id="loadScripts" data-docs="<%= ConfigManager.getProperty("files.docservice.url.site") + ConfigManager.getProperty("files.docservice.url.preloader") %>"></span>
<iframe id="iframeScripts" src="<%= ConfigManager.getProperty("files.docservice.url.site") + ConfigManager.getProperty("files.docservice.url.preloader") %>" width=1 height=1 style="position: absolute; visibility: hidden; top: 0;" ></iframe>
<footer>
<div class="center">
@ -422,7 +419,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -126,7 +126,7 @@ if (typeof jQuery !== "undefined") {
if (!formatManager.isAutoConvertible(posExt)) {
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
return;
}
@ -181,36 +181,16 @@ if (typeof jQuery !== "undefined") {
if (response.step && response.step < 100) {
checkConvert(filePass, fileType);
} else {
jq("#uploadFileName").text(response.filename);
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
}
}
});
}, 1000);
};
var loadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("current");
if (jq("#loadScripts").is(":empty")) {
var urlScripts = jq("#loadScripts").attr("data-docs");
var frame = "<iframe id=\"iframeScripts\" width=1 height=1 style=\"position: absolute; visibility: hidden;\" ></iframe>";
jq("#loadScripts").html(frame);
document.getElementById("iframeScripts").onload = onloadScripts;
jq("#loadScripts iframe").attr("src", urlScripts);
} else {
onloadScripts();
}
};
var onloadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("done").removeClass("current");
var onuploaded = function () {
jq("#beginView, #beginEmbedded").removeClass("disable");
var fileName = jq("#hiddenFileName").val();
@ -272,7 +252,7 @@ if (typeof jQuery !== "undefined") {
jq(document).on("click", "#skipPass", function () {
jq("#blockPassword").hide();
loadScripts();
onuploaded();
});
jq(document).on("click", "#beginEdit:not(.disable)", function () {
@ -353,7 +333,7 @@ if (typeof jQuery !== "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -363,6 +343,7 @@ if (typeof jQuery !== "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -14,7 +14,7 @@ See the detailed guide to learn how to [install Document Server for Windows](htt
### Step 2. Download the Node.js code for the editors integration
Download the [Node.js example](https://api.onlyoffice.com/editors/demopreview) from our site.
Download the [Node.js example](https://api.onlyoffice.com/docs/docs-api/samples/language-specific-examples/) from our site.
To connect the editors to your website, specify the path to the editors installation and the path to the storage folder in the *config/default.json* file:
@ -26,7 +26,7 @@ To connect the editors to your website, specify the path to the editors installa
where the **documentserver** is the name of the server with the ONLYOFFICE Document Server installed, the **storageFolder** and **storagePath** are the paths where files will be created and stored. You can set an absolute path. For example, *D:\\\\folder*. Please note that on Windows OS the double backslash must be used as a separator.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/editors/advanced) in the *\views\editor.ejs* file.
If you want to experiment with the editor configuration, modify the [parameters](https://api.onlyoffice.com/docs/docs-api/usage-api/advanced-parameters/) in the *\views\editor.ejs* file.
### Step 3. Install Node.js environment

View File

@ -177,6 +177,7 @@ app.delete('/forgotten', (req, res) => { // define a handler for removing forgot
}
} catch (ex) {
console.log(ex);
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('Server error');
res.status(500).send();
}
@ -282,7 +283,7 @@ app.post('/upload', (req, res) => { // define a handler for uploading files
form.parse(req, (err, fields, files) => { // parse this form
if (err) { // if an error occurs
// DocManager.cleanFolderRecursive(uploadDirTmp, true); // clean the folder with temporary files
res.writeHead(200, { 'Content-Type': 'text/plain' }); // and write the error status and message to the response
res.writeHead(200, { 'Content-Type': 'application/json' });
res.write(`{ "error": "${err.message}"}`);
res.end();
return;
@ -291,7 +292,7 @@ app.post('/upload', (req, res) => { // define a handler for uploading files
const file = files.uploadedFile[0];
if (file === undefined) { // if file parameter is undefined
res.writeHead(200, { 'Content-Type': 'text/plain' }); // write the error status and message to the response
res.writeHead(200, { 'Content-Type': 'application/json' });
res.write('{ "error": "Uploaded file not found"}');
res.end();
return;
@ -302,7 +303,7 @@ app.post('/upload', (req, res) => { // define a handler for uploading files
// check if the file size exceeds the maximum file size
if (fileSizeLimit < file.size || file.size <= 0) {
// DocManager.cleanFolderRecursive(uploadDirTmp, true); // clean the folder with temporary files
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.writeHead(200, { 'Content-Type': 'application/json' });
res.write('{ "error": "File size is incorrect"}');
res.end();
return;
@ -314,7 +315,7 @@ app.post('/upload', (req, res) => { // define a handler for uploading files
if (exts.indexOf(curExt) === -1 || fileUtility.getFormatActions(curExt).length === 0) {
// DocManager.cleanFolderRecursive(uploadDirTmp, true); // if not, clean the folder with temporary files
res.writeHead(200, { 'Content-Type': 'text/plain' }); // and write the error status and message to the response
res.writeHead(200, { 'Content-Type': 'application/json' });
res.write('{ "error": "File type is not supported"}');
res.end();
return;
@ -322,7 +323,7 @@ app.post('/upload', (req, res) => { // define a handler for uploading files
fileSystem.rename(file.filepath, `${uploadDir}/${file.originalFilename}`, (error) => { // rename a file
// DocManager.cleanFolderRecursive(uploadDirTmp, true); // clean the folder with temporary files
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.writeHead(200, { 'Content-Type': 'application/json' });
if (error) { // if an error occurs
res.write(`{ "error": "${error}"}`); // write an error message to the response
} else {
@ -391,6 +392,7 @@ app.post('/create', (req, res) => {
});
} catch (e) {
res.status(500);
res.writeHead(200, { 'Content-Type': 'application/json' });
res.write(JSON.stringify({
error: 1,
message: e.message,
@ -520,6 +522,7 @@ app.get('/files', (req, res) => { // define a handler for getting files informat
res.write(JSON.stringify(filesInDirectoryInfo)); // transform files information into the json string
} catch (ex) {
console.log(ex);
res.setHeader('Content-Type', 'text/plain');
res.write('Server error');
}
res.end();
@ -535,6 +538,7 @@ app.get('/files/file/:fileId', (req, res) => { // define a handler for getting f
res.write(JSON.stringify(fileInfoById));
} catch (ex) {
console.log(ex);
res.setHeader('Content-Type', 'text/plain');
res.write('Server error');
}
res.end();
@ -553,9 +557,11 @@ app.delete('/file', (req, res) => { // define a handler for removing file
req.DocManager.cleanFolderRecursive(req.DocManager.storagePath(''), false);
}
res.writeHead(200, { 'Content-Type': 'application/json' });
res.write('{"success":true}');
} catch (ex) {
console.log(ex);
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('Server error');
}
res.end();
@ -723,6 +729,7 @@ app.post('/track', async (req, res) => { // define a handler for tracking file c
try {
if (!req.DocManager.existsSync(req.DocManager.storagePath(fileName, userAddress))) {
console.log(`callbackProcessSave error: name = ${fileName} userAddress = ${userAddress} is not exist`);
response.setHeader('Content-Type', 'application/json');
response.write('{"error":1, "message":"file is not exist"}');
response.end();
return;
@ -760,7 +767,7 @@ app.post('/track', async (req, res) => { // define a handler for tracking file c
}
}
const changeshistory = body.changeshistory || JSON.stringify(body.history);
const changeshistory = JSON.stringify(body.history);
if (changeshistory) {
// get the path to the file with document changes
const pathChangesJson = req.DocManager.changesPath(newFileName, userAddress, version);
@ -784,11 +791,13 @@ app.post('/track', async (req, res) => { // define a handler for tracking file c
}
} catch (ex) {
console.log(ex);
response.setHeader('Content-Type', 'application/json');
response.write(`{"error":1,"message":${JSON.stringify(ex)}}`);
response.end();
return;
}
response.setHeader('Content-Type', 'application/json');
response.write('{"error":0}');
response.end();
};
@ -796,6 +805,7 @@ app.post('/track', async (req, res) => { // define a handler for tracking file c
// file saving process
const processSave = async function processSave(downloadUri, body, fileName, userAddress) {
if (!downloadUri) {
response.setHeader('Content-Type', 'application/json');
response.write('{"error":1,"message":"save uri is empty"}');
response.end();
return;
@ -913,6 +923,7 @@ app.post('/track', async (req, res) => { // define a handler for tracking file c
return;
}
response.setHeader('Content-Type', 'application/json');
response.write('{"error":0}');
response.end();
};
@ -920,6 +931,7 @@ app.post('/track', async (req, res) => { // define a handler for tracking file c
// file force saving process
const processForceSave = async function processForceSave(downloadUri, body, fileName, userAddress) {
if (!downloadUri) {
response.setHeader('Content-Type', 'application/json');
response.write('{"error":1,"message":"forcesave uri is empty"}');
response.end();
return;
@ -973,6 +985,7 @@ app.post('/track', async (req, res) => { // define a handler for tracking file c
return;
}
response.setHeader('Content-Type', 'application/json');
response.write('{"error":0}');
response.end();
};
@ -1012,6 +1025,7 @@ app.post('/track', async (req, res) => { // define a handler for tracking file c
}
}
if (!body) {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.write('{"error":1,"message":"body is empty"}');
res.end();
return;
@ -1070,6 +1084,7 @@ app.get('/config', async (req, res) => {
} catch (ex) {
console.log(ex);
res.status(500);
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('error');
}
res.end();

View File

@ -1,5 +1,5 @@
{
"version": "1.13.0",
"version": "1.14.0",
"log": {
"appenders": [
{
@ -20,7 +20,7 @@
"commandUrl": "command",
"converterUrl": "converter",
"apiUrl": "web-apps/apps/api/documents/api.js",
"preloaderUrl": "web-apps/apps/api/documents/cache-scripts.html",
"preloaderUrl": "web-apps/apps/api/documents/preload.html",
"exampleUrl": null,
"storageFolder": "./files",
"storagePath": "/files",
@ -83,6 +83,7 @@
"sv": "Swedish",
"tr": "Turkish",
"uk": "Ukrainian",
"ur": "Urdu",
"vi": "Vietnamese",
"aa-AA": "Test Language"
}

View File

@ -1,8 +1,6 @@
{
"server": {
"port": 3000,
"siteUrl": "http://127.0.0.1:8000/",
"apiUrl": "web-apps/apps/api/documents/api.js",
"preloaderUrl": "web-apps/apps/api/documents/cache-scripts.html"
"siteUrl": "http://127.0.0.1:8000/"
}
}

View File

@ -1,8 +1,6 @@
{
"server": {
"port": 3000,
"siteUrl": "http://127.0.0.1:8000/",
"apiUrl": "web-apps/apps/api/documents/api.js",
"preloaderUrl": "web-apps/apps/api/documents/cache-scripts.html"
"siteUrl": "http://127.0.0.1:8000/"
}
}

View File

@ -1,8 +1,6 @@
{
"server": {
"port": 80,
"siteUrl": "http://127.0.0.1:8000/",
"apiUrl": "web-apps/apps/api/documents/api.js",
"preloaderUrl": "web-apps/apps/api/documents/cache-scripts.html"
"siteUrl": "http://127.0.0.1:8000/"
}
}

View File

@ -30,28 +30,37 @@ exports.isValidToken = async (req, res, next) => {
return;
}
const isValid = wopiValidator.check(
{
url: `${req.protocol}://${req.get('host')}${req.originalUrl || req.url}`,
accessToken: req.query.access_token,
timestamp: req.headers[reqConsts.requestHeaders.Timestamp.toLowerCase()],
},
{
proof: req.headers[reqConsts.requestHeaders.Proof.toLowerCase()],
proofold: req.headers[reqConsts.requestHeaders.ProofOld.toLowerCase()],
},
{
modulus: proofKey.modulus,
exponent: proofKey.exponent,
oldmodulus: proofKey.oldmodulus,
oldexponent: proofKey.oldexponent,
},
);
const timestamp = req.headers[reqConsts.requestHeaders.Timestamp.toLowerCase()];
const proof = req.headers[reqConsts.requestHeaders.Proof.toLowerCase()];
const proofold = req.headers[reqConsts.requestHeaders.ProofOld.toLowerCase()];
let isValid = false;
if (!timestamp || !proof || !proofold) {
console.warn(`Proof keys: timestamp ${timestamp} , proof ${proof} , proofold ${proofold}`);
} else {
isValid = wopiValidator.check(
{
url: `${req.DocManager.getServerPath()}${req.originalUrl || req.url}`,
accessToken: req.query.access_token,
timestamp: timestamp,
},
{
proof: proof,
proofold: proofold,
},
{
modulus: proofKey.modulus,
exponent: proofKey.exponent,
oldmodulus: proofKey.oldmodulus,
oldexponent: proofKey.oldexponent,
},
);
}
if (isValid) {
next();
} else {
console.warn('Proof key verification failed');
res.status(500).send('Not verified');
res.status(403).send('Not verified');
}
} catch (error) {
console.error(error);

View File

@ -16,7 +16,7 @@
"ejs": "^3.1.10",
"express": "^4.21.1",
"fast-xml-parser": "^4.4.1",
"formidable": "^3.2.4",
"formidable": "^3.5.4",
"he": "^1.2.0",
"jsonwebtoken": "^9.0.2",
"jwa": "^2.0.0",
@ -145,6 +145,18 @@
"rsa-pem-from-mod-exp": "^0.8.4"
}
},
"node_modules/@noble/hashes": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
"license": "MIT",
"engines": {
"node": "^14.21.3 || >=16"
},
"funding": {
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -180,6 +192,15 @@
"node": ">= 8"
}
},
"node_modules/@paralleldrive/cuid2": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
"integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==",
"license": "MIT",
"dependencies": {
"@noble/hashes": "^1.1.5"
}
},
"node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@ -1495,14 +1516,18 @@
}
},
"node_modules/formidable": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz",
"integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==",
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz",
"integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==",
"license": "MIT",
"dependencies": {
"@paralleldrive/cuid2": "^2.2.2",
"dezalgo": "^1.0.4",
"hexoid": "^1.0.0",
"once": "^1.4.0"
},
"engines": {
"node": ">=14.0.0"
},
"funding": {
"url": "https://ko-fi.com/tunnckoCore/commissions"
}
@ -1797,14 +1822,6 @@
"he": "bin/he"
}
},
"node_modules/hexoid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
"integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
"engines": {
"node": ">=8"
}
},
"node_modules/http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
@ -3782,6 +3799,11 @@
"rsa-pem-from-mod-exp": "^0.8.4"
}
},
"@noble/hashes": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="
},
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -3808,6 +3830,14 @@
"fastq": "^1.6.0"
}
},
"@paralleldrive/cuid2": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
"integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==",
"requires": {
"@noble/hashes": "^1.1.5"
}
},
"@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@ -4810,12 +4840,12 @@
}
},
"formidable": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz",
"integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==",
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz",
"integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==",
"requires": {
"@paralleldrive/cuid2": "^2.2.2",
"dezalgo": "^1.0.4",
"hexoid": "^1.0.0",
"once": "^1.4.0"
}
},
@ -5019,11 +5049,6 @@
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
},
"hexoid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
"integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g=="
},
"http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",

View File

@ -21,7 +21,7 @@
"ejs": "^3.1.10",
"express": "^4.21.1",
"fast-xml-parser": "^4.4.1",
"formidable": "^3.2.4",
"formidable": "^3.5.4",
"he": "^1.2.0",
"jsonwebtoken": "^9.0.2",
"jwa": "^2.0.0",

View File

@ -19,7 +19,7 @@
var language;
var userid;
var directUrl;
var formatManager;
var formatManager = new FormatManager();
window.onload = function () {
fetch('formats')
@ -38,7 +38,12 @@ window.onload = function () {
});
formatManager = new FormatManager(formats);
}
})
});
var urlScripts = jq("#loadScripts").attr("data-docs");
var frame = '<iframe id="iframeScripts" width=1 height=1 style="position: absolute; visibility: hidden;" ></iframe>';
jq("#loadScripts").html(frame);
jq("#loadScripts iframe").attr("src", urlScripts);
}
if (typeof jQuery != "undefined") {
@ -139,7 +144,7 @@ if (typeof jQuery != "undefined") {
if (!formatManager.isAutoConvertible(posExt)) {
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
return;
}
@ -198,36 +203,16 @@ if (typeof jQuery != "undefined") {
if (typeof response.step != "undefined" && response.step < 100) {
checkConvert(filePass, fileType);
} else {
jq("#uploadFileName").text(response.filename);
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
}
}
});
}, 1000);
};
var loadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("current");
if (jq("#loadScripts").is(":empty")) {
var urlScripts = jq("#loadScripts").attr("data-docs");
var frame = '<iframe id="iframeScripts" width=1 height=1 style="position: absolute; visibility: hidden;" ></iframe>';
jq("#loadScripts").html(frame);
document.getElementById("iframeScripts").onload = onloadScripts;
jq("#loadScripts iframe").attr("src", urlScripts);
} else {
onloadScripts();
}
};
var onloadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("done").removeClass("current");
var onuploaded = function () {
jq("#beginView, #beginEmbedded").removeClass("disable");
var fileName = jq("#hiddenFileName").val();
@ -276,7 +261,7 @@ if (typeof jQuery != "undefined") {
jq(document).on("click", "#skipPass", function () {
jq("#blockPassword").hide();
loadScripts();
onuploaded();
});
jq(document).on("click", "#beginEdit:not(.disable)", function () {
@ -394,7 +379,7 @@ if (typeof jQuery != "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -404,6 +389,7 @@ if (typeof jQuery != "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -94,6 +94,10 @@
};
var onMetaChange = function (event) { // the meta information of the document is changed via the meta command
if (event.data.title !== undefined) {
document.title = event.data.title + " - ONLYOFFICE";
}
if (event.data.favorite !== undefined) {
var favorite = !!event.data.favorite;
var title = document.title.replace(/^\☆/g, "");
@ -252,10 +256,33 @@
users = <%- JSON.stringify(usersForMentions) %>;
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function(event) { // the user is mentioned in a comment

View File

@ -115,7 +115,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -322,10 +322,7 @@
<span class="errorPass"></span>
<br />
</div>
<span id="step3" class="step">3. Loading editor scripts.</span>
<span class="step-descr">They are loaded only once, they will be cached on your computer.</span>
<input type="hidden" name="hiddenFileName" id="hiddenFileName" />
<br />
<span class="progress-descr">Note the speed of all operations depends on your connection quality and server location.</span>
<br />
<div class="error-message">
@ -377,7 +374,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -235,11 +235,7 @@
<span class="errorPass"></span>
<br />
</div>
<span id="step3" class="step">3. Loading editor scripts.</span>
<span class="step-descr">They are loaded only once, they will be cached on your computer.</span>
<input type="hidden" name="hiddenFileName" id="hiddenFileName" />
<br />
<br />
<span class="progress-descr">Note the speed of all operations depends on your connection quality and server location.</span>
<br />
<br />
@ -264,7 +260,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">API Documentation</a>
</td>
<td>
<a href="mailto:sales@onlyoffice.com">Submit your request</a>

View File

@ -16,7 +16,7 @@ DOCUMENT_STORAGE_DISPLAY_FORGOTTEN_PAGE=false
## DOCUMENT SERVER ENV VARIABLES
DOCUMENT_SERVER_VERSION=1.13.0
DOCUMENT_SERVER_VERSION=1.14.0
DOCUMENT_SERVER_PUBLIC_URL=http://localhost:8080
DOCUMENT_SERVER_PRIVATE_URL=http://proxy:8080
@ -24,7 +24,7 @@ DOCUMENT_SERVER_PRIVATE_URL=http://proxy:8080
DOCUMENT_SERVER_API_PATH=web-apps/apps/api/documents/api.js
DOCUMENT_SERVER_COMMAND_PATH=command
DOCUMENT_SERVER_CONVERTER_PATH=converter
DOCUMENT_SERVER_PRELOADER_PATH=web-apps/apps/api/documents/cache-scripts.html
DOCUMENT_SERVER_PRELOADER_PATH=web-apps/apps/api/documents/preload.html
DOCUMENT_SERVER_JWT_HEADER=Authorization
DOCUMENT_SERVER_JWT_ALGORITHM=HS256

View File

@ -6,6 +6,7 @@ use App\OnlyOffice\Managers\JWTManager;
use App\OnlyOffice\Managers\SettingsManager;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Symfony\Component\HttpFoundation\Response;
class CheckAndDecodeJWTPayload
@ -27,7 +28,8 @@ class CheckAndDecodeJWTPayload
$payload = $jwt->decode($request->token, $settings->getSetting('jwt.secret'));
$payload = json_decode(json_encode($payload), true);
} elseif ($request->hasHeader($settings->getSetting('jwt.header'))) {
$payload = $jwt->decode($request->bearerToken(), $settings->getSetting('jwt.secret'));
$bearerToken = Str::after($request->header($settings->getSetting('jwt.header')), 'Bearer ');
$payload = $jwt->decode($bearerToken, $settings->getSetting('jwt.secret'));
} else {
abort(499, 'Expected JWT token');
}

View File

@ -6,6 +6,7 @@ use App\OnlyOffice\Managers\JWTManager;
use App\OnlyOffice\Managers\SettingsManager;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Symfony\Component\HttpFoundation\Response;
class EnsureJWTTokenIsPresent
@ -23,7 +24,8 @@ class EnsureJWTTokenIsPresent
if ($settings->getSetting('jwt.enabled') && $embeded == null && $settings->getSetting('jwt.use_for_request')) {
if ($request->hasHeader($settings->getSetting('jwt.header'))) {
$token = $jwt->decode($request->bearerToken(), $settings->getSetting('jwt.secret'));
$bearerToken = Str::after($request->header($settings->getSetting('jwt.header')), 'Bearer ');
$token = $jwt->decode($bearerToken, $settings->getSetting('jwt.secret'));
if (empty($token)) {
abort(498, 'Invalid JWT signature');

View File

@ -32,7 +32,7 @@ class SettingsManager extends OnlyOfficeSettingsManager
$publicServerUrl = rtrim(env('DOCUMENT_SERVER_PUBLIC_URL', 'http://documentserver'), '/');
$privateServerUrl = rtrim(env('DOCUMENT_SERVER_PRIVATE_URL', $publicServerUrl), '/');
$apiUrl = $publicServerUrl.'/'.env('DOCUMENT_SERVER_API_PATH', 'web-apps/apps/api/documents/api.js');
$preloaderUrl = $publicServerUrl.'/'.env('DOCUMENT_SERVER_PRELOADER_PATH', 'web-apps/apps/api/documents/cache-scripts.html');
$preloaderUrl = $publicServerUrl.'/'.env('DOCUMENT_SERVER_PRELOADER_PATH', 'web-apps/apps/api/documents/preload.html');
$conversionUrl = $privateServerUrl.'/'.env('DOCUMENT_SERVER_CONVERTER_PATH', 'convert');
$commandUrl = $privateServerUrl.'/'.env('DOCUMENT_SERVER_COMMAND_PATH', 'command');
$jwtSecret = env('DOCUMENT_SERVER_JWT_SECRET', 'secret');

View File

@ -64,6 +64,7 @@ class LanguageRepository
'sv' => 'Swedish',
'tr' => 'Turkish',
'uk' => 'Ukrainian',
'ur' => 'Urdu',
'vi' => 'Vietnamese',
'aa-AA' => 'Test Language',
];

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -6,8 +6,8 @@
"build": "vite build"
},
"devDependencies": {
"axios": "^1.6.4",
"laravel-vite-plugin": "^1.0",
"vite": "^5.0"
"axios": "^1.8.2",
"laravel-vite-plugin": "1.2",
"vite": "6.2"
}
}

View File

@ -502,10 +502,6 @@ label .checkbox {
line-height: 150%;
}
#loadScripts {
display: none;
}
#iframeScripts {
position: absolute;
visibility: hidden;

View File

@ -143,12 +143,12 @@ if (typeof jQuery != "undefined") {
if (!formatManager.isAutoConvertible(posExt)) {
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
return;
}
if (jq("#checkOriginalFormat").is(":checked")) {
loadScripts();
onuploaded();
return;
}
jq("#step2").addClass("current");
@ -213,36 +213,16 @@ if (typeof jQuery != "undefined") {
console.log(response.fileUri)
checkConvert(response.fileUri, filePass, fileExt);
} else {
jq("#uploadFileName").text(response.filename);
jq("#step2").addClass("done").removeClass("current");
loadScripts();
onuploaded();
}
}
});
}, 1000);
};
var loadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("current");
if (jq("#loadScripts").is(":empty")) {
var urlScripts = jq("#loadScripts").attr("data-docs");
var frame = '<iframe id="iframeScripts" width=1 height=1 style="position: absolute; visibility: hidden;" ></iframe>';
jq("#loadScripts").html(frame);
document.getElementById("iframeScripts").onload = onloadScripts;
jq("#loadScripts iframe").attr("src", urlScripts);
} else {
onloadScripts();
}
};
var onloadScripts = function () {
if (!jq("#mainProgress").is(":visible")) {
return;
}
jq("#step3").addClass("done").removeClass("current");
var onuploaded = function () {
jq("#beginView, #beginEmbedded").removeClass("disable");
var fileName = jq("#hiddenFileName").val();
@ -298,7 +278,7 @@ if (typeof jQuery != "undefined") {
jq(document).on("click", "#skipPass", function () {
jq("#blockPassword").hide();
loadScripts();
onuploaded();
});
jq(document).on("click", "#beginEdit:not(.disable)", function () {
@ -379,7 +359,7 @@ if (typeof jQuery != "undefined") {
}
jq("#hiddenFileName").val(fileName);
jq("#convertStep1").addClass("done");
jq("#convertStep1").addClass("error");
jq("#convertStep2").addClass("waiting");
});
@ -389,6 +369,7 @@ if (typeof jQuery != "undefined") {
let fileExt = jq(`#${id}`).attr("data");
jq(`#${id}`).addClass("orange");
jq("td[name='convertingTypeButton']").addClass("disable");
jq("#convertStep1").removeClass("error").addClass("done");
jq("#convertStep2").removeClass("waiting").removeClass("done").addClass("current");
jq("#convertStep2").text('2. File conversion');
jq("#convert-descr").removeClass("disable");

View File

@ -236,6 +236,10 @@
// the meta information of the document is changed via the meta command
var onMetaChange = function(event) {
if (event.data.title !== undefined) {
document.title = event.data.title + " - ONLYOFFICE";
}
if (event.data.favorite !== undefined) {
var favorite = !!event.data.favorite;
var title = document.title.replace(/^\☆/g, "");
@ -391,10 +395,33 @@
users = {!! $usersForMentions !!};
}
docEditor.setUsers({
if ((c === "protect" || c === "mention") && users && event.data.count) {
let from = event.data.from;
let count = event.data.count;
let search = event.data.search;
if (from != 0) users = [];
var resultCount = 234;
for (var i = Math.max(users.length, from); i < Math.min(from + count, resultCount); i++){
users.push({
email: "test@test.test" + (i + 1),
id: "id" + (i + 1),
name: "test_" + search + (i + 1)
});
}
}
var result = {
"c": c,
"users": users,
});
};
if (resultCount) {
// support v9.0
result.total = 1 + (!event.data.count || users.length < event.data.count ? 0 : (event.data.from + event.data.count));
// since v9.0.1
result.isPaginated = true;
}
docEditor.setUsers(result);
};
var onRequestSendNotify = function(event) {

View File

@ -115,7 +115,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">
API Documentation
</a>
</td>

View File

@ -346,10 +346,7 @@
<span class="errorPass"></span>
<br />
</div>
<span id="step3" class="step">3. Loading editor scripts.</span>
<span class="step-descr">They are loaded only once, they will be cached on your computer.</span>
<input type="hidden" name="hiddenFileName" id="hiddenFileName" />
<br />
<span class="progress-descr">Note the speed of all operations depends
on your connection quality and server location.</span>
<br />
@ -395,7 +392,7 @@
</div>
</div>form>
<span id="loadScripts" data-docs="{{ $preloaderUrl }}"></span>
<iframe id="iframeScripts" src="{{ $preloaderUrl }}" width=1 height=1 style="position: absolute; visibility: hidden; top: 0;" ></iframe>
<footer>
<div class="center">
@ -403,7 +400,7 @@
<tbody>
<tr>
<td>
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">
<a href="https://api.onlyoffice.com/docs/docs-api/get-started/how-it-works/" target="_blank">
API Documentation
</a>
</td>

View File

@ -510,10 +510,6 @@ label .checkbox {
line-height: 150%;
}
#loadScripts {
display: none;
}
#iframeScripts {
position: absolute;
visibility: hidden;

Some files were not shown because too many files have changed in this diff Show More