Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ playwright-report-pages/
# bin/build-pages.mjs, same as /help and the changelog below.
public/offline-document-editor.html
public/zh-CN/offline-document-editor.html
public/onlyoffice-online-free.html
public/zh-CN/onlyoffice-online-free.html
public/no-signup-document-editor.html
public/zh-CN/no-signup-document-editor.html
public/private-document-editor.html
Expand Down
2 changes: 2 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ public/zh-CN/changelog.html
# Landing pages, likewise generated from content/<locale>/**.md.
public/offline-document-editor.html
public/zh-CN/offline-document-editor.html
public/onlyoffice-online-free.html
public/zh-CN/onlyoffice-online-free.html
public/no-signup-document-editor.html
public/zh-CN/no-signup-document-editor.html
public/private-document-editor.html
Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,14 @@ notes. Entries describe what users experience, not internal refactors.
the session on them, so a laptop keeps a recovery point about every 30
seconds while a phone under load backs off instead of competing with the
document you are editing.
- **The ONLYOFFICE logo is back in the editor header, and the About pane with
it.** Both had been switched off as interface clutter. They are not: this
editor is a modified version of ONLYOFFICE, and the license it is published
under requires the product logo to stay. The About pane now also says that
this build is not an official ONLYOFFICE product and links to the source it
was built from. Every page of the site carries the same trademark notice in
its footer, and the repository has a NOTICE file with the full terms and the
list of changes made to the vendor build.

### Known issues

Expand Down
15 changes: 13 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,12 @@ lib/ # 应用层(纯 TypeScript,只在本站点用)
loading.ts # 加载状态 UI
onlyoffice-editor.ts # 编辑器生命周期门面:挂载/重建/loadEditorApi,并对外统一导出下面这些模块
onlyoffice/ # 编辑器周边(2026-08-19 从 1975 行的单文件拆出,公开导出面不变)
iframe-guards.ts # 10 条运行时守卫的编排;每条守卫一个文件在 guards/
iframe-guards.ts # 12 条运行时守卫的编排;每条守卫一个文件在 guards/
guards/ # chrome / shared-worker / fetch-fonts / image-pipeline /
# serverless-save / long-action / series-settings /
# font-loading / comment-selection / canvas-loss /
# wasm-binary-release / unload-prompt / hint-fallback
# wasm-binary-release / unload-prompt / hint-fallback /
# about-source
open-state.ts # 就绪、打开失败、frame 首个错误(三处共用的单一状态源)
open-failure.ts # 失败分类、-82 guard、环境类失败重开一次(经 setOpenRunner 注入避免环)
font-system.ts # 字体系统就绪判定 + awaitFontSystem(#144)
Expand Down Expand Up @@ -621,6 +622,16 @@ docs/explorations/2026-08-19-ci-e2e-sharding.md。
7. **循环依赖处理**:`onlyoffice-editor.ts` 与 `converter.ts` 之间通过回调注入(`setConverterCallbacks`)解耦;`ui.ts` 与 `document.ts` 之间通过 `setUICallbacks` 解耦
8. **编辑器操作队列**:`createEditorInstance` 内部有 `editorOperationQueue`,防止并发创建/销毁编辑器
9. **.claude/ 目录**:已加入 `.gitignore`,不提交本地 Claude Code 配置
10. **ONLYOFFICE 署名不许再动(2026-08-23)**:本站是 ONLYOFFICE 的衍生作品,vendor
的 AGPL 头附了第 7 条附加条款——**7(b) 必须保留原产品 logo**、**7(e) 不授予任何
商标权利**。曾经两处都被当成"界面净化"去掉了(`guards/chrome.ts` 隐藏
`#header-logo`、DocEditor 配置 `customization.about: false`),界面上一处标识都不剩。
现在:header logo 与 About 面板都保留,守卫 12(`guards/about-source.ts`)往 About
面板追加"非官方产品 + 源码地址"(AGPL §13),7 种语言的两个页脚都有商标声明,根目录
`NOTICE` 存条款原文、vendor 版本与我们对 vendor 树的全部改动(§5(a) 要求)。
`test/unit/branding-notice.test.ts` 与 `test/e2e/vendor-branding.spec.ts` 钉死;
改 vendor 版本后要核对 NOTICE 里的引文与版本号。见
docs/explorations/2026-08-23-onlyoffice-attribution-agpl-section-7.md。

