Compare commits

..

323 Commits

Author SHA1 Message Date
d13eb90f38 delete FileChoiceUrl 2026-03-02 17:58:07 +03:00
de2b2e0c59 Merge remote-tracking branch 'remotes/origin/release/1.15.0' into develop 2026-02-24 18:55:34 +03:00
67f453c4e0 formats v9.3 2026-02-24 18:48:44 +03:00
9878583600 nodejs: conversion to md 2026-02-24 18:46:32 +03:00
2fb6246f80 nodejs: support tsv 2026-02-24 18:46:06 +03:00
829f1b4226 update documentserver version to 9.3 in compose files 2026-02-24 18:44:45 +03:00
8d1e0ff63d nodejs: format json 2026-02-18 09:06:55 +03:00
238cf93a22 Merge pull request 'resolve release/1.15.0 to develop merge conflict' from 1.15-conflict into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/92
2026-02-13 13:45:16 +00:00
10bc689f13 Merge remote-tracking branch 'remotes/origin/release/1.15.0' into 1.15-conflict 2026-02-13 16:02:58 +03:00
d532f3d8de nodejs: fix lint 2026-02-13 16:01:14 +03:00
59a8e2f63d fix(go): merge lossy-edit bugfix and new formats handling 2026-02-13 16:35:15 +07:00
0bdaa40036 Merge pull request 'bugfix-1.15' from bugfix-1.15 into release/1.15.0
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/91
2026-02-13 09:03:33 +00:00
a60fd14daf increase default upload file size to 100 MB. Fix Bug 79567 2026-02-12 13:49:42 +07:00
f55196a1b2 fix(ruby): resolve fillform urls with proxy. Fix Bug 79584 2026-02-12 13:01:28 +07:00
bc434dea55 fix(ruby): correct platforms in gemfile.lock 2026-02-11 16:08:37 +07:00
af895ee2e6 Merge pull request 'update-deps' from update-deps into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/90
2026-02-11 06:51:53 +00:00
8c725214af fix: files list height. Fix Bug 71461 2026-02-10 17:35:30 +07:00
dd513194bb build(php-laravel): bump psy/psysh to 0.12.19 2026-02-10 14:41:15 +07:00
6069c017c0 build(php-laravel): bump phpunit/phpunit to 11.5.50 2026-02-10 14:27:34 +07:00
fbc3d47607 build(nodejs): bump fast-xml-parser to 5.3.4 2026-02-10 14:17:24 +07:00
f8222b1052 build(php): bump phpunit/phpunit to 10.5.62 2026-02-10 14:14:50 +07:00
4c331d56d7 Merge pull request 'bugfix-1.15' from bugfix-1.15 into release/1.15.0
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/89
2026-02-06 12:12:22 +00:00
ea3667174f fix(java-spring): correct roles for named users. Fix Bug 79808 2026-02-06 18:34:27 +07:00
ada17c99f7 fix(nodejs): use path module to get file basename. Fix Bug 79810 2026-02-06 17:39:09 +07:00
7a1cc7cbdc fix(go): move anonymous to the end of users list. Fix Bug 79785 2026-02-06 13:09:18 +07:00
9a7350e169 Merge pull request 'bugfix-release-1.15' from bugfix-release-1.15 into release/1.15.0
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/88
2026-02-02 11:47:23 +00:00
0c33288120 fix(go): allow edit files with lossy-edit action. Fix Bug 79626 2026-02-02 16:26:18 +07:00
aff50cca4a fix(ruby): string forcesavetype check. Fix Bug 79584 2026-02-02 16:26:18 +07:00
7aca0edfed fix(php-laravel): correct conversion of uploaded files with password. Fix Bug 79569 2026-02-02 16:26:18 +07:00
2a3bcc0f67 fix(php-laravel): increase max upload file size and fix env variable. Fix Bug 79567 2026-02-02 16:26:18 +07:00
1da1dec76c fix(go): correct processing of document passwords 2026-02-02 16:25:45 +07:00
701d65dfaf Merge pull request 'build(nodejs): bump qs to 6.14.1' from nodejs-bump-qs into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/86
2026-01-27 07:09:23 +00:00
5fa447b489 build(nodejs): bump qs to 6.14.1 2026-01-27 13:07:17 +07:00
c092db2566 Merge pull request 'fix(java): correct dataInsertImage object' from java-fix-data-insert-image into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/85
2026-01-20 12:34:35 +00:00
873692e038 fix(java): correct dataInsertImage object 2026-01-20 17:40:21 +07:00
9dadd4cb28 Merge remote-tracking branch 'remotes/origin/release/1.15.0' into develop
# Conflicts:
#	web/documentserver-example/go/utils/format.go
2026-01-15 15:05:23 +03:00
9c6667325f Copyright 2026 2026-01-15 15:03:03 +03:00
8ea1f2c296 Merge pull request 'nodejs: update jws and js-yaml packages' from nodejs-audit-fix into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/84
2025-12-12 07:19:26 +00:00
d4c41ed9c5 nodejs: update jws and js-yaml packages 2025-12-12 11:40:12 +07:00
614219f5fc feat: added approve msgspec to python/.check-licenses.yml 2025-12-09 13:11:13 +03:00
b1191be00d extend directurl description (Fix Bug 79000) 2025-12-08 17:17:33 +03:00
5361a94c57 nodejs: wopi CopyPasteRestrictions for anonymous 2025-11-27 17:54:43 +03:00
33ad23a08c nodejs: get fileType 2025-11-25 18:42:56 +03:00
e28f8df721 Merge remote-tracking branch 'remotes/origin/release/1.15.0' into develop 2025-11-21 16:58:54 +03:00
4096952ed1 ruby: delete 3rd licenses 2025-11-21 16:58:40 +03:00
464f2ff503 Merge branch 'release/1.15.0' into develop 2025-11-21 16:54:34 +03:00
c973d1e8d5 Merge remote-tracking branch 'remotes/origin/master' into release/1.15.0
# Conflicts:
#	3rd-Party.license
#	web/documentserver-example/ruby/3rd-Party.license
#	web/documentserver-example/ruby/licenses/3rd-Party.license
2025-11-21 16:54:09 +03:00
be9203ffc1 Merge pull request 'correct API methods are in each example's own readme' from readme-api-methods into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/82
2025-10-31 07:07:49 +00:00
1be558eebc docs: correct API methods are in each example's own readme 2025-10-28 16:16:52 +07:00
1b2befb814 Merge pull request 'feature/insert-image' from feature/insert-image into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/81
2025-10-21 09:30:10 +00:00
e63770f0d2 ruby: lint fix 2025-10-21 14:42:20 +07:00
9c8a766a81 nodejs: fix lint 2025-10-15 11:36:02 +03:00
f340aa4a97 Merge remote-tracking branch 'remotes/origin/release/1.15.0' into develop
# Conflicts:
#	web/documentserver-example/csharp-mvc/assets/document-formats
#	web/documentserver-example/csharp/assets/document-formats
#	web/documentserver-example/go/static/assets/document-formats
#	web/documentserver-example/java/src/main/resources/assets/document-formats
#	web/documentserver-example/nodejs/public/assets/document-formats
#	web/documentserver-example/php/assets/document-formats
#	web/documentserver-example/python/assets/document-formats
#	web/documentserver-example/ruby/assets/document-formats
2025-10-15 10:49:25 +03:00
64021ceded Merge remote-tracking branch 'remotes/origin/release/v9.1.0' into release/1.15.0 2025-10-15 10:46:17 +03:00
2a0384c875 update formats 2025-10-15 10:44:43 +03:00
906050f9bc Merge remote-tracking branch 'remotes/origin/release/1.14.1' into release/v9.1.0
# Conflicts:
#	CHANGELOG.md
#	web/documentserver-example/nodejs/config/default.json
#	web/documentserver-example/nodejs/public/assets/document-formats
2025-10-15 10:43:17 +03:00
81ee94866e Merge pull request 'build(ruby): update rack to 2.2.19' from ruby-bump-rack-2-2-19 into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/79
2025-10-09 09:17:20 +00:00
5464d4ecc3 build(ruby): update rack to 2.2.19 2025-10-09 14:25:34 +07:00
8d0baf9661 update insertImage formats to changelog 2025-10-09 14:07:36 +07:00
5466ebf523 ruby: wrap data-insert-image with images array 2025-10-09 14:06:25 +07:00
9cf63d12ef python: wrap data-insert-image with images array 2025-10-09 14:06:25 +07:00
b16a9afddd php-laravel: wrap data-insert-image with images array 2025-10-09 14:06:25 +07:00
584cc9cc18 php: wrap data-insert-image with images array 2025-10-09 14:06:25 +07:00
6f8db52854 java-spring: wrap data-insert-image with images array 2025-10-09 14:06:25 +07:00
60e847568a java: wrap data-insert-image with images array 2025-10-09 14:06:25 +07:00
e481368cbc go: wrap data-insert-image with images array 2025-10-09 14:06:25 +07:00
fa3886c46b csharp-mvc: wrap data-insert-image with images array 2025-10-09 14:06:25 +07:00
ae6c07c5b2 csharp: wrap data-insert-image with images array 2025-10-09 14:06:25 +07:00
c90514e184 nodejs: update insertImage format 2025-10-07 16:47:48 +03:00
7743b8a71b nodejs: formats for ds v9.1 2025-09-30 14:41:16 +03:00
58331f3dd1 Merge pull request 'fix-vulnerabilities' from fix-vulnerabilities into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/78
2025-09-18 13:48:34 +00:00
6b802c6f26 build(ruby): update rails to 7.1.5.2 2025-09-18 17:25:48 +07:00
fe77403dc5 build(ruby): bump rexml from 3.3.9 to 3.4.2 2025-09-18 17:14:08 +07:00
c675df5815 format changelog 2025-09-16 09:14:48 +03:00
27560f6423 Merge pull request 'feature/new-mobile-main-page' from feature/new-mobile-main-page into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/77
2025-09-16 06:13:26 +00:00
360ddb8cf6 fix(nodejs): context menu reaction to click 2025-09-12 15:53:35 +07:00
a426825655 feat(php-laravel): mobile index page view 2025-09-12 15:51:25 +07:00
2080e737cc feat(ruby): new mobile index page view 2025-09-12 15:51:25 +07:00
0ff8cc7811 feat(python): new mobile index page view 2025-09-12 15:51:24 +07:00
ea5cdaf13d feat(php): new mobile index page view 2025-09-12 15:51:24 +07:00
6378eab0a8 feat(java-spring): new mobile index page view 2025-09-12 15:51:24 +07:00
6f7935137f feat(java): new mobile index page view 2025-09-12 15:51:24 +07:00
6794460bd4 feat(go): new mobile index page view 2025-09-12 15:51:24 +07:00
bbc48eb30b feat(csharp-mvc): new mobile index page view 2025-09-12 15:51:24 +07:00
348336ba3e feat(csharp): new mobile index page view 2025-09-12 15:51:04 +07:00
8aebdbbb29 feat(nodejs): new mobile index wopi page 2025-09-09 13:02:48 +07:00
106187bc70 feat(nodejs): new mobile index page view 2025-09-09 12:39:00 +07:00
276afb0915 Merge remote-tracking branch 'remotes/origin/feature/update-icons' into develop 2025-09-08 13:41:08 +03:00
53e3e8f198 changelog: update icons 2025-09-02 12:47:14 +07:00
1be72a0375 ruby: update icons 2025-09-02 12:44:02 +07:00
9f62cdd91b python: update icons 2025-09-02 12:44:02 +07:00
2f42f768f0 php-laravel: update icons 2025-09-02 12:44:02 +07:00
8966581561 php: update icons 2025-09-02 12:44:02 +07:00
24f2dc4839 java-spring: update icons 2025-09-02 12:44:01 +07:00
57f2a9e558 java: update icons 2025-09-02 12:44:01 +07:00
594baad685 go: update icons 2025-09-02 12:44:01 +07:00
ac34f63a63 csharp-mvc: update icons 2025-09-02 12:43:56 +07:00
d7621c2289 csharp: update icons 2025-09-02 12:39:13 +07:00
31251fc06b Merge branch 'feature/display-modes-by-actions' into develop 2025-08-15 12:02:29 +03:00
2b162f403a nodejs: update icons 2025-08-14 14:04:57 +03:00
4af1d5c591 php-laravel: 5 editor icons on index page 2025-08-14 17:58:01 +07:00
074db3060a java-spring: 5 editor icons on index page 2025-08-14 17:22:31 +07:00
252753b9d9 ruby: fix index page and styles for display by action 2025-08-14 16:45:49 +07:00
2a27a4029a python: fix index page and styles for display by action 2025-08-14 16:45:49 +07:00
d382788123 php: fix index page and styles for display by action 2025-08-14 16:45:49 +07:00
2aaef3167b java: fix index page and styles for display by action 2025-08-14 16:45:49 +07:00
04079938bc feat(go): display mode buttons by actions 2025-08-14 16:45:49 +07:00
fe4ad09d88 fix(go): correct handling of formats and actions 2025-08-14 16:45:49 +07:00
4124ca10bc csharp-mvc: fix index page and styles for display by action 2025-08-14 16:45:43 +07:00
a947941986 csharp: fix index page and styles for display by action 2025-08-14 16:45:12 +07:00
569e6bc474 nodejs: fix styles for display by action 2025-08-12 14:03:28 +07:00
2eba416116 nodejs: remove not used wopi params 2025-08-06 13:45:29 +03:00
622638c06f nodejs: display comment mode by actions 2025-08-06 13:33:49 +03:00
be31e8bf0c nodejs: change action buttons 2025-08-06 13:09:50 +03:00
3349545979 nodejs: display fill modes by actions 2025-08-06 13:08:41 +03:00
f68177b4fb nodejs: remove filling only for oform (8e60c60e46) 2025-08-06 12:26:05 +03:00
82f0e1318a nodejs: filling on mobile 2025-08-06 12:24:04 +03:00
1d6b4c746c nodejs: support lossy-edit 2025-08-06 11:39:56 +03:00
978d9d405a Merge pull request 'fix(nodejs): replace deprecated fs.F_OK with fs.constants.F_OK' from nodejs-deprecated-F_OK into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/76
2025-08-05 13:13:06 +00:00
6e8a9c118a nodejs: wopi UserCanOnlyComment (For Bug 75894) 2025-08-05 16:08:35 +03:00
c138c653f0 Merge pull request '1.15 bugfix' from release-1.15-bugfix into release/1.15.0 (fix 9faf628fba)
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/75
2025-08-05 12:08:30 +00:00
e5891b93fc fix(nodejs): replace deprecated fs.F_OK with fs.constants.F_OK 2025-08-05 18:39:18 +07:00
9d3c4a83f4 fix(nodejs): correct token params for wopi user id. Fix Bug 76144 2025-08-05 17:56:05 +07:00
f503a3a094 feat: display mode buttons by actions to changelog 2025-08-05 17:29:50 +07:00
aa2bc06652 feat(ruby): display mode buttons by actions 2025-08-05 17:25:54 +07:00
08dddec917 feat(python): display mode buttons by actions 2025-08-05 16:57:59 +07:00
6974f4205e feat(php): display mode buttons by actions 2025-08-05 16:21:05 +07:00
5ecb980d00 feat(java): display mode buttons by actions 2025-08-05 15:51:06 +07:00
bd405b926d feat(go): display review and filter modes by actions 2025-08-05 15:51:06 +07:00
9645a5b594 feat(csharp-mvc): display review and filter modes by actions 2025-08-05 15:50:58 +07:00
e9f58da424 feat(csharp): display review and filter modes by actions 2025-08-05 15:50:15 +07:00
21804e3236 feat(nodejs): display mode buttons by actions 2025-08-05 15:49:39 +07:00
24d2f595da Merge pull request 'update dependencies with vulnerabilities' from release-1.15-vulnerabilities into release/1.15.0
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/73
2025-08-04 08:32:53 +00:00
c9717c402b build(java): update dependencies with vulnerabilities 2025-08-04 12:28:55 +07:00
2e5cf3580c update formats 2025-08-01 16:07:51 +03:00
ef54a2899b build(go): update go version to 1.23.10 2025-08-01 14:12:19 +07:00
564a077cdb build(go): use jwt/v5 2025-08-01 13:51:24 +07:00
01786b3059 build(php-laravel): update dependencies with vulnerabilities 2025-08-01 12:46:26 +07:00
9947c96266 build(nodejs): update dependencies with vulnerabilities 2025-08-01 11:08:33 +07:00
d2bea39ada build(ruby): update dependencies with vulnerabilities 2025-08-01 11:04:04 +07:00
b269edf116 Merge remote-tracking branch 'remotes/origin/master' into develop 2025-07-31 10:39:48 +03:00
34e0c4fc92 fix typo 2025-07-30 16:26:03 +03:00
55fbdf7ba2 1.15.0 2025-07-30 15:55:15 +03:00
f483c9a71d nodejs: fix goback url (Fix Bug 71214) 2025-07-30 14:59:29 +03:00
3a4b300c64 nodejs: interactive-widget=resizes-content for mobile only (b759c8ba53) (For Bug 72802) 2025-07-17 11:36:48 +03:00
4f87ac132c build(java-spring): update com.onlyoffice.docs-integration-sdk to v1.6.0 2025-07-17 11:27:54 +03:00
5e4f1de764 fix typo 2025-07-15 16:09:24 +03:00
10ce2da945 Merge pull request 'feature/new-index-page-text' from feature/new-index-page-text into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/72
2025-07-15 13:03:17 +00:00
835679183d Merge pull request 'build(java-spring): update jackson-core to 2.15.0' from dependabot-update-jackson-core into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/71
2025-07-15 12:46:19 +00:00
057af70f2e fix typo 2025-07-15 15:45:32 +03:00
f9272eb4e7 Merge pull request 'feature/fillforms-roles' from feature/fillforms-roles into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/58
2025-07-15 12:45:06 +00:00
5b8a3519a6 fix changelog 2025-07-15 15:42:10 +03:00
43d2887bd8 Merge remote-tracking branch 'remotes/origin/develop' into feature/fillforms-roles 2025-07-15 15:41:05 +03:00
5a1329f12e nodejs: fix lint (3eae49253f) 2025-07-15 15:40:14 +03:00
8ed8e99eaa feat(ruby): new text on empty main page 2025-07-14 11:37:47 +07:00
9367a682a8 feat(python): new text on empty main page 2025-07-14 11:37:46 +07:00
3345549436 feat(php-laravel): new text on empty main page 2025-07-14 11:37:46 +07:00
e1d5c9a91b feat(php): new text on empty main page 2025-07-14 11:37:46 +07:00
c858c4fdce feat(java-spring): new text on empty main page 2025-07-14 11:37:46 +07:00
fbec8b4d19 feat(java): new text on empty main page 2025-07-14 11:37:32 +07:00
9906960c69 feat(go): new text on empty main page 2025-07-14 11:37:14 +07:00
9c1d998384 feat(csharp-mvc): new text on empty main page 2025-07-14 11:36:53 +07:00
cfe9b8b386 feat(csharp): new text on empty main page 2025-07-14 11:36:28 +07:00
90a0124eb5 feat(nodejs): new text on empty main wopi page 2025-07-14 10:51:32 +07:00
135aa85046 feat(nodejs): new text on empty main page 2025-07-11 17:02:10 +07:00
48eb9ed2e6 build(java-spring): update jackson-core to 2.15.0 2025-07-09 15:32:11 +07:00
79419537ea feat(java-spring): add start filling events and user roles 2025-07-09 14:58:21 +07:00
a11f1a27e2 build(java-spring): update docs-integration-sdk to 1.4.4-SNAPSHOT 2025-07-09 14:57:08 +07:00
8086cb8e33 feat(php-laravel): add start filling events and user roles 2025-07-09 13:10:57 +07:00
728d5720bd feat(ruby): add start filling events and user roles 2025-07-09 13:06:35 +07:00
add2ca8ba0 feat(python): add start filling events and user roles 2025-07-09 13:05:07 +07:00
183f7edd70 feat(php): add start filling events and user roles 2025-07-09 13:04:05 +07:00
a9627feb27 feat(java): add start filling events and user roles 2025-07-09 13:02:51 +07:00
48da865ce3 feat(go): add start filling events and user roles 2025-07-09 13:01:33 +07:00
911f3e9723 feat(csharp-mvc): add start filling events and user roles 2025-07-09 12:59:59 +07:00
a8b23d82d9 feat(csharp): add start filling events and user roles 2025-07-09 12:58:48 +07:00
0df21c3f8e Revert "nodejs: hasOwnProperty() used instead of hasOwn() for NodeJS v.14"
This reverts commit 35798a7916.
2025-07-07 16:04:41 +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
e8a68fad5a Merge remote-tracking branch 'remotes/origin/master' into develop 2025-07-01 17:14:05 +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
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
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
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
0dd9cbca36 docs: fix api link 2025-06-03 16:40:06 +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
9aa6e58bfc nodejs: set Content-Type for response 2025-05-12 15:10:11 +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
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
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
f40f1a4704 fix text 2025-03-24 13:06:13 +03:00
88e541971e nodejs: fix lint 2025-03-24 12:55:34 +03:00
6239e05032 Merge remote-tracking branch 'remotes/origin/release/1.13.0' into develop 2025-03-24 12:53:20 +03:00
e25f957605 Merge pull request 'features-tips' from features-tips into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/52
2025-03-24 09:51:59 +00:00
5c0c2f7baa Merge remote-tracking branch 'remotes/origin/develop' into features-tips
# Conflicts:
#	CHANGELOG.md
#	web/documentserver-example/csharp-mvc/Helpers/Users.cs
#	web/documentserver-example/csharp/Users.cs
#	web/documentserver-example/go/server/managers/default/user.go
#	web/documentserver-example/java-spring/pom.xml
#	web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/ExampleData.java
#	web/documentserver-example/java/src/main/java/helpers/Users.java
#	web/documentserver-example/nodejs/helpers/users.js
#	web/documentserver-example/php-laravel/app/Repositories/UserRepository.php
#	web/documentserver-example/php/src/helpers/ExampleUsers.php
#	web/documentserver-example/python/src/utils/users.py
#	web/documentserver-example/ruby/app/models/users.rb
2025-03-24 12:46:19 +03:00
974e728d8b Merge pull request 'feature/docs-integration-sdk' from feature/docs-integration-sdk into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/55
2025-03-24 09:40:10 +00:00
14dabe7789 fix: (java-spring) code style 2025-03-20 11:25:39 +03:00
18de6a1616 feat(java-spring): DocumentServerClient instead HttpURLConnection 2025-03-20 11:17:12 +03:00
983fa34c9f feat(java-spring): DocumentServerClient instead RequestManager 2025-03-20 11:16:42 +03:00
95a28b15b4 build(java-spring): com.onlyoffice:docs-integration-sdk:1.4.3-SNAPSHOT 2025-03-20 11:16:12 +03:00
6290abf5dd feat(java-spring): enable features tips for anonymous 2025-03-20 13:50:46 +07:00
d11115e452 build(java-spring): update docs-intergation-sdk to version 1.4.2-SNAPSHOT 2025-03-20 13:49:55 +07:00
39a32011f8 Merge remote-tracking branch 'remotes/origin/release/1.13.0' into develop 2025-03-19 11:46:53 +03:00
938212cb6a first user with favorite option 2025-03-17 16:12:41 +03:00
267e14edde reorder user's info 2025-03-17 15:59:31 +03:00
90710b9710 nodejs: reorder user's info 2025-03-17 15:12:04 +03:00
1794ce39ab nodejs: replace symbol 2025-03-14 17:07:52 +03:00
95218e4fe4 Merge branch 'feature/roles' into develop
# Conflicts:
#	CHANGELOG.md
2025-03-14 17:03:18 +03:00
13ccad5fbd Merge branch 'feature/submit' into develop 2025-03-14 16:19:08 +03:00
15c23bfc40 Merge remote-tracking branch 'remotes/origin/release/1.13.0' into develop 2025-03-14 16:18:59 +03:00
f5a11721bd Merge remote-tracking branch 'remotes/origin/release/1.13.0' into develop 2025-03-11 12:02:16 +03:00
9a3865e36e Merge branch 'release/v9.0.0' into develop
# Conflicts:
#	CHANGELOG.md
2025-03-11 11:46:53 +03:00
d8ea6a6dbb Merge remote-tracking branch 'remotes/origin/release/1.13.0' into develop 2025-03-11 11:24:37 +03:00
aaf8ac5328 feat(ruby): enable features tips for anonymous 2025-03-03 14:57:09 +07:00
11bbbebec1 feat(python): enable features tips for anonymous 2025-03-03 14:52:30 +07:00
27f21fd6f5 feat(php-laravel): enable features tips for anonymous 2025-03-03 14:45:08 +07:00
e76faa4671 feat(php): enable features tips for anonymous 2025-03-03 14:26:30 +07:00
4d7fe321ba feat(java): enable features tips for anonymous 2025-03-03 14:13:25 +07:00
aeda04b9e7 feat(golang): enable features tips for anonymous 2025-03-03 13:47:51 +07:00
699370936a feat(csharp-mvc): enable features tips for anonymous 2025-03-03 12:01:22 +07:00
ba95202084 fix(csharp-mvc): correct null users for protect and mentions for anonymous 2025-03-03 11:57:23 +07:00
2f72904deb feat(csharp): enable features tips for anonymous 2025-03-03 11:38:09 +07:00
cd033ac3bd fix(csharp): correct null users for protect and mentions for anonymous 2025-03-03 11:37:07 +07:00
6b9e5503c3 feat(nodejs): enable features tips for anonymous 2025-02-27 15:17:18 +07:00
d6d9ea024c Merge remote-tracking branch 'remotes/origin/release/1.13.0' into develop 2025-02-24 17:21:00 +03:00
f74fb7384e Merge pull request 'feat(nodejs): wopi proof key verification' from feature/wopi-verification into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/43
2025-02-24 14:15:35 +00:00
14458f82dd Merge remote-tracking branch 'remotes/origin/release/1.13.0' into develop 2025-02-24 15:11:21 +03:00
f4a11e2047 Merge pull request 'nodejs: move editor style to template file' from replace-editor-css into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/48
2025-02-24 12:10:13 +00:00
0f9f09d346 nodejs: move editor style to template file 2025-02-24 14:09:28 +07:00
ed0a70f071 Merge remote-tracking branch 'remotes/origin/release/1.13.0' into develop 2025-02-20 13:18:39 +03:00
dadba2a81f Merge remote-tracking branch 'remotes/origin/hotfix/v8.3.1' into develop 2025-02-19 11:33:47 +03:00
fe56ec24b5 nodejs: encode path in url for wopi 2025-02-19 11:31:24 +03:00
6a11ac4ced diagram to changelog for all 2025-02-17 10:35:07 +03:00
5169b1dc97 ci: change sdk version to dev-diagram 2025-02-17 10:26:35 +03:00
dabb51bf8a Merge branch 'release/1.13.0' into develop 2025-02-17 10:23:08 +03:00
f15f48eba5 java-spring: sdk 1.4.1-SNAPSHOT 2025-02-14 15:55:18 +03:00
12753dee19 Merge remote-tracking branch 'remotes/origin/release/1.13.0' into develop 2025-02-14 15:51:54 +03:00
598e914452 Merge pull request 'feature/diagrams' from feature/diagrams-editor into develop
Reviewed-on: https://git.onlyoffice.com/ONLYOFFICE/document-server-integration/pulls/33
2025-02-11 15:19:08 +00:00
099a53b24b Merge remote-tracking branch 'remotes/origin/develop' into feature/diagrams-editor
# Conflicts:
#	.gitmodules
#	CHANGELOG.md
2025-02-11 18:14:51 +03:00
d01263917c nodejs: vsdx 2025-02-11 18:14:00 +03:00
0f3c40e0b1 update diagram tab icon 2025-02-11 16:42:41 +07:00
bf2f32b7cb Merge remote-tracking branch 'remotes/origin/develop' into feature/diagrams-editor
# Conflicts:
#	CHANGELOG.md
#	web/documentserver-example/csharp-mvc/assets/document-formats
#	web/documentserver-example/csharp/assets/document-formats
#	web/documentserver-example/go/static/assets/document-formats
#	web/documentserver-example/java/src/main/resources/assets/document-formats
#	web/documentserver-example/php/assets/document-formats
#	web/documentserver-example/python/assets/document-formats
#	web/documentserver-example/ruby/assets/document-formats
2025-02-07 11:59:22 +03:00
534eedfae1 feat(ruby): support vsdx in diagram editor 2025-02-04 15:56:39 +07:00
77775754b6 feat(python): support vsdx in diagram editor 2025-02-04 15:47:49 +07:00
bfebc197af feat(php): support vsdx in diagram editor 2025-02-04 15:28:36 +07:00
a3d7b159da feat(java): support vsdx in diagram editor 2025-02-04 15:03:07 +07:00
f12cb242ea feat(go): support vsdx in diagram editor 2025-02-04 14:48:00 +07:00
8a5f37da3f feat(csharp-mvc): support vsdx in diagram editor 2025-02-04 14:10:43 +07:00
5c9fe8f8f5 feat(csharp): support vsdx in diagram editor 2025-02-04 13:27:05 +07:00
645 changed files with 9073 additions and 6130 deletions

