gitextract_fnv49fja/ ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── feature_request.md │ │ ├── plugin-request-template.md │ │ ├── security-issue.md │ │ └── security.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── dependabot.yml │ └── workflows/ │ ├── backend-tests.yml │ ├── build-and-deploy-docs.yml │ ├── codeql-analysis.yml │ ├── dependency-review.yml │ ├── docker.yml │ ├── frontend-admin-tests.yml │ ├── frontend-tests.yml │ ├── handleRelease.yml │ ├── load-test.yml │ ├── perform-type-check.yml │ ├── rate-limit.yml │ ├── release.yml │ ├── releaseEtherpad.yml │ ├── stale.yml │ └── upgrade-from-latest-release.yml ├── .gitignore ├── .lgtm.yml ├── .pr_agent.toml ├── .travis.yml ├── AGENTS.MD ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── SECURITY.md ├── admin/ │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── README.md │ ├── index.html │ ├── package.json │ ├── public/ │ │ └── ep_admin_pads/ │ │ ├── ar.json │ │ ├── bn.json │ │ ├── ca.json │ │ ├── cs.json │ │ ├── cy.json │ │ ├── da.json │ │ ├── de.json │ │ ├── diq.json │ │ ├── dsb.json │ │ ├── el.json │ │ ├── en.json │ │ ├── eu.json │ │ ├── ff.json │ │ ├── fi.json │ │ ├── fr.json │ │ ├── gl.json │ │ ├── he.json │ │ ├── hsb.json │ │ ├── hu.json │ │ ├── ia.json │ │ ├── it.json │ │ ├── kn.json │ │ ├── ko.json │ │ ├── krc.json │ │ ├── lb.json │ │ ├── lt.json │ │ ├── mk.json │ │ ├── my.json │ │ ├── nb.json │ │ ├── nl.json │ │ ├── oc.json │ │ ├── pms.json │ │ ├── pt-br.json │ │ ├── pt.json │ │ ├── qqq.json │ │ ├── ru.json │ │ ├── sc.json │ │ ├── sdc.json │ │ ├── sk.json │ │ ├── skr-arab.json │ │ ├── sl.json │ │ ├── smn.json │ │ ├── sms.json │ │ ├── sq.json │ │ ├── sv.json │ │ ├── sw.json │ │ ├── th.json │ │ ├── tl.json │ │ ├── tr.json │ │ ├── uk.json │ │ ├── zh-hans.json │ │ └── zh-hant.json │ ├── src/ │ │ ├── App.css │ │ ├── App.tsx │ │ ├── components/ │ │ │ ├── IconButton.tsx │ │ │ ├── SearchField.tsx │ │ │ └── ShoutType.ts │ │ ├── index.css │ │ ├── localization/ │ │ │ └── i18n.ts │ │ ├── main.tsx │ │ ├── pages/ │ │ │ ├── HelpPage.tsx │ │ │ ├── HomePage.tsx │ │ │ ├── LoginScreen.tsx │ │ │ ├── PadPage.tsx │ │ │ ├── Plugin.ts │ │ │ ├── SettingsPage.tsx │ │ │ └── ShoutPage.tsx │ │ ├── store/ │ │ │ └── store.ts │ │ ├── utils/ │ │ │ ├── AnimationFrameHook.ts │ │ │ ├── LoadingScreen.tsx │ │ │ ├── PadSearch.ts │ │ │ ├── Toast.tsx │ │ │ ├── sorting.ts │ │ │ ├── useDebounce.ts │ │ │ └── utils.ts │ │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── best_practices.md ├── bin/ │ ├── buildDebian.sh │ ├── buildForWindows.sh │ ├── checkAllPads.ts │ ├── checkPad.ts │ ├── cleanRun.sh │ ├── commonPlugins.ts │ ├── convertSettings.json.template │ ├── createRelease.sh │ ├── createUserSession.ts │ ├── deb-src/ │ │ ├── DEBIAN/ │ │ │ ├── control │ │ │ ├── postinst │ │ │ ├── preinst │ │ │ └── prerm │ │ └── sysroot/ │ │ └── etc/ │ │ └── init/ │ │ └── etherpad.conf │ ├── debugRun.sh │ ├── deleteAllGroupSessions.ts │ ├── deletePad.ts │ ├── extractPadData.ts │ ├── fastRun.sh │ ├── functions.sh │ ├── generateReleaseNotes.ts │ ├── importSqlFile.ts │ ├── installDeps.sh │ ├── installLocalPlugins.sh │ ├── installOnWindows.bat │ ├── make_docs.ts │ ├── migrateDB.ts │ ├── migrateDirtyDBtoRealDB.ts │ ├── nsis/ │ │ ├── README.md │ │ └── etherpad.nsi │ ├── package.json │ ├── plugins/ │ │ ├── README.md │ │ ├── checkPlugin.ts │ │ ├── getCorePlugins.sh │ │ ├── lib/ │ │ │ ├── CONTRIBUTING.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── backend-tests.yml │ │ │ ├── dependabot.yml │ │ │ ├── eslintrc.cjs │ │ │ ├── frontend-tests.yml │ │ │ ├── gitignore │ │ │ ├── npmpublish.yml │ │ │ └── test-and-release.yml │ │ ├── listOfficialPlugins │ │ ├── reTestAllPlugins.sh │ │ ├── stalePlugins.ts │ │ ├── updateAllPluginsScript.sh │ │ └── updateCorePlugins.sh │ ├── plugins.ts │ ├── push-after-release.sh │ ├── rebuildPad.ts │ ├── release.ts │ ├── repairPad.ts │ ├── run.sh │ ├── safeRun.sh │ ├── tsconfig.json │ └── updatePlugins.sh ├── doc/ │ ├── .gitignore │ ├── .vitepress/ │ │ ├── config.mts │ │ └── theme/ │ │ ├── components/ │ │ │ └── SvgImage.vue │ │ ├── index.ts │ │ └── styles/ │ │ └── vars.css │ ├── api/ │ │ ├── api.adoc │ │ ├── changeset_library.adoc │ │ ├── changeset_library.md │ │ ├── editbar.adoc │ │ ├── editbar.md │ │ ├── editorInfo.adoc │ │ ├── editorInfo.md │ │ ├── embed_parameters.adoc │ │ ├── embed_parameters.md │ │ ├── hooks_client-side.adoc │ │ ├── hooks_client-side.md │ │ ├── hooks_overview.adoc │ │ ├── hooks_overview.md │ │ ├── hooks_server-side.adoc │ │ ├── hooks_server-side.md │ │ ├── http_api.adoc │ │ ├── http_api.md │ │ ├── index.md │ │ ├── pluginfw.adoc │ │ ├── pluginfw.md │ │ ├── toolbar.adoc │ │ └── toolbar.md │ ├── assets/ │ │ └── style.css │ ├── cli.md │ ├── cookies.adoc │ ├── cookies.md │ ├── database.adoc │ ├── demo.md │ ├── docker.adoc │ ├── docker.md │ ├── documentation.adoc │ ├── documentation.md │ ├── index.adoc │ ├── index.md │ ├── localization.adoc │ ├── localization.md │ ├── package.json │ ├── plugins.adoc │ ├── plugins.md │ ├── public/ │ │ └── easysync/ │ │ ├── README.md │ │ ├── easysync-full-description.tex │ │ ├── easysync-notes.tex │ │ └── easysync-notes.txt │ ├── skins.adoc │ ├── skins.md │ ├── stats.adoc │ └── stats.md ├── docker-compose.dev.yml ├── docker-compose.yml ├── local_plugins/ │ └── .gitignore ├── package.json ├── pnpm-workspace.yaml ├── settings.json.docker ├── settings.json.template ├── src/ │ ├── .eslintrc.cjs │ ├── README.md │ ├── ep.json │ ├── locales/ │ │ ├── af.json │ │ ├── ar.json │ │ ├── ast.json │ │ ├── awa.json │ │ ├── az.json │ │ ├── azb.json │ │ ├── bcc.json │ │ ├── be-tarask.json │ │ ├── bg.json │ │ ├── bgn.json │ │ ├── bn.json │ │ ├── br.json │ │ ├── bs.json │ │ ├── ca.json │ │ ├── ce.json │ │ ├── cs.json │ │ ├── da.json │ │ ├── de.json │ │ ├── diq.json │ │ ├── dsb.json │ │ ├── dty.json │ │ ├── el.json │ │ ├── en-gb.json │ │ ├── en.json │ │ ├── eo.json │ │ ├── es.json │ │ ├── et.json │ │ ├── eu.json │ │ ├── fa.json │ │ ├── ff.json │ │ ├── fi.json │ │ ├── fo.json │ │ ├── fr.json │ │ ├── fy.json │ │ ├── ga.json │ │ ├── gl.json │ │ ├── got.json │ │ ├── gu.json │ │ ├── he.json │ │ ├── hi.json │ │ ├── hr.json │ │ ├── hrx.json │ │ ├── hsb.json │ │ ├── hu.json │ │ ├── hy.json │ │ ├── ia.json │ │ ├── id.json │ │ ├── is.json │ │ ├── it.json │ │ ├── ja.json │ │ ├── kab.json │ │ ├── km.json │ │ ├── kn.json │ │ ├── ko.json │ │ ├── krc.json │ │ ├── ksh.json │ │ ├── ku-latn.json │ │ ├── lb.json │ │ ├── lki.json │ │ ├── lrc.json │ │ ├── lt.json │ │ ├── lv.json │ │ ├── map-bms.json │ │ ├── mg.json │ │ ├── mk.json │ │ ├── ml.json │ │ ├── mn.json │ │ ├── mnw.json │ │ ├── mr.json │ │ ├── ms.json │ │ ├── my.json │ │ ├── nah.json │ │ ├── nap.json │ │ ├── nb.json │ │ ├── nds.json │ │ ├── ne.json │ │ ├── nl.json │ │ ├── nn.json │ │ ├── oc.json │ │ ├── olo.json │ │ ├── os.json │ │ ├── pa.json │ │ ├── pl.json │ │ ├── pms.json │ │ ├── ps.json │ │ ├── pt-br.json │ │ ├── pt.json │ │ ├── qqq.json │ │ ├── ro.json │ │ ├── ru.json │ │ ├── sc.json │ │ ├── sco.json │ │ ├── sd.json │ │ ├── sh-latn.json │ │ ├── shn.json │ │ ├── sk.json │ │ ├── skr-arab.json │ │ ├── sl.json │ │ ├── sms.json │ │ ├── sq.json │ │ ├── sr-ec.json │ │ ├── sr-el.json │ │ ├── sro.json │ │ ├── sv.json │ │ ├── sw.json │ │ ├── ta.json │ │ ├── tcy.json │ │ ├── te.json │ │ ├── th.json │ │ ├── tr.json │ │ ├── uk.json │ │ ├── vec.json │ │ ├── vi.json │ │ ├── zh-hans.json │ │ └── zh-hant.json │ ├── node/ │ │ ├── README.md │ │ ├── db/ │ │ │ ├── API.ts │ │ │ ├── AuthorManager.ts │ │ │ ├── DB.ts │ │ │ ├── GroupManager.ts │ │ │ ├── Pad.ts │ │ │ ├── PadManager.ts │ │ │ ├── ReadOnlyManager.ts │ │ │ ├── SecurityManager.ts │ │ │ ├── SessionManager.ts │ │ │ └── SessionStore.ts │ │ ├── eejs/ │ │ │ └── index.ts │ │ ├── handler/ │ │ │ ├── APIHandler.ts │ │ │ ├── APIKeyHandler.ts │ │ │ ├── ExportHandler.ts │ │ │ ├── ImportHandler.ts │ │ │ ├── PadMessageHandler.ts │ │ │ ├── RestAPI.ts │ │ │ └── SocketIORouter.ts │ │ ├── hooks/ │ │ │ ├── express/ │ │ │ │ ├── admin.ts │ │ │ │ ├── adminplugins.ts │ │ │ │ ├── adminsettings.ts │ │ │ │ ├── apicalls.ts │ │ │ │ ├── errorhandling.ts │ │ │ │ ├── importexport.ts │ │ │ │ ├── openapi.ts │ │ │ │ ├── padurlsanitize.ts │ │ │ │ ├── pwa.ts │ │ │ │ ├── socketio.ts │ │ │ │ ├── specialpages.ts │ │ │ │ ├── static.ts │ │ │ │ ├── tokenTransfer.ts │ │ │ │ └── webaccess.ts │ │ │ ├── express.ts │ │ │ └── i18n.ts │ │ ├── metrics.ts │ │ ├── padaccess.ts │ │ ├── prometheus.ts │ │ ├── security/ │ │ │ ├── OAuth2Provider.ts │ │ │ ├── OAuth2User.ts │ │ │ ├── OIDCAdapter.ts │ │ │ ├── SecretRotator.ts │ │ │ └── crypto.ts │ │ ├── server.ts │ │ ├── stats.ts │ │ ├── types/ │ │ │ ├── APIHandlerType.ts │ │ │ ├── ArgsExpressType.ts │ │ │ ├── AsyncQueueTask.ts │ │ │ ├── ChangeSet.ts │ │ │ ├── DeriveModel.ts │ │ │ ├── ErrorCaused.ts │ │ │ ├── I18nPluginDefs.ts │ │ │ ├── LegacyParams.ts │ │ │ ├── MapType.ts │ │ │ ├── PackageInfo.ts │ │ │ ├── PadSearchQuery.ts │ │ │ ├── PadType.ts │ │ │ ├── PartType.ts │ │ │ ├── Plugin.ts │ │ │ ├── PromiseWithStd.ts │ │ │ ├── QueryType.ts │ │ │ ├── Revision.ts │ │ │ ├── RunCMDOptions.ts │ │ │ ├── SecretRotatorType.ts │ │ │ ├── SettingsUser.ts │ │ │ ├── SocketAcknowledge.ts │ │ │ ├── SocketClientRequest.ts │ │ │ ├── SocketModule.ts │ │ │ ├── SwaggerUIResource.ts │ │ │ ├── UserSettingsObject.ts │ │ │ └── WebAccessTypes.ts │ │ └── utils/ │ │ ├── Abiword.ts │ │ ├── AbsolutePaths.ts │ │ ├── Cleanup.ts │ │ ├── Cli.ts │ │ ├── ExportEtherpad.ts │ │ ├── ExportHelper.ts │ │ ├── ExportHtml.ts │ │ ├── ExportTxt.ts │ │ ├── ImportEtherpad.ts │ │ ├── ImportHtml.ts │ │ ├── LibreOffice.ts │ │ ├── Minify.ts │ │ ├── MinifyWorker.ts │ │ ├── NodeVersion.ts │ │ ├── Settings.ts │ │ ├── SettingsTree.ts │ │ ├── Stream.ts │ │ ├── UpdateCheck.ts │ │ ├── checkValidRev.ts │ │ ├── customError.ts │ │ ├── padDiff.ts │ │ ├── path_exists.ts │ │ ├── promises.ts │ │ ├── randomstring.ts │ │ ├── run_cmd.ts │ │ ├── sanitizePathname.ts │ │ ├── tar.json │ │ └── toolbar.ts │ ├── package.json │ ├── playwright.config.ts │ ├── static/ │ │ ├── css/ │ │ │ ├── admin.css │ │ │ ├── iframe_editor.css │ │ │ ├── lists_and_indents.css │ │ │ ├── pad/ │ │ │ │ ├── chat.css │ │ │ │ ├── fonts.css │ │ │ │ ├── form.css │ │ │ │ ├── gritter.css │ │ │ │ ├── icons.css │ │ │ │ ├── layout.css │ │ │ │ ├── loadingbox.css │ │ │ │ ├── normalize.css │ │ │ │ ├── popup.css │ │ │ │ ├── popup_connectivity.css │ │ │ │ ├── popup_import_export.css │ │ │ │ ├── popup_users.css │ │ │ │ └── toolbar.css │ │ │ ├── pad.css │ │ │ └── timeslider.css │ │ ├── empty.html │ │ ├── font/ │ │ │ ├── Montserrat-Light.otf │ │ │ ├── Montserrat-Regular.otf │ │ │ ├── config.json │ │ │ └── opendyslexic.otf │ │ ├── js/ │ │ │ ├── AttributeManager.ts │ │ │ ├── AttributeMap.ts │ │ │ ├── AttributePool.ts │ │ │ ├── Builder.ts │ │ │ ├── Changeset.ts │ │ │ ├── ChangesetUtils.ts │ │ │ ├── ChatMessage.ts │ │ │ ├── MergingOpAssembler.ts │ │ │ ├── Op.ts │ │ │ ├── OpAssembler.ts │ │ │ ├── OpIter.ts │ │ │ ├── SmartOpAssembler.ts │ │ │ ├── StringAssembler.ts │ │ │ ├── StringIterator.ts │ │ │ ├── TextLinesMutator.ts │ │ │ ├── ace.ts │ │ │ ├── ace2_common.ts │ │ │ ├── ace2_inner.ts │ │ │ ├── attributes.ts │ │ │ ├── basic_error_handler.ts │ │ │ ├── broadcast.ts │ │ │ ├── broadcast_revisions.ts │ │ │ ├── broadcast_slider.ts │ │ │ ├── caretPosition.ts │ │ │ ├── changesettracker.ts │ │ │ ├── chat.ts │ │ │ ├── collab_client.ts │ │ │ ├── colorutils.ts │ │ │ ├── contentcollector.ts │ │ │ ├── cssmanager.ts │ │ │ ├── domline.ts │ │ │ ├── index.ts │ │ │ ├── l10n.ts │ │ │ ├── linestylefilter.ts │ │ │ ├── pad.ts │ │ │ ├── pad_automatic_reconnect.ts │ │ │ ├── pad_connectionstatus.ts │ │ │ ├── pad_cookie.ts │ │ │ ├── pad_editbar.ts │ │ │ ├── pad_editor.ts │ │ │ ├── pad_impexp.ts │ │ │ ├── pad_modals.ts │ │ │ ├── pad_savedrevs.ts │ │ │ ├── pad_userlist.ts │ │ │ ├── pad_utils.ts │ │ │ ├── pluginfw/ │ │ │ │ ├── LinkInstaller.ts │ │ │ │ ├── client_plugins.ts │ │ │ │ ├── hooks.ts │ │ │ │ ├── installer.ts │ │ │ │ ├── plugin_defs.ts │ │ │ │ ├── plugins.ts │ │ │ │ ├── shared.ts │ │ │ │ └── tsort.ts │ │ │ ├── rjquery.ts │ │ │ ├── scroll.ts │ │ │ ├── security.ts │ │ │ ├── skin_variants.ts │ │ │ ├── skiplist.ts │ │ │ ├── socketio.ts │ │ │ ├── timeslider.ts │ │ │ ├── types/ │ │ │ │ ├── AText.ts │ │ │ │ ├── Attribute.ts │ │ │ │ ├── ChangeSet.ts │ │ │ │ ├── ChangeSetBuilder.ts │ │ │ │ ├── PadRevision.ts │ │ │ │ ├── RepModel.ts │ │ │ │ └── SocketIOMessage.ts │ │ │ ├── underscore.ts │ │ │ ├── undomodule.ts │ │ │ ├── vendors/ │ │ │ │ ├── browser.ts │ │ │ │ ├── farbtastic.ts │ │ │ │ ├── gritter.ts │ │ │ │ ├── html10n.ts │ │ │ │ ├── jquery.ts │ │ │ │ └── nice-select.ts │ │ │ └── welcome.ts │ │ ├── robots.txt │ │ ├── skins/ │ │ │ ├── colibris/ │ │ │ │ ├── index.css │ │ │ │ ├── index.js │ │ │ │ ├── pad.css │ │ │ │ ├── pad.js │ │ │ │ ├── src/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── buttons.css │ │ │ │ │ │ ├── chat.css │ │ │ │ │ │ ├── form.css │ │ │ │ │ │ ├── gritter.css │ │ │ │ │ │ ├── import-export.css │ │ │ │ │ │ ├── popup.css │ │ │ │ │ │ ├── scrollbars.css │ │ │ │ │ │ ├── sidediv.css │ │ │ │ │ │ ├── table-of-content.css │ │ │ │ │ │ ├── toolbar.css │ │ │ │ │ │ └── users.css │ │ │ │ │ ├── general.css │ │ │ │ │ ├── layout.css │ │ │ │ │ ├── pad-editor.css │ │ │ │ │ ├── pad-variants.css │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── author_hover.css │ │ │ │ │ ├── brightcolorpicker.css │ │ │ │ │ ├── comments.css │ │ │ │ │ ├── font_color.css │ │ │ │ │ ├── set_title_on_pad.css │ │ │ │ │ └── tables2.css │ │ │ │ ├── timeslider.css │ │ │ │ └── timeslider.js │ │ │ └── no-skin/ │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ ├── pad.css │ │ │ ├── pad.js │ │ │ ├── timeslider.css │ │ │ └── timeslider.js │ │ └── tests.html │ ├── templates/ │ │ ├── export_html.html │ │ ├── index.html │ │ ├── indexBootstrap.js │ │ ├── javascript.html │ │ ├── pad.html │ │ ├── padBootstrap.js │ │ ├── padViteBootstrap.js │ │ ├── timeSliderBootstrap.js │ │ └── timeslider.html │ ├── tests/ │ │ ├── README.md │ │ ├── backend/ │ │ │ ├── common.ts │ │ │ ├── fuzzImportTest.ts │ │ │ └── specs/ │ │ │ ├── ExportEtherpad.ts │ │ │ ├── ImportEtherpad.ts │ │ │ ├── Pad.ts │ │ │ ├── SecretRotator.ts │ │ │ ├── SessionStore.ts │ │ │ ├── Stream.ts │ │ │ ├── api/ │ │ │ │ ├── api.ts │ │ │ │ ├── characterEncoding.ts │ │ │ │ ├── chat.ts │ │ │ │ ├── emojis.html │ │ │ │ ├── fuzzImportTest.ts │ │ │ │ ├── importexport.ts │ │ │ │ ├── importexportGetPost.ts │ │ │ │ ├── instance.ts │ │ │ │ ├── pad.ts │ │ │ │ ├── restoreRevision.ts │ │ │ │ ├── sessionsAndGroups.ts │ │ │ │ ├── test.doc │ │ │ │ ├── test.docx │ │ │ │ ├── test.etherpad │ │ │ │ ├── test.odt │ │ │ │ └── test.txt │ │ │ ├── chat.ts │ │ │ ├── contentcollector.ts │ │ │ ├── crypto.ts │ │ │ ├── export.ts │ │ │ ├── favicon.ts │ │ │ ├── health.ts │ │ │ ├── hooks.ts │ │ │ ├── lowerCasePadIds.ts │ │ │ ├── messages.ts │ │ │ ├── pads-with-spaces.ts │ │ │ ├── regression-db.ts │ │ │ ├── settings.json │ │ │ ├── settings.ts │ │ │ ├── socketio.ts │ │ │ ├── specialpages.ts │ │ │ └── webaccess.ts │ │ ├── backend-new/ │ │ │ ├── easysync-helper.ts │ │ │ └── specs/ │ │ │ ├── AttributeMap.ts │ │ │ ├── StringIteratorTest.ts │ │ │ ├── admin_utils.ts │ │ │ ├── attributes.ts │ │ │ ├── easysync-assembler.ts │ │ │ ├── easysync-compose.ts │ │ │ ├── easysync-inverseRandom.ts │ │ │ ├── easysync-mutations.ts │ │ │ ├── easysync-other.test.ts │ │ │ ├── easysync-subAttribution.ts │ │ │ ├── pad_utils.ts │ │ │ ├── path_exists.ts │ │ │ ├── promises.ts │ │ │ ├── sanitizePathname.ts │ │ │ └── skiplist.ts │ │ ├── container/ │ │ │ ├── loadSettings.js │ │ │ └── specs/ │ │ │ └── api/ │ │ │ └── pad.js │ │ ├── frontend/ │ │ │ ├── cypress/ │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── cypress.config.js │ │ │ │ └── integration/ │ │ │ │ └── test.js │ │ │ ├── easysync-helper.js │ │ │ ├── helper/ │ │ │ │ ├── methods.ts │ │ │ │ ├── multipleUsers.ts │ │ │ │ └── ui.ts │ │ │ ├── helper.js │ │ │ ├── index.html │ │ │ ├── runner.css │ │ │ ├── runner.js │ │ │ ├── specs/ │ │ │ │ ├── authorship_of_editions.js │ │ │ │ ├── chat_hooks.js │ │ │ │ ├── chat_load_messages.js │ │ │ │ ├── drag_and_drop.js │ │ │ │ ├── easysync-follow.js │ │ │ │ ├── helper.js │ │ │ │ ├── importexport.js │ │ │ │ ├── importindents.js │ │ │ │ ├── multiple_authors_clear_authorship_colors.js │ │ │ │ ├── pad_modal.js │ │ │ │ ├── responsiveness.js │ │ │ │ ├── scrollTo.js │ │ │ │ ├── select_formatting_buttons.js │ │ │ │ ├── timeslider_labels.js │ │ │ │ ├── timeslider_numeric_padID.js │ │ │ │ ├── timeslider_revisions.js │ │ │ │ └── xxauto_reconnect.js │ │ │ └── travis/ │ │ │ ├── .gitignore │ │ │ ├── adminrunner.sh │ │ │ ├── remote_runner.js │ │ │ ├── runner.sh │ │ │ ├── runnerBackend.sh │ │ │ └── runnerLoadTest.sh │ │ ├── frontend-new/ │ │ │ ├── admin-spec/ │ │ │ │ ├── adminsettings.spec.ts │ │ │ │ ├── admintroubleshooting.spec.ts │ │ │ │ └── adminupdateplugins.spec.ts │ │ │ ├── helper/ │ │ │ │ ├── adminhelper.ts │ │ │ │ ├── padHelper.ts │ │ │ │ ├── settingsHelper.ts │ │ │ │ └── timeslider.ts │ │ │ └── specs/ │ │ │ ├── alphabet.spec.ts │ │ │ ├── bold.spec.ts │ │ │ ├── change_user_color.spec.ts │ │ │ ├── change_user_name.spec.ts │ │ │ ├── chat.spec.ts │ │ │ ├── clear_authorship_color.spec.ts │ │ │ ├── collab_client.spec.ts │ │ │ ├── delete.spec.ts │ │ │ ├── editbar.spec.ts │ │ │ ├── embed_value.spec.ts │ │ │ ├── enter.spec.ts │ │ │ ├── font_type.spec.ts │ │ │ ├── indentation.spec.ts │ │ │ ├── inner_height.spec.ts │ │ │ ├── italic.spec.ts │ │ │ ├── language.spec.ts │ │ │ ├── ordered_list.spec.ts │ │ │ ├── redo.spec.ts │ │ │ ├── strikethrough.spec.ts │ │ │ ├── timeslider.spec.ts │ │ │ ├── timeslider_follow.spec.ts │ │ │ ├── undo.spec.ts │ │ │ ├── unordered_list.spec.ts │ │ │ ├── urls_become_clickable.spec.ts │ │ │ └── welcome.spec.test.ts │ │ ├── ratelimit/ │ │ │ ├── Dockerfile.anotherip │ │ │ ├── Dockerfile.nginx │ │ │ ├── nginx.conf │ │ │ ├── send_changesets.js │ │ │ └── testlimits.sh │ │ └── settings.json │ ├── tsconfig.json │ ├── vitest.config.ts │ └── web.config ├── start.bat ├── ui/ │ ├── .gitignore │ ├── consent.html │ ├── login.html │ ├── package.json │ ├── pad.html │ ├── src/ │ │ ├── consent.ts │ │ ├── main.ts │ │ ├── style.css │ │ └── vite-env.d.ts │ ├── tsconfig.json │ └── vite.config.ts └── var/ └── .gitignore