---

Expand Down
127 changes: 127 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
NOTICE
======

This product is a derivative work of ONLYOFFICE.

The site (https://edit.chaxus.com/, https://github.com/ranuts/document) is
licensed under the GNU Affero General Public License version 3 -- see LICENSE.
It embeds the ONLYOFFICE document editors, which are distributed under the same
license with the additional terms permitted by Section 7 of the GNU AGPL. Those
terms are reproduced verbatim below and apply to this work as well.


1. ONLYOFFICE editors (sdkjs, web-apps)
---------------------------------------

Copyright (C) Ascensio System SIA. All rights reserved.
https://www.onlyoffice.com/

Upstream sources:
https://github.com/ONLYOFFICE/sdkjs
https://github.com/ONLYOFFICE/web-apps

Version shipped in this repository: 9.3.0.133 (build:1), under public/sdkjs/
and public/web-apps/. It is a third-party compiled offline build of those two
projects; the corresponding source is the 9.3.0 release of the repositories
above.

The notice carried by the upstream source files, reproduced in full:

(c) Copyright Ascensio System SIA 2010-2024

This program is a free software product. You can redistribute it and/or
modify it under the terms of the GNU Affero General Public License (AGPL)
version 3 as published by the Free Software Foundation. In accordance with
Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
that Ascensio System SIA expressly excludes the warranty of non-infringement
of any third-party rights.

This program is distributed WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html

You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
street, Riga, Latvia, EU, LV-1050.

The interactive user interfaces in modified source and object code versions
of the Program must display Appropriate Legal Notices, as required under
Section 5 of the GNU AGPL version 3.

Pursuant to Section 7(b) of the License you must retain the original Product
logo when distributing the program. Pursuant to Section 7(e) we decline to
grant you any rights under trademark law for use of our trademarks.

All the Product's GUI elements, including illustrations and icon sets, as
well as technical writing content are licensed under the terms of the
Creative Commons Attribution-ShareAlike 4.0 International. See the License
terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode


How this work complies with those terms
---------------------------------------

Section 7(b) -- product logo. The ONLYOFFICE logo is shown in the editor
header, and the About pane (product logo, version, Ascensio System SIA
copyright, onlyoffice.com link) is reachable from the left rail. Neither is
suppressed. lib/onlyoffice/guards/chrome.ts hides only the current-user and
co-users widgets, which describe a collaboration session this serverless build
cannot have, and lib/onlyoffice-editor.ts leaves `customization.about` at its
default. test/unit/branding-notice.test.ts and
test/e2e/vendor-branding.spec.ts keep both from being "cleaned up" again.

Section 7(e) -- trademarks. ONLYOFFICE and the ONLYOFFICE logo are trademarks
of Ascensio System SIA. No rights under trademark law are granted by the
license, and none are claimed here. This project is not an official ONLYOFFICE
product and is not affiliated with, sponsored by or endorsed by Ascensio System
SIA. The name is used only to identify the engine this site is built on.

Section 5(a) -- modifications. The vendor tree under public/ is not pristine.
The changes made to it are:

* public/sdkjs/common/wasm/x2t/x2t_helper.js -- patched to load the x2t
WebAssembly module through `Module.instantiateWasm` from a gzip-compressed
response, so the 40 MB binary is never materialised in memory, and to
report load failures to the host page. See
docs/changelogs/2026-08-20-issue-144-memory-and-delivery.md.
* public/sdkjs/common/wasm/x2t/x2t.wasm -- published gzip-compressed only
(x2t.wasm.gz), because the uncompressed file exceeds the host's per-file
limit. The decompressed bytes are unmodified and pinned by sha256 in
test/unit/vendor-contract.test.ts.
* public/web-apps/apps/*/main/locale/*.json -- missing keys filled in from
en.json by bin/locale-fill.mjs for the seven site languages. Untranslated
keys returned `undefined` and crashed the tooltip renderer. Values only;
no key is removed.
* public/web-apps help content trimmed from the shipped tree.
* public/fonts/ -- the font catalog's proprietary font files were replaced
with redistributable open-source families (see docs/font-licenses.md and
docs/changelogs/2026-08-22-font-licensing.md). The catalog registry itself
is unchanged in shape; only the files behind the entries differ.

Nothing else in public/sdkjs/ or public/web-apps/ is edited. The behavioural
patches this site needs are applied at runtime from lib/onlyoffice/guards/,
which leaves the vendor files themselves byte-identical to the build they came
from.


2. x2t WebAssembly converter
----------------------------

The document converter (x2t) is part of ONLYOFFICE core (AGPL-3.0, Ascensio
System SIA) compiled to WebAssembly. The build used here comes from the
third-party project https://github.com/cryptpad/onlyoffice-x2t-wasm.


3. Other components
-------------------

* ranui / ranuts (https://github.com/chaxus/ran) -- the design system and
utilities this site's own interface is built with.
* Fonts under public/fonts/ and public/ran-fonts/ -- see docs/font-licenses.md
for the license of each family.
* Monaco Editor, under public/web-apps/vendor/monaco/ -- shipped by the
vendor build; see the LICENSE and ThirdPartyNotices.txt files in that
directory.

Other trademarks named in this repository and on the site (Microsoft Word,
Excel, PowerPoint, and others) are the property of their respective owners and
are used only to describe the file formats this editor reads and writes.
16 changes: 16 additions & 0 deletions bin/build-pages.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -157,11 +157,13 @@ const UI = {
['/no-signup-document-editor', 'No sign-up'],
['/private-document-editor', 'Private editor'],
['/offline-document-editor', 'Offline'],
['/onlyoffice-online-free', 'ONLYOFFICE online'],
['/edit-documents-without-account', 'No account'],
['/embed-document-editor', 'Embed API'],
],
generatedNote: (src) => `Source: ${src} in the repository`,
ossNote: `<strong>Open source &amp; self-hostable.</strong> Under AGPL-3.0 — verify that nothing is uploaded, or run your own copy: <a href="${REPO}" rel="noopener">github.com/ranuts/document</a>.`,
trademark: `ONLYOFFICE is a trademark of Ascensio System SIA. This site is not an official ONLYOFFICE product and is not affiliated with or endorsed by Ascensio System SIA.`,
},
'zh-CN': {
siteName: 'Document Editor',
Expand All @@ -185,11 +187,13 @@ const UI = {
['/zh-CN/no-signup-document-editor', '免注册'],
['/zh-CN/private-document-editor', '隐私编辑器'],
['/zh-CN/offline-document-editor', '离线'],
['/zh-CN/onlyoffice-online-free', 'OnlyOffice 在线版'],
['/zh-CN/edit-documents-without-account', '免账号'],
['/zh-CN/embed-document-editor', 'Embed API'],
],
generatedNote: (src) => `来源:仓库中的 ${src}`,
ossNote: `<strong>开源 · 可自托管。</strong>采用 AGPL-3.0——你可以核实没有任何上传,或者自建一份:<a href="${REPO}" rel="noopener">github.com/ranuts/document</a>。`,
trademark: `ONLYOFFICE 是 Ascensio System SIA 的商标。本站并非官方 ONLYOFFICE 产品,与 Ascensio System SIA 无隶属关系,也未获其背书。`,
},
ja: {
siteName: 'Document Editor',
Expand Down Expand Up @@ -218,6 +222,7 @@ const UI = {
],
generatedNote: (src) => `ソース: リポジトリの ${src}`,
ossNote: `<strong>オープンソース・セルフホスト可能。</strong>AGPL-3.0 のもとで公開——何もアップロードされないことを自分で確認でき、自分で運用することもできます: <a href="${REPO}" rel="noopener">github.com/ranuts/document</a>。`,
trademark: `ONLYOFFICE は Ascensio System SIA の商標です。本サイトは公式の ONLYOFFICE 製品ではなく、Ascensio System SIA との提携も推奨関係もありません。`,
},
de: {
siteName: 'Document Editor',
Expand Down Expand Up @@ -246,6 +251,7 @@ const UI = {
],
generatedNote: (src) => `Quelle: ${src} im Repository`,
ossNote: `<strong>Open Source &amp; selbst hostbar.</strong> Unter AGPL-3.0 — prüfen Sie selbst, dass nichts hochgeladen wird, oder betreiben Sie eine eigene Kopie: <a href="${REPO}" rel="noopener">github.com/ranuts/document</a>.`,
trademark: `ONLYOFFICE ist eine Marke von Ascensio System SIA. Diese Website ist kein offizielles ONLYOFFICE-Produkt und steht in keiner Verbindung zu Ascensio System SIA.`,
},
es: {
siteName: 'Document Editor',
Expand Down Expand Up @@ -274,6 +280,7 @@ const UI = {
],
generatedNote: (src) => `Fuente: ${src} en el repositorio`,
ossNote: `<strong>Código abierto y autoalojable.</strong> Bajo AGPL-3.0: comprueba que no se sube nada, o ejecuta tu propia copia: <a href="${REPO}" rel="noopener">github.com/ranuts/document</a>.`,
trademark: `ONLYOFFICE es una marca de Ascensio System SIA. Este sitio no es un producto oficial de ONLYOFFICE ni está afiliado a Ascensio System SIA ni respaldado por ella.`,
},
ko: {
siteName: 'Document Editor',
Expand Down Expand Up @@ -302,6 +309,7 @@ const UI = {
],
generatedNote: (src) => `출처: 저장소의 ${src}`,
ossNote: `<strong>오픈 소스이며 직접 호스팅할 수 있습니다.</strong> AGPL-3.0으로 공개되어 있어, 아무것도 업로드되지 않는다는 것을 직접 확인하거나 직접 운영할 수 있습니다: <a href="${REPO}" rel="noopener">github.com/ranuts/document</a>.`,
trademark: `ONLYOFFICE는 Ascensio System SIA의 상표입니다. 이 사이트는 공식 ONLYOFFICE 제품이 아니며 Ascensio System SIA와 제휴하거나 후원받지 않았습니다.`,
},
pt: {
siteName: 'Document Editor',
Expand Down Expand Up @@ -330,6 +338,7 @@ const UI = {
],
generatedNote: (src) => `Fonte: ${src} no repositório`,
ossNote: `<strong>Código aberto e auto-hospedável.</strong> Sob a AGPL-3.0 — confira você mesmo que nada é enviado, ou rode a sua própria cópia: <a href="${REPO}" rel="noopener">github.com/ranuts/document</a>.`,
trademark: `ONLYOFFICE é uma marca da Ascensio System SIA. Este site não é um produto oficial do ONLYOFFICE nem tem afiliação ou endosso da Ascensio System SIA.`,
},
};

Expand All @@ -347,6 +356,11 @@ const UI = {
*/
export const LANDING_SLUGS = [
'offline-document-editor',
// en + zh only, on purpose: this one targets people searching for ONLYOFFICE
// itself, and the shell derives hreflang and the language switch from the
// sources a page actually has (see `translations` in renderPage), so a page
// in two languages stays correct in two languages.
'onlyoffice-online-free',
'no-signup-document-editor',
'private-document-editor',
'edit-documents-without-account',
Expand Down Expand Up @@ -1020,6 +1034,7 @@ ${footLinks}
</nav>
<r-theme-switch class="theme-switch" label="${e(ui.themeLabel)}"></r-theme-switch>
<span class="lic">${e(data.foot.license)}</span>
<p class="tm">${e(ui.trademark)}</p>
</footer>
</section>

Expand Down Expand Up @@ -1266,6 +1281,7 @@ ${aside} </div>
${footer}
<a href="${REPO}" rel="noopener">GitHub</a>
<r-theme-switch class="theme-switch" label="${ui.themeLabel}"></r-theme-switch>
<p class="tm">${escapeHtml(ui.trademark)}</p>
</footer>
</body>
</html>
Expand Down
4 changes: 4 additions & 0 deletions content/en/home.json
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,10 @@
"href": "/convert/xlsx-to-csv",
"label": "XLSX → CSV"
},
{
"href": "/onlyoffice-online-free",
"label": "ONLYOFFICE online"
},
{
"href": "https://github.com/ranuts/document",
"label": "GitHub"
Expand Down
Loading
Loading