View File

@ -21,7 +21,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.21'
go-version: '1.23.10'
- name: Lint Golangci
run: |

View File

@ -1,11 +1,43 @@
# Change Log
- nodejs: wopi CopyPasteRestrictions for anonymous
- update insertImage formats
- new mobile index page view
- update action icons
- php-laravel: 5 editor icons on index page
- java-spring: 5 editor icons on index page
- ruby: display mode buttons by actions
- python: display mode buttons by actions
- php: display mode buttons by actions
- java: display mode buttons by actions
- go: display mode buttons by actions
- csharp-mvc: display mode buttons by actions
- csharp: display mode buttons by actions
- nodejs: display mode buttons by actions
- nodejs: wopi UserCanOnlyComment
## 1.15.0
- php-laravel: fix custom jwt header
- formats for ds v9.3
- user role
- start filling
- 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 popup
- change tab title on rename
- change uploaded file name in popup if converted
- features tips for anonymous
- view odg, md
- edit xlsb
- support vsdx in diagram editor
## 1.14.1
- nodejs: formats for ds v9.1
## 1.14.0
- nodejs: set users by parts
- nodejs: preload frame moved from uploading popap
- nodejs: preload frame moved from uploading popup
- nodejs: view odg, md
- nodejs: edit xlsb
- nodejs: support vsdx in diagram editor

View File

@ -19,57 +19,7 @@ You should change `http://documentserver` to your server address in these files:
* [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")
## API methods for test examples
The methods described below are available for all of the test examples.
### POST `/upload`
| | |
| ---------------------- | ------------------------------------------------------------ |
| **Summary** | Upload file to test example via request |
| **URL** | /upload |
| **Method** | POST |
| **Request<br>Headers** | `Content-Type: multipart/form-data` |
| **Request<br>Body** | `uploadedFile=@<filepath>`<br> `filepath` - file for uploading<br />Multipart body with the file binary contents |
| **Response** | **Code:** 200 OK <br />**Content on success:**<br /> `{ "filename": <filename>}`<br />**Content on error:**<br /> `{ "error": "Uploaded file not found" }` <br /> Or <br /> `{ "error": "File size is incorrect" }` |
| **Sample** | `curl -X POST -F uploadedFile=@filename.docx http://localhost/upload` |
### DELETE `/file`
| | |
| ------------------ | ------------------------------------------------------------ |
| **Summary** | Delete one file or all files |
| **URL** | /file |
| **Method** | DELETE |
| ****URL Params**** | **Optional:**<br /> `filename=[string]` - file for deleting. <br /> *WARNING! Without this parameter, all files will be deleted* |
| **Response** | **Code:** 200 OK <br /> **Success:**<br /> `{ "success": true }` |
| **Sample** | **Delete one file:**<br />`curl -X DELETE http://localhost/file?filename=filename.docx`<br />**Delete all files:**<br />`curl -X DELETE http://localhost/file`<br /> |
### GET `/files`
| | |
| ------------------ | ------------------------------------------------------------ |
| **Summary** | Get information about all files |
| **URL** | /files |
| **Method** | GET |
| **Response** | **Code:** 200 OK <br /> **Success:**<br /> `[{ "version": <file_version>, "id": <file_id>, "contentLength": <file_size_in_kilobytes>, "pureContentLength": <file_size_in_bytes>, "title": <file_name>, "updated": <last_change_date>}, ..., {...}]` |
| **Sample** | `curl -X GET http://localhost/files/` |
### GET `/files/file/{fileId}`
| | |
| ------------------ | ------------------------------------------------------------ |
| **Summary** | Get information about a file by file id |
| **URL** | /files/file/{fileId} |
| **Method** | GET |
| **Response** | **Code:** 200 OK <br />**Content on success:**<br /> `[{ "version": <file_version>, "id": <file_id>, "contentLength": <file_size_in_kilobytes>, "pureContentLength": <file_size_in_bytes>, "title": <file_name>, "updated": <last_change_date>}]`<br />**Content on error:**<br /> `"File not found"` |
| **Sample** | `curl -X GET http://localhost/files/{fileId}` |
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/)
## Important security info

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -51,8 +51,8 @@
.tableHeader td:last-child, .tableRow td:last-child {
width: 10%;
text-align: center;
padding: 0 !important;
text-align: right;
display: revert;
}
.tableHeader {
@ -81,6 +81,11 @@ menu.links {
.scroll-table-body {
overflow-y: auto;
width: 100%;
}
.scroll-table-body td {
padding: 0 !important;
}
.stored-list {

View File

@ -1,3 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M19 6H5L5 15H19V6ZM5 4C3.89543 4 3 4.89543 3 6V15C3 16.1046 3.89543 17 5 17H10V18H6V20H18V18H14V17H19C20.1046 17 21 16.1046 21 15V6C21 4.89543 20.1046 4 19 4H5Z" fill="#444444"/>
</svg>

Before

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 316 B

After

Width:  |  Height:  |  Size: 316 B

View File

@ -1,5 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="4" y="6" width="16" height="13" rx="1" stroke="#444444" stroke-width="2"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.148 8.69651C13.8858 8.43384 13.4601 8.43384 13.1979 8.69651V8.69651C12.9362 8.95858 12.9362 9.38302 13.1979 9.64509L15.3401 11.7908C15.7296 12.1809 15.7299 12.8126 15.3409 13.2031L13.1967 15.3554C12.9357 15.6173 12.9357 16.041 13.1967 16.3029V16.3029C13.4591 16.5663 13.8855 16.5663 14.1478 16.3029L17.3302 13.1086V13.1086C17.668 12.7702 17.668 12.2222 17.3302 11.8838L14.148 8.69651Z" fill="#444444"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.85199 16.3035C10.1142 16.5662 10.5399 16.5662 10.8021 16.3035V16.3035C11.0638 16.0414 11.0638 15.617 10.8021 15.3549L8.65987 13.2092C8.2704 12.8191 8.27006 12.1874 8.65911 11.7969L10.8033 9.64461C11.0643 9.38266 11.0643 8.959 10.8033 8.69706V8.69706C10.5409 8.43371 10.1145 8.43371 9.85218 8.69706L6.66983 11.8914V11.8914C6.33201 12.2298 6.33201 12.7778 6.66983 13.1162L9.85199 16.3035Z" fill="#444444"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 379 B

After

Width:  |  Height:  |  Size: 379 B

View File

@ -0,0 +1,6 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.5 3.707V15a.5.5 0 0 1-.5.5H3a.5.5 0 0 1-.5-.5V1A.5.5 0 0 1 3 .5h7.293z" fill="#fff" stroke="#BBB"/>
<path d="M9.5 1v2.7c0 .28 0 .42.055.527a.5.5 0 0 0 .218.218c.107.055.247.055.527.055H13" stroke="#BBB"/>
<path d="M5 8h6v1H5zm0 1h1v1H5zm5 0h1v1h-1zM7 6h2v2H7z" fill="#5951BB"/>
<path stroke="#5951BB" d="M4.5 10.5h2v2h-2zm5 0h2v2h-2z"/>
</svg>

After

Width:  |  Height:  |  Size: 469 B

View File

@ -1,5 +1,3 @@
<svg width="20" height="14" viewBox="0 0 20 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="20" height="2" rx="1" fill="white"/>
<rect y="6" width="20" height="2" rx="1" fill="white"/>
<rect y="12" width="20" height="2" rx="1" fill="white"/>
</svg>
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16 5C17.6569 5 19 6.34315 19 8V16C19 17.6569 17.6569 19 16 19H8C6.34315 19 5 17.6569 5 16V8C5 6.34315 6.34315 5 8 5H16ZM11 7V17H16L16.1025 16.9951C16.573 16.9472 16.9472 16.573 16.9951 16.1025L17 16V8C17 7.48232 16.6067 7.05621 16.1025 7.00488L16 7H11Z" fill="#EFEFEF"/>
</svg>

Before

Width:  |  Height:  |  Size: 278 B

After

Width:  |  Height:  |  Size: 383 B

View File

@ -1,3 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 3C6.89543 3 6 3.89543 6 5V19C6 20.1046 6.89543 21 8 21H16C17.1046 21 18 20.1046 18 19V5C18 3.89543 17.1046 3 16 3H8ZM16.8462 6H7.15385V18H16.8462V6ZM10.3846 4H13.6154V5H10.3846V4ZM12 20C12.2974 20 12.5385 19.7761 12.5385 19.5C12.5385 19.2239 12.2974 19 12 19C11.7026 19 11.4615 19.2239 11.4615 19.5C11.4615 19.7761 11.7026 20 12 20Z" fill="#444444"/>
</svg>

Before

Width:  |  Height:  |  Size: 506 B

View File

Before

Width:  |  Height:  |  Size: 638 B

After

Width:  |  Height:  |  Size: 638 B

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.33331 10C4.22665 10 3.33331 10.8933 3.33331 12C3.33331 13.1067 4.22665 14 5.33331 14C6.43998 14 7.33331 13.1067 7.33331 12C7.33331 10.8933 6.43998 10 5.33331 10ZM18.6666 10C17.56 10 16.6666 10.8933 16.6666 12C16.6666 13.1067 17.56 14 18.6666 14C19.7733 14 20.6666 13.1067 20.6666 12C20.6666 10.8933 19.7733 10 18.6666 10ZM12 10C10.8933 10 9.99998 10.8933 9.99998 12C9.99998 13.1067 10.8933 14 12 14C13.1066 14 14 13.1067 14 12C14 10.8933 13.1066 10 12 10Z" fill="#808080"/>
</svg>

After

Width:  |  Height:  |  Size: 588 B

View File

Before

Width:  |  Height:  |  Size: 838 B

After

Width:  |  Height:  |  Size: 838 B

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -34,15 +34,15 @@
}
.tableHeaderCellFileName {
width: 25%;
width: 29%;
}
.tableHeaderCellEditors {
width: 13%;
width: 12%;
}
.tableHeaderCellViewers {
width: 18%;
width: 15%;
text-align: right;
}
@ -84,6 +84,7 @@
}
.tableRow,
.storedHeader,
menu.links {
width: 90%;
}
@ -142,6 +143,7 @@
.scroll-table-body {
top: 31px;
height: calc(100% - 34px);
}
footer {
@ -182,9 +184,14 @@
@media (max-width: 715px) {
.tableRow,
.storedHeader,
menu.links {
width: 45%;
}
.storedHeaderClearAll {
padding-right: 24px;
}
}
@media (max-width: 670px) and (min-width: 620px){
.main-panel{
@ -220,15 +227,15 @@
.tableRow td:first-child {
flex-grow: 0;
width: 15%;
width: 26%;
}
.tableHeaderCellFileName {
width: 9%;
width: 15%;
}
.tableHeaderCellEditors {
width: 13%;
width: 3%;
}
.tableHeaderCellViewers {
@ -253,12 +260,12 @@
}
.tableHeaderCellEditors {
width: 15%;
width: 13%;
text-align: left;
}
.tableHeaderCellFileName {
width: 28%;
width: 29%;
}
.tableHeaderCellViewers {
@ -281,6 +288,7 @@
}
.tableRow,
.storedHeader,
menu.links {
width: 75%;
}
@ -302,6 +310,10 @@
.firstContentCellViewers {
margin-left: 0;
}
.storedHeaderClearAll {
padding-right: 39px;
}
}
@media (max-width: 890px) and (min-width: 769px ) {
@ -317,6 +329,7 @@
}
.tableRow,
.storedHeader,
menu.links {
width: 95%;
}
@ -337,7 +350,7 @@
}
.tableHeaderCellFileName {
width: 20%;
width: 22%;
}
.tableHeaderCellEditors {
@ -346,18 +359,22 @@
}
.tableHeaderCellViewers {
width: 19%;
width: 15%;
}
.tableHeaderCellAction {
width: 19%;
padding-right: 45px;
}
.storedHeaderClearAll {
padding-right: 30px;
}
}
@media (max-width: 890px) {
.tableRow td:first-child {
max-width: 17%;
max-width: 22%;
}
#portal-info {
max-width: 60vw;
@ -436,61 +453,6 @@
padding: 16px 0 6px;
}
.tableRow,
menu.links {
width: 40%;
}
.tableRow td {
border: none;
}
.firstContentCellShift {
border: none;
flex-basis: 10%;
flex-grow: 1;
}
.downloadContentCellShift {
max-width: 7%;
margin-right: 24px;
margin-left: 0;
}
.contentCells-icon {
width: 13%;
}
.tableRow td:last-child {
width: 7%;
padding-right: 0px;
border: none;
}
.contentCells-shift {
padding-right: 0px;
}
.downloadContentCellShift:after {
width: 85%;
}
.firstContentCellViewers {
margin-left: 0;
border-bottom: 1px solid #e5e5e5 !important;
}
.firstContentCellViewers ~ td {
border-bottom: 1px solid #e5e5e5;
}
.tableRow td:first-child{
border: none;
width: 85%;
}
.contentCellsEmpty{
display: none;
width: 1%;
}
/* Mobile Upload*/
.blockUI.blockMsg.blockPage.ui-dialog.ui-widget.ui-corner-all.ui-widget-content.ui-draggable {
width: 344px !important;
@ -565,104 +527,7 @@
}
}
@media (max-width: 560px) and (min-width: 510px) {
.contentCells-icon {
width: 13%;
}
.downloadContentCellShift {
padding-right: 16px;
max-width: 4%;
}
}
@media (max-width: 510px) and (min-width: 470px) {
.tableRow,
menu.links {
width: 35%;
}
.tableRow td:first-child{
width: 83%;
}
.contentCells-icon {
width: 13%;
}
.downloadContentCellShift {
max-width: 6%;
padding-right: 6px;
}
.firstContentCellShift {
flex-basis: 9%;
}
.tableRow td:last-child {
padding-right: 28px;
}
}
@media (max-width: 470px) and (min-width: 420px) {
.tableRow,
menu.links {
width: 30%;
}
.tableRow td:first-child{
width: 85%;
}
.contentCells-icon {
width: 11%;
}
.downloadContentCellShift {
max-width: 3%;
padding-right: 0px;
padding-left: 0;
}
.firstContentCellShift {
margin-left: 2px;
flex-basis: 14%;
}
.tableRow td:last-child {
width: 5%;
padding-right: 63px;
}
.firstContentCellViewers{
padding-right: 2px;
width: 12%;
}
.contentCellsEmpty{
display: none;
}
}
@media (max-width: 420px) {
.tableRow,
menu.links {
width: 25%;
}
.tableRow td:last-child {
width: 6%;
padding-right: 16px;
}
.downloadContentCellShift {
max-width: 4%;
margin-right: 18px;
margin-left: -1px;
}
.firstContentCellShift {
flex-basis: 2%;
}
.contentCells-icon{
width: 12%;
}
footer table td {
margin: 0;
padding-right: 5px;
@ -673,10 +538,6 @@
padding-right: 5px;
margin: 0;
}
.firstContentCellViewers{
padding-right: 2px;
width: 11%;
}
}
@media (max-width: 1160px) {
@ -685,20 +546,15 @@
}
}
@media (min-width: 593px) {
.contentCellsEmpty {
display: none;
}
}
@media (max-width: 769px) and (min-width: 715px){
.tableRow,
.storedHeader,
menu.links {
width: 50%;
}
}
@media (max-width: 510px) {
.tableRow td:first-child{
flex-grow: 0;
.storedHeaderClearAll {
padding-right: 26px;
}
}
@media (max-width: 1100px) and (min-width: 890px){
@ -782,8 +638,8 @@
margin: 0;
position: fixed;
left: 0;
height: calc(100% - 124px);
z-index:99;
height: calc(100% - 44px);
z-index: 101;
}
.left-panel.active {
@ -893,6 +749,7 @@
.scroll-table-body {
top: 36px;
height: calc(100% - 34px);
}
.scroll-table-body tr:first-child {
@ -901,16 +758,37 @@
.tableRow {
border-bottom: 1px solid #e5e5e5;
padding: 16px 0;
padding: 12px 0;
width: 100%;
flex-wrap: nowrap;
}
.tableRow td:first-child {
width: 100%;
}
.tableRow td:last-child {
display: block;
width: 24px;
}
.contentCells {
padding: 0;
font-size: 13px;
}
.contentCells-icon {
width: auto;
display: none;
}
.stored-edit {
height: 12px;
padding: 6px 0 6px 34px;
}
.stored-edit span {
font-size: 14px;
font-size: 13px;
}
.header-list {
@ -918,7 +796,7 @@
}
.firstContentCellViewers {
border-bottom: none !important;
margin: 0;
}
.firstContentCellViewers ~ td {
@ -953,4 +831,19 @@
.user-block-table {
height: auto;
}
.upload-panel {
padding: 12px 0;
}
.user-block-table td select {
height: 48px;
padding-left: 12px;
border-radius: 6px;
border-color: #aaaaaa;
}
.user-block-table tr:last-child {
display: none;
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -511,10 +511,6 @@ label .checkbox {
line-height: 150%;
}
#loadScripts {
display: none;
}
#iframeScripts {
position: absolute;
visibility: hidden;
@ -631,6 +627,11 @@ footer table tr td:first-child {
background-image: url("images/icon_pdf.svg");
}
.stored-edit.diagram,
.uploadFileName.diagram {
background-image: url("images/icon_vsdx.svg");
}
.stored-edit span {
font-size: 12px;
line-height: 12px;
@ -751,7 +752,6 @@ footer table tr td:first-child {
.contentCells {
display: block;
border-bottom: 1px solid #EFEFEF;
font-family: 'Open Sans', sans-serif;
font-size: 16px;
padding: 4px;
@ -844,6 +844,7 @@ footer table tr td:first-child {
position: absolute;
right: 0;
top: 71px;
height: calc(100% - 130px);
scrollbar-color: #D0D5DA transparent;
scrollbar-width: thin;
}
@ -914,18 +915,18 @@ html {
position: relative;
}
.tableRow td:first-child {
display: flex;
flex-grow: 1;
max-width: 25%;
}
.tableRow td:first-child {
display: flex;
flex-grow: 1;
max-width: 29%;
}
.tableHeaderCellFileName {
width: 20%;
width: 24%;
}
.tableHeaderCellEditors {
width: 20%;
width: 24%;
}
.tableHeaderCellViewers {
@ -983,3 +984,103 @@ html {
top: 50%;
transform: translate(-50%, -50%);
}
.tableRow td:last-child {
display: none;
}
#mobileContextMenu {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100vh;
background-color: rgba(51, 51, 51, 0.3);
display: flex;
justify-content: center;
align-items: flex-end;
z-index: 100;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s ease, visibility 0s linear 0.4s;
}
#mobileContextMenu.active {
visibility: visible;
opacity: 1;
transition: opacity 0.3s ease;
}
#mobileContextMenu .context-body {
width: 100%;
max-height: 100%;
transform: translateY(100%);
transition: transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
overflow-y: auto;
overflow-x: hidden;
scrollbar-width: none;
}
#mobileContextMenu.active .context-body {
transform: translateY(0);
}
#mobileContextMenu table {
background-color: white;
width: 100%;
margin-top: 150px;
padding-bottom: 96px;
}
#mobileContextMenu thead {
padding: 12px 16px 0;
height: 48px;
position: sticky;
top: -1px;
display: flex;
align-items: center;
background-color: white;
}
#mobileContextMenu thead:not(.is-pinned)::after {
content: '';
position: absolute;
left: 16px;
right: 16px;
bottom: 0px;
height: 1px;
background: #e2e2e2;
}
#mobileContextMenu thead.is-pinned {
box-shadow: 0px 4px 6px 0px #CCCCCC4D;
transition: all 0.4s ease-out;
}
#mobileContextMenu tbody {
padding: 0 16px;
display: block
}
#mobileContextMenu tr {
display: block;
padding: 12px;
}
.context-section {
padding: 24px 0 6px !important;
font-size: 13px;
font-weight: 600;
color: #808080;
}
#mobileContextMenu a:not(.stored-edit) {
display: flex;
flex-direction: row;
align-items: center;
text-decoration: none;
}
#mobileContextMenu img {
margin-right: 8px;
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -26,14 +26,16 @@ namespace OnlineEditorsExampleMVC.Helpers
static List<string> descr_user_1 = new List<string>()
{
"File author by default",
"Doesnt belong to any group",
"Doesn't belong to any group",
"Can review all the changes",
"Can perform all actions with comments",
"The file favorite state is undefined",
"Can create files from templates using data from the editor",
"Can see the information about all users",
"This file isn't marked as favorite",
"Can create files from templates using data from the editor",
"Has an avatar",
"Can submit forms"
"Can submit forms",
"Has no roles",
"Can start filling"
};
static List<string> descr_user_2 = new List<string>()
@ -41,11 +43,13 @@ namespace OnlineEditorsExampleMVC.Helpers
"Belongs to Group2",
"Can review only his own changes or changes made by users with no group",
"Can view comments, edit his own comments and comments left by users with no group. Can remove his own comments only",
"Can see the information about users from Group2 and users who don't belong to any group",
"This file is marked as favorite",
"Can create new files from the editor",
"Can see the information about users from Group2 and users who dont belong to any group",
"Has an avatar",
"Cant submit forms"
"Can't submit forms",
"Has role 'Anyone'",
"Can start filling"
};
static List<string> descr_user_3 = new List<string>()
@ -53,33 +57,38 @@ namespace OnlineEditorsExampleMVC.Helpers
"Belongs to Group3",
"Can review changes made by Group2 users",
"Can view comments left by Group2 and Group3 users. Can edit comments left by the Group2 users",
"This file isnt marked as favorite",
"Cant copy data from the file to clipboard",
"Cant download the file",
"Cant print the file",
"Can create new files from the editor",
"Can see the information about Group2 users",
"Cant submit forms",
"The file favorite state is undefined",
"Can't copy data from the file to clipboard",
"Can't download the file",
"Can't print the file",
"Can create new files from the editor",
"Can't submit forms",
"Can't close history",
"Can't restore the file version"
"Can't restore the file version",
"Has role 'role'",
"Can start filling"
};
static List<string> descr_user_0 = new List<string>()
{
"The name is requested when the editor is opened",
"Doesnt belong to any group",
"Doesn't belong to any group",
"Can review all the changes",
"Can perform all actions with comments",
"Can't see anyone's information",
"The file favorite state is undefined",
"Can't mention others in comments",
"Can't create new files from the editor",
"Cant see anyones information",
"Can't rename files from the editor",
"Can't view chat",
"Can't protect file",
"View file without collaboration",
"Cant submit forms",
"Cant refresh outdated file"
"Can't refresh outdated file",
"Can't submit forms",
"Tour of tips when opening a document",
"Has empty role",
"Can't start filling"
};
private static List<User> users = new List<User>() {
@ -91,13 +100,14 @@ namespace OnlineEditorsExampleMVC.Helpers
null,
new Dictionary<string, object>(),
null,
null,
false,
new List<string>(),
descr_user_1,
true,
true,
new Goback(null, false),
new Close(null, false)
new Close(null, false),
null
),
new User(
"uid-2",
@ -118,7 +128,8 @@ namespace OnlineEditorsExampleMVC.Helpers
false,
true,
new Goback("Go to Documents", null),
new Close(null, true)
new Close(null, true),
new List<string>() { "Anyone" }
),
new User(
"uid-3",
@ -133,13 +144,14 @@ namespace OnlineEditorsExampleMVC.Helpers
{ "remove", new List<string>() { } }
},
new List<string>() { "group-2" },
false,
null,
new List<string>() { "copy", "download", "print" },
descr_user_3,
false,
false,
null,
new Close(null, true)
new Close(null, true),
new List<string>() { "role" }
),
new User(
"uid-0",
@ -155,7 +167,8 @@ namespace OnlineEditorsExampleMVC.Helpers
false,
false,
null,
null
null,
new List<string>()
)
};
@ -248,8 +261,9 @@ namespace OnlineEditorsExampleMVC.Helpers
public Goback goback;
public Close close;
public List<string> roles;
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates, bool avatar, Goback goback, Close close)
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates, bool avatar, Goback goback, Close close, List<string> roles)
{
this.id = id;
this.name = name;
@ -265,6 +279,7 @@ namespace OnlineEditorsExampleMVC.Helpers
this.avatar = avatar;
this.goback = goback;
this.close = close;
this.roles = roles;
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -190,6 +190,7 @@ namespace OnlineEditorsExampleMVC.Models
{
{ "id", !user.id.Equals("uid-0") ? user.id : null },
{ "name", user.name },
{ "roles", user.roles },
{ "group", user.group },
{ "image", user.avatar ? DocManagerHelper.GetServerUrl(false) + "/Content/images/" + user.id + ".png" : null}
}
@ -227,6 +228,12 @@ namespace OnlineEditorsExampleMVC.Models
{ "text", user.close.text },
{ "visible", user.close. visible }
} : new Dictionary<string, object>{}
},
{
"features", new Dictionary<string, object>
{
{ "featuresTips", user.id.Equals("uid-0") }
}
}
}
}
@ -320,13 +327,18 @@ namespace OnlineEditorsExampleMVC.Models
logoConfig.Add("directUrl", directMailMergeUrl.ToString());
}
var result = new Dictionary<string, object>
{
{ "images", new List<Dictionary<string, object>>{logoConfig} }
};
if (JwtManager.Enabled) // if the secret key to generate token exists
{
var token = JwtManager.Encode(logoConfig); // encode logoConfig into the token
logoConfig.Add("token", token); // and add it to the logo config
var token = JwtManager.Encode(result); // encode logoConfig into the token
result.Add("token", token); // and add it to the logo config
}
logoUrl = jss.Serialize(logoConfig).Replace("{", "").Replace("}", "");
logoUrl = jss.Serialize(result).Replace("{", "").Replace("}", "");
}
// get a mail merge config
@ -380,7 +392,7 @@ namespace OnlineEditorsExampleMVC.Models
var jss = new JavaScriptSerializer();
var id = request.Cookies.GetOrDefault("uid", null);
var user = Users.getUser(id);
usersForMentions = !user.id.Equals("uid-0") ? jss.Serialize(Users.getUsersForMentions(user.id)) : null;
usersForMentions = jss.Serialize(!user.id.Equals("uid-0") ? Users.getUsersForMentions(user.id) : null);
}
public void GetUsersInfo(HttpRequest request, out string usersInfo)
@ -397,7 +409,7 @@ namespace OnlineEditorsExampleMVC.Models
var jss = new JavaScriptSerializer();
var id = request.Cookies.GetOrDefault("uid", null);
var user = Users.getUser(id);
usersForProtect = !user.id.Equals("uid-0") ? jss.Serialize(Users.getUsersForProtect(user.id)) : null;
usersForProtect = jss.Serialize(!user.id.Equals("uid-0") ? Users.getUsersForProtect(user.id) : null);
}
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -35,7 +35,8 @@ namespace OnlineEditorsExampleMVC.Models
Word,
Cell,
Slide,
Pdf
Pdf,
Diagram
}
// get file type
@ -47,6 +48,7 @@ namespace OnlineEditorsExampleMVC.Models
if (FormatManager.DocumentExtensions().Contains(ext)) return FileType.Word; // word type for document extensions
if (FormatManager.SpreadsheetExtensions().Contains(ext)) return FileType.Cell; // cell type for spreadsheet extensions
if (FormatManager.PresentationExtensions().Contains(ext)) return FileType.Slide; // slide type for presentation extensions
if (FormatManager.DiagramExtensions().Contains(ext)) return FileType.Diagram; // diagram type for diagram extensions
return FileType.Null; // the default type is word
}
@ -202,6 +204,20 @@ namespace OnlineEditorsExampleMVC.Models
.ToList();
}
public static List<string> DiagramExtensions()
{
return Diagrams()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Diagrams()
{
return All()
.Where(format => format.Type == FileType.Diagram)
.ToList();
}
public static List<string> AllExtensions()
{
return All()
@ -223,6 +239,13 @@ namespace OnlineEditorsExampleMVC.Models
return cachedFormats;
}
public static List<string> GetFormatActions(string extension)
{
return All()
.Find(format => format.Extension() == extension)
.Actions;
}
private static string GetPath()
{
string path = Path.Combine(GetDirectory(), "onlyoffice-docs-formats.json");

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -98,18 +98,18 @@
<Content Include="Content\images\close.svg" />
<Content Include="Content\images\comment.svg" />
<Content Include="Content\images\delete.svg" />
<Content Include="Content\images\desktop.svg" />
<Content Include="Content\images\done.svg" />
<Content Include="Content\images\download.svg" />
<Content Include="Content\images\embeded.svg" />
<Content Include="Content\images\edit.svg" />
<Content Include="Content\images\embedview.svg" />
<Content Include="Content\images\error.svg" />
<Content Include="Content\images\file_docx.svg" />
<Content Include="Content\images\file_docxf.svg" />
<Content Include="Content\images\file_pptx.svg" />
<Content Include="Content\images\file_upload.svg" />
<Content Include="Content\images\file_xlsx.svg" />
<Content Include="Content\images\fill-forms.svg" />
<Content Include="Content\images\filter.svg" />
<Content Include="Content\images\formsubmit.svg" />
<Content Include="Content\images\home.svg" />
<Content Include="Content\images\icon_docx.svg" />
<Content Include="Content\images\icon_pptx.svg" />
@ -118,12 +118,14 @@
<Content Include="Content\images\loader16.gif" />
<Content Include="Content\images\logo.svg" />
<Content Include="Content\images\mobile-fill-forms.svg" />
<Content Include="Content\images\mobile.svg" />
<Content Include="Content\images\mobileEdit.svg" />
<Content Include="Content\images\mobileView.svg" />
<Content Include="Content\images\notdone.svg" />
<Content Include="Content\images\review.svg" />
<Content Include="Content\images\slide.ico" />
<Content Include="Content\images\uid-1.png" />
<Content Include="Content\images\uid-2.png" />
<Content Include="Content\images\view.svg" />
<Content Include="Content\images\word.ico" />
<Content Include="Content\jquery-ui.css" />
<Content Include="Content\media.css" />

View File

@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Ascensio System SIA")]
[assembly: AssemblyProduct("OnlineEditorsExampleMVC")]
[assembly: AssemblyCopyright("Ascensio System SIA 2025")]
[assembly: AssemblyCopyright("Ascensio System SIA 2026")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

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,10 +21,10 @@ 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:
Check if your system meets the system requirements:
* **Microsoft .NET Framework**: version 4.5 (download it from the [official Microsoft website](https://www.microsoft.com/en-US/download/details.aspx?id=30653));
* **Internet Information Services**: version 7 or later.
@ -79,6 +79,45 @@ In case the example and Document Server are installed on different computers, ma
Make sure that the Document Server has access to the server with the example installed with the address which you specify instead of **example.com** in the configuration files.
## File API methods used in this example
The methods described below are available for .Net (C# MVC) test example.
### POST `/webeditor.ashx?type=upload`
| | |
| ---------------------- | ------------------------------------------------------------ |
| **Summary** | Upload file to test example via request |
| **URL** | /webeditor.ashx?type=upload |
| **Method** | POST |
| **Request<br>Headers** | `Content-Type: multipart/form-data` |
| **Request<br>Body** | `uploadedFile=@<filepath>`<br> `filepath` - file for uploading<br />Multipart body with the file binary contents |
| **Response** | **Code:** 200 OK <br />**Content on success:**<br /> `{ "filename": <filename>}`<br />**Content on error:**<br /> `{ "error": "File type is not supported" }` <br /> Or <br /> `{ "error": "File size is incorrect" }` |
| **Sample** | `curl -X POST -F uploadedFile=@filename.docx http://localhost/webeditor.ashx?type=upload` |
### GET `/webeditor.ashx?type=remove`
| | |
| ------------------ | ------------------------------------------------------------ |
| **Summary** | Delete one file or all files |
| **URL** | /webeditor.ashx?type=remove |
| **Method** | GET |
| ****URL Params**** | **Optional:**<br /> `filename=[string]` - file for deleting. <br /> *WARNING! Without this parameter, all files will be deleted* |
| **Response** | **Code:** 200 OK <br /> **Success:**<br /> `{ "success": true }` |
| **Sample** | **Delete one file:**<br />`curl -X GET http://localhost/webeditor.ashx?type=remove&filename=filename.docx`<br />**Delete all files:**<br />`curl -X GET http://localhost/webeditor.ashx?type=remove`<br /> |
### GET `/webeditor.ashx?type=files`
| | |
| ------------------ | ------------------------------------------------------------ |
| **Summary** | Get information about all files |
| **URL** | /webeditor.ashx?type=files |
| **Method** | GET |
| **Response** | **Code:** 200 OK <br /> **Success:**<br /> `[{ "version": <file_version>, "id": <file_id>, "contentLength": <file_size_in_kilobytes>, "pureContentLength": <file_size_in_bytes>, "title": <file_name>, "updated": <last_change_date>}, ..., {...}]` |
| **Sample** | `curl -X GET http://localhost/webeditor.ashx?type=files` |
## Important security info
Please keep in mind the following security aspects when you are using test examples:

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -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");
@ -581,3 +562,75 @@ function toggleUserDescr(event) {
else list.classList.add("active");
}
}
function toggleContextMenu(event) {
let contextMenu = document.querySelector("#mobileContextMenu");
let target = event.currentTarget.parentNode.parentNode.cloneNode(true);
const closeContextMenu = () => {
contextMenu.classList.remove("active");
}
if (contextMenu.classList.contains("active") || !target.classList.contains("tableRow")) {
if (event.target.id == "mobileContextMenuBody") closeContextMenu();
return;
}
let contextBody = document.querySelector("#mobileContextMenuBody");
contextBody.innerHTML = "";
let startY = 0;
let startScroll = 0;
contextBody.addEventListener('touchstart', (e) => {
startY = e.touches[0].clientY;
startScroll = contextBody.scrollTop;
});
contextBody.addEventListener('touchmove', (e) => {
const currentY = e.touches[0].clientY;
const diff = currentY - startY;
if (diff > 10 && (contextBody.scrollTop === 0 || contextBody.scrollTop === startScroll)) {
closeContextMenu();
}
});
let thead = document.createElement("thead");
thead.appendChild(target.children[0]);
const observer = new IntersectionObserver(
([e]) => e.target.classList.toggle("is-pinned", e.intersectionRatio < 1),
{ threshold: [1] }
);
observer.observe(thead);
let tbody = document.createElement("tbody");
for (let td of Array.from(target.children).slice(0, -1)){
if (td.getAttribute("data-section")){
let section = document.createElement("tr");
section.innerText = td.getAttribute("data-section");
section.classList.add("context-section");
tbody.appendChild(section);
}
if (td.children.length == 0) continue;
let action = document.createElement("div");
action.innerText = td.children[0].children[0].getAttribute("title");
td.children[0].appendChild(action);
td.children[0].onclick = () => {
setTimeout(() => window.location.reload(), 0);
}
td.style.display = "block";
td.classList.remove("downloadContentCellShift");
td.classList.remove("firstContentCellViewers");
let tr = document.createElement("tr");
tr.appendChild(td);
tbody.appendChild(tr);
}
let table = document.createElement("table");
table.appendChild(thead);
table.appendChild(tbody);
contextBody.appendChild(table);
contextMenu.classList.add("active");
}

View File

@ -14,7 +14,7 @@
<meta name="mobile-web-app-capable" content="yes" />
<!--
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -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) {
@ -370,6 +397,18 @@
innerAlert("onRequestSendNotify: " + data);
};
var onRequestStartFilling = function(event) {
var data = event.data;
var submit = confirm("Start filling?\n" + JSON.stringify(data));
if (submit) {
docEditor.startFilling(true);
}
};
var onStartFilling = function(event) {
innerAlert("The form is ready to fill out.");
};
config = <%= Model.GetDocConfig(Request, Url) %>;
config.width = "100%";
@ -390,6 +429,8 @@
if (config.editorConfig.user.id) {
config.events['onRequestRefreshFile'] = onRequestRefreshFile;
config.events['onRequestStartFilling'] = onRequestStartFilling;
config.events['onStartFilling'] = onStartFilling;
config.events['onRequestClose'] = onRequestClose;
// the user is trying to show the document version history
config.events['onRequestHistory'] = onRequestHistory;
@ -421,7 +462,7 @@
config.events['onRequestReferenceSource'] = onRequestReferenceSource;
}
var сonnectEditor = function () {
var connectEditor = function () {
docEditor = new DocsAPI.DocEditor("iframeEditor", config);
};
@ -433,9 +474,9 @@
};
if (window.addEventListener) {
window.addEventListener("load", сonnectEditor);
window.addEventListener("load", connectEditor);
} else if (window.attachEvent) {
window.attachEvent("load", сonnectEditor);
window.attachEvent("load", connectEditor);
}
</script>

View File

@ -14,7 +14,7 @@
<meta name="server-version" content=<%= DocManagerHelper.GetVersion() %> />
<!--
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -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

@ -16,7 +16,7 @@
<meta name="server-version" content=<%= DocManagerHelper.GetVersion() %> />
<!--
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -48,13 +48,13 @@
</div>
<menu class="responsive-nav">
<li>
<a href="#" onclick="toggleSidePanel(event)">
<img src="content/images/mobile-menu.svg" alt="ONLYOFFICE" />
<a href="./">
<img src ="content/images/mobile-logo.svg" alt="ONLYOFFICE" />
</a>
</li>
<li>
<a href="./">
<img src ="content/images/mobile-logo.svg" alt="ONLYOFFICE" />
<a href="#" onclick="toggleSidePanel(event)">
<img src="content/images/mobile-menu.svg" alt="ONLYOFFICE" />
</a>
</li>
</menu>
@ -127,7 +127,7 @@
<td valign="middle">
<label class="side-option">
<input id="directUrl" type="checkbox" class="checkbox" />Try opening on client
<img id="directUrlInfo" class="info info-tooltip" data-id="directUrlInfo" data-tooltip="Some files can be opened in the user's browser without connecting to the document server." src="content/images/info.svg" />
<img id="directUrlInfo" class="info info-tooltip" data-id="directUrlInfo" data-tooltip="Some files can be opened in the user's browser without connecting to the document server. Open each file in only one way." src="content/images/info.svg" />
</label>
</td>
</tr>
@ -154,13 +154,18 @@
</menu>
<% var storedFiles = DocManagerHelper.GetStoredFiles(); %>
<div id="portal-info" style="display: <%= storedFiles.Any() ? "none" : "table-cell" %>">
<span class="portal-name">ONLYOFFICE Document Editors Welcome!</span>
<span class="portal-name">Welcome to ONLYOFFICE Docs!</span>
<span class="portal-descr">Get started with a live demo of ONLYOFFICE Docs, a powerful open-source office suite for your browser.</span>
<span class="portal-descr">
Get started with a demo-sample of ONLYOFFICE Document Editors, the first html5-based editors.
<br /> You may upload your own documents for testing using the "<b>Upload file</b>" button and <b>selecting</b> the necessary files on your PC.
You can test editing features in real-time and explore multi-user collaboration:
<ul>
<li>Create a new Document, Spreadsheet, Presentation, or PDF Form or use the sample files</li>
<li>Upload your own files to test using the Upload file button</li>
<li>Select your username and language to simulate different users and environments</li>
<li>Try real-time collaboration by opening the same document using different users in different Web browser sessions</li>
</ul>
</span>
<span class="portal-descr">Please do NOT use this integration example on your own server without proper code modifications, it is intended for testing purposes only. In case you enabled this test example, disable it before going for production.</span>
<span class="portal-descr">You can open the same document using different users in different Web browser sessions, so you can check out multi-user editing functions.</span>
<span class="portal-descr">⚠️ This example is intended for testing purposes only. Do not use it on a production server without proper code modifications. If you have enabled this test demo, please disable it before deploying the editors in production.</span>
<% foreach (User user in Users.getAllUsers())
{ %>
<div class="user-descr" onclick="toggleUserDescr(event)">
@ -199,131 +204,136 @@
<div class="scroll-table-body">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<% foreach (var storedFile in storedFiles)
{
var isEnabledDirectUrl = DocManagerHelper.GetDirectUrl();
var editUrl = "doceditor.aspx?fileID=" + HttpUtility.UrlEncode(storedFile.Name);
var docType = FileUtility.GetFileType(storedFile.Name).ToString().ToLower();
var ext = Path.GetExtension(storedFile.Name).ToLower();
var canEdit = DocManagerHelper.EditedExts.Contains(ext);
var isFillFormDoc = DocManagerHelper.FillFormExts.Contains(ext);
%>
<% foreach (var storedFile in storedFiles) {
var isEnabledDirectUrl = DocManagerHelper.GetDirectUrl();
var editUrl = "doceditor.aspx?fileID=" + HttpUtility.UrlEncode(storedFile.Name);
var docType = FileUtility.GetFileType(storedFile.Name).ToString().ToLower();
var ext = Path.GetExtension(storedFile.Name).ToLower();
var actions = FormatManager.GetFormatActions(ext);
%>
<tr class="tableRow" title="<%= storedFile.Name %> [<%= DocManagerHelper.GetFileVersion(storedFile.Name, HttpContext.Current.Request.UserHostAddress.Replace(':', '_')) %>]">
<td class="contentCells">
<a class="stored-edit <%= docType %>" href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, directUrl = isEnabledDirectUrl }) %>" target="_blank">
<span><%= storedFile.Name %></span>
</a>
</td>
<tr class="tableRow" title="<%= storedFile.Name %> [<%= DocManagerHelper.GetFileVersion(storedFile.Name, HttpContext.Current.Request.UserHostAddress.Replace(':', '_')) %>]">
<td class="contentCells">
<a class="stored-edit <%= docType %>" href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, directUrl = isEnabledDirectUrl }) %>" target="_blank">
<span><%= storedFile.Name %></span>
</a>
<!-- 1-2 -->
<% if (actions.Contains("edit") || actions.Contains("lossy-edit")) { %>
<td class="contentCells contentCells-icon" data-section="EDITOR">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "edit", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/edit.svg" alt="Open for full size screens" title="Open for full size screens"/>
</a>
</td>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "mobile", editorsMode = "edit", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/mobileEdit.svg" alt="Open for mobile devices" title="Open for mobile devices"/>
</a>
</td>
<% } else { %>
<td class="contentCells contentCells-icon" data-section="EDITOR"></td>
<td class="contentCells contentCells-icon"></td>
<% } %>
<!-- 3 -->
<% if (actions.Contains("comment")) { %>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "comment", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/comment.svg" alt="Open for comment" title="Open for comment"/>
</a>
</td>
<% } else { %>
<td class="contentCells contentCells-icon"></td>
<% } %>
<!-- 4-5 -->
<% if (actions.Contains("fill")) { %>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "fillForms", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/formsubmit.svg" alt="Open for filling in forms" title="Open for filling in forms"/>
</a>
</td>
<td class="contentCells contentCells-icon contentCells-shift firstContentCellShift">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "mobile", editorsMode = "fillForms", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/mobile-fill-forms.svg" alt="Open for filling in forms for mobile devices" title="Open for filling in forms for mobile devices"/>
</a>
</td>
<% } else { %>
<!-- 4 -->
<% if (actions.Contains("review")) { %>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "review", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/review.svg" alt="Open for review" title="Open for review"/>
</a>
</td>
<% } else if (actions.Contains("customfilter")) { %>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "filter", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/filter.svg" alt="Open without access to change the filter" title="Open without access to change the filter" />
</a>
</td>
<% if (canEdit) { %>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "edit", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/desktop.svg" alt="Open in editor for full size screens" title="Open in editor for full size screens"/>
</a>
</td>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "mobile", editorsMode = "edit", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/mobile.svg" alt="Open in editor for mobile devices" title="Open in editor for mobile devices"/>
</a>
</td>
<% if (docType != "pdf") { %>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "comment", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/comment.svg" alt="Open in editor for comment" title="Open in editor for comment"/>
</a>
</td>
<% } %>
<% if (docType == "word") { %>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "review", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/review.svg" alt="Open in editor for review" title="Open in editor for review"/>
</a>
</td>
<% } else if (docType == "cell") { %>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "filter", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/filter.svg" alt="Open in editor without access to change the filter" title="Open in editor without access to change the filter" />
</a>
</td>
<% } %>
<% if (docType == "word") { %>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "blockcontent", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/block-content.svg" alt="Open in editor without content control modification" title="Open in editor without content control modification"/>
</a>
</td>
<% } else { %>
<td class="contentCells contentCells-icon"></td>
<% } %>
<% if (docType != "word" && docType != "cell") { %>
<td class="contentCells contentCells-icon "></td>
<% } %>
<% if (isFillFormDoc) { %>
<td class="contentCells contentCells-shift contentCells-icon firstContentCellShift">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "fillForms", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/fill-forms.svg" alt="Open in editor for filling in forms" title="Open in editor for filling in forms"/>
</a>
</td>
<% } else { %>
<td class="contentCells contentCells-shift contentCells-icon firstContentCellShift"></td>
<% } %>
<% } else if (isFillFormDoc) { %>
<td class="contentCells contentCells-icon "></td>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "mobile", editorsMode = "fillForms", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/mobile-fill-forms.svg" alt="Open in editor for filling in forms for mobile devices" title="Open in editor for filling in forms for mobile devices"/>
</a>
</td>
<td class="contentCells contentCells-icon "></td>
<td class="contentCells contentCells-icon "></td>
<td class="contentCells contentCells-icon "></td>
<td class="contentCells contentCells-shift contentCells-icon firstContentCellShift">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "fillForms", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/fill-forms.svg" alt="Open in editor for filling in forms" title="Open in editor for filling in forms"/>
</a>
</td>
<% } else { %>
<td class="contentCells contentCells-shift contentCells-icon contentCellsEmpty" colspan="6"></td>
<% } %>
<td class="contentCells contentCells-icon firstContentCellViewers">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "view", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/desktop.svg" alt="Open in viewer for full size screens" title="Open in viewer for full size screens"/>
</a>
</td>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "mobile", editorsMode = "view", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/mobile.svg" alt="Open in viewer for mobile devices" title="Open in viewer for mobile devices"/>
</a>
</td>
<td class="contentCells contentCells-icon contentCells-shift">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "embedded", editorsMode = "embedded", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/embeded.svg" alt="Open in embedded mode" title="Open in embedded mode"/>
</a>
</td>
<% if (docType != null ) { %>
<td class="contentCells contentCells-icon">
<a class="convert-file" data="<%= storedFile.Name %>" data-type="<%= docType %>">
<img class="icon-action" src="content/images/convert.svg" alt="Convert" title="Convert" /></a>
</td>
<% } else { %>
<td class="contentCells contentCells-icon downloadContentCellShift"></td>
<% } %>
<td class="contentCells contentCells-icon downloadContentCellShift">
<a href="webeditor.ashx?type=download&fileName=<%= HttpUtility.UrlEncode(storedFile.Name) %>">
<img class="icon-download" src="content/images/download.svg" alt="Download" title="Download" />
</a>
</td>
<td class="contentCells contentCells-icon contentCells-shift">
<a class="delete-file" data-filename="<%= storedFile.Name %>">
<img class="icon-action" src="content/images/delete.svg" alt="Delete" title="Delete" />
</a>
</td>
</tr>
<% } %>
</tbody>
</table>
</div>
<% } else {%>
<td class="contentCells contentCells-icon"></td>
<% } %>
<!-- 5 -->
<% if (docType == "word") { %>
<td class="contentCells contentCells-icon contentCells-shift">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "blockcontent", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/block-content.svg" alt="Open without content control modification" title="Open without content control modification"/>
</a>
</td>
<% } else { %>
<td class="contentCells contentCells-icon contentCells-shift"></td>
<% } %>
<% } %>
<td class="contentCells contentCells-icon firstContentCellViewers" data-section="VIEWERS">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "view", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/view.svg" alt="Open for full size screens" title="Open for full size screens"/>
</a>
</td>
<td class="contentCells contentCells-icon">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "mobile", editorsMode = "view", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/mobileView.svg" alt="Open for mobile devices" title="Open for mobile devices"/>
</a>
</td>
<td class="contentCells contentCells-icon contentCells-shift">
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "embedded", editorsMode = "embedded", directUrl = isEnabledDirectUrl }) %>" target="_blank">
<img src="content/images/embedview.svg" alt="Open in embedded mode" title="Open in embedded mode"/>
</a>
</td>
<% if (docType != null ) { %>
<td class="contentCells contentCells-icon" data-section="ACTIONS">
<a class="convert-file" data="<%= storedFile.Name %>" data-type="<%= docType %>">
<img class="icon-action" src="content/images/convert.svg" alt="Convert" title="Convert" /></a>
</td>
<% } else { %>
<td class="contentCells contentCells-icon downloadContentCellShift" data-section="ACTIONS"></td>
<% } %>
<td class="contentCells contentCells-icon downloadContentCellShift">
<a href="webeditor.ashx?type=download&fileName=<%= HttpUtility.UrlEncode(storedFile.Name) %>">
<img class="icon-download" src="content/images/download.svg" alt="Download" title="Download" />
</a>
</td>
<td class="contentCells contentCells-icon contentCells-shift">
<a class="delete-file" data-filename="<%= storedFile.Name %>">
<img class="icon-action" src="content/images/delete.svg" alt="Delete" title="Delete" />
</a>
</td>
<td class="contentCells contentCells-icon">
<a href="#" onclick="toggleContextMenu(event)">
<img src="content/images/open-context.svg" alt="Open context menu" title="Open context menu" />
</a>
</td>
</tr>
<% } %>
</tbody>
</table>
</div>
</div>
<% } %>
</div>
</td>
@ -362,10 +372,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 +417,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 +425,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>
@ -432,6 +439,11 @@
</div>
</footer>
<div id="mobileContextMenu" onclick="toggleContextMenu(event)">
<div class="context-body" id="mobileContextMenuBody">
</div>
</div>
<%: Scripts.Render("~/bundles/jquery", "~/bundles/scripts") %>
<script language="javascript" type="text/javascript">

View File

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width" />
<!--
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<appSettings>
<clear />
<add key="version" value="1.14.0"/>
<add key="version" value="1.15.0"/>
<add key="filesize-max" value="52428800"/>
<add key="storage-path" value=""/>

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -51,8 +51,8 @@
.tableHeader td:last-child, .tableRow td:last-child {
width: 10%;
text-align: center;
padding: 0 !important;
text-align: right;
display: revert;
}
.tableHeader {
@ -81,6 +81,11 @@ menu.links {
.scroll-table-body {
overflow-y: auto;
width: 100%;
}
.scroll-table-body td {
padding: 0 !important;
}
.stored-list {

View File

@ -1,3 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M19 6H5L5 15H19V6ZM5 4C3.89543 4 3 4.89543 3 6V15C3 16.1046 3.89543 17 5 17H10V18H6V20H18V18H14V17H19C20.1046 17 21 16.1046 21 15V6C21 4.89543 20.1046 4 19 4H5Z" fill="#444444"/>
</svg>

Before

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 19H8.11111L8.84845 18.2627L5.73734 15.1516L5 15.8889V19ZM10.2627 16.8484L19 8.11111V6.55556H17.4444V5H15.8889L7.15155 13.7373L10.2627 16.8484Z" fill="#444444"/>
</svg>

After

Width:  |  Height:  |  Size: 316 B

View File

@ -1,5 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="4" y="6" width="16" height="13" rx="1" stroke="#444444" stroke-width="2"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.148 8.69651C13.8858 8.43384 13.4601 8.43384 13.1979 8.69651V8.69651C12.9362 8.95858 12.9362 9.38302 13.1979 9.64509L15.3401 11.7908C15.7296 12.1809 15.7299 12.8126 15.3409 13.2031L13.1967 15.3554C12.9357 15.6173 12.9357 16.041 13.1967 16.3029V16.3029C13.4591 16.5663 13.8855 16.5663 14.1478 16.3029L17.3302 13.1086V13.1086C17.668 12.7702 17.668 12.2222 17.3302 11.8838L14.148 8.69651Z" fill="#444444"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.85199 16.3035C10.1142 16.5662 10.5399 16.5662 10.8021 16.3035V16.3035C11.0638 16.0414 11.0638 15.617 10.8021 15.3549L8.65987 13.2092C8.2704 12.8191 8.27006 12.1874 8.65911 11.7969L10.8033 9.64461C11.0643 9.38266 11.0643 8.959 10.8033 8.69706V8.69706C10.5409 8.43371 10.1145 8.43371 9.85218 8.69706L6.66983 11.8914V11.8914C6.33201 12.2298 6.33201 12.7778 6.66983 13.1162L9.85199 16.3035Z" fill="#444444"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,6 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.326 18.6739C13.8912 18.2391 13.8912 17.5342 14.326 17.0994L20.0993 11.3261C20.5341 10.8913 21.239 10.8913 21.6738 11.3261C22.1086 11.7609 22.1086 12.4658 21.6738 12.9006L15.9006 18.6739C15.4658 19.1087 14.7608 19.1087 14.326 18.6739Z" fill="#444444"/>
<path d="M14.326 5.3261C14.7608 4.8913 15.4658 4.8913 15.9006 5.3261L21.6738 11.0994C22.1086 11.5342 22.1086 12.2391 21.6738 12.6739C21.239 13.1087 20.5341 13.1087 20.0993 12.6739L14.326 6.90063C13.8912 6.46583 13.8912 5.76089 14.326 5.3261Z" fill="#444444"/>
<path d="M9.67385 5.3261C10.1086 5.76089 10.1086 6.46583 9.67385 6.90063L3.90061 12.6739C3.46582 13.1087 2.76088 13.1087 2.32609 12.6739C1.8913 12.2391 1.8913 11.5342 2.32609 11.0994L8.09933 5.3261C8.53412 4.8913 9.23905 4.8913 9.67385 5.3261Z" fill="#444444"/>
<path d="M9.67385 18.6739C9.23905 19.1087 8.53412 19.1087 8.09933 18.6739L2.32609 12.9006C1.8913 12.4658 1.8913 11.7609 2.32609 11.3261C2.76088 10.8913 3.46582 10.8913 3.90061 11.3261L9.67385 17.0994C10.1086 17.5342 10.1086 18.2391 9.67385 18.6739Z" fill="#444444"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 379 B

After

Width:  |  Height:  |  Size: 379 B

View File

@ -0,0 +1,6 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.5 3.707V15a.5.5 0 0 1-.5.5H3a.5.5 0 0 1-.5-.5V1A.5.5 0 0 1 3 .5h7.293z" fill="#fff" stroke="#BBB"/>
<path d="M9.5 1v2.7c0 .28 0 .42.055.527a.5.5 0 0 0 .218.218c.107.055.247.055.527.055H13" stroke="#BBB"/>
<path d="M5 8h6v1H5zm0 1h1v1H5zm5 0h1v1h-1zM7 6h2v2H7z" fill="#5951BB"/>
<path stroke="#5951BB" d="M4.5 10.5h2v2h-2zm5 0h2v2h-2z"/>
</svg>

After

Width:  |  Height:  |  Size: 469 B

View File

@ -1,5 +1,3 @@
<svg width="20" height="14" viewBox="0 0 20 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="20" height="2" rx="1" fill="white"/>
<rect y="6" width="20" height="2" rx="1" fill="white"/>
<rect y="12" width="20" height="2" rx="1" fill="white"/>
</svg>
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16 5C17.6569 5 19 6.34315 19 8V16C19 17.6569 17.6569 19 16 19H8C6.34315 19 5 17.6569 5 16V8C5 6.34315 6.34315 5 8 5H16ZM11 7V17H16L16.1025 16.9951C16.573 16.9472 16.9472 16.573 16.9951 16.1025L17 16V8C17 7.48232 16.6067 7.05621 16.1025 7.00488L16 7H11Z" fill="#EFEFEF"/>
</svg>

Before

Width:  |  Height:  |  Size: 278 B

After

Width:  |  Height:  |  Size: 383 B

View File

@ -1,3 +0,0 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 3C6.89543 3 6 3.89543 6 5V19C6 20.1046 6.89543 21 8 21H16C17.1046 21 18 20.1046 18 19V5C18 3.89543 17.1046 3 16 3H8ZM16.8462 6H7.15385V18H16.8462V6ZM10.3846 4H13.6154V5H10.3846V4ZM12 20C12.2974 20 12.5385 19.7761 12.5385 19.5C12.5385 19.2239 12.2974 19 12 19C11.7026 19 11.4615 19.2239 11.4615 19.5C11.4615 19.7761 11.7026 20 12 20Z" fill="#444444"/>
</svg>

Before

Width:  |  Height:  |  Size: 506 B

View File

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 5C4 3.89543 4.89543 3 6 3H15C16.1046 3 17 3.89543 17 5V7H16V6H5V18H16V17H17V19C17 20.1046 16.1046 21 15 21H6C4.89543 21 4 20.1046 4 19V5ZM12 4H9V5H12V4ZM11 19.5C11 19.7761 10.7761 20 10.5 20C10.2239 20 10 19.7761 10 19.5C10 19.2239 10.2239 19 10.5 19C10.7761 19 11 19.2239 11 19.5Z" fill="#444444"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 16H14L14.6464 15.3536L12.6464 13.3536L12 14V16ZM15.3536 14.6464L21 9V8H20V7H19L13.3536 12.6464L15.3536 14.6464Z" fill="#444444"/>
</svg>

After

Width:  |  Height:  |  Size: 638 B

View File

@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 5C4 3.89543 4.89543 3 6 3H15C16.1046 3 17 3.89543 17 5V7H16V6H5V18H16V17H17V19C17 20.1046 16.1046 21 15 21H6C4.89543 21 4 20.1046 4 19V5ZM12 4H9V5H12V4ZM11 19.5C11 19.7761 10.7761 20 10.5 20C10.2239 20 10 19.7761 10 19.5C10 19.2239 10.2239 19 10.5 19C10.7761 19 11 19.2239 11 19.5Z" fill="#444444"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14 8C11.3252 8 8.89946 9.40288 7.10954 11.6815C6.96349 11.8682 6.96349 12.129 7.10954 12.3157C8.89946 14.5971 11.3252 16 14 16C16.6748 16 19.1005 14.5971 20.8905 12.3185C21.0365 12.1318 21.0365 11.871 20.8905 11.6843C19.1005 9.40288 16.6748 8 14 8ZM14.1955 14.9939C12.3863 15.1077 10.8923 13.6166 11.0061 11.8045C11.0995 10.3105 12.3105 9.09949 13.8045 9.00611C15.6137 8.89231 17.1077 10.3834 16.9939 12.1955C16.8976 13.6866 15.6866 14.8976 14.1955 14.9939ZM14.0641 12.998C13.4609 13.0359 12.9625 12.5392 13.0022 11.9359C13.0329 11.4373 13.4375 11.0346 13.9359 11.002C14.5391 10.9641 15.0375 11.4608 14.9978 12.0641C14.9653 12.5645 14.5607 12.9673 14.0641 12.998Z" fill="#444444"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.33331 10C4.22665 10 3.33331 10.8933 3.33331 12C3.33331 13.1067 4.22665 14 5.33331 14C6.43998 14 7.33331 13.1067 7.33331 12C7.33331 10.8933 6.43998 10 5.33331 10ZM18.6666 10C17.56 10 16.6666 10.8933 16.6666 12C16.6666 13.1067 17.56 14 18.6666 14C19.7733 14 20.6666 13.1067 20.6666 12C20.6666 10.8933 19.7733 10 18.6666 10ZM12 10C10.8933 10 9.99998 10.8933 9.99998 12C9.99998 13.1067 10.8933 14 12 14C13.1066 14 14 13.1067 14 12C14 10.8933 13.1066 10 12 10Z" fill="#808080"/>
</svg>

After

Width:  |  Height:  |  Size: 588 B

View File

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 6C8.17879 6 4.71351 8.10432 2.15649 11.5223C1.94784 11.8023 1.94784 12.1935 2.15649 12.4736C4.71351 15.8957 8.17879 18 12 18C15.8212 18 19.2865 15.8957 21.8435 12.4777C22.0522 12.1977 22.0522 11.8065 21.8435 11.5264C19.2865 8.10432 15.8212 6 12 6ZM12.2607 15.9919C9.84844 16.1436 7.8564 14.1554 8.00813 11.7393C8.13264 9.74729 9.74728 8.13265 11.7393 8.00815C14.1516 7.85641 16.1436 9.84456 15.9919 12.2607C15.8635 14.2488 14.2488 15.8635 12.2607 15.9919ZM12.1282 13.9959C10.9219 14.0718 9.92498 13.0783 10.0044 11.8718C10.0658 10.8747 10.8749 10.0691 11.8718 10.0041C13.0781 9.92821 14.075 10.9217 13.9956 12.1282C13.9305 13.1289 13.1215 13.9345 12.1282 13.9959Z" fill="#444444"/>
</svg>

After

Width:  |  Height:  |  Size: 838 B

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -34,15 +34,15 @@
}
.tableHeaderCellFileName {
width: 25%;
width: 29%;
}
.tableHeaderCellEditors {
width: 13%;
width: 12%;
}
.tableHeaderCellViewers {
width: 18%;
width: 15%;
text-align: right;
}
@ -84,6 +84,7 @@
}
.tableRow,
.storedHeader,
menu.links {
width: 90%;
}
@ -142,6 +143,7 @@
.scroll-table-body {
top: 31px;
height: calc(100% - 34px);
}
footer {
@ -182,9 +184,14 @@
@media (max-width: 715px) {
.tableRow,
.storedHeader,
menu.links {
width: 45%;
}
.storedHeaderClearAll {
padding-right: 24px;
}
}
@media (max-width: 670px) and (min-width: 620px){
.main-panel{
@ -220,15 +227,15 @@
.tableRow td:first-child {
flex-grow: 0;
width: 15%;
width: 26%;
}
.tableHeaderCellFileName {
width: 9%;
width: 15%;
}
.tableHeaderCellEditors {
width: 13%;
width: 3%;
}
.tableHeaderCellViewers {
@ -253,12 +260,12 @@
}
.tableHeaderCellEditors {
width: 15%;
width: 13%;
text-align: left;
}
.tableHeaderCellFileName {
width: 28%;
width: 29%;
}
.tableHeaderCellViewers {
@ -281,6 +288,7 @@
}
.tableRow,
.storedHeader,
menu.links {
width: 75%;
}
@ -302,6 +310,10 @@
.firstContentCellViewers {
margin-left: 0;
}
.storedHeaderClearAll {
padding-right: 39px;
}
}
@media (max-width: 890px) and (min-width: 769px ) {
@ -317,6 +329,7 @@
}
.tableRow,
.storedHeader,
menu.links {
width: 95%;
}
@ -337,7 +350,7 @@
}
.tableHeaderCellFileName {
width: 20%;
width: 22%;
}
.tableHeaderCellEditors {
@ -346,18 +359,22 @@
}
.tableHeaderCellViewers {
width: 19%;
width: 15%;
}
.tableHeaderCellAction {
width: 19%;
padding-right: 45px;
}
.storedHeaderClearAll {
padding-right: 30px;
}
}
@media (max-width: 890px) {
.tableRow td:first-child {
max-width: 17%;
max-width: 22%;
}
#portal-info {
max-width: 60vw;
@ -436,61 +453,6 @@
padding: 16px 0 6px;
}
.tableRow,
menu.links {
width: 40%;
}
.tableRow td {
border: none;
}
.firstContentCellShift {
border: none;
flex-basis: 10%;
flex-grow: 1;
}
.downloadContentCellShift {
max-width: 7%;
margin-right: 24px;
margin-left: 0;
}
.contentCells-icon {
width: 13%;
}
.tableRow td:last-child {
width: 7%;
padding-right: 0px;
border: none;
}
.contentCells-shift {
padding-right: 0px;
}
.downloadContentCellShift:after {
width: 85%;
}
.firstContentCellViewers {
margin-left: 0;
border-bottom: 1px solid #e5e5e5 !important;
}
.firstContentCellViewers ~ td {
border-bottom: 1px solid #e5e5e5;
}
.tableRow td:first-child{
border: none;
width: 85%;
}
.contentCellsEmpty{
display: none;
width: 1%;
}
/* Mobile Upload*/
.blockUI.blockMsg.blockPage.ui-dialog.ui-widget.ui-corner-all.ui-widget-content.ui-draggable {
width: 344px !important;
@ -565,104 +527,7 @@
}
}
@media (max-width: 560px) and (min-width: 510px) {
.contentCells-icon {
width: 13%;
}
.downloadContentCellShift {
padding-right: 16px;
max-width: 4%;
}
}
@media (max-width: 510px) and (min-width: 470px) {
.tableRow,
menu.links {
width: 35%;
}
.tableRow td:first-child{
width: 83%;
}
.contentCells-icon {
width: 13%;
}
.downloadContentCellShift {
max-width: 6%;
padding-right: 6px;
}
.firstContentCellShift {
flex-basis: 9%;
}
.tableRow td:last-child {
padding-right: 28px;
}
}
@media (max-width: 470px) and (min-width: 420px) {
.tableRow,
menu.links {
width: 30%;
}
.tableRow td:first-child{
width: 85%;
}
.contentCells-icon {
width: 11%;
}
.downloadContentCellShift {
max-width: 3%;
padding-right: 0px;
padding-left: 0;
}
.firstContentCellShift {
margin-left: 2px;
flex-basis: 14%;
}
.tableRow td:last-child {
width: 5%;
padding-right: 63px;
}
.firstContentCellViewers{
padding-right: 2px;
width: 12%;
}
.contentCellsEmpty{
display: none;
}
}
@media (max-width: 420px) {
.tableRow,
menu.links {
width: 25%;
}
.tableRow td:last-child {
width: 6%;
padding-right: 16px;
}
.downloadContentCellShift {
max-width: 4%;
margin-right: 18px;
margin-left: -1px;
}
.firstContentCellShift {
flex-basis: 2%;
}
.contentCells-icon{
width: 12%;
}
footer table td {
margin: 0;
padding-right: 5px;
@ -673,10 +538,6 @@
padding-right: 5px;
margin: 0;
}
.firstContentCellViewers{
padding-right: 2px;
width: 11%;
}
}
@media (max-width: 1160px) {
@ -685,20 +546,15 @@
}
}
@media (min-width: 593px) {
.contentCellsEmpty {
display: none;
}
}
@media (max-width: 769px) and (min-width: 715px){
.tableRow,
.storedHeader,
menu.links {
width: 50%;
}
}
@media (max-width: 510px) {
.tableRow td:first-child{
flex-grow: 0;
.storedHeaderClearAll {
padding-right: 26px;
}
}
@media (max-width: 1100px) and (min-width: 890px){
@ -782,8 +638,8 @@
margin: 0;
position: fixed;
left: 0;
height: calc(100% - 124px);
z-index:99;
height: calc(100% - 44px);
z-index: 101;
}
.left-panel.active {
@ -893,6 +749,7 @@
.scroll-table-body {
top: 36px;
height: calc(100% - 34px);
}
.scroll-table-body tr:first-child {
@ -901,16 +758,37 @@
.tableRow {
border-bottom: 1px solid #e5e5e5;
padding: 16px 0;
padding: 12px 0;
width: 100%;
flex-wrap: nowrap;
}
.tableRow td:first-child {
width: 100%;
}
.tableRow td:last-child {
display: block;
width: 24px;
}
.contentCells {
padding: 0;
font-size: 13px;
}
.contentCells-icon {
width: auto;
display: none;
}
.stored-edit {
height: 12px;
padding: 6px 0 6px 34px;
}
.stored-edit span {
font-size: 14px;
font-size: 13px;
}
.header-list {
@ -918,7 +796,7 @@
}
.firstContentCellViewers {
border-bottom: none !important;
margin: 0;
}
.firstContentCellViewers ~ td {
@ -953,4 +831,19 @@
.user-block-table {
height: auto;
}
.upload-panel {
padding: 12px 0;
}
.user-block-table td select {
height: 48px;
padding-left: 12px;
border-radius: 6px;
border-color: #aaaaaa;
}
.user-block-table tr:last-child {
display: none;
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -511,10 +511,6 @@ label .checkbox {
line-height: 150%;
}
#loadScripts {
display: none;
}
#iframeScripts {
position: absolute;
visibility: hidden;
@ -635,6 +631,11 @@ footer a:hover {
background-image: url("images/icon_pdf.svg");
}
.stored-edit.diagram,
.uploadFileName.diagram {
background-image: url("images/icon_vsdx.svg");
}
.stored-edit span {
font-size: 12px;
line-height: 12px;
@ -755,7 +756,6 @@ footer a:hover {
.contentCells {
display: block;
border-bottom: 1px solid #EFEFEF;
font-family: 'Open Sans', sans-serif;
font-size: 16px;
padding: 4px;
@ -848,6 +848,7 @@ footer a:hover {
position: absolute;
right: 0;
top: 71px;
height: calc(100% - 130px);
scrollbar-color: #D0D5DA transparent;
scrollbar-width: thin;
}
@ -918,18 +919,18 @@ html {
position: relative;
}
.tableRow td:first-child {
display: flex;
flex-grow: 1;
max-width: 25%;
}
.tableRow td:first-child {
display: flex;
flex-grow: 1;
max-width: 29%;
}
.tableHeaderCellFileName {
width: 20%;
width: 24%;
}
.tableHeaderCellEditors {
width: 20%;
width: 17%;
}
.tableHeaderCellViewers {
@ -987,3 +988,103 @@ html {
top: 50%;
transform: translate(-50%, -50%);
}
.tableRow td:last-child {
display: none;
}
#mobileContextMenu {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100vh;
background-color: rgba(51, 51, 51, 0.3);
display: flex;
justify-content: center;
align-items: flex-end;
z-index: 100;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s ease, visibility 0s linear 0.4s;
}
#mobileContextMenu.active {
visibility: visible;
opacity: 1;
transition: opacity 0.3s ease;
}
#mobileContextMenu .context-body {
width: 100%;
max-height: 100%;
transform: translateY(100%);
transition: transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
overflow-y: auto;
overflow-x: hidden;
scrollbar-width: none;
}
#mobileContextMenu.active .context-body {
transform: translateY(0);
}
#mobileContextMenu table {
background-color: white;
width: 100%;
margin-top: 150px;
padding-bottom: 96px;
}
#mobileContextMenu thead {
padding: 12px 16px 0;
height: 48px;
position: sticky;
top: -1px;
display: flex;
align-items: center;
background-color: white;
}
#mobileContextMenu thead:not(.is-pinned)::after {
content: '';
position: absolute;
left: 16px;
right: 16px;
bottom: 0px;
height: 1px;
background: #e2e2e2;
}
#mobileContextMenu thead.is-pinned {
box-shadow: 0px 4px 6px 0px #CCCCCC4D;
transition: all 0.4s ease-out;
}
#mobileContextMenu tbody {
padding: 0 16px;
display: block
}
#mobileContextMenu tr {
display: block;
padding: 12px;
}
.context-section {
padding: 24px 0 6px !important;
font-size: 13px;
font-weight: 600;
color: #808080;
}
#mobileContextMenu a:not(.stored-edit) {
display: flex;
flex-direction: row;
align-items: center;
text-decoration: none;
}
#mobileContextMenu img {
margin-right: 8px;
}

View File

@ -17,7 +17,7 @@
<title>ONLYOFFICE</title>
<!--
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -52,13 +52,13 @@
</div>
<menu class="responsive-nav">
<li>
<a href="#" onclick="toggleSidePanel(event)">
<img src="app_themes/images/mobile-menu.svg" alt="ONLYOFFICE" />
<a href="./">
<img src ="app_themes/images/mobile-logo.svg" alt="ONLYOFFICE" />
</a>
</li>
<li>
<a href="./">
<img src ="app_themes/images/mobile-logo.svg" alt="ONLYOFFICE" />
<a href="#" onclick="toggleSidePanel(event)">
<img src="app_themes/images/mobile-menu.svg" alt="ONLYOFFICE" />
</a>
</li>
</menu>
@ -129,7 +129,7 @@
<td valign="middle">
<label class="side-option">
<input id="directUrl" type="checkbox" class="checkbox" />Try opening on client
<img id="directUrlInfo" class="info info-tooltip" data-id="directUrlInfo" data-tooltip="Some files can be opened in the user's browser without connecting to the document server." src="app_themes/images/info.svg" />
<img id="directUrlInfo" class="info info-tooltip" data-id="directUrlInfo" data-tooltip="Some files can be opened in the user's browser without connecting to the document server. Open each file in only one way." src="app_themes/images/info.svg" />
</label>
</td>
</tr>
@ -156,13 +156,18 @@
<% } %>
</menu>
<div id="portal-info" style="display: <%= storedFiles.Any() ? "none" : "table-cell" %>">
<span class="portal-name">ONLYOFFICE Document Editors Welcome!</span>
<span class="portal-name">Welcome to ONLYOFFICE Docs!</span>
<span class="portal-descr">Get started with a live demo of ONLYOFFICE Docs, a powerful open-source office suite for your browser.</span>
<span class="portal-descr">
Get started with a demo-sample of ONLYOFFICE Document Editors, the first html5-based editors.
<br /> You may upload your own documents for testing using the "<b>Upload file</b>" button and <b>selecting</b> the necessary files on your PC.
You can test editing features in real-time and explore multi-user collaboration:
<ul>
<li>Create a new Document, Spreadsheet, Presentation, or PDF Form or use the sample files</li>
<li>Upload your own files to test using the Upload file button</li>
<li>Select your username and language to simulate different users and environments</li>
<li>Try real-time collaboration by opening the same document using different users in different Web browser sessions</li>
</ul>
</span>
<span class="portal-descr">Please do NOT use this integration example on your own server without proper code modifications, it is intended for testing purposes only. In case you enabled this test example, disable it before going for production.</span>
<span class="portal-descr">You can open the same document using different users in different Web browser sessions, so you can check out multi-user editing functions.</span>
<span class="portal-descr">⚠️ This example is intended for testing purposes only. Do not use it on a production server without proper code modifications. If you have enabled this test demo, please disable it before deploying the editors in production.</span>
<% foreach (User user in Users.getAllUsers())
{ %>
<div class="user-descr" onclick="toggleUserDescr(event)">
@ -207,8 +212,7 @@
var editUrl = "doceditor.aspx?fileID=" + HttpUtility.UrlEncode(storedFile.Name) + directUrlParam;
var ext = Path.GetExtension(storedFile.Name).ToLower();
var docType = DocumentType(storedFile.Name);
var canEdit = EditedExts.Contains(ext);
var isFillFormDoc = FillFormsExts.Contains(ext);
var actions = FormatManager.GetFormatActions(ext);
%>
<tr class="tableRow" title="<%= storedFile.Name %> [<%= GetFileVersion(storedFile.Name, HttpContext.Current.Request.UserHostAddress.Replace(':','_')) %>]">
@ -217,98 +221,101 @@
<span><%= storedFile.Name %></span>
</a>
</td>
<% if (canEdit) { %>
<td class="contentCells contentCells-icon">
<!-- 1-2 -->
<% if (actions.Contains("edit") || actions.Contains("lossy-edit")) { %>
<td class="contentCells contentCells-icon" data-section="EDITOR">
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=edit" %>" target="_blank">
<img src="app_themes/images/desktop.svg" alt="Open in editor for full size screens" title="Open in editor for full size screens"/>
<img src="app_themes/images/edit.svg" alt="Open for full size screens" title="Open for full size screens"/>
</a>
</td>
<td class="contentCells contentCells-icon">
<a href="<%= editUrl + "&editorsType=mobile&editorsMode=edit" %>" target="_blank">
<img src="app_themes/images/mobile.svg" alt="Open in editor for mobile devices" title="Open in editor for mobile devices"/>
<img src="app_themes/images/mobileEdit.svg" alt="Open for mobile devices" title="Open for mobile devices"/>
</a>
</td>
<% if (docType != "pdf") { %>
<td class="contentCells contentCells-icon">
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=comment" %>" target="_blank">
<img src="app_themes/images/comment.svg" alt="Open in editor for comment" title="Open in editor for comment"/>
</a>
</td>
<% } %>
<% if (docType == "word") { %>
<% } else { %>
<td class="contentCells contentCells-icon" data-section="EDITOR"></td>
<td class="contentCells contentCells-icon"></td>
<% } %>
<!-- 3 -->
<% if (actions.Contains("comment")) { %>
<td class="contentCells contentCells-icon">
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=comment" %>" target="_blank">
<img src="app_themes/images/comment.svg" alt="Open for comment" title="Open for comment"/>
</a>
</td>
<% } else { %>
<td class="contentCells contentCells-icon"></td>
<% } %>
<!-- 4-5 -->
<% if (actions.Contains("fill")) { %>
<td class="contentCells contentCells-icon firstContentCellShift">
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=fillForms" %>" target="_blank">
<img src="app_themes/images/formsubmit.svg" alt="Open for filling in forms" title="Open for filling in forms"/>
</a>
</td>
<td class="contentCells contentCells-icon contentCells-shift">
<a href="<%= editUrl + "&editorsType=mobile&editorsMode=fillForms" %>" target="_blank">
<img src="app_themes/images/mobile-fill-forms.svg" alt="Open for filling in forms for mobile devices" title="Open for filling in forms for mobile devices"/>
</a>
</td>
<% } else { %>
<!-- 4 -->
<% if (actions.Contains("review")) { %>
<td class="contentCells contentCells-icon">
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=review" %>" target="_blank">
<img src="app_themes/images/review.svg" alt="Open in editor for review" title="Open in editor for review"/>
<img src="app_themes/images/review.svg" alt="Open for review" title="Open for review"/>
</a>
</td>
<% } else if (docType == "cell") { %>
<% } else if (actions.Contains("customfilter")) { %>
<td class="contentCells contentCells-icon">
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=filter" %>" target="_blank">
<img src="app_themes/images/filter.svg" alt="Open in editor without access to change the filter" title="Open in editor without access to change the filter" />
<img src="app_themes/images/filter.svg" alt="Open without access to change the filter" title="Open without access to change the filter" />
</a>
</td>
<% } %>
<% if (docType == "word") { %>
<td class="contentCells contentCells-icon">
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=blockcontent" %>" target="_blank">
<img src="app_themes/images/block-content.svg" alt="Open in editor without content control modification" title="Open in editor without content control modification"/>
</a>
</td>
<% } else{%>
<td class="contentCells contentCells-icon"></td>
<%} %>
<%if (docType != "word" && docType != "cell"){%>
<td class="contentCells contentCells-icon "></td>
<% } %>
<% if (isFillFormDoc) { %>
<td class="contentCells contentCells-shift contentCells-icon firstContentCellShift">
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=fillForms" %>" target="_blank">
<img src="app_themes/images/fill-forms.svg" alt="Open in editor for filling in forms" title="Open in editor for filling in forms"/>
</a>
</td>
<% } else { %>
<td class="contentCells contentCells-shift contentCells-icon firstContentCellShift"></td>
<td class="contentCells contentCells-icon"></td>
<% } %>
<% } else if (isFillFormDoc) { %>
<td class="contentCells contentCells-icon "></td>
<td class="contentCells contentCells-icon">
<a href="<%= editUrl + "&editorsType=mobile&editorsMode=fillForms" %>" target="_blank">
<img src="app_themes/images/mobile-fill-forms.svg" alt="Open in editor for filling in forms for mobile devices" title="Open in editor for filling in forms for mobile devices"/>
<!-- 5 -->
<% if (actions.Contains("edit") && docType == "word") { %>
<td class="contentCells contentCells-icon contentCells-shift">
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=blockcontent" %>" target="_blank">
<img src="app_themes/images/block-content.svg" alt="Open without content control modification" title="Open without content control modification"/>
</a>
</td>
<td class="contentCells contentCells-icon "></td>
<td class="contentCells contentCells-icon "></td>
<td class="contentCells contentCells-icon "></td>
<td class="contentCells contentCells-shift contentCells-icon firstContentCellShift">
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=fillForms" %>" target="_blank">
<img src="app_themes/images/fill-forms.svg" alt="Open in editor for filling in forms" title="Open in editor for filling in forms"/>
</a>
</td>
<% } else { %>
<td class="contentCells contentCells-shift contentCells-icon contentCellsEmpty" colspan="6"></td>
<% } else { %>
<td class="contentCells contentCells-icon contentCells-shift"></td>
<% } %>
<% } %>
<td class="contentCells contentCells-icon firstContentCellViewers">
<td class="contentCells contentCells-icon firstContentCellViewers" data-section="VIEWERS">
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=view" %>" target="_blank">
<img src="app_themes/images/desktop.svg" alt="Open in viewer for full size screens" title="Open in viewer for full size screens"/>
<img src="app_themes/images/view.svg" alt="Open for full size screens" title="Open for full size screens"/>
</a>
</td>
<td class="contentCells contentCells-icon">
<a href="<%= editUrl + "&editorsType=mobile&editorsMode=view" %>" target="_blank">
<img src="app_themes/images/mobile.svg" alt="Open in viewer for mobile devices" title="Open in viewer for mobile devices"/>
<img src="app_themes/images/mobileView.svg" alt="Open for mobile devices" title="Open for mobile devices"/>
</a>
</td>
<td class="contentCells contentCells-icon contentCells-shift">
<a href="<%= editUrl + "&editorsType=embedded&editorsMode=embedded" %>" target="_blank">
<img src="app_themes/images/embeded.svg" alt="Open in embedded mode" title="Open in embedded mode"/>
<img src="app_themes/images/embedview.svg" alt="Open in embedded mode" title="Open in embedded mode"/>
</a>
</td>
<% if (docType != null ) { %>
<td class="contentCells contentCells-icon">
<td class="contentCells contentCells-icon" data-section="ACTION">
<a class="convert-file" data="<%= storedFile.Name %>" data-type="<%= docType %>">
<img class="icon-action" src="app_themes/images/convert.svg" alt="Convert" title="Convert" /></a>
</td>
<% } else { %>
<td class="contentCells contentCells-icon downloadContentCellShift"></td>
<td class="contentCells contentCells-icon downloadContentCellShift" data-section="ACTION"></td>
<% } %>
<td class="contentCells contentCells-icon downloadContentCellShift">
<a href="webeditor.ashx?type=download&fileName=<%= HttpUtility.UrlEncode(storedFile.Name) %>">
@ -320,6 +327,11 @@
<img class="icon-action" src="app_themes/images/delete.svg" alt="Delete" title="Delete" />
</a>
</td>
<td class="contentCells contentCells-icon">
<a href="#" onclick="toggleContextMenu(event)">
<img src="app_themes/images/open-context.svg" alt="Open context menu" title="Open context menu" />
</a>
</td>
</tr>
<% } %>
</tbody>
@ -364,10 +376,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 +421,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 +429,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>
@ -435,6 +444,11 @@
</footer>
</form>
<div id="mobileContextMenu" onclick="toggleContextMenu(event)">
<div class="context-body" id="mobileContextMenuBody">
</div>
</div>
<script language="javascript" type="text/javascript" src="script/jquery-3.6.4.min.js"></script>
<script language="javascript" type="text/javascript" src="script/jquery-migrate-3.4.1.min.js"></script>
<script language="javascript" type="text/javascript" src="script/jquery-ui.min.js"></script>

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -254,6 +254,7 @@ namespace OnlineEditorsExample
if (FormatManager.DocumentExtensions().Contains(ext)) return "word"; // word for text document extensions
if (FormatManager.SpreadsheetExtensions().Contains(ext)) return "cell"; // cell for spreadsheet extensions
if (FormatManager.PresentationExtensions().Contains(ext)) return "slide"; // slide for presentation extensions
if (FormatManager.DiagramExtensions().Contains(ext)) return "diagram"; // diagram for diagram extensions
return "word"; // the default document type is word
}

View File

@ -15,7 +15,7 @@
<title><%= FileName + " - ONLYOFFICE" %></title>
<!--
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -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) {
@ -335,6 +362,18 @@
innerAlert("onRequestSendNotify: " + data);
};
var onRequestStartFilling = function(event) {
var data = event.data;
var submit = confirm("Start filling?\n" + JSON.stringify(data));
if (submit) {
docEditor.startFilling(true);
}
};
var onStartFilling = function(event) {
innerAlert("The form is ready to fill out.");
};
config = <%= DocConfig %>;
config.width = "100%";
@ -356,6 +395,8 @@
if (config.editorConfig.user.id) {
config.events['onRequestRefreshFile'] = onRequestRefreshFile;
config.events['onRequestClose'] = onRequestClose;
config.events['onRequestStartFilling'] = onRequestStartFilling;
config.events['onStartFilling'] = onStartFilling;
config.events['onRequestHistory'] = function (event) { // the user is trying to show the document version history
let xhr = new XMLHttpRequest();
@ -421,7 +462,7 @@
config.events['onRequestReferenceSource'] = onRequestReferenceSource;
}
var сonnectEditor = function () {
var connectEditor = function () {
docEditor = new DocsAPI.DocEditor("iframeEditor", config);
};
@ -433,9 +474,9 @@
};
if (window.addEventListener) {
window.addEventListener("load", сonnectEditor);
window.addEventListener("load", connectEditor);
} else if (window.attachEvent) {
window.attachEvent("load", сonnectEditor);
window.attachEvent("load", connectEditor);
}
</script>

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -257,6 +257,7 @@ namespace OnlineEditorsExample
{
{ "id", !user.id.Equals("uid-0") ? user.id : null },
{ "name", user.name },
{ "roles", user.roles },
{ "group", user.group },
{ "image", user.avatar ? _Default.GetServerUrl(false) + "/App_Themes/images/"+ user.id + ".png" : null }
}
@ -294,6 +295,12 @@ namespace OnlineEditorsExample
{ "visible", user.close.visible },
{ "text", user.close.text }
} : new Dictionary<string, object>{}
},
{
"features", new Dictionary<string, object>
{
{ "featuresTips", user.id.Equals("uid-0") }
}
}
}
}
@ -327,14 +334,14 @@ namespace OnlineEditorsExample
// get users for mentions
List<Dictionary<string, object>> usersData = Users.getUsersForMentions(user.id);
UsersForMentions = !user.id.Equals("uid-0") ? jss.Serialize(usersData) : null;
UsersForMentions = jss.Serialize(!user.id.Equals("uid-0") ? usersData : null);
List<Dictionary<string, object>> usersInfo = Users.getUsersInfo(user.id);
UsersInfo = jss.Serialize(usersData);
// get users for protect
List<Dictionary<string, object>> usersProtectData = Users.getUsersForProtect(user.id);
UsersForProtect = !user.id.Equals("uid-0") ? jss.Serialize(usersProtectData) : null;
UsersForProtect = jss.Serialize(!user.id.Equals("uid-0") ? usersProtectData : null);
}
catch { }
}
@ -365,13 +372,18 @@ namespace OnlineEditorsExample
logoConfig.Add("directUrl", DirectImageUrl.ToString());
}
var result = new Dictionary<string, object>
{
{ "images", new List<Dictionary<string, object>>{logoConfig} }
};
if (JwtManager.Enabled) // if the secret key to generate token exists
{
var insImageToken = JwtManager.Encode(logoConfig); // encode logoConfig into the token
logoConfig.Add("token", insImageToken); // and add it to the logo config
var insImageToken = JwtManager.Encode(result); // encode logoConfig into the token
result.Add("token", insImageToken); // and add it to the logo config
}
return logoConfig;
return result;
}
// get a document which will be compared with the current document

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -13,7 +13,7 @@
<title>ONLYOFFICE</title>
<!--
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -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

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -164,6 +164,20 @@ namespace OnlineEditorsExample
.ToList();
}
public static List<string> DiagramExtensions()
{
return Diagrams()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Diagrams()
{
return All()
.Where(format => format.Type == "diagram")
.ToList();
}
public static List<string> AllExtensions()
{
return All()
@ -184,6 +198,13 @@ namespace OnlineEditorsExample
return cachedFormats;
}
public static List<string> GetFormatActions(string extension)
{
return All()
.Find(format => format.Extension() == extension)
.Actions;
}
private static string GetPath()
{
string path = Path.Combine(GetDirectory(), "onlyoffice-docs-formats.json");

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -66,18 +66,18 @@
<Content Include="App_Themes\images\close.svg" />
<Content Include="App_Themes\images\comment.svg" />
<Content Include="App_Themes\images\delete.svg" />
<Content Include="App_Themes\images\desktop.svg" />
<Content Include="App_Themes\images\done.svg" />
<Content Include="App_Themes\images\download.svg" />
<Content Include="App_Themes\images\embeded.svg" />
<Content Include="App_Themes\images\edit.svg" />
<Content Include="App_Themes\images\embedview.svg" />
<Content Include="App_Themes\images\error.svg" />
<Content Include="App_Themes\images\file_docx.svg" />
<Content Include="App_Themes\images\file_docxf.svg" />
<Content Include="App_Themes\images\file_pptx.svg" />
<Content Include="App_Themes\images\file_upload.svg" />
<Content Include="App_Themes\images\file_xlsx.svg" />
<Content Include="App_Themes\images\fill-forms.svg" />
<Content Include="App_Themes\images\filter.svg" />
<Content Include="App_Themes\images\formsubmit.svg" />
<Content Include="App_Themes\images\home.svg" />
<Content Include="App_Themes\images\icon_docx.svg" />
<Content Include="App_Themes\images\icon_pptx.svg" />
@ -85,12 +85,14 @@
<Content Include="App_Themes\images\info.svg" />
<Content Include="App_Themes\images\logo.svg" />
<Content Include="App_Themes\images\mobile-fill-forms.svg" />
<Content Include="App_Themes\images\mobile.svg" />
<Content Include="App_Themes\images\mobileEdit.svg" />
<Content Include="App_Themes\images\mobileView.svg" />
<Content Include="App_Themes\images\notdone.svg" />
<Content Include="App_Themes\images\review.svg" />
<Content Include="App_Themes\images\slide.ico" />
<Content Include="App_Themes\images\uid-1.png" />
<Content Include="App_Themes\images\uid-2.png" />
<Content Include="App_Themes\images\view.svg" />
<Content Include="App_Themes\images\word.ico" />
<Content Include="App_Themes\media.css" />
<Content Include="Forgotten.aspx" />

View File

@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Ascensio System SIA")]
[assembly: AssemblyProduct("OnlineEditorsExample")]
[assembly: AssemblyCopyright("Ascensio System SIA 2025")]
[assembly: AssemblyCopyright("Ascensio System SIA 2026")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

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
@ -81,6 +81,45 @@ In case the example and Document Server are installed on different computers, ma
Make sure that the Document Server in its turn has access to the server with the example installed with the address which you specify instead of **example.com** in the configuration files.
## File API methods used in this example
The methods described below are available for .Net (C#) test example.
### POST `/webeditor.ashx?type=upload`
| | |
| ---------------------- | ------------------------------------------------------------ |
| **Summary** | Upload file to test example via request |
| **URL** | /webeditor.ashx?type=upload |
| **Method** | POST |
| **Request<br>Headers** | `Content-Type: multipart/form-data` |
| **Request<br>Body** | `uploadedFile=@<filepath>`<br> `filepath` - file for uploading<br />Multipart body with the file binary contents |
| **Response** | **Code:** 200 OK <br />**Content on success:**<br /> `{ "filename": <filename>}`<br />**Content on error:**<br /> `{ "error": "File type is not supported" }` <br /> Or <br /> `{ "error": "File size is incorrect" }` |
| **Sample** | `curl -X POST -F uploadedFile=@filename.docx http://localhost/webeditor.ashx?type=upload` |
### GET `/webeditor.ashx?type=remove`
| | |
| ------------------ | ------------------------------------------------------------ |
| **Summary** | Delete one file or all files |
| **URL** | /webeditor.ashx?type=remove |
| **Method** | GET |
| ****URL Params**** | **Optional:**<br /> `filename=[string]` - file for deleting. <br /> *WARNING! Without this parameter, all files will be deleted* |
| **Response** | **Code:** 200 OK <br /> **Success:**<br /> `{ "success": true }` |
| **Sample** | **Delete one file:**<br />`curl -X GET http://localhost/webeditor.ashx?type=remove&filename=filename.docx`<br />**Delete all files:**<br />`curl -X GET http://localhost/webeditor.ashx?type=remove`<br /> |
### GET `/webeditor.ashx?type=files`
| | |
| ------------------ | ------------------------------------------------------------ |
| **Summary** | Get information about all files |
| **URL** | /webeditor.ashx?type=files |
| **Method** | GET |
| **Response** | **Code:** 200 OK <br /> **Success:**<br /> `[{ "version": <file_version>, "id": <file_id>, "contentLength": <file_size_in_kilobytes>, "pureContentLength": <file_size_in_bytes>, "title": <file_name>, "updated": <last_change_date>}, ..., {...}]` |
| **Sample** | `curl -X GET http://localhost/webeditor.ashx?type=files` |
## Important security info
Please keep in mind the following security aspects when you are using test examples:

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -25,14 +25,16 @@ namespace OnlineEditorsExample
static List<string> descr_user_1 = new List<string>()
{
"File author by default",
"Doesnt belong to any group",
"Doesn't belong to any group",
"Can review all the changes",
"Can perform all actions with comments",
"The file favorite state is undefined",
"Can create files from templates using data from the editor",
"Can see the information about all users",
"This file isn't marked as favorite",
"Can create files from templates using data from the editor",
"Has an avatar",
"Can submit forms"
"Can submit forms",
"Has no roles",
"Can start filling"
};
static List<string> descr_user_2 = new List<string>()
@ -40,11 +42,13 @@ namespace OnlineEditorsExample
"Belongs to Group2",
"Can review only his own changes or changes made by users with no group",
"Can view comments, edit his own comments and comments left by users with no group. Can remove his own comments only",
"Can see the information about users from Group2 and users who don't belong to any group",
"This file is marked as favorite",
"Can create new files from the editor",
"Can see the information about users from Group2 and users who dont belong to any group",
"Has an avatar",
"Cant submit forms"
"Can't submit forms",
"Has role 'Anyone'",
"Can start filling"
};
static List<string> descr_user_3 = new List<string>()
@ -52,33 +56,38 @@ namespace OnlineEditorsExample
"Belongs to Group3",
"Can review changes made by Group2 users",
"Can view comments left by Group2 and Group3 users. Can edit comments left by the Group2 users",
"This file isnt marked as favorite",
"Cant copy data from the file to clipboard",
"Cant download the file",
"Cant print the file",
"Can create new files from the editor",
"Can see the information about Group2 users",
"Cant submit forms",
"The file favorite state is undefined",
"Can't copy data from the file to clipboard",
"Can't download the file",
"Can't print the file",
"Can create new files from the editor",
"Can't close history",
"Can't restore the file version"
"Can't restore the file version",
"Can't submit forms",
"Has role 'role'",
"Can start filling"
};
static List<string> descr_user_0 = new List<string>()
{
"The name is requested when the editor is opened",
"Doesnt belong to any group",
"Doesn't belong to any group",
"Can review all the changes",
"Can perform all actions with comments",
"Can't see anyone's information",
"The file favorite state is undefined",
"Can't mention others in comments",
"Can't create new files from the editor",
"Cant see anyones information",
"Can't rename files from the editor",
"Can't view chat",
"Can't protect file",
"View file without collaboration",
"Cant submit forms",
"Cant refresh outdated file"
"Can't refresh outdated file",
"Can't submit forms",
"Tour of tips when opening a document",
"Has empty role",
"Can't start filling"
};
private static List<User> users = new List<User>() {
@ -90,13 +99,14 @@ namespace OnlineEditorsExample
null,
new Dictionary<string, object>(),
null,
null,
false,
new List<string>(),
descr_user_1,
true,
true,
new Goback(null, false),
new Close(null, false)
new Close(null, false),
null
),
new User(
"uid-2",
@ -117,7 +127,8 @@ namespace OnlineEditorsExample
false,
true,
new Goback("Go to Documents",null),
new Close(null, true)
new Close(null, true),
new List<string>() { "Anyone" }
),
new User(
"uid-3",
@ -132,13 +143,14 @@ namespace OnlineEditorsExample
{ "remove", new List<string>() { } }
},
new List<string>() { "group-2" },
false,
null,
new List<string>() { "copy", "download", "print" },
descr_user_3,
false,
false,
null,
new Close(null, true)
new Close(null, true),
new List<string>() { "role" }
),
new User(
"uid-0",
@ -154,7 +166,8 @@ namespace OnlineEditorsExample
false,
false,
null,
null
null,
new List<string>()
)
};
@ -248,8 +261,9 @@ namespace OnlineEditorsExample
public bool avatar;
public Goback goback;
public Close close;
public List<string> roles;
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates, bool avatar, Goback goback, Close close)
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates, bool avatar, Goback goback, Close close, List<string> roles)
{
this.id = id;
this.name = name;
@ -265,6 +279,7 @@ namespace OnlineEditorsExample
this.avatar = avatar;
this.goback = goback;
this.close = close;
this.roles = roles;
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -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");
@ -580,4 +561,76 @@ function toggleUserDescr(event) {
if (list.classList.contains("active")) list.classList.remove("active");
else list.classList.add("active");
}
}
function toggleContextMenu(event) {
let contextMenu = document.querySelector("#mobileContextMenu");
let target = event.currentTarget.parentNode.parentNode.cloneNode(true);
const closeContextMenu = () => {
contextMenu.classList.remove("active");
}
if (contextMenu.classList.contains("active") || !target.classList.contains("tableRow")) {
if (event.target.id == "mobileContextMenuBody") closeContextMenu();
return;
}
let contextBody = document.querySelector("#mobileContextMenuBody");
contextBody.innerHTML = "";
let startY = 0;
let startScroll = 0;
contextBody.addEventListener('touchstart', (e) => {
startY = e.touches[0].clientY;
startScroll = contextBody.scrollTop;
});
contextBody.addEventListener('touchmove', (e) => {
const currentY = e.touches[0].clientY;
const diff = currentY - startY;
if (diff > 10 && (contextBody.scrollTop === 0 || contextBody.scrollTop === startScroll)) {
closeContextMenu();
}
});
let thead = document.createElement("thead");
thead.appendChild(target.children[0]);
const observer = new IntersectionObserver(
([e]) => e.target.classList.toggle("is-pinned", e.intersectionRatio < 1),
{ threshold: [1] }
);
observer.observe(thead);
let tbody = document.createElement("tbody");
for (let td of Array.from(target.children).slice(0, -1)){
if (td.getAttribute("data-section")){
let section = document.createElement("tr");
section.innerText = td.getAttribute("data-section");
section.classList.add("context-section");
tbody.appendChild(section);
}
if (td.children.length == 0) continue;
let action = document.createElement("div");
action.innerText = td.children[0].children[0].getAttribute("title");
td.children[0].appendChild(action);
td.children[0].onclick = () => {
setTimeout(() => window.location.reload(), 0);
}
td.style.display = "block";
td.classList.remove("downloadContentCellShift");
td.classList.remove("firstContentCellViewers");
let tr = document.createElement("tr");
tr.appendChild(td);
tbody.appendChild(tr);
}
let table = document.createElement("table");
table.appendChild(thead);
table.appendChild(tbody);
contextBody.appendChild(table);
contextMenu.classList.add("active");
}

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<clear />
<add key="version" value="1.14.0"/>
<add key="version" value="1.15.0"/>
<add key="filesize-max" value="52428800"/>
<add key="storage-path" 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:
@ -79,3 +79,51 @@ Also, [specify the same secret key](https://helpcenter.onlyoffice.com/installati
### Step 7. Check accessibility
In case the example and Document Server are installed on different computers, make sure that your server with the example installed has access to the Document Server with the address which you specify instead of **documentserver** in the configuration files.
## File API methods used in this example
The methods described below are available for Go test example.
### POST `/upload`
| | |
| ---------------------- | ------------------------------------------------------------ |
| **Summary** | Upload file to test example via request |
| **URL** | /upload |
| **Method** | POST |
| **Request<br>Headers** | `Content-Type: multipart/form-data` |
| **Request<br>Body** | `uploadedFile=@<filepath>`<br> `filepath` - file for uploading<br />Multipart body with the file binary contents |
| **Response** | **Code:** 200 OK <br />**Content on success:**<br /> `{ "filename": <filename>}`<br />**Content on error:**<br /> `{ "error": "File type is not supported" }` <br /> Or <br /> `{ "error": "File size is incorrect" }` |
| **Sample** | `curl -X POST -F uploadedFile=@filename.docx http://localhost/upload` |
### GET `/remove`
| | |
| ------------------ | ------------------------------------------------------------ |
| **Summary** | Delete one file |
| **URL** | /remove |
| **Method** | GET |
| ****URL Params**** | `filename=[string]` - file for deleting. |
| **Response** | **Code:** 200 OK <br /> **Success:**<br /> `{ "success": true }` |
| **Sample** | `curl -X GET http://localhost/remove?filename=filename.docx` |
### DELETE `/remove`
| | |
| ------------------ | ------------------------------------------------------------ |
| **Summary** | Delete all files |
| **URL** | /remove |
| **Method** | DELETE |
| **Response** | **Code:** 200 OK <br /> **Success:**<br /> `{ "success": true }` |
| **Sample** |`curl -X DELETE http://localhost/remove` |
### GET `/files`
| | |
| ------------------ | ------------------------------------------------------------ |
| **Summary** | Get information about all files |
| **URL** | /files |
| **Method** | GET |
| **Response** | **Code:** 200 OK <br /> **Success:**<br /> `[{ "version": <file_version>, "id": <file_id>, "contentLength": <file_size_in_kilobytes>, "pureContentLength": <file_size_in_bytes>, "title": <file_name>, "updated": <last_change_date>}, ..., {...}]` |
| **Sample** | `curl -X GET http://localhost/files` |

View File

@ -1,5 +1,5 @@
{
"VERSION": "1.14.0",
"VERSION": "1.15.0",
"SERVER_ADDRESS" : "",
"SERVER_PORT" : 3000,

View File

@ -1,32 +0,0 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
*
* 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 config
type Extensions struct {
Viewed []string `json:"viewed"`
Edited []string `json:"edited"`
Converted []string `json:"converted"`
Filled []string `json:"filled"`
}
type ExtensionTypes struct {
Spreadsheet []string `json:"spreadsheet"`
Presentation []string `json:"presentation"`
Document []string `json:"document"`
Pdf []string `json:"pdf"`
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -22,7 +22,6 @@ import (
"runtime"
"time"
"github.com/ONLYOFFICE/document-server-integration/utils"
"github.com/spf13/viper"
"go.uber.org/fx"
)
@ -47,11 +46,6 @@ type ApplicationConfig struct {
Languages map[string]string `mapstructure:"LANGUAGES"`
}
type SpecificationConfig struct {
Extensions Extensions `mapstructure:"extensions"`
ExtensionTypes ExtensionTypes `mapstructure:"extension_types"`
}
func NewConfiguration() (app_config ApplicationConfig, err error) {
_, b, _, _ := runtime.Caller(0)
basepath := filepath.Dir(b)
@ -76,32 +70,6 @@ func NewConfiguration() (app_config ApplicationConfig, err error) {
return
}
func NewSpecification() (specification SpecificationConfig, err error) {
fm, err := utils.NewFormatManager()
if err != nil {
return SpecificationConfig{}, err
}
exts := Extensions{
fm.GetViewedExtensions(),
fm.GetEditedExtensions(),
fm.GetConvertedExtensions(),
fm.GetFilledExtensions(),
}
extTypes := ExtensionTypes{
fm.GetSpreadsheetExtensions(),
fm.GetPresentationExtensions(),
fm.GetDocumentExtensions(),
fm.GetPdfExtensions(),
}
specification = SpecificationConfig{
exts,
extTypes,
}
return
}
var ConfigurationModule = fx.Options(
fx.Provide(NewConfiguration),
fx.Provide(NewSpecification),
)

View File

@ -1,9 +1,9 @@
module github.com/ONLYOFFICE/document-server-integration
go 1.21
go 1.23.10
require (
github.com/golang-jwt/jwt v3.2.2+incompatible
github.com/golang-jwt/jwt/v5 v5.3.0
github.com/gorilla/mux v1.8.1
github.com/gorilla/schema v1.4.1
github.com/mitchellh/mapstructure v1.5.0

View File

@ -6,8 +6,8 @@ github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHk
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -31,20 +31,18 @@ import (
)
type DefaultServerEndpointsHandler struct {
logger *zap.SugaredLogger
config config.ApplicationConfig
specification config.SpecificationConfig
logger *zap.SugaredLogger
config config.ApplicationConfig
*handlers.CallbackRegistry
*managers.Managers
}
func NewDefaultServerEndpointsHandler(logger *zap.SugaredLogger, config config.ApplicationConfig,
spec config.SpecificationConfig, reg *handlers.CallbackRegistry,
reg *handlers.CallbackRegistry,
managers *managers.Managers) api.ServerEndpointsHandler {
return &DefaultServerEndpointsHandler{
logger,
config,
spec,
reg,
managers,
}
@ -64,6 +62,15 @@ func generateUrl(r *http.Request) string {
}
var decoder = schema.NewDecoder()
var indexTemplate = template.Must(template.ParseFiles("templates/index.html"))
var indexTemplate = template.Must(template.New("index.html").Funcs(template.FuncMap{
"contains": func(slice []string, item string) bool {
for _, s := range slice {
if s == item {
return true
}
}
return false
},
}).ParseFiles("templates/index.html"))
var forgottenTemplate = template.Must(template.ParseFiles("templates/forgotten.html"))
var editorTemplate = template.Must(template.ParseFiles("templates/editor.html"))

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2025
* (c) Copyright Ascensio System SIA 2026
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -27,7 +27,7 @@ import (
"github.com/ONLYOFFICE/document-server-integration/server/managers"
"github.com/ONLYOFFICE/document-server-integration/server/models"
"github.com/ONLYOFFICE/document-server-integration/server/shared"
"github.com/golang-jwt/jwt"
"github.com/golang-jwt/jwt/v5"
)
func (srv *DefaultServerEndpointsHandler) Config(w http.ResponseWriter, r *http.Request) {
@ -73,9 +73,9 @@ func (srv *DefaultServerEndpointsHandler) Config(w http.ResponseWriter, r *http.
),
Mode: "edit",
},
StandardClaims: jwt.StandardClaims{
ExpiresAt: time.Now().Add(time.Minute * srv.config.JwtExpiresIn).Unix(),
IssuedAt: time.Now().Unix(),
RegisteredClaims: jwt.RegisteredClaims{
ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Minute * srv.config.JwtExpiresIn)),
IssuedAt: jwt.NewNumericDate(time.Now()),
},
}

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