Merge branch 'soon' into absolute-paths

This commit is contained in:
ansuz 2022-10-06 15:34:05 +05:30
commit 863ab4f380
21383 changed files with 457239 additions and 3808 deletions

13
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,13 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: cryptpad
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View File

@ -1,45 +0,0 @@
---
name: Bug report
about: Report a bug in the software
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**Where did it happen?**
Did the issue occur on CryptPad.fr or an instance hosted by a third-party?
If on another instance, please provide its full URL.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Browser (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. firefox, tor browser, chrome, safari, brave, edge, ???]
- variations [e.g. Firefox nightly, Firefox ESR, Chromium, Ungoogled chrome]
- Version [e.g. 22]
- Extensions installed (UBlock Origin, Passbolt, LibreJS]
- Browser tweaks [e.g. firefox "Enhanced Tracking Protection" strict/custom mode, tor browser "safer" security level, chrome incognito mode]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.

View File

@ -0,0 +1,60 @@
name: Reproducible bug report
description: Report a reproducible bug ONLY, otherwise see the links below
labels: ["bug"]
body:
- type: checkboxes
attributes:
label: Contribution guidelines
description: Please read the code of conduct before proceeding.
options:
- label: I've read the [code of conduct](https://github.com/xwiki-labs/cryptpad/blob/main/CODE_OF_CONDUCT.md) and wholeheartedly agree
required: true
- type: checkboxes
attributes:
label: I've found a bug and checked that ...
description: Prior to placing the issue, please check following:** *(fill out each checkbox with an `X` once done)*
options:
- label: I understand that not following the below instructions will result in immediate closure and/or deletion of my issue.
required: true
- label: I have understood that this bug report is dedicated for bugs, and not for support-related inquiries.
required: true
- label: I have understood that answers are voluntary and community-driven, and not commercial support.
required: true
- label: I have verified that my issue has not been already answered in the past. I've read the [Common issues documentation section](https://docs.cryptpad.org/en/FAQ.html#common-issues) and I also checked [previous issues](https://github.com/xwiki-labs/cryptpad/issues).
required: true
- type: textarea
attributes:
label: Description
description: Please provide a brief description of the bug in 1-2 sentences. If applicable, add screenshots to help explain your problem. Very useful for bugs in CryptPad UI.
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce
description: Please describe the steps to reproduce the bug. Screenshots can be added, if helpful.
placeholder: |-
1. ...
2. ...
3. ...
validations:
required: true
- type: textarea
attributes:
label: Expected behavior
description: A clear and concise description of what you expected to happen.
validations:
required: true
- type: textarea
attributes:
label: System information
description: In this stage we would kindly ask you to attach general system information about your setup.
value: |-
| Question | Answer |
| --- | --- |
| Operating system and version | I_DO_REPLY_HERE |
| Web browser and version| I_DO_REPLY_HERE |
| Extensions installed | I_DO_REPLY_HERE |
| Browser tweaks | I_DO_REPLY_HERE |
| CryptPad version | I_DO_REPLY_HERE |
validations:
required: true

17
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1,17 @@
blank_issues_enabled: false
contact_links:
- name: Bug report
url: https://forum.cryptpad.org/t/bug-report
about: Use the appropriate tags & describe your issue in much details as possible
- name: Feature request
url: https://forum.cryptpad.org/t/feature-request
about: Check if an existing topic doesn't already cover the feature you'd like
- name: Generic question
url: https://forum.cryptpad.org/t/general
about: Feel free to use the forum to ask any question you might have
- name: CryptPad.fr flagship instance issue
url: https://cryptpad.fr/support/#new
about: Issue with an account or document on cryptpad.fr only
- name: Report a security vulnerability
url: https://ouvaton.link/pOgHev
about: Please give us appropriate time to verify, respond and fix before disclosure

View File

@ -1,57 +0,0 @@
---
name: Initial instance configuration
about: Difficulty configuring a CryptPad instance
title: CONFIG
labels: configuration
assignees: ''
---
We receive many issues from people that have tried to set up a new CryptPad instance that does not load any of the interactive editors or which mostly works but has particular problems with the sheet editor.
Before you create an issue:
## Confirm that the problem stems from your instance and not from your browser
Not all browsers support CryptPad correctly, and various browser extensions interfere with its intended behaviour.
https://CryptPad.fr is a good reference point that you can use to confirm that your browser can load a correctly configured instance. If you can't load CryptPad.fr then the problem may be with your browser, its configuration, or one of its active extensions.
## See your instance's checkup page
If your instance is able to at least partially load some pages then you should be able to access the diagnostic page `http(s)://<your-domain>/checkup/`. It will perform some automated tests of your instance's configuration and will provide hints indicating:
1. what is incorrect about your configuration
2. what to change in order to correct the problem
## Write down the exact steps you followed to configure your instance
0. Provide the URL of the guide you followed
1. Confirm that your system has the necessary pre-requisites
* Did you fetch the source code with `git` as recommended?
* Have you installed the recommend version of Nodejs (12.14.0) using [NVM](https://github.com/nvm-sh/nvm)?
* Have you installed `bower` using `npm`?
* Have you fetched the latest source code? Run `git branch` and confirm that it returns either `main` or [the latest of our releases](github.com/xwiki-labs/cryptpad/releases/latest).
2. Did you copy `cryptpad/config/config.example.js` to `cryptpad/config/config.js`, read the comments, and edit the fields which are described as being necessary for a production environment?
3. Did you restart the application server (`server.js`) after making configuration changes?
4. Are you running NGINX as a reverse proxy as we recommend?
5. Have you generated an SSL certificate that is valid for both the domains that are required by the sandboxing system?
6. Do the domains in your NGINX conf match those in `cryptpad/config/config.js`?
## Review the steps you took
If the answer to any of the above questions is _No_ then that is the most likely cause of your difficulty.
Identifying the problem on your own reduces the time we spend answering GitHub issues and leaves more time to fix actual bugs and develop new features.
## Create a detailed report
If you believe you've done all of those steps correctly then proceed with creating an issue with the following:
0. A concise description of the problem you're experiencing and why you believe it stems from a bug in the software and not a configuration issue
1. The list of all the steps you wrote down when following our instructions above
2. A link to your instance so we can easily load your `/checkup/` page for ourselves
3. A list of any errors visible in your browser's console on whichever page is not behaving as expected
4. A list of any further steps you've taken to debug the problem on your own
Finally, remove the text of this issue template and leave only the content you've written.

View File

@ -6,6 +6,7 @@ www/common/onlyoffice/x2t
www/common/onlyoffice/v1
www/common/onlyoffice/v2*
www/common/onlyoffice/v4
www/common/onlyoffice/v5
server.js
www/scratch

View File

@ -44,7 +44,7 @@
"emptyRule": { "enabled": true },
"hexValidation": { "enabled": true }, // disallow actual garbage color hex codes (e.g. #ab)
"propertyUnits": {
"valid": ["rem", "vw", "em", "px"], // These units are allowed for all properties
"valid": ["rem", "vw", "em", "px", "ch"], // These units are allowed for all properties
"invalid": ["pt"], // The 'pt' unit is not allowed under any circumstances
"properties": {
//"line-height": [] // No units are allowed for line-height

View File

@ -1,3 +1,342 @@
# 5.1.0
## Goals
We had two new members join our team in the time since our previous release.
Mathilde joined us as an administrator of CryptPad.fr, so we decided to put some unplanned time towards the platform's administrative tooling to simplify some common workflows.
Maxime joined us for a summer internship as a front-end developer, and took initiative on a number of popular issues from our tracker on GitHub.
## Update notes
* We applied a minor optimization to CryptPad's caching rules which should result in a slight decrease of many pages' loading times, thanks to some helpful profiling by one of our users.
* We have started implementing a very basic build system for CryptPad which, at the moment, is only responsible for generating a few static HTML pages.
* These pages include the _opengraph_ tags which describe how previews of the page should be rendered in social media posts, messenger applications, and search engine summaries.
* For the moment we haven't configured the system to build distinct pages for every language, so they will include text which is hardcoded in a single language which defaults to English. This can be configured in `config/config.js` (for example: `preferredLanguage: 'de',`). We intend to improve this in the future.
* They also update the content of the page's `<noscript>` tag, which is displayed in the event that the user has disabled JavaScript in their browser. The build system includes every translation of this message that is available, rather than just the English and French translations that were displayed previously.
* We've included some new tests on the checkup page to detect whether these customized pages have been built, and to remind administrators to generate them otherwise (using `npm run build`).
* Because the generated pages are based on the current default versions of these pages, updating to future versions of the software without re-building could result in errors due to outdated code being served. We'll include reminders in the update steps as we do for other common errors.
* In order for the above changes to be effective, you'll need to update your NGINX configuration file. You can use git to see what has changed since v5.0.0 by running `git diff 5.0.0...main ./docs` in the root of your CryptPad repository.
* We've updated the home page to use a distinct version of the CryptPad logo for its main image. This makes it easier to customize the home page itself without impacting the rest of the platform. To override the default image, include your own at `/customize/CryptPad_logo_hero.svg`.
* Finally, a number of admins had opted into inclusion in our public instance directory but had not configured pages for their privacy policy or terms of service, which caused the checkup page to display an error. We've updated this error message to point directly to the relevant documentation, since the previous values were not sufficiently clear.
To update from `5.0.0` to `5.1.0`:
1. Update your reverse proxy configuration to match the settings in our current `./docs/example.nginx.conf` and reload its configuration
2. Stop your API server
3. Fetch the latest code with git
4. Install the latest dependencies with `bower update` and `npm i`
5. Run `npm run build` to generate the new static pages
5. Restart your server
6. Review your instance's checkup page to ensure that you are passing all tests
## Features
* Administration:
* The instance admin panel now features a "Database" tab which makes it possible to generate reports for accounts, documents, and "login blocks". This finally enables administrators to review document and account metadata, archive or restore data, and generally perform actions that used to require specialized knowledge about the platform's data storage formats.
* Since the _Database_ tab identifies accounts by their public signing keys, we made it easier to access these keys by adding a button to support tickets which copies the author's key to your clipboard.
* Thanks to contributors, the platform is now available in Spanish (100%) and European Portuguese (91%).
* We've updated our mermaid integration to [v9.1.7](https://github.com/mermaid-js/mermaid/releases/tag/v9.1.7).
* Spellcheck is now enabled by default in our rich text editor and can be disabled via the settings page in case you have not already done so.
* Our code editor now includes a highlighting module for _asciidoc_ syntax.
* The contact page has been updated to reflect that we have migrated our Mastodon account to [Fosstodon.org/@cryptpad](https://fosstodon.org/@cryptpad)
* Various links throughout the platform have been updated to reflect that we've migrated our documentation from docs.cryptpad.fr to [docs.cryptpad.org](https://docs.cryptpad.org). The old domain now redirects to the new one to preserve compatibility with old instances or any other pages that have linked to it.
* We've updated our issue templates on GitHub to use their new _Issue Forms_ functionality, making it easier to correctly submit a well-formatted bug report or feature request.
* The project's readme now includes a widget indicating the completeness of CryptPad's translations on our Weblate instance.
* We've added a placeholder to pages' basic HTML to make it easier to tell that something is happening before the proper loading screen is displayed.
## Bug fixes
* Thanks to some detailed reports from users of our spreadsheet editor we were able to reproduce an error that caused very large changes to be saved incorrectly. Such changes trigger multi-part messages to be created, but only the first message was correctly sent to the server. The client has now been updated to correctly send each part of the patch.
* The behaviour of the long-form text input editor in our form app was not consistent with markdown-editing interfaces on the rest of the platform, so we enabled the same functionality as elsewhere.
* Administration
* We found that the quantity of support tickets shown for each category was sometimes inaccurate, so we corrected the way this number was computed.
* A change in the internal format of each instance's name, location, and description caused these fields not to be included in telemetry for instances that had opted into the [public instance directory](https://cryptpad.org/instances/). We've corrected this so such instances provide all the necessary information.
* We've corrected some logic for displaying configured URLs for privacy policies, terms of service, and similar resources such that relative URLs are considered relative to the top-level domain (rather than the sandbox domain).
* The "Launch time" value on the admin panel was using a hard-coded rather than the relevant translation, and was not correctly updating when the "Refresh" button was clicked. Both issues have been fixed.
* Members of editing sessions are correctly informed when administrators archive active channels.
* The _Custom limits_ section of the API is now displayed in a somewhat nicer table.
* A flaw in some of the styles for the kanban app made it impossible to add text to an empty card via the usual inline text field UI. Adding placeholder content to this field made the default click events work as expected.
* Dropdowns with text content containing quotes (such as those that could be created in the form app) caused an invalid CSS selector to be constructed, which resulted in rendering issues. Such quotes are now properly escaped.
* We found that some message handlers in CryptPad were receiving and trying to parse messages from unexpected sources (browser extensions). These messages triggered parsing errors which cause CryptPad's error screen to be displayed. We now guard against such messages and ignore them when they are not in the expected format or when they otherwise trigger parsing errors.
* We updated our translation linting script to compare markup and variable substitution patterns across different translations. We identified and fixed quite a few errors (invalid markup, incomplete translations), and expect to have an easier time ensuring consistency going forward.
# 5.0.0
## Goals
This release was centered around two main goals:
1. Implement a new, more modern and minimalist design with rounded corners and simpler colors
2. Remove detailed information about the open-source project from the platform itself and instead host it on the recently deployed project site (https://cryptpad.org)
## Update notes
Recent versions of CryptPad have introduced strict configuration requirements. If you are not already running version `4.14.1` then we recommend you read the notes of our past few releases and apply their updates in sequence. Each version introduces new tests on the checkup page which will help to identify configuration errors that may result in a non-functional server unless corrected.
Version 5.0.0 introduces a new server-side API (`/api/instance`) which serves customized information (server name, description, hosting location) from the admin panel so that it can be displayed on the redesigned home page.
We've done some extra work relative to similar APIs we've introduced in the past to ensure that the client-side code will continue to work without it. The upgrade process should go smoothly even if you fail to apply the suggested updates to your reverse proxy configuration (see `cryptpad/docs/example.nginx.conf`). If this data cannot be retrieved by the client it will fall back to some sensible defaults, but we recommend you take the time to fix it now in case this API ceases to be optional in some future release. The checkup page will identify whether the API is accessible and display an error otherwise.
```diff
diff --git a/docs/example.nginx.conf b/docs/example.nginx.conf
index a2d1cb1ce..23139c58c 100644
--- a/docs/example.nginx.conf
+++ b/docs/example.nginx.conf
@@ -183,7 +183,7 @@ server {
# /api/config is loaded once per page load and is used to retrieve
# the caching variable which is applied to every other resource
# which is loaded during that session.
- location ~ ^/api/(config|broadcast).*$ {
+ location ~ ^/api/.*$ {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
```
To update from `4.14.1` to `5.0.0`:
1. Update your reverse proxy configuration to forward all `/api/` requests to the API server, as per the diff shown above, and reload your reverse proxy config
2. Stop your API server
3. Fetch the latest code with git
4. Install the latest dependencies with `bower update` and `npm i`
5. Restart your server
6. Review your instance's checkup page to ensure that you are passing all tests
## Features
* The most notable feature of this release is its new look: with rounded corners, a more subtle use of colors, and some updated icons.
* As noted above, instance information from the admin panel is now displayed on the home page, making it easier to customize a CryptPad instance without having to edit so many files on the server. In particular, the home page will now display:
1. The instance's configured name or its domain (as a default).
2. The instance's description or a default string.
3. The instance's hosting location (if specified).
4. An optional notice to be displayed as a banner.
* Many of the informational pages have been replaced by a link the project site (cryptpad.org). Links to optional, instance-specific pages like its terms of service, privacy policy, legal notice and contact information are displayed inline, allowing for a smaller footer.
* The drive's directory tree (also shown in teams) can now be resized by dragging its border.
* The checkup page features several new tests, including some which only apply to public instances (a description and location are expected if you have opted into the public instance directory (https://cryptpad.org/instances/).
## Bug fixes
* The font selector in our OnlyOffice-based editors (sheets, docs, presentations) now supports several new fonts, and we've fixed a rendering error which caused the wrong font to be selected when clicking on certain options in the dropdown list (https://github.com/xwiki-labs/cryptpad/issues/898).
* Clicking on an option in the user administration menu (in the top-right corner) didn't automatically close the menu in some cases because some browsers emitted an event while others did not. We now explicitly close this menu when any of its options are clicked.
* We now guard against a type error that occurred when trying to generate a list of documents to "pin" while shared folders were still in the process of synchronizing.
* Thanks to a user report we identified that when a premium user uploaded to a non-premium team the error message incorrectly indicated that the uploaded file exceeded the premium size limit (rather than the non-premium size limit). This resulted in confusing behaviour where a 30MB file was described as being over the 150MB file upload limit. We've updated the resulting error message to display the appropriate size limit and indicate that it is relative to the target drive or team, rather than the user's account.
* Another user reported that they had trouble exporting OnlyOffice documents that contained certain unprintable control characters in their file names. We now remove those unprintable characters when exporting.
* We noticed that very long messages in team invitation links could overflow their container, so we fixed its incorrect styles.
* We observed that some third-party instances had been incorrectly configured such that when they entered an editor's URL (such as `/pad`) they only observed a blank page rather than being redirected to the appropriate URL which contained a trailing slash (ie. `/pad/`). We've added a script which detects such cases and redirects to the appropriate URL if it exists.
# 4.14.1
This minor release fixes a number of bugs that we noticed after deploying 4.14.0.
* A bug in the code responsible for loading document metadata caused documents to be incorrectly treated as if they had no owners. As a result, several options in the Drive's UI did not work as expected:
* owned documents could not be destroyed from the access menu.
* document passwords could not be changed from the access menu.
* document history could not be trimmed from the properties menu.
* We also found that some components did not behave as expected in the Drive UI while in history mode:
* it was not possible to open shared folders' menus (properties, share, access) to view what their properties were in the past (in the event that they had been deleted or had their passwords changed).
* shared folders names were not correctly displayed even when their data was available.
* Some last minute changes to the checkup page before the 4.14.0 release caused a default error message to be incorrectly concatenated with the intended error message for each failing test.
* A rule in one of our translation linting scripts incorrectly flagged the "ise" in the word "milliseconds" as an instance of the UK-English "-ise" suffix (we use "-ize" elsewhere).
* An admin of a third-party instance found that they were unable to load their checkup page. As it turned out, they were trying to access it via `/checkup` instead of `/checkup/`. We've updated our example NGINX config to rewrite this URL to include the trailing slash.
* Some of the comments in `cryptpad/config/config.example.js` were outdated or incorrect and have been removed or corrected.
* The "About CryptPad" now correctly accepts handles custom links provided as protocol-relative URLs.
* A number of pages did not set custom titles and instead used the default "CryptPad". They now update the document title, making it possible to distinguish between such pages when you have multiple tabs open.
* The forms and kanban apps both allow users to write content in Markdown, but did not always display the toolbar above their editors. This was because they inferred the user's preferred editor configuration based on whether they had collapsed the toolbar in the code editor. Since these apps don't offer an easy way to display the toolbar once more, we decided that it was better to just display it all the time.
We've also merged a few significant improvements:
* The Polish translation was updated by Dariusz Laska.
* A significant percentage (currently 66%) of the Ukrainian translation has also been completed and enabled.
* We've updated Mermaidjs to version 9.0.0, which fixes a number of bugs and also introduces support for [`gitGraph` diagrams](https://mermaid-js.github.io/mermaid/#/gitgraph?id=gitgraph-diagrams)
* Users on cryptpad.fr will no longer be warned that they are leaving the platform when they open a link to our documentation. Users on third-party instances will continue to see the usual warning, since they really are navigating to a site operated by different admins.
Our `4.14.0` release notes introduced breaking changes. If you are not already running `4.14.0` we recommend updating to that first, then updating to `4.14.1` once you've confirmed that you are correctly passing all the tests on your instance's checkup page.S
To do so:
1. Stop your server
2. Get the latest code with git
3. Install the latest dependencies with `bower update` and `npm i`
4. Restart your server
5. Review your instance's checkup page to ensure that you are passing all tests
# 4.14.0
## Goals
Our main goal for this release was to follow up on some of the findings of the [Intigriti](https://www.intigriti.com/) bug bounty program that was [sponsored by the European Commission](https://ec.europa.eu/info/news/european-commissions-open-source-programme-office-starts-bug-bounties-2022-jan-19_en). We also aimed to deploy some features that we want to have in place before the deployment of our upcoming 5.0 release and a corresponding update to our project site ([cryptpad.org](https://cryptpad.org)). You can read more about all of this in [our latest blog post](https://blog.cryptpad.org/2022/03/29/March-2022-status-catching-up-on-recent-news/).
## Update notes
This release includes **BREAKING CHANGES**, especially if you have not configured your instance correctly. We advise that you read the following section carefully and follow its recommendations as closely as possible if you operate your own CryptPad instance.
First, some review: CryptPad is designed to be deployed using two domains. One is the primary domain which users enter into their address bar, while the second is a "sandbox" that is loaded indirectly. Sensitive operations like cryptographic key management are performed in the scope of the primary domain, while the sandbox is used to load the majority of the platform's UI. If there is a vulnerability in the sandbox, it is at least limited in scope because of measures we've taken to prevent it from accessing user accounts' keys. We initially introduced this system [nearly five years ago](https://blog.cryptpad.org/2017/08/30/CryptPad-s-new-Secure-Cross-Domain-Iframe/), it is described in [our admin installation guide](https://docs.cryptpad.org/en/admin_guide/installation.html#domains), and we've done our best to make sure admins are aware of its importance. Even so, only a small number of our admins follow our recommendations.
Since we've tried every other option we could think of to inform administrators of the risks of storing sensitive data on a misconfigured CryptPad instance, we are now adopting a more drastic policy where correct behaviour is _enforced_ in the code itself. What that means for admins is that if you fail to implement configuration parameters which we consider essential, then various parts of the codebase will detect this and _refuse to operate_.
If your instance is configured correctly, then this shouldn't impact you at all. If you're worried that you might be impacted, then the best course of action is to update to 4.13.0 (the previous release, if you aren't already running it) and to follow its recommendation to review the checkup page and ensure that your instance passes its self-diagnostic tests. _4.14.0_ introduces a large number of new tests, but those that were already present in 4.13.0 should identify the major issues that will prevent your instance from loading after the update.
Now, a bit about the situations in which CryptPad will fail to load:
* if CryptPad is loaded via any origin that does not match its configured `httpUnsafeOrigin`, then it will abort.
* hint: for cryptpad.fr, this value is `https://cryptpad.fr`
* if CryptPad's sandbox does not correctly block the use of `eval`, then it will abort.
* the use of `eval` is blocked by the recommended `Content-Security-Policy` headers. These strict headers are applied to most resources loaded from the _sandbox origin_.
* hint: for cryptpad.fr the `httpSafeOrigin` is `https://sandbox.cryptpad.info`, while our NGINX sets `$sandbox_domain` to `sandbox.cryptpad.info`.
* if CryptPad is loaded in a browser that does not enforce `Content-Security-Policy` (such as Internet Explorer or any other browser using a non-compliant configuration) then it will abort.
* if CryptPad is embedded within an iframe and you have not explicitly enabled embedding via the admin panel (more on that later) it will abort.
* if any CryptPad application that requires special permissions (drive, calendar, sheet, doc, presentation) is loaded in an iframe then it will abort.
The reasons for blocking embedding will be described in the _Features_ section below, so keep reading if you're curious.
We're also recommending a few more updates, but we don't expect that these will stop the service from loading:
* NodeJS `v12.14.0` (which we have recommended for some time) will be considered _End-Of-Life_ as of April 30th.
* We recommend updating to [NodeJS v16.14.2](https://nodejs.org/en/download/) via [NVM](https://github.com/nvm-sh/nvm).
* The API server will check the version of its runtime when it launches. It will print a warning to your server logs and set a public flag in `/api/config` indicating that it should be updated. There is a corresponding test on the checkup page which checks for the presence of this flag for admins that aren't in the habit of reviewing their logs.
* The recommended NGINX config file also includes some minor changes. You can compare the current version (in `cryptpad/docs/example.nginx.conf`) against your live config with a diff tool. There are also new tests on the checkup page which will identify whether the newly changed headers have been correctly applied.
* There are updates to our dependencies using both `npm` and `bower`.
* There are a number of new configuration parameters that can be customized via `application_config.js`. Some are optional. A number of other parameters, such as URLs for a privacy policy and terms of service, will be expected if your instance permits registration. The checkup page will display warnings if these are absent. Configuration via `application_config.js` is described in [our docs](https://docs.cryptpad.org/en/admin_guide/customization.html#application-config).
We've also made a number of changes and additions to the instance admin panel:
* controls for archiving and restoring documents can now be found under _User storage_, rather _General_.
* Both sections now include an optional "note" field, allowing admins to specify the reason why a document was archived/restored. This value will be included in the server's logs.
* the _Performance_ tab now includes two new settings which permit admins to enable a new API endpoint (`/api/profiling`) which exposes some live performance data as JSON endpoint. If you don't know what this means you probably don't need it.
* The admin support ticket panel now responds somewhat more quickly thanks to some sorting optimizations.
* The _General_ tab now includes three new fields (instance name, instance description, hosting location).
* These are primarily intended for admins who have opted in to inclusion in the directory of public instances which we plan to deploy along with our next release.
* In the future we hope to use these values on the home page as well, making it easier to customize your instance.
To update from 4.13.0 to 4.14.0:
0. Before updating, review your instance's checkup page to see whether you have any unresolved issues
1. Install NodeJS v16.14.2
2. Update your systemd service file (or whatever method you use to launch CryptPad) to use the newer NodeJS version
3. Update your NGINX configuration file to match the provided example
4. Stop your server
5. Get the latest code with git
6. Install the latest dependencies with `bower update` and `npm i`
7. Restart your server
8. Confirm that your instance is passing all the tests included on the `/checkup/` page (on whatever devices you intend to support)
## Features
* Embedding of CryptPad in iframes on third-party websites is now disabled by default because doing so prevents a number of possible attacks in cases of overly permissive HTTP headers.
* CryptPad's editors will only load properly if the instance is explicitly configured via the admin panel to permit this behaviour.
* Even where embedding is enabled, the properties, share, access, and insert menus are disabled. Attempts to use them cause a dialog to open which prompts users to open the current document/page in a dedicated tab/window.
* The _embed_ tab of the share menu (which generates code for embedding CryptPad documents in third-party sites) is only shown if the instance administrators have enabled embedding.
* More information about the host instance is included in the _About CryptPad_ dialog which can be opened via the account administration menu in the top-right corner of the screen.
* specifically: it now displays the same configurable instance description which is displayed on the home page, as well as links to the instance's terms of service and source code (if they are available).
* The support page has a number of new features:
* A new tab is accessible via the left sidebar which displays a preview of the metadata which is included along with support tickets.
* We revised the ticket categories which are listed in the dropdown menu. Users are prompted to choose a category. Once a category is chosen, more specific information is automatically requested with links to the relevant documentation.
* The login page now features a reminder that _administrators cannot reset passwords or recover accounts_.
* Tracking parameters are automatically removed from the address bar after the page loads for cases where a third-party tool automatically added them.
* Calendars in the sidebar of the calendar app are now sorted according to their title.
* The checkup page features many new tests and improvements:
* Errors are now sorted above warnings.
* Errors and warnings are each sorted according to their test number.
* In cases where multiple tests need to inspect the HTTP headers of a common resource, the resource is only requested once and subsequent requests access it from a cache, speeding up loading time and reducing network usage.
* The _Server header_ is displayed in the page summary if it is available.
* The tests for CSP headers now describe the failures of _each misconfigured CSP directive_, rather than just the first one to fail.
* Warnings are displayed for each of several important resources (privacy policy, terms of service, etc) when the instance allows registration but has not provided this information for new users.
* Our test runner catches synchronously thrown errors and tries to display helpful messages.
* Tests will time out after 25 seconds to ensure that the set of tests eventually completes.
* A new script is executed before CryptPad's bootloader which should detect and handle bootloader errors such as missing dependencies or unreachable API endpoints.
## Bug fixes
* The checkup page now handles and error that occurred when trying to parse CSP headers that were not provided (trying to parse `null` as a string).
* The form app allowed authors to specify links (via markdown) in questions' descriptions and the form's submit message, but none of these links used CryptPad's typical link click handler. As a result these links failed to open.
* Links specified on users' profile pages are opened via the _bounce_ app, which warns users when a link will navigate outside CryptPad and blocks links which are clearly malicious in nature (trying to execute code).
* We discovered and fixed a deadlock that occurred in cases where users tried to download a folder that contained multiple Office documents.
* The drive's _history mode_ now displays the appropriate document id in the properties menu in cases where an earlier version of a document had a different id (due to a password change).
* During development of a new feature we discovered that the server could respond to HTTP requests with _stack traces_ in cases where the request triggered an error. These responses could contain information about the server's directory structure, so we now handle these errors and send the client a page indicating that there was an internal server error.
* Attempting to convert office documents could mistakenly trigger two concurrent downloads of the client-side conversion engine. Now it is only downloaded once, so conversion should be roughly twice as fast for cases where the WebAssembly blob was not already cached.
* A number of users reported various actions which could cause documents in their team drives to be duplicated. These duplicated entries are _references to the same document as the original_, not complete copies, so care should be taken **not to use the destroy option** when removing them from your drive. If a user accidentally destroys a document then it should be possible for an administrator to restore its content via the admin panel if the user can provide a [safe link](https://docs.cryptpad.org/en/user_guide/user_account.html?highlight=safe%20link#confidentiality) that they can find using the drive's _history mode_.
# 4.13.0
## Goals
For this release we set aside time to update a number of our software dependencies and to investigate a variety of bugs that had been reported in support tickets.
We have also been coordinating with security researchers through a bug bounty program hosted by [Intigriti.com](https://intigriti.com) and sponsored by the European Commission. This release includes security fixes and a number of new tests on the checkup page to help ensure that your instance is configured in the most secure manner possible. We recommend you read these notes thoroughly to ensure you update correctly.
## Update notes
4.13.0 includes significant changes to the _Content-Security-Policy_ found in the example NGINX configuration which we recommend ([available on GitHub](https://github.com/xwiki-labs/cryptpad/tree/main/docs/example.nginx.conf)). The updated policy only allows client behaviour which is strictly necessary for clients to work correctly, and is intended to be resilient against misconfiguration beyond the scope of this file. For instance, rather than simply allowing clients to connect to a list of permitted domains we are now explicit that those domains should only be accessible via HTTPS, in case the administrator was incorrectly serving unencrypted content over the same domain. These changes will need to be applied manually.
Several of the new tests on the checkup page (`https://your-instance.com/checkup/`) evaluate the host instance's CSP headers and are very strict about what is considered correct. These settings are a core part of CryptPad's security model, and failing to configure them correctly can undermine its encryption by putting users at risk of cross-site-scripting (XSS) vulnerabilities.
To update from 4.12.0 or 4.12.1 to 4.13.0:
0. Before updating, review your instance's checkup page to see whether you have any unresolved issues
1. Update your NGINX configuration file to match the provided example
2. Stop your server
3. Get the latest code with git
3. Install the latest dependencies with `bower update` and `npm i`
4. Restart your server
5. Confirm that your instance is passing all the tests included on the `/checkup/` page (on whatever devices you intend to support)
## Features
* This release updates OnlyOffice to v6.4.2, which includes a wide variety of improvements and bug fixes, such as:
* dark mode
* conditional formatting in sheets
* fixes for various font and scaling issues
* numerous other issues mentioned in [OnlyOffice's changelog](https://github.com/ONLYOFFICE/DocumentServer/blob/master/CHANGELOG.md#642)
* We switched from using our fork of Fabricjs back to the latest version of the upstream branch, since the maintainers had resolved the cause of an incompatibility with our strict _Content Security Policy_ settings. Among other things, this brought improved support for a variety of pressure-sensitive drawing tablets when using our whiteboard app.
* Mermaidjs (https://mermaid-js.github.io/mermaid/#/) has been updated to the version (8.13.10) which:
* includes fixes a number of possible security flaws which should not have had any effect due to our CSP settings
* introduces support for several new diagram types (entity relationship, requirement diagrams, user journeys)
* adds support for dark mode and more modern styles
* ~~We've begun to experiment with additional iframe sandboxing features to further isolate common platform features (sharing, access controls, media transclusion, upload) from the apps that can trigger their display. These measures should be mostly redundant on CryptPad instances with correctly configured sandboxes, but may help mitigate unexpected risks in other circumstances.~~
* these improvements were disabled because they were handled incorrectly by Safari
* We've added the ability for guests to edit calendars when they have the appropriate editing rights
* A number of groups and individuals volunteered to help translate CryptPad into more languages or complete translations of languages that had fallen out of date. We are happy to say that CryptPad is now fully translated in Russian, Brazilian Portuguese, Czech, and Polish.
## Bug fixes
* 4.13.0 fixes a number of security issues:
* There were several instances where unsanitized user input was display as HTML in the UI. This had no effect on instances with correctly configured CSP headers, but could have been leveraged by attackers to run scripts on other users devices where these protections were not applied.
* The 'bounce' page (which handles navigation from a CryptPad document to another page) didn't warn users when they were leaving CryptPad (a flaw known as an 'open redirect'). We now detect and warn users of redirection to untrusted pages, reducing the risk of phishing attacks. Some users have complained that they find this new behaviour annoying, but it's there to make the platform safer by default.
* We've updated the protocol through which our cross-domain sandboxing system communicates with content served on the main domain so that it completely ignores messages from untrusted sources and refuses to communicate to other contexts unless they are explicitly trusted by the platform. Because of these restrictions it is possible that misconfigured instances will fail to load or otherwise behave incorrectly. Once again, there are tests on the checkup page designed to help identify these configuration issues, so please do take advantage of them.
* Some code which was intended to prompt guests to log in or register when viewing a shared folder stopped working due to some changes in a past release. We now correctly identify when these guests have edit rights, and instead of simply displaying the text **READ ONLY** we prompt them with instructions on how to make full use of the rights they've been given.
* We fixed some border styles on the horizontal dividers that are sometimes shown in dropdown menus such that consecutive dividers beyond the first are hidden.
* One of our developer dependencies (`json-schema`) has been updated to fix a prototype pollution bug which should not have had any impact on anyone in practice.
* A user reported that including `__proto__` as the language in fenced code blocks in a markdown document triggered an error, so we now guard against this case.
* We've fixed a few issues related to templates:
* after creating a template in a team drive, clicking the store button would store it in your own drive
* the creation of a template from a password-protected sheet did not correctly use the source sheet's password
* Thanks to some user reports we discovered some possible type errors that could occur when migrating some account data to a newer internal version.
* We disabled some unmaintained client-side tests after discovering that they were throwing errors under certain conditions, seemingly due to some browser regressions.
* We updated some code to handle uploading dropped folders in the drive. Unfortunately this type of "drop" event has to be handled differently than when a folder is uploaded through other means, and Opera browser doesn't support the required APIs, so this is only supported in Firefox and Chromium-based browsers.
* When previewing uploaded media we now supply the file object rather than its raw buffer contents which were not supported for all media types.
* We've fixed numerous issues with forms:
* layout issues with buttons displayed in forms' author mode
* the configured options for certain types of questions are reprocessed when you convert between related question types (multi-checkbox, multi-radio) with options being set back to their defaults when configurations are rendered invalid
* editing status is recovered whenever possible if autosave interrupts user activity
* Finally, we've fixed a number of issues specific to our integration of OnlyOffice's editors:
* we now guard against some possible type errors if the metadata required for sharing cursor and selection data is absent or poorly formed
* we do our best to recover your old cursor position if the document needs to be reloaded after a checkpoint
* some special cases of image inclusion are now handled in the presentation editor
* we ensure that images are correctly loaded when exporting, including embedded media and theme backgrounds in presentations
* the chart and table buttons were temporarily disabled in OnlyOffice's toolbar due to some incompatibilities which have since been resolved
* we now avoid creating duplicated network handlers when reconnecting to an office editing session
# 4.12.1
This minor release contains a few bug fixes based on feedback we received and adjustments to prepare for the update to OnlyOffice 6.4.
@ -63,9 +402,9 @@ We've also updated the checkup page to test for the expected server behaviour an
Our team has limited resources, so we've chosen to introduce the new (and **experimental**) office editors gradually to avoid getting overwhelmed by support tickets as was the case when we introduced the current spreadsheet editor in 2019. In order to support this we've implemented an **early access** system which _optionally_ restricts the use of these editors to premium subscribers. We will enable this system on CryptPad.fr, but admins of independent instances can enable them at their discretion.
To enable the use of the OnlyOffice Document and Presentation editor for everyone on your instance, edit your [customize/application_config.js](https://docs.cryptpad.fr/en/admin_guide/customization.html#application-config) file to include `AppConfig.enableEarlyAccess = true;`.
To enable the use of the OnlyOffice Document and Presentation editor for everyone on your instance, edit your [customize/application_config.js](https://docs.cryptpad.org/en/admin_guide/customization.html#application-config) file to include `AppConfig.enableEarlyAccess = true;`.
If you wish to avoid a rush of support tickets from your users by limiting early access to users with custom quota increases, add another line like so `Constants.earlyAccessApps = ['doc', 'presentation'];`.
If you wish to avoid a rush of support tickets from your users by limiting early access to users with custom quota increases, add another line like so `AppConfig.premiumTypes = ['doc', 'presentation'];`.
As these editors become more stable we plan to enable them by default on third-party instances. Keep in mind, these editors may be unstable and users may lose their work. Our team will fix bugs given sufficient information to reproduce them, but we will not take the time to help you recover lost data unless you have taken a support contract with us.
@ -126,7 +465,7 @@ To update from 4.10.0 to 4.11.0:
* The term "Anonymous" was only ever intended to convey the classical sense of the word ("without name or attribution") rather than the stricter modern sense "indistinguishable from a meaningfully large set of other individuals". To be clear, this is a change of terminology, not behaviour. To prevent your IP address from being revealed to the host server while using CryptPad the best option has always been, and continues to be [Tor browser](https://www.torproject.org/download/).
* Going forward, if you see "anonymize" in CryptPad (such as in forms), you can take it to mean that extra efforts are being taken to make protocol-level metadata indistinguishable from that of other users, while "Guest" means only that you haven't registered or have removed your display name.
* While we were reconsidering the notion of guest accounts we decided that it would be useful to be able to distinguish one guest from another. We decided to implement this by hooking into the existing system for displaying users' profile pictures by mapping a list of emojis to guests' randomly generated identifiers.
* We chose a list of emojis that we hoped nobody would find objectionable ('🙈 🦀 🐞 🦋 🐬 🐋 🐢 🦉 🦆 🐧 🦡 🦘 🦨 🦦 🦥 🐼 🐻 🦝 🦓 🐄 💮️ 🐙️ 🌸️ 🌻️ 🐝️ 🐐 🦙 🦒 🐘 🦏 🐁 🐹 🐰 🦫 🦔 🐨 🐱 🐺 👺 👹 👽 👾 🤖'), but we realize that cultures and contexts differ widely. As such, we've made this configurable on a per-instance basis. A custom list of emojis can be set in `customize/application_config.js` as an array of single-emoji strings (`AppConfig.emojiAvatars = ['🥦', '🧄', '🍄', '🌶️'];`) or as an empty array if you prefer not to display any emojis (`AppConfig.emojiAvatars = [];`). See [our admin docs](https://docs.cryptpad.fr/en/admin_guide/customization.html#application-config) for more info on customization.
* We chose a list of emojis that we hoped nobody would find objectionable ('🙈 🦀 🐞 🦋 🐬 🐋 🐢 🦉 🦆 🐧 🦡 🦘 🦨 🦦 🦥 🐼 🐻 🦝 🦓 🐄 💮️ 🐙️ 🌸️ 🌻️ 🐝️ 🐐 🦙 🦒 🐘 🦏 🐁 🐹 🐰 🦫 🦔 🐨 🐱 🐺 👺 👹 👽 👾 🤖'), but we realize that cultures and contexts differ widely. As such, we've made this configurable on a per-instance basis. A custom list of emojis can be set in `customize/application_config.js` as an array of single-emoji strings (`AppConfig.emojiAvatars = ['🥦', '🧄', '🍄', '🌶️'];`) or as an empty array if you prefer not to display any emojis (`AppConfig.emojiAvatars = [];`). See [our admin docs](https://docs.cryptpad.org/en/admin_guide/customization.html#application-config) for more info on customization.
* Users can edit their display name inline in the user list or on their settings page, in which case their avatar will be one or two letters from their name (their first two initials if their name contains at least one space, otherwise the first two letters of their name).
* Once these initial improvements had been made to the user list, the lack of support for emoji avatars in a number of places felt very conspicuous, so we've done our best to implement them consistently across every social aspect of the platform. Default emoji avatars are also displayed in comments in the rich text editor, in authorship data in our code/markdown editor, in tooltips when you hover over the marker for remote users' cursor location, in the "currently editing" indicator for Kanban cards, in the share and access menus, and in the "contacts" app.
* The file upload dialog now includes a preview of the media that you are about to upload (as long as it's something CryptPad is capable of displaying) as well as a text field for describing the media. Descriptive text is added to the file's encrypted metadata and is applied to rendered media as `alt` or `title` attributes wherever applicable. This coincides with a broader effort to improve keyboard navigation and add support for screen-readers.
@ -176,7 +515,7 @@ It seems that some browser developers thought to do the same thing, because we n
## Update notes
4.10.0 includes some minor changes to [the checkup page](https://docs.cryptpad.fr/fr/admin_guide/installation.html#diagnostics). Some admins have included screenshots of this page in bug reports or requests for support along with details of problems they suspect of being related. Because we've observed that the root of many issues is the browser (sometimes in addition to the server) we have decided to include details about the browser in this page's summary.
4.10.0 includes some minor changes to [the checkup page](https://docs.cryptpad.org/fr/admin_guide/installation.html#diagnostics). Some admins have included screenshots of this page in bug reports or requests for support along with details of problems they suspect of being related. Because we've observed that the root of many issues is the browser (sometimes in addition to the server) we have decided to include details about the browser in this page's summary.
Up until now the checkup page only tested observable behaviour of the server such as HTTP headers on particular resources, configuration parameters distributed to the client, and the availability of essential resources. This practice meant that a report for an instance should have been the same regardless of the device that was used to generate the report. In light of a serious regression in Chrome (and all its derivatives) we decided that objectiveness was less important than utility and introduced some tests which check whether the client running the diagnostics interprets the provided server configuration. Terrible browsers (ie. every browser that is available on iOS) will fail these tests every time because they don't implement the expected APIs, but we've tried to detect these cases and warn that they are expected.
@ -233,7 +572,7 @@ We allocated most of this release cycle towards a schedule of one-on-one user in
It appears our promotion of the checkup page through our recent release notes and the inclusion of a link to it from the instance admin have been moderately successful. We've observed that more instance admins are noticing and fixing some common configuration issues.
This release features some minor changes to one instance configuration test which incorrectly provided an exemption for the use of `http://localhost:3000` as an `httpUnsafeOrigin` value. This exemption was provided because this value is valid for local development. However, it suppressed errors when this configuration was used for production instances where it could cause a variety of problems. As usual, we recommend checking your instance's admin page after updating to confirm that you are passing the latest tests. Information about the checkup page is included in [our documentation](https://docs.cryptpad.fr/en/admin_guide/admin_panel.html#network).
This release features some minor changes to one instance configuration test which incorrectly provided an exemption for the use of `http://localhost:3000` as an `httpUnsafeOrigin` value. This exemption was provided because this value is valid for local development. However, it suppressed errors when this configuration was used for production instances where it could cause a variety of problems. As usual, we recommend checking your instance's admin page after updating to confirm that you are passing the latest tests. Information about the checkup page is included in [our documentation](https://docs.cryptpad.org/en/admin_guide/admin_panel.html#network).
To update from 4.8.0 to 4.9.0:
@ -431,7 +770,7 @@ This release includes very few new features aside from those already mentioned i
## Goals
This release cycle we aimed to complete three major milestones: the official release of our calendar app, the ability for admins to close registration on their instance, and the deployment of the admin section of our [official documentation](https://docs.cryptpad.fr/en/admin_guide/index.html). We spent the remainder of our time addressing a growing backlog of issues on GitHub by fixing a number of weird bugs.
This release cycle we aimed to complete three major milestones: the official release of our calendar app, the ability for admins to close registration on their instance, and the deployment of the admin section of our [official documentation](https://docs.cryptpad.org/en/admin_guide/index.html). We spent the remainder of our time addressing a growing backlog of issues on GitHub by fixing a number of weird bugs.
## Update notes
@ -627,7 +966,7 @@ To update from 4.1.0 to 4.2.0:
* We've reverted the styles for the rich text editor so that the document always has a white background, even in dark mode, since we could not guarantee that documents would be legible to all users if custom text colors had been applied. While we were looking at this editor, we also repositioned several buttons used to control the page's layout, including the width of the document, the presence of the table of contents, and its comments.
* We've continued to improve several key parts of the platform to accommodate offline usage. Teams, shared folders within teams, and the file app can now load and display content cached within the browser even if the client cannot establish a connection to our API server.
* The content of _whiteboard_ documents can now be downloaded directly from within team or user drives, rather than exclusively from within the whiteboard editor itself. To do so, right-click a whiteboard and choose _download_ to export a PNG file.
* Since we now regularly serve more than 125 thousand visitors a week it's gotten quite difficult to keep up with support tickets. To help alleviate this burden we're taking steps to increase the visibility of our documentation (https://docs.cryptpad.fr). The support ticket page now displays a link to that documentation above the form to create a new ticket.
* Since we now regularly serve more than 125 thousand visitors a week it's gotten quite difficult to keep up with support tickets. To help alleviate this burden we're taking steps to increase the visibility of our documentation (https://docs.cryptpad.org). The support ticket page now displays a link to that documentation above the form to create a new ticket.
* Several users have reported confusion regarding various password fields in CryptPad, in the access menu, pad creation screen, when uploading new files, and when creating a shared folder. We've updated the text associated with these fields to better indicate that they are not requesting your user password, but rather that they allow you to add an optional password as an additional layer of protection.
* Server administrators can now refresh the _performance_ table on the admin panel without reloading the page.
* We've begun working on a _checkup_ page for CryptPad to help administrators identify and fix common misconfigurations of the platform. It's still in a very basic state, but we hope to to make it a core part of the server installation guide that is under development.
@ -745,7 +1084,7 @@ To update from 3.25.1 to 4.0.0:
Finally, the "rebrand" part of this release:
* Our home page features our new logo, a cleaner layout, new text (notably dropping the use of "zero-knowledge" from our explanation), new app icons, softer colors, neater fonts, and a custom illustration of a document shredder that hints at how CryptPad works.
* We no longer include a FAQ page with each instance, and instead link to relevant parts of our dedicated documentation platform (https://docs.cryptpad.fr) from any place that previously referenced the FAQ. This will make it easier for translators to focus on text for the platform's interface if they wish. An updated Frequently Asked Questions will be added to the documentation in the near future.
* We no longer include a FAQ page with each instance, and instead link to relevant parts of our dedicated documentation platform (https://docs.cryptpad.org) from any place that previously referenced the FAQ. This will make it easier for translators to focus on text for the platform's interface if they wish. An updated Frequently Asked Questions will be added to the documentation in the near future.
* Each of our editors now features a dedicated favicon to make it easier to distinguish different CryptPad tabs in your browser.
* The contact page now points to _Element_ instead of Riot, since the Matrix team rebranded in the last while as well.
* The "pricing" or "features" page (features.html) reads the server's configured storage limits from a server endpoint and displays them, rather than hardcoding the default values in the text.
@ -1051,7 +1390,7 @@ This release was developed over a longer period than usual due to holidays, our
We've had a few disgruntled administrators contact us about our apparent _failure to provide a docker image_ or to otherwise support their preferred configuration. With that in mind, this is a periodic reminder that CryptPad is provided to the public under the terms of the AGPL (found within this repository in the [LICENSE file](./LICENSE)) which implies on our part no warranty, liability, or responsibility to configure your server for you. We do our best to provide the necessary information to correctly launch your own instance of the software given our limited budget, however, all such files are provided **AS IS** and are only intended to function under the narrow circumstances of usage which we recommend within the comments of the provided example configuration files.
With that said, the vast majority of our community acts kindly and courteously towards us and each other. We really do appreciate it, and we'll continue to help you to the best of our ability. With that in mind, we're happy to announce that we've written and deployed a first version of our user guide, available at https://docs.cryptpad.fr. The work that went into this was funded by NLnet foundation as an NGI Zero PET (Privacy-Enhancing Technology) grant. We are currently working on two more guides intended for developers and administrators, and will deploy them to the same domain as they are completed. In the meantime we have begun to update our README, GitHub wiki, and other resources to reflect the current recommended practices and remove references to unsupported configurations.
With that said, the vast majority of our community acts kindly and courteously towards us and each other. We really do appreciate it, and we'll continue to help you to the best of our ability. With that in mind, we're happy to announce that we've written and deployed a first version of our user guide, available at https://docs.cryptpad.org. The work that went into this was funded by NLnet foundation as an NGI Zero PET (Privacy-Enhancing Technology) grant. We are currently working on two more guides intended for developers and administrators, and will deploy them to the same domain as they are completed. In the meantime we have begun to update our README, GitHub wiki, and other resources to reflect the current recommended practices and remove references to unsupported configurations.
If you're only reading this for instructions on how to update your instance from 3.20.1 to 3.21.0:

View File

@ -18,7 +18,7 @@
"tests"
],
"dependencies": {
"jquery": "2.2.4",
"jquery": "3.6.0",
"tweetnacl": "0.12.2",
"components-font-awesome": "^4.6.3",
"ckeditor": "4.14.0",
@ -27,7 +27,6 @@
"marked": "1.1.0",
"rangy": "rangy-release#~1.3.0",
"json.sortify": "~2.1.0",
"secure-fabric.js": "secure-v1.7.9",
"hyperjson": "~1.4.0",
"chainpad-crypto": "^0.2.0",
"chainpad-listmap": "^1.0.0",
@ -46,13 +45,13 @@
"croppie": "^2.5.0",
"sortablejs": "^1.6.0",
"saferphore": "^0.0.1",
"jszip": "Stuk/jszip#^3.1.5",
"jszip": "3.7.1",
"requirejs-plugins": "^1.0.3",
"dragula.js": "3.7.2",
"MathJax": "3.0.5"
},
"resolutions": {
"bootstrap": "^v4.0.0",
"jquery": "2.2.4"
"jquery": "3.6.0"
}
}

View File

@ -11,7 +11,7 @@
Support requests for such setups should be directed to their authors.
If you're having difficulty difficulty configuring your instance
we suggest that you join the project's IRC/Matrix channel.
we suggest that you join the project's Matrix channel.
If you don't have any difficulty configuring your instance and you'd like to
support us for the work that went into making it pain-free we are quite happy
@ -45,21 +45,13 @@ module.exports = {
* In such a case this should be also handled by NGINX, as documented in
* cryptpad/docs/example.nginx.conf (see the $main_domain variable)
*
* Note: you may provide multiple origins for the purpose of accessing
* a development instance via different URLs, like so:
* httpUnsafeOrigin: 'http://127.0.0.1:3000/ http://localhost:3000/',
*
* Such configuration is not recommended for production instances,
* as the development team does not actively test such configuration
* and it may have unintended consequences in practice.
*
*/
httpUnsafeOrigin: 'http://localhost:3000',
/* httpSafeOrigin is the URL that is used for the 'sandbox' described above.
* If you're testing or developing with CryptPad on your local machine then
* it is appropriate to leave this blank. The default behaviour is to serve
* the main domain over port 3000 and to serve the content over port 3001.
* the main domain over port 3000 and to serve the sandbox content over port 3001.
*
* This is not appropriate in a production environment where invasive networks
* may filter traffic going over abnormal ports.
@ -70,6 +62,9 @@ module.exports = {
* This value corresponds to the $sandbox_domain variable
* in the example nginx file.
*
* Note that in order for the sandboxing system to be effective
* httpSafeOrigin must be different from httpUnsafeOrigin.
*
* CUSTOMIZE AND UNCOMMENT THIS FOR PRODUCTION INSTALLATIONS.
*/
// httpSafeOrigin: "https://some-other-domain.xyz",
@ -115,12 +110,15 @@ module.exports = {
* To give access to the admin panel to a user account, just add their public signing
* key, which can be found on the settings page for registered users.
* Entries should be strings separated by a comma.
* adminKeys: [
* "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]",
* "[cryptpad-user2@my.awesome.website/jA-9c5iNuG7SyxzGCjwJXVnk5NPfAOO8fQuQ0dC83RE=]",
* ]
*
*/
/*
adminKeys: [
//"[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]",
],
*/
/* =====================
* STORAGE

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html class="cp" id="four-oh-four">
<html id="four-oh-four">
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
<head>
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>

View File

@ -1,16 +1,16 @@
<!DOCTYPE html>
<html class="cp">
<html id="five-hundred">
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
<head>
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<script async data-bootload="/customize/four-oh-four.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
</head>
<body class="html">
<noscript>
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
</noscript>
</html>
<noscript>
<h1>500</h1>
<h3>Internal server error</h3>
</noscript>

View File

@ -0,0 +1,22 @@
<svg width="280" height="349" version="1.1" viewBox="0 0 74.083 92.34" xmlns="http://www.w3.org/2000/svg" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb">
<g>
<g transform="translate(-640.42 -172.99)" style="fill:#ffffff">
<g style="fill:#ffffff">
<path d="m644.02 176.9h44.386l22.414 20.826v24.899c0 26.166-21.414 32.228-33.117 38.409-12.815-5.8945-32.794-12.329-33.117-38.409z" style="fill:#ffffff"/>
</g>
<g style="fill:#ffffff">
<path d="m644.02 176.9h44.386l22.414 20.826v24.899c0 26.166-21.414 32.228-33.117 38.409-12.815-5.8945-32.794-12.329-33.117-38.409z" style="fill:#ffffff"/>
</g>
</g>
<g transform="translate(-125.38 -26.449)">
<path d="m128.98 30.355 0.55499 39.644h33.141l4e-3 -39.644z" style="fill-opacity:.39608;fill:#0087ff"/>
<path d="m162.69 70 3e-3 43.946c12.825-5.8796 32.762-17.077 33.127-43.157l0.0108-0.78911z" style="fill-opacity:.39608;fill:#0087ff"/>
<path d="m128.98 30.355h44.386l22.414 20.826v24.899c0 26.166-21.414 32.228-33.117 38.409-12.815-5.8945-32.794-12.329-33.117-38.409z" style="fill:none;stroke-width:5.2922;stroke:#0087ff"/>
<path d="m171.32 29.811v23.04h24.575" style="fill:none;stroke-width:5.2917;stroke:#0087ff"/>
<g transform="matrix(1.1107 0 0 1.1107 18.926 21.932)" style="fill:#0087ff">
<path d="m137.23 42.719a8.1185 8.1185 0 0 1-8.1185 8.1185 8.1185 8.1185 0 0 1-8.1185-8.1185 8.1185 8.1185 0 0 1 8.1185-8.1185 8.1185 8.1185 0 0 1 8.1185 8.1185z" style="fill:#0087ff"/>
<path d="m127 42.651h4.2265l4.2333 22.354h-12.693z" style="fill:#0087ff"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,16 +1,15 @@
<!DOCTYPE html>
<html class="cp">
<html>
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
<head>
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
<script src="/customize/pre-loading.js?ver=1.1"></script>
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
</head>
<body class="html">
<noscript>
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
</noscript>
</html>
<noscript></noscript>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html class="cp" id="four-oh-four">
<html id="four-oh-four">
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
<head>
<title data-localization="main_title">CryptPad: Zero Knowledge, Collaborative Real Time Editing</title>

View File

@ -1,16 +1,14 @@
<!DOCTYPE html>
<html class="cp">
<html>
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
<head>
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
<script src="/customize/pre-loading.js?ver=1.1"></script>
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
</head>
<body class="html">
<noscript>
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
</noscript>
</html>
<noscript></noscript>

View File

@ -7,7 +7,7 @@
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="form-conditional" horiz-adv-x="1094" d="M300.535 78.617c0 3.87-1.548 7.739-4.335 10.525l-45.506 45.507 45.507 45.507c2.787 2.786 4.335 6.656 4.335 10.525s-1.548 7.739-4.335 10.525l-21.051 21.051c-2.787 2.786-6.655 4.334-10.525 4.334s-7.739-1.548-10.525-4.334l-45.507-45.507-45.507 45.507c-2.787 2.786-6.655 4.334-10.525 4.334s-7.739-1.548-10.525-4.334l-21.051-21.051c-2.787-2.786-4.335-6.656-4.335-10.525s1.548-7.739 4.335-10.525l45.507-45.507-45.507-45.507c-2.787-2.786-4.335-6.656-4.335-10.525s1.548-7.74 4.335-10.525l21.051-21.051c2.787-2.787 6.655-4.334 10.525-4.334s7.739 1.548 10.525 4.334l45.507 45.507 45.507-45.507c2.787-2.787 6.655-4.334 10.525-4.334s7.739 1.548 10.525 4.334l21.051 21.051c2.787 2.787 4.335 6.656 4.335 10.525zM999.093 190.682c0 3.87-1.548 7.739-4.335 10.525l-21.050 21.051c-2.787 2.786-6.655 4.334-10.525 4.334s-7.739-1.548-10.525-4.334l-101.54-101.694-45.507 45.662c-2.787 2.786-6.655 4.334-10.525 4.334s-7.739-1.548-10.525-4.334l-21.051-21.051c-2.787-2.786-4.335-6.656-4.335-10.525s1.548-7.739 4.335-10.525l77.083-77.083c2.787-2.787 6.655-4.334 10.525-4.334s7.739 1.548 10.525 4.334l133.116 133.116c2.787 2.786 4.335 6.656 4.335 10.525zM514.273 890.273v-260.273h-332.955v-277.227h65.364v211.955h600.546v-211.955h65.273v277.227h-332.955v260.273z" />
<glyph unicode="&#xe900;" glyph-name="form-conditional" horiz-adv-x="1094" d="M300.535 125.162c0 3.87-1.548 7.739-4.335 10.525l-45.506 45.507 45.507 45.507c2.787 2.786 4.335 6.656 4.335 10.525s-1.548 7.739-4.335 10.525l-21.051 21.051c-2.787 2.786-6.655 4.334-10.525 4.334s-7.739-1.548-10.525-4.334l-45.507-45.507-45.507 45.507c-2.787 2.786-6.655 4.334-10.525 4.334s-7.739-1.548-10.525-4.334l-21.051-21.051c-2.787-2.786-4.335-6.656-4.335-10.525s1.548-7.739 4.335-10.525l45.507-45.507-45.507-45.507c-2.787-2.786-4.335-6.656-4.335-10.525s1.548-7.739 4.335-10.525l21.051-21.051c2.787-2.786 6.655-4.334 10.525-4.334s7.739 1.548 10.525 4.334l45.507 45.507 45.507-45.507c2.787-2.786 6.655-4.334 10.525-4.334s7.739 1.548 10.525 4.334l21.051 21.051c2.787 2.786 4.335 6.656 4.335 10.525zM999.093 237.227c0 3.87-1.548 7.739-4.335 10.525l-21.050 21.051c-2.787 2.786-6.655 4.334-10.525 4.334s-7.739-1.548-10.525-4.334l-101.54-101.694-45.507 45.662c-2.787 2.786-6.655 4.334-10.525 4.334s-7.739-1.548-10.525-4.334l-21.051-21.051c-2.787-2.786-4.335-6.656-4.335-10.525s1.548-7.739 4.335-10.525l77.083-77.083c2.787-2.786 6.655-4.334 10.525-4.334s7.739 1.548 10.525 4.334l133.116 133.116c2.787 2.786 4.335 6.656 4.335 10.525zM514.273 890.273v-260.273h-332.955v-277.227h65.364v211.955h600.546v-211.955h65.273v277.227h-332.955v260.273z" />
<glyph unicode="&#xe901;" glyph-name="folder-no-color" d="M194.559 846.275c-77.457-0.137-140.211-62.89-140.348-140.334v-515.869c0.137-77.457 62.892-140.211 140.336-140.348h634.893c77.457 0.137 140.211 62.892 140.348 140.336v396.602c0 77.561-62.808 140.453-140.336 140.59h-296.852l-47.104 62.885c-25.923 34.066-66.407 55.898-112 56.139h-178.937zM194.553 787.607h178.906c26.48-0.030 50.004-12.656 64.908-32.207l0.146-0.199 47.104-62.766 17.709-24.094h326.113c45.125-0.069 81.68-36.665 81.68-81.799v-396.471c-0.042-27.788-13.947-52.311-35.156-67.064l-725.621 651.525c12.744 8.239 27.912 13.050 44.211 13.074zM115.25 725.406l687.184-617.014h-607.875c-45.083 0.068-81.61 36.598-81.678 81.674v515.861c0.010 6.714 0.834 13.236 2.369 19.479z" />
<glyph unicode="&#xe902;" glyph-name="whiteboard" horiz-adv-x="878" d="M65.524 945.762c-29.444 0-53.333-23.889-53.333-53.333v-888.857c0-29.444 23.889-53.333 53.333-53.333h746.667c29.444 0 53.333 23.889 53.333 53.333v640c0 29.444-17.206 70.54-37.762 91.095l-173.333 173.333c-20.556 20.556-61.698 37.762-91.143 37.762h-497.762zM83.286 874.667h426.667v-231.095c0-29.444 23.889-53.333 53.333-53.333h231.143v-568.905h-711.143v853.333zM581.095 870.238c9.444-3.333 18.873-8.349 22.762-12.238l173.905-173.905c3.889-3.889 8.857-13.317 12.19-22.762h-208.857v208.905zM446.333 524.286c-17.277 0.517-34.937-1.027-52.952-4.571-22.15-4.43-42.984-11.806-62.476-22.143-19.492-10.632-37.062-23.776-52.714-39.429-15.357-15.357-28.321-32.794-38.952-52.286-10.632-19.196-18.189-39.85-22.619-62-7.974-41.346-5.87-79.57 6.238-114.714 12.404-35.144 30.421-65.145 54.048-89.952 23.626-24.512 50.629-42.977 81.048-55.381 30.714-12.108 60.087-15.954 88.143-11.524 18.31 2.658 31.188 12.718 38.571 30.143 7.679 17.72 7.364 34.709-0.905 50.952-10.337 20.082-9.623 39.575 2.19 58.476 11.813 19.196 29.117 28.762 51.857 28.762h70.429c15.948 0 29.539 5.635 40.762 16.857 11.222 11.518 16.81 25.243 16.81 41.19 0 34.849-7.51 67.353-22.571 97.476-14.766 29.828-34.707 55.089-59.809 75.762-24.808 20.673-53.599 35.559-86.381 44.714-16.538 4.578-33.438 7.15-50.714 7.667zM439 467.476c7.974 0 14.636-2.817 19.952-8.429 5.611-5.316 8.429-11.979 8.429-19.952s-2.817-14.77-8.429-20.381c-5.316-5.316-11.978-7.952-19.952-7.952s-14.77 2.636-20.381 7.952c-5.316 5.611-7.952 12.407-7.952 20.381s2.636 14.636 7.952 19.952c5.611 5.611 12.407 8.429 20.381 8.429zM325.619 410.762c7.974 0 14.589-2.817 19.905-8.429 5.611-5.316 8.429-11.979 8.429-19.952s-2.817-14.77-8.429-20.381c-5.316-5.316-11.931-7.952-19.905-7.952s-14.77 2.636-20.381 7.952c-5.316 5.611-8 12.407-8 20.381s2.684 14.636 8 19.952c5.611 5.611 12.407 8.429 20.381 8.429zM552.429 410.762c7.974 0 14.636-2.817 19.952-8.429 5.611-5.316 8.381-11.979 8.381-19.952s-2.77-14.77-8.381-20.381c-5.316-5.316-11.978-7.952-19.952-7.952s-14.77 2.636-20.381 7.952c-5.316 5.611-7.952 12.407-7.952 20.381s2.636 14.636 7.952 19.952c5.611 5.611 12.407 8.429 20.381 8.429zM297.238 297.333c7.974 0 14.636-2.77 19.952-8.381 5.611-5.316 8.429-11.978 8.429-19.952s-2.817-14.77-8.429-20.381c-5.316-5.316-11.979-8-19.952-8s-14.722 2.684-20.333 8c-5.316 5.611-8 12.407-8 20.381s2.684 14.636 8 19.952c5.611 5.611 12.359 8.381 20.333 8.381z" />
<glyph unicode="&#xe903;" glyph-name="new-template" horiz-adv-x="878" d="M65.524 945.762c-29.444 0-53.333-23.889-53.333-53.333v-888.857c0-29.444 23.889-53.333 53.333-53.333h746.667c29.444 0 53.333 23.889 53.333 53.333v640c0 29.444-17.206 70.54-37.762 91.095l-173.333 173.333c-20.556 20.556-61.698 37.762-91.143 37.762h-497.762zM83.286 874.667h426.667v-231.095c0-29.444 23.889-53.333 53.333-53.333h231.143v-568.905h-711.143v853.333zM581.095 870.238c9.444-3.333 18.873-8.349 22.762-12.238l173.905-173.905c3.889-3.889 8.857-13.317 12.19-22.762h-208.857v208.905zM414.476 490.857c-12.963 0-23.476-10.514-23.476-23.476v-101.762h-101.762c-12.963 0-23.476-10.514-23.476-23.476v-46.952c0-12.963 10.514-23.476 23.476-23.476h101.762v-101.762c0-12.963 10.514-23.476 23.476-23.476h46.952c12.963 0 23.476 10.514 23.476 23.476v101.762h101.762c12.963 0 23.476 10.514 23.476 23.476v46.952c0 12.963-10.514 23.476-23.476 23.476h-101.762v101.762c0 12.963-10.514 23.476-23.476 23.476h-46.952z" />
@ -39,4 +39,5 @@
<glyph unicode="&#xe91d;" glyph-name="form-list-ordered" horiz-adv-x="1094" d="M279.377 71.897c0 35.844-22.857 62.857-57.662 71.169l49.351 59.74v45.714h-172.987v-78.961h55.065v27.532c16.623 0 33.766 1.039 50.389 1.039v-0.52c-22.338-20.259-39.48-46.753-58.182-70.649l13.506-29.091c21.299 1.558 54.545 0 54.545-29.091 0-20.779-19.221-29.61-37.402-29.61-19.74 0-41.039 10.39-55.065 23.376l-29.61-45.714c23.377-23.377 56.623-34.286 89.35-34.286 54.026 0 98.701 32.208 98.701 89.35zM280.416 397.611h-54.545v-31.169h-65.974c1.558 40.519 114.285 57.662 114.285 134.545 0 51.428-41.558 80-89.87 80-39.48 0-74.805-20.26-91.948-56.104l44.156-30.649c8.831 14.545 23.896 30.13 42.078 30.13 17.143 0 28.052-9.351 28.052-27.013 0-43.636-117.402-58.182-117.402-154.285 0-9.351 1.558-18.701 3.117-28.052h188.051zM1012.362 231.897c0 9.351-7.792 16.623-16.623 16.623h-631.687c-9.351 0-16.623-7.273-16.623-16.623v-99.74c0-8.831 7.273-16.623 16.623-16.623h631.687c8.831 0 16.623 7.792 16.623 16.623zM280.936 698.908h-56.104v209.87h-55.065l-70.649-65.974 36.883-39.48c9.87 8.831 20.26 16.623 25.974 28.052h1.039v-6.234c0-42.078-0.52-84.156-0.52-126.233h-55.584v-51.428h174.025zM1012.362 497.87c0 9.351-7.792 16.623-16.623 16.623h-631.687c-9.351 0-16.623-7.273-16.623-16.623v-99.74c0-8.831 7.273-16.623 16.623-16.623h631.687c8.831 0 16.623 7.792 16.623 16.623zM1012.362 763.843c0 8.831-7.792 16.623-16.623 16.623h-631.687c-9.351 0-16.623-7.792-16.623-16.623v-99.74c0-8.831 7.273-16.623 16.623-16.623h631.687c8.831 0 16.623 7.792 16.623 16.623z" />
<glyph unicode="&#xe91e;" glyph-name="form-poll-maybe" horiz-adv-x="1094" d="M856.492 569.333c0 9.987-3.996 19.973-11.187 27.163l-54.325 54.327c-7.191 7.191-17.175 11.185-27.163 11.185s-19.972-3.995-27.163-11.185l-262.048-262.447-117.442 117.841c-7.191 7.19-17.175 11.185-27.163 11.185s-19.972-3.995-27.163-11.185l-54.327-54.327c-7.191-7.191-11.187-17.177-11.187-27.163s3.995-19.973 11.187-27.163l198.932-198.932c7.191-7.191 17.175-11.185 27.163-11.185s19.972 3.995 27.163 11.185l343.538 343.537c7.192 7.191 11.187 17.177 11.187 27.163zM65.903 444.364q0 120.454 35 225.454 35.454 105 101.818 184.090h73.636q-65.454-87.727-98.636-192.727-32.727-105-32.727-215.908 0-109.091 33.636-213.181t96.818-189.999h-72.727q-66.818 77.273-101.818 180.454t-35 221.818zM1027.916 444.364q0-119.545-35.454-222.727-35-103.182-101.363-179.545h-72.727q63.182 85.454 96.818 189.545 33.636 104.545 33.636 213.636 0 110.909-33.182 215.908-32.727 105-98.182 192.727h73.636q66.818-79.545 101.818-184.999 35-105 35-224.545z" />
<glyph unicode="&#xe91f;" glyph-name="destroy" horiz-adv-x="1094" d="M191.671 946.511c-28.024 0-50.742-22.731-50.742-50.756v-399.384h-74.822c-29.561-0.003-53.524-23.966-53.527-53.527 0.025-29.545 23.982-53.484 53.527-53.487h174.773l-88.853-95.929 95.929-104.66-95.835-104.524 121.3-132.182 43.855 55.423-70.369 76.813 95.781 104.471-95.687 104.364 89.122 96.225h190.445l-88.853-95.929 95.929-104.66-95.781-104.524 121.246-132.182 43.855 55.423-70.369 76.813 95.781 104.471-95.687 104.364 89.122 96.225h190.445l-88.853-95.929 95.983-104.66-95.835-104.524 121.286-132.182 43.815 55.423-70.383 76.759 95.835 104.524-95.727 104.417 89.122 96.171h117.318c29.55-0.004 53.515 23.936 53.54 53.487-0.003 29.566-23.974 53.531-53.54 53.527h-71.728v162.501c0 28.024-16.394 67.15-35.958 86.714l-164.966 164.966c-19.564 19.564-58.69 35.958-86.714 35.958zM208.607 878.832h406.073v-219.96c0-28.024 22.745-50.769 50.769-50.769h219.96v-111.732h-676.802zM682.359 874.608c8.989-3.172 17.984-7.936 21.685-11.636l165.505-165.505c3.702-3.7 8.463-12.696 11.636-21.685h-198.826z" />
<glyph unicode="&#xe920;" glyph-name="drive" horiz-adv-x="878" d="M586.884 124.372c0 23.946-19.592 43.537-43.537 43.537s-43.537-19.592-43.537-43.537c0-23.946 19.592-43.537 43.537-43.537s43.537 19.592 43.537 43.537zM726.203 124.372c0 23.946-19.592 43.537-43.537 43.537s-43.537-19.592-43.537-43.537c0-23.946 19.592-43.537 43.537-43.537s43.537 19.592 43.537 43.537zM787.155 37.298c0-9.252-8.163-17.415-17.415-17.415h-661.767c-9.252 0-17.415 8.163-17.415 17.415v174.149c0 9.252 8.163 17.415 17.415 17.415h661.767c9.252 0 17.415-8.163 17.415-17.415zM117.77 298.521l85.442 262.312c2.721 9.252 13.061 16.326 22.857 16.326h425.577c9.796 0 20.136-7.075 22.857-16.326l85.442-262.312zM856.815 211.447c0 14.694-4.354 27.211-8.707 40.816l-107.211 329.795c-12.517 38.095-48.979 64.762-89.251 64.762h-425.577c-40.272 0-76.734-26.667-89.251-64.762l-107.211-329.795c-4.354-13.605-8.707-26.122-8.707-40.816v-174.149c0-47.891 39.184-87.075 87.075-87.075h661.767c47.891 0 87.075 39.184 87.075 87.075z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -1,10 +1,10 @@
@font-face {
font-family: 'cptools';
src: url('fonts/cptools.eot?6tk5ck');
src: url('fonts/cptools.eot?6tk5ck#iefix') format('embedded-opentype'),
url('fonts/cptools.ttf?6tk5ck') format('truetype'),
url('fonts/cptools.woff?6tk5ck') format('woff'),
url('fonts/cptools.svg?6tk5ck#cptools') format('svg');
src: url('fonts/cptools.eot?pmxg4b');
src: url('fonts/cptools.eot?pmxg4b#iefix') format('embedded-opentype'),
url('fonts/cptools.ttf?pmxg4b') format('truetype'),
url('fonts/cptools.woff?pmxg4b') format('woff'),
url('fonts/cptools.svg?pmxg4b#cptools') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
@ -26,6 +26,9 @@
-moz-osx-font-smoothing: grayscale;
}
.cptools-drive:before {
content: "\e920";
}
.cptools-form-conditional:before {
content: "\e900";
}

View File

@ -12,9 +12,11 @@ define([
src: '/customize/CryptPad_logo_grey.svg?' + urlArgs
});
var is500 = Boolean(document.querySelector('#five-hundred'));
var brand = h('h1#cp-brand', 'CryptPad');
var message = h('h2#cp-scramble', Messages.four04_pageNotFound);
var title = h('h2#cp-title', "404");
// Msg.fivehundred_internalServerError.four04_pageNotFound
var message = h('h2#cp-scramble', Messages[is500? 'fivehundred_internalServerError':'four04_pageNotFound']);
var title = h('h2#cp-title', is500? "500":"404");
var loggedIn = LocalStore.isLoggedIn();
var link = h('a#cp-link', {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

View File

@ -1,85 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 200 200"
version="1.1"
id="svg1039"
sodipodi:docname="logo_XWiki.svg"
width="200"
height="200"
inkscape:version="1.0.1 (1.0.1+r73)">
<metadata
id="metadata1043">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Logo_XWiki</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1900"
inkscape:window-height="1036"
id="namedview1041"
showgrid="false"
inkscape:zoom="0.91088486"
inkscape:cx="167.36695"
inkscape:cy="130.64123"
inkscape:window-x="10"
inkscape:window-y="10"
inkscape:window-maximized="0"
inkscape:current-layer="svg1039" />
<defs
id="defs1015">
<style
id="style1013">.cls-1{fill:#f78d1e;}.cls-2{fill:#008fd4;}.cls-3{fill:#ed1c24;}.cls-4{fill:#8cc63f;}.cls-5{fill:#626366;}</style>
</defs>
<title
id="title1017">Logo_XWiki</title>
<g
id="Layer_2"
data-name="Layer 2"
transform="translate(4.045,3.625)">
<g
id="Layer_1-2"
data-name="Layer 1">
<path
class="cls-2"
d="m 36.1,103.1 a 6.75,6.75 0 0 0 6.74,-6.75 v 0 A 6.75,6.75 0 0 0 36.1,89.6 H 6.75 A 6.75,6.75 0 0 0 0,96.35 v 0 a 6.75,6.75 0 0 0 6.75,6.75 z"
id="path1027" />
<path
class="cls-3"
d="m 89.6,156.61 a 6.75,6.75 0 0 1 6.75,-6.75 v 0 a 6.75,6.75 0 0 1 6.75,6.75 V 186 a 6.75,6.75 0 0 1 -6.75,6.75 v 0 A 6.75,6.75 0 0 1 89.6,186 Z"
id="path1029" />
<path
class="cls-4"
d="M 89.6,6.74 A 6.75,6.75 0 0 1 96.35,0 v 0 a 6.75,6.75 0 0 1 6.75,6.74 v 29.35 a 6.75,6.75 0 0 1 -6.75,6.75 v 0 A 6.75,6.75 0 0 1 89.6,36.09 Z"
id="path1031" />
<path
class="cls-5"
d="M 112.36,96 169.08,30.09 A 12.044,12.044 0 1 0 150.82,14.38 L 96.47,77.5 42.12,14.34 A 12.044,12.044 0 1 0 23.86,30.05 L 80.58,96 23.86,161.87 a 12.047261,12.047261 0 1 0 18.26,15.72 l 54.35,-63.16 54.35,63.16 a 12.047261,12.047261 0 0 0 18.26,-15.72 z"
id="path1033" />
<path
class="cls-1"
d="m 185.17,103.25 a 6.75,6.75 0 0 0 6.74,-6.75 v 0 a 6.75,6.75 0 0 0 -6.74,-6.75 h -29.35 a 6.75,6.75 0 0 0 -6.75,6.75 v 0 a 6.75,6.75 0 0 0 6.75,6.75 z"
id="path1035" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="568px" height="163px" viewBox="0 0 568 163" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 54 (76480) - https://sketchapp.com -->
<title>logo-footer</title>
<desc>Created with Sketch.</desc>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="logo-footer" fill-rule="nonzero">
<path d="M464.88,53.13 C457.35,53.13 453.78,66.49 456.06,86.23 C458.82,110.26 480.26,110.18 494.78,104.1 L494.76,115.96 C485.84,118.39 478.56,119 472.26,119 C435.66,119 431.93,88.9 431.93,79.9 C431.93,64.62 437.35,43.5 466.36,43.5 C485.6,43.5 496.58,56.02 496.76,72.8 L473.6,72.8 C473.56,62.33 471.36,53.16 464.88,53.16 L464.88,53.13 Z M542.58,70.35 L542.58,68.85 C542.28,61.51 540.78,53.12 534.48,53.12 C528.4,53.12 526.34,60.15 525.48,69.88 L525.43,70.34 L542.57,70.34 L542.58,70.35 Z M567.04,80.85 L525.17,80.85 L525.19,81.29 C526.69,110.89 548.71,110.26 564.25,104.09 L564.24,115.97 C555.34,118.4 549.14,119.01 542.26,119.01 C506.66,119.01 501.36,92.58 501.36,79.06 C501.36,63.43 508.16,43.46 535.36,43.49 C555.43,43.5 567.04,56.16 567.04,73.73 L567.04,80.83 L567.04,80.85 Z M316.68,106.77 L316.6,78.87 L316.14,78.91 C310.14,79.44 301.34,82.14 301.34,94.24 C301.33,105.56 306.84,106.54 312.09,106.76 L316.69,106.77 L316.68,106.77 Z M340.85,116.77 L301.72,116.76 C287.3,116.74 276.92,110.88 276.94,94.9 C276.96,81.9 284.48,75.64 293.16,72.6 C297.51,71.08 302.14,70.38 306.26,70.05 C310.38,69.72 313.96,69.78 316.18,69.77 L316.6,69.77 L316.6,67.51 C316.62,50.79 299.93,52.58 290.5,55.33 C288.7,55.88 287.07,56.46 285.7,57.03 L285.7,46.1 C294.03,44.14 299.7,43.47 308.55,43.47 C329.48,43.47 340.85,53.29 340.85,69.7 L340.85,116.76 L340.85,116.77 Z M276.5,53.94 C270.78,54.2 262,56.24 262,69.6 L261.96,116.77 L237.7,116.77 L237.73,68.83 C237.75,54.43 250.93,43.48 271.56,43.48 L276.48,43.48 L276.49,53.94 L276.5,53.94 Z M237.35,16.04 L237.34,26.31 L230.27,26.49 C227.84,26.69 225.53,27.09 223.53,27.91 C219.45,29.61 216.73,33.06 216.73,39.88 L216.73,45.93 L233.83,45.93 L233.82,56.33 L216.68,56.33 L216.7,116.77 L192.47,116.77 L192.47,45.47 C192.47,19.12 210.54,16.03 232.44,16.03 L237.34,16.03 L237.35,16.04 Z M421.15,116.78 L396.77,116.78 L396.72,74.1 C396.72,57.28 390.34,56.4 381.46,56.35 L379.74,56.35 L379.76,116.78 L355.46,116.78 L355.44,45.6 C357.41,45.73 363.98,45.94 385.89,45.94 C421.02,45.94 421.12,62.24 421.13,75.49 L421.14,116.79 L421.15,116.78 Z M164.83,162.76 C156.21,162.76 149.23,155.76 149.23,147.13 C149.23,138.5 156.23,131.5 164.83,131.5 C173.43,131.5 180.43,138.5 180.43,147.13 C180.43,155.76 173.43,162.76 164.83,162.76 Z" id="Shape" fill="#FFCD00"></path>
<path d="M176.97,45.92 L176.93,116.77 L152.68,116.77 L152.7,45.92 L176.97,45.92 Z M164.83,31.28 C156.21,31.28 149.23,24.28 149.23,15.66 C149.23,7.04 156.23,0.03 164.83,0.03 C173.43,0.03 180.43,7.03 180.43,15.66 C180.43,24.29 173.43,31.28 164.83,31.28 Z M41.2,80.5 C41.2,65.04 37.6,55.52 26.48,55.52 L24.48,55.52 L24.48,107 L26.83,107 C37.63,107 41.19,96.7 41.19,80.5 L41.2,80.5 Z M0.1,116.76 L0.1,16.03 L24.48,16.03 L24.47,45.93 L32.19,45.93 C49.09,45.93 57.44,52.53 61.59,60.1 C65.79,67.72 65.79,76.4 65.79,80.68 C65.79,91.92 62.24,116.78 34.39,116.78 L0.09,116.76 L0.1,116.76 Z M100.8,55.5 L100.8,107 L102.8,107 C113.93,107 117.5,97.48 117.5,82 C117.5,65.82 113.93,55.5 103.14,55.5 L100.8,55.5 L100.8,55.5 Z M142.12,82.02 C142.12,86.29 142.12,94.98 137.92,102.6 C133.75,110.17 125.4,116.77 108.52,116.77 L100.8,116.77 L100.8,146.67 L76.43,146.67 L76.43,45.929997 L110.73,45.93 C138.59,45.92 142.13,70.78 142.13,82.03 L142.12,82.02 Z" id="Shape" fill="#5E514D"></path>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 367 KiB

View File

@ -1,75 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="190px" height="80px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
<g transform="matrix(0.47619,0,0,0.47619,0.0952381,0)">
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M446.603,73.881L449.102,60.236L436.207,60.236L439.955,40.144L424.512,46.192L422.013,60.236L412.616,60.236L410.117,73.881L419.364,73.881L416.215,91.174C416.065,92.124 415.815,93.523 415.565,95.322C415.315,97.122 415.165,98.721 415.165,100.07C415.215,106.318 416.715,111.466 419.664,115.514C422.612,119.663 427.41,122.112 434.108,122.861L440.555,109.567C437.107,109.117 434.508,107.767 432.658,105.468C430.809,103.119 429.909,100.17 429.909,96.572C429.909,95.872 430.009,94.873 430.159,93.523C430.309,92.174 430.459,91.074 430.609,90.224L433.608,73.881L446.603,73.881Z" style="fill:rgb(152,192,0);fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M310.707,72.332C313.106,71.482 315.205,71.032 316.955,71.032C318.854,71.032 320.453,71.582 321.753,72.681C323.002,73.731 323.602,75.28 323.602,77.43C323.602,78.029 323.502,78.929 323.302,80.178C323.102,81.328 322.952,82.378 322.802,83.277L319.204,100.17C318.954,101.47 318.704,102.819 318.454,104.219C318.204,105.668 318.104,106.918 318.104,107.967C318.104,112.016 319.204,115.414 321.453,118.113C323.602,120.812 327.451,122.412 332.998,122.861L339.346,110.016C337.197,109.667 335.647,108.867 334.698,107.617C333.698,106.418 333.198,104.719 333.198,102.569C333.198,102.07 333.248,101.47 333.348,100.82C333.398,100.17 333.498,99.621 333.548,99.221L337.197,82.028C337.497,80.578 337.747,79.129 337.947,77.679C338.146,76.28 338.246,74.881 338.246,73.531C338.246,68.583 336.797,64.585 333.898,61.636C330.949,58.687 326.851,57.188 321.603,57.188C318.554,57.188 315.655,57.687 312.807,58.687C310.008,59.637 306.609,61.236 302.661,63.585C302.511,62.636 302.161,61.486 301.661,60.186C301.111,58.937 300.512,57.837 299.862,56.838L286.467,62.586C287.617,64.335 288.516,66.184 289.066,68.083C289.566,69.983 289.816,71.782 289.816,73.431C289.816,74.281 289.766,75.33 289.616,76.48C289.516,77.63 289.366,78.529 289.216,79.179L281.269,121.512L295.664,121.512L304.11,75.83C306.159,74.281 308.358,73.131 310.708,72.332L310.707,72.332Z" style="fill:rgb(152,192,0);fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M350.741,80.078C349.192,84.677 348.442,89.575 348.442,94.723C348.442,99.221 349.042,103.219 350.191,106.718C351.341,110.216 352.99,113.165 355.089,115.514C357.139,117.913 359.688,119.713 362.636,120.962C365.585,122.212 368.884,122.861 372.483,122.861C376.831,122.861 381.129,122.062 385.427,120.462C389.776,118.863 393.574,116.364 396.823,113.015L391.425,100.52C388.926,103.319 386.177,105.418 383.128,106.868C380.079,108.317 377.031,109.017 374.032,109.017C370.533,109.017 367.784,107.917 365.785,105.718C363.836,103.469 362.836,100.67 362.836,97.372L362.836,96.422C362.836,96.022 362.886,95.622 362.986,95.222C365.635,94.873 368.634,94.423 371.983,93.823C375.331,93.223 378.73,92.523 382.179,91.724C385.627,90.874 388.976,89.925 392.275,88.925C395.523,87.925 398.422,86.876 400.871,85.826L400.871,80.079C400.871,76.53 400.321,73.331 399.222,70.482C398.072,67.733 396.573,65.334 394.624,63.285C392.674,61.286 390.325,59.787 387.676,58.787C385.077,57.737 382.229,57.188 379.18,57.188C374.732,57.188 370.583,58.187 366.835,60.137C363.036,62.086 359.788,64.785 357.139,68.233C354.39,71.632 352.291,75.58 350.741,80.079L350.741,80.078ZM372.382,69.982C373.932,69.133 375.681,68.733 377.63,68.733C380.279,68.733 382.478,69.583 384.228,71.332C385.977,73.031 386.877,75.58 386.877,79.029C385.427,79.479 383.728,80.028 381.729,80.578C379.68,81.078 377.63,81.578 375.531,82.028C373.382,82.478 371.333,82.927 369.284,83.327C367.235,83.677 365.485,83.977 363.986,84.227C364.236,82.128 364.686,80.128 365.385,78.279C366.135,76.43 367.085,74.781 368.234,73.381C369.484,71.982 370.833,70.832 372.383,69.983L372.382,69.982Z" style="fill:rgb(152,192,0);fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M404.17,140.454C404.17,139.205 403.97,138.055 403.57,137.056C403.17,136.056 402.62,135.206 401.971,134.457C401.271,133.757 400.471,133.207 399.522,132.857C398.572,132.507 397.522,132.308 396.423,132.308C394.973,132.308 393.624,132.607 392.374,133.157C391.125,133.707 390.025,134.507 389.076,135.506C388.126,136.506 387.376,137.655 386.827,139.005C386.277,140.354 385.977,141.804 385.977,143.403C385.977,144.653 386.177,145.752 386.577,146.802C386.927,147.801 387.476,148.651 388.176,149.351C388.826,150.1 389.676,150.65 390.625,151.05C391.575,151.4 392.624,151.6 393.774,151.6C395.173,151.6 396.523,151.3 397.772,150.75C399.022,150.2 400.121,149.401 401.071,148.401C402.021,147.451 402.77,146.252 403.32,144.902C403.87,143.553 404.17,142.054 404.17,140.454ZM390.275,140.404C390.575,139.505 390.975,138.705 391.475,138.005C392.025,137.306 392.674,136.756 393.424,136.306C394.174,135.856 394.973,135.656 395.923,135.656C397.372,135.656 398.422,136.106 399.172,137.006C399.921,137.855 400.321,139.105 400.321,140.654C400.321,141.604 400.171,142.553 399.871,143.503C399.622,144.403 399.222,145.202 398.672,145.902C398.122,146.602 397.472,147.152 396.723,147.601C395.973,148.001 395.123,148.201 394.224,148.201C392.774,148.201 391.725,147.751 390.975,146.902C390.225,146.002 389.826,144.803 389.826,143.253C389.826,142.304 389.975,141.354 390.275,140.404Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M434.558,132.557L431.009,132.557L429.11,143.603C429.06,143.753 429.01,144.003 429.01,144.353C429.01,144.703 429.01,144.952 429.01,145.202L428.86,145.202L422.463,132.557L419.114,132.557L415.765,151.3L419.364,151.3L421.363,140.004C421.413,139.855 421.413,139.605 421.413,139.355C421.413,139.105 421.413,138.805 421.413,138.505L421.563,138.505L428.11,151.45L431.309,151.15L434.558,132.557Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M374.382,132.557L370.733,132.557L367.384,151.3L371.083,151.3L374.382,132.557Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M328.95,132.557L324.702,132.557C323.902,133.907 323.052,135.456 322.103,137.106C321.153,138.755 320.253,140.454 319.354,142.154C318.454,143.853 317.654,145.502 316.905,147.102C316.155,148.701 315.555,150.1 315.105,151.3L318.954,151.3C319.104,150.95 319.254,150.5 319.454,150.05C319.654,149.601 319.854,149.101 320.104,148.651C320.303,148.201 320.503,147.751 320.703,147.302C320.903,146.852 321.103,146.452 321.253,146.102L327.75,146.102C327.8,146.552 327.8,147.002 327.85,147.501L328,148.951C328.05,149.401 328.1,149.851 328.15,150.3C328.2,150.75 328.2,151.1 328.2,151.45L331.899,151.15C331.899,150.45 331.849,149.651 331.749,148.701C331.699,147.751 331.549,146.752 331.399,145.702C331.249,144.653 331.099,143.503 330.899,142.354C330.749,141.204 330.549,140.054 330.3,138.905C330.1,137.755 329.9,136.656 329.65,135.556C329.4,134.507 329.2,133.507 328.95,132.557ZM326.601,138.105C326.701,138.655 326.801,139.255 326.901,139.904C327.001,140.504 327.101,141.104 327.151,141.654C327.251,142.204 327.301,142.603 327.351,142.953L322.702,142.953C322.952,142.503 323.202,142.004 323.452,141.454C323.752,140.904 324.052,140.304 324.352,139.705C324.702,139.105 325.002,138.555 325.301,138.005C325.601,137.455 325.851,136.956 326.101,136.606L326.301,136.606C326.401,137.006 326.501,137.505 326.601,138.105Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M357.638,135.956L358.188,132.557L345.393,132.557L344.844,135.956L349.392,135.956L346.743,151.3L350.391,151.3L353.09,135.956L357.638,135.956Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M297.462,132.308C296.413,132.308 295.363,132.358 294.314,132.457C293.264,132.607 292.265,132.757 291.315,133.007L288.166,150.85C289.116,151.1 290.215,151.25 291.415,151.4C292.565,151.55 293.664,151.6 294.714,151.6C296.263,151.6 297.662,151.35 299.012,150.85C300.361,150.3 301.561,149.601 302.561,148.651C303.56,147.701 304.36,146.552 304.96,145.202C305.509,143.853 305.809,142.304 305.809,140.604C305.809,139.255 305.609,138.105 305.21,137.056C304.76,136.006 304.21,135.156 303.46,134.457C302.711,133.757 301.811,133.207 300.811,132.857C299.762,132.507 298.662,132.308 297.463,132.308L297.462,132.308ZM296.663,135.706C297.413,135.706 298.112,135.806 298.762,135.956C299.412,136.106 299.962,136.406 300.411,136.806C300.911,137.206 301.311,137.705 301.561,138.355C301.811,138.955 301.961,139.705 301.961,140.654C301.961,141.854 301.811,142.903 301.461,143.853C301.161,144.803 300.711,145.602 300.112,146.252C299.512,146.902 298.812,147.352 297.962,147.701C297.113,148.051 296.213,148.201 295.164,148.201C294.714,148.201 294.264,148.201 293.714,148.151C293.164,148.101 292.665,148.051 292.315,148.001L294.464,135.906C294.764,135.856 295.164,135.806 295.613,135.756C296.063,135.706 296.413,135.706 296.663,135.706Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M185.807,62.585C186.957,64.335 187.856,66.184 188.406,68.083C188.906,69.982 189.156,71.782 189.156,73.431C189.156,74.281 189.106,75.33 188.956,76.48C188.856,77.629 188.706,78.529 188.556,79.179L180.609,121.512L195.003,121.512L203.45,75.83C205.499,74.281 207.698,73.131 210.047,72.332C212.446,71.482 214.546,71.032 216.295,71.032C218.194,71.032 219.794,71.582 221.093,72.681C222.343,73.731 222.942,75.28 222.942,77.43C222.942,78.029 222.842,78.929 222.642,80.178C222.443,81.328 222.293,82.378 222.143,83.277L218.544,100.17C218.294,101.47 218.044,102.819 217.794,104.219C217.545,105.668 217.445,106.918 217.445,107.967C217.445,112.016 218.544,115.414 220.793,118.113C222.942,120.812 226.791,122.412 232.339,122.861L238.686,110.016C236.537,109.667 234.988,108.867 234.038,107.617C233.038,106.418 232.539,104.719 232.539,102.569C232.539,102.07 232.589,101.47 232.689,100.82C232.739,100.17 232.839,99.621 232.889,99.221L236.537,82.028C236.837,80.578 237.087,79.129 237.287,77.679C237.487,76.28 237.587,74.881 237.587,73.531C237.587,68.583 236.137,64.585 233.238,61.636C230.29,58.687 226.191,57.188 220.943,57.188C217.895,57.188 214.996,57.687 212.147,58.687C209.348,59.637 205.949,61.236 202.001,63.585C201.851,62.636 201.501,61.486 201.001,60.186C200.452,58.937 199.852,57.837 199.202,56.838L185.807,62.586L185.807,62.585Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M276.821,31.548L262.676,31.548L251.881,90.024C251.431,91.974 251.081,94.023 250.831,96.172C250.581,98.271 250.431,100.22 250.431,102.02C250.431,107.817 251.531,112.565 253.78,116.264C256.029,119.963 259.828,122.162 265.175,122.861L271.673,109.567C270.623,109.067 269.724,108.517 268.874,107.917C268.024,107.368 267.325,106.618 266.775,105.768C266.175,104.919 265.725,103.919 265.475,102.719C265.225,101.52 265.076,100.02 265.076,98.271C265.076,97.422 265.126,96.472 265.225,95.472C265.375,94.423 265.525,93.373 265.675,92.274L276.821,31.548Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M246.433,132.557L242.784,132.557L240.385,146.252C239.886,146.802 239.286,147.252 238.536,147.651C237.786,148.001 236.987,148.201 236.087,148.201C235.187,148.201 234.488,148.001 233.988,147.601C233.438,147.152 233.188,146.452 233.188,145.402C233.188,145.202 233.238,144.902 233.288,144.503C233.338,144.153 233.338,143.803 233.388,143.503L235.387,132.557L231.689,132.557L229.74,143.453C229.69,143.903 229.64,144.353 229.59,144.803C229.54,145.252 229.54,145.602 229.54,145.952C229.54,146.952 229.69,147.801 229.99,148.551C230.289,149.301 230.689,149.851 231.189,150.3C231.739,150.75 232.339,151.1 232.988,151.3C233.688,151.5 234.388,151.6 235.138,151.6C236.987,151.6 238.636,151.05 240.136,149.9C240.136,150.15 240.136,150.45 240.186,150.75C240.186,151 240.186,151.25 240.236,151.5L243.884,151.25C243.834,151 243.834,150.75 243.834,150.45C243.784,150.2 243.784,149.9 243.784,149.551C243.784,148.951 243.834,148.301 243.884,147.651C243.934,146.952 243.984,146.302 244.134,145.702L246.433,132.557Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M276.621,132.557L273.072,132.557L271.173,143.603C271.123,143.753 271.073,144.003 271.073,144.353C271.073,144.703 271.073,144.952 271.073,145.202L270.923,145.202L264.526,132.557L261.177,132.557L257.828,151.3L261.427,151.3L263.426,140.004C263.476,139.855 263.476,139.605 263.476,139.355C263.476,139.105 263.476,138.805 263.476,138.505L263.626,138.505L270.174,151.45L273.372,151.15L276.621,132.557Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M214.796,134.457C214.096,133.757 213.296,133.207 212.347,132.857C211.397,132.507 210.347,132.308 209.248,132.308C207.798,132.308 206.449,132.607 205.199,133.157C203.95,133.707 202.85,134.507 201.901,135.506C200.951,136.506 200.201,137.655 199.652,139.005C199.102,140.354 198.802,141.804 198.802,143.403C198.802,144.653 199.002,145.752 199.402,146.802C199.752,147.801 200.301,148.651 201.001,149.351C201.651,150.1 202.5,150.65 203.45,151.05C204.4,151.4 205.449,151.6 206.599,151.6C207.998,151.6 209.348,151.3 210.597,150.75C211.847,150.2 212.946,149.401 213.896,148.401C214.846,147.451 215.595,146.252 216.145,144.902C216.695,143.553 216.995,142.054 216.995,140.454C216.995,139.205 216.795,138.055 216.395,137.056C215.995,136.056 215.445,135.206 214.796,134.457ZM204.3,138.005C204.85,137.306 205.499,136.756 206.249,136.306C206.999,135.856 207.798,135.656 208.748,135.656C210.197,135.656 211.247,136.106 211.997,137.006C212.746,137.855 213.146,139.105 213.146,140.654C213.146,141.604 212.996,142.553 212.696,143.503C212.447,144.403 212.047,145.202 211.497,145.902C210.947,146.602 210.297,147.152 209.548,147.601C208.798,148.001 207.948,148.201 207.049,148.201C205.599,148.201 204.55,147.751 203.8,146.902C203.05,146.002 202.65,144.803 202.65,143.253C202.65,142.304 202.8,141.354 203.1,140.404C203.4,139.505 203.8,138.705 204.3,138.005Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M188.256,132.557L177.96,132.557L174.612,151.3L178.31,151.3L179.56,144.153L186.307,144.153L186.907,140.754L180.159,140.754L181.009,135.956L187.656,135.956L188.256,132.557Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M127.081,44.893C128.43,33.947 125.681,24.101 118.884,15.404C112.087,6.708 103.19,1.66 92.245,0.31C81.299,-1.039 71.453,1.71 62.756,8.507C54.71,14.755 49.812,22.801 48.062,32.647C47.912,33.497 47.762,34.297 47.662,35.146C47.562,35.996 47.512,36.796 47.463,37.595C47.113,42.194 47.562,46.592 48.762,50.79C50.111,55.688 52.461,60.286 55.859,64.635C59.258,68.983 63.156,72.382 67.604,74.931C71.353,77.08 75.501,78.529 80.049,79.329C80.849,79.479 81.649,79.579 82.498,79.729C82.948,79.779 83.398,79.829 83.848,79.879C84.948,75.43 86.647,71.282 88.996,67.533C87.447,67.583 85.847,67.533 84.248,67.384C84.148,67.334 84.098,67.334 84.048,67.334C82.199,67.084 80.399,66.734 78.75,66.184C73.602,64.535 69.254,61.486 65.705,56.938C62.157,52.39 60.257,47.442 59.908,42.044C59.808,40.294 59.858,38.545 60.107,36.696C60.107,36.646 60.107,36.546 60.107,36.496C61.057,29.049 64.506,23.001 70.453,18.353C76.451,13.705 83.198,11.806 90.745,12.755C98.292,13.655 104.39,17.104 109.038,23.101C113.686,29.099 115.585,35.846 114.686,43.393C114.436,45.093 114.136,46.692 113.686,48.241C117.884,46.892 122.283,46.192 126.881,46.242C126.931,45.792 127.031,45.342 127.081,44.893Z" style="fill:rgb(152,192,0);fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M132.329,51.49C131.479,51.39 130.679,51.29 129.83,51.24C125.231,50.94 120.833,51.39 116.635,52.539C111.737,53.889 107.139,56.288 102.79,59.687C98.442,63.035 95.043,66.934 92.544,71.382C90.395,75.13 88.946,79.279 88.096,83.827C92.445,84.577 96.443,85.826 100.141,87.675C100.391,85.876 100.741,84.177 101.241,82.577C102.89,77.43 105.939,73.081 110.487,69.533C115.035,65.984 119.983,64.035 125.431,63.685C127.181,63.585 128.93,63.635 130.779,63.885C130.829,63.885 130.879,63.885 130.929,63.885C138.376,64.835 144.424,68.333 149.072,74.281C153.77,80.228 155.669,86.976 154.72,94.523C153.77,102.07 150.321,108.167 144.374,112.865C138.426,117.514 131.679,119.363 124.232,118.463C125.081,122.512 125.331,126.76 125.031,131.158C134.977,131.808 143.974,128.959 152.021,122.711C160.717,115.914 165.765,107.018 167.115,96.072C168.464,85.127 165.715,75.28 158.918,66.584C152.62,58.537 144.574,53.639 134.778,51.89C133.928,51.74 133.128,51.59 132.329,51.49Z" style="fill:rgb(152,192,0);fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M128.93,78.729C125.481,78.329 122.432,79.179 119.684,81.328C116.935,83.477 115.385,86.226 114.985,89.625C114.536,93.073 115.385,96.122 117.534,98.871C119.684,101.62 122.432,103.169 125.881,103.569C129.28,104.019 132.329,103.169 135.077,101.02C137.826,98.871 139.376,96.122 139.826,92.673C140.225,89.275 139.376,86.226 137.227,83.477C135.077,80.728 132.329,79.179 128.93,78.729Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M12.826,73.631C13.776,66.084 17.225,59.936 23.222,55.288C29.17,50.64 35.867,48.741 43.314,49.691C42.465,45.642 42.165,41.394 42.514,36.996C32.568,36.346 23.572,39.145 15.525,45.442C6.779,52.24 1.781,61.136 0.431,72.082C-0.917,83.027 1.781,92.823 8.628,101.57C14.876,109.617 22.922,114.515 32.768,116.264C33.568,116.414 34.368,116.514 35.217,116.664C36.067,116.764 36.867,116.864 37.716,116.914C42.315,117.214 46.713,116.764 50.911,115.614C55.759,114.215 60.407,111.816 64.756,108.467C69.054,105.068 72.453,101.17 75.001,96.772C77.151,93.023 78.6,88.875 79.45,84.327C75.101,83.577 71.103,82.278 67.405,80.478C67.155,82.228 66.805,83.927 66.305,85.576C64.656,90.724 61.607,95.073 57.059,98.621C52.51,102.17 47.562,104.119 42.165,104.469C40.415,104.569 38.616,104.519 36.767,104.269C36.717,104.269 36.667,104.269 36.617,104.219C29.17,103.269 23.122,99.821 18.474,93.873C13.776,87.875 11.877,81.128 12.826,73.631Z" style="fill:rgb(152,192,0);fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M32.469,67.134C29.72,69.233 28.17,72.032 27.72,75.48C27.321,78.829 28.17,81.878 30.319,84.627C32.419,87.376 35.167,88.975 38.616,89.425C42.065,89.775 45.113,88.925 47.862,86.826C50.561,84.677 52.111,81.878 52.56,78.529C53.01,75.08 52.161,71.982 50.011,69.283C47.862,66.534 45.113,64.984 41.665,64.585C38.216,64.135 35.167,64.984 32.469,67.134Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M97.293,32.348C95.143,29.599 92.345,28.049 88.946,27.649C85.497,27.2 82.449,28.049 79.75,30.198C77.001,32.298 75.401,35.096 75.001,38.545C74.552,41.944 75.451,44.992 77.6,47.741C79.7,50.44 82.449,52.04 85.897,52.49C89.296,52.839 92.345,51.99 95.093,49.891C97.842,47.741 99.392,44.943 99.842,41.594C100.241,38.145 99.392,35.047 97.293,32.348Z" style="fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M85.047,88.425C84.598,88.375 84.148,88.325 83.698,88.275C82.598,92.723 80.899,96.872 78.55,100.62C80.099,100.52 81.699,100.57 83.348,100.77C83.398,100.77 83.448,100.77 83.498,100.82C85.347,101.02 87.097,101.37 88.796,101.92C93.944,103.569 98.292,106.668 101.841,111.216C105.389,115.714 107.289,120.662 107.638,126.11C107.738,127.859 107.688,129.609 107.439,131.458C107.439,131.508 107.439,131.558 107.439,131.658C106.489,139.105 103.04,145.152 97.093,149.801C91.095,154.449 84.348,156.348 76.801,155.398C69.254,154.449 63.156,151 58.508,145.052C53.81,139.055 51.911,132.308 52.86,124.761C53.06,123.061 53.41,121.462 53.91,119.912C49.662,121.262 45.263,121.912 40.665,121.912C40.615,122.362 40.515,122.811 40.465,123.261C39.116,134.207 41.815,144.003 48.662,152.749C55.459,161.446 64.356,166.494 75.301,167.843C86.247,169.192 96.043,166.444 104.79,159.647C112.836,153.349 117.734,145.302 119.484,135.456C119.634,134.657 119.734,133.857 119.884,133.007C119.933,132.158 120.033,131.358 120.083,130.558C120.383,125.91 119.933,121.512 118.784,117.364C117.434,112.465 115.035,107.867 111.687,103.519C108.288,99.171 104.39,95.722 99.991,93.223C96.193,91.074 92.045,89.625 87.496,88.825C86.697,88.675 85.897,88.525 85.047,88.425Z" style="fill:rgb(152,192,0);fill-rule:nonzero;"/>
</g>
<g transform="matrix(0.869481,0,0,0.869481,4.11434,10.9736)">
<path d="M89.995,120.412C87.846,117.663 85.097,116.114 81.649,115.664C78.2,115.264 75.151,116.114 72.453,118.263C69.704,120.412 68.154,123.161 67.704,126.56C67.255,130.008 68.154,133.057 70.303,135.806C72.403,138.555 75.151,140.104 78.6,140.504C82.049,140.954 85.097,140.104 87.846,137.955C90.545,135.806 92.095,133.057 92.544,129.609C92.944,126.21 92.095,123.161 89.995,120.412Z" style="fill-rule:nonzero;"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -1,16 +1,14 @@
<!DOCTYPE html>
<html class="cp">
<html>
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
<head>
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
<script src="/customize/pre-loading.js?ver=1.1"></script>
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
</head>
<body class="html">
<noscript>
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
</noscript>
</html>
<noscript></noscript>

View File

@ -554,7 +554,7 @@ define([
return;
}
if (testing) { return void proceed(result); }
//if (testing) { return void proceed(result); }
if (!(proxy.curvePrivate && proxy.curvePublic &&
proxy.edPrivate && proxy.edPublic)) {

View File

@ -1,40 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
<style>
html {
height: 100%;
}
body {
transition: opacity 0.75s, visibility 0s 0.75s;
visibility: visible;
position: fixed;
z-index: 10000000;
top: 0px;
bottom: 0px;
left: 0px;
right: 0px;
background: linear-gradient(to right, #326599 0%, #326599 50%, #4591c4 50%, #4591c4 100%);
color: #fafafa;
font-size: 1.5em;
opacity: 1;
display: flex;
flex-flow: column;
justify-content: center;
align-items: center;
font-family: monospace;
}
#cp-logo {
max-width: 300px;
}
</style>
</head>
<body class="html">
<img id="cp-logo" src="/customize/loading-logo.png">
<h1>Maintenance</h1>
<h3>We are currently upgrading CryptPad. We will be back shortly!</h3>

View File

@ -2,23 +2,27 @@
// add your module to this map so it gets used
var map = {
'ca': 'Català',
'cs': 'Čeština',
'de': 'Deutsch',
'el': 'Ελληνικά',
'es': 'Español',
'eu': 'Euskara',
'fi': 'Suomi',
'fr': 'Français',
//'hi': 'हिन्दी',
'it': 'Italiano',
'ja': '日本語',
'nb': 'Norwegian Bokmål',
//'pl': 'Polski',
//'nl': 'Nederlands'
'pl': 'Polski',
'pt-br': 'Português do Brasil',
'pt-pt': 'Português do Portugal',
'ro': 'Română',
'ru': 'Русский',
//'sv': 'Svenska',
//'te': 'తెలుగు',
'uk': 'Українська',
'zh': '繁體中文',
//'nl': 'Nederlands'
};
var messages = {};

View File

@ -5,7 +5,8 @@ define([
'/customize/messages.js',
'jquery',
'/api/config',
], function (h, Language, AppConfig, Msg, $, ApiConfig) {
'optional!/api/instance',
], function (h, Language, AppConfig, Msg, $, ApiConfig, Instance) {
var Pages = {};
Pages.setHTML = function (e, html) {
@ -73,24 +74,12 @@ define([
return select;
};
var footerCol = function (title, L, literal) {
return h('div.col-sm-3', [
h('ul.list-unstyled', [
h('li.footer-title', {
'data-localization': title,
}, title? Msg[title]: literal )
].concat(L.map(function (l) {
return h('li', [ l ]);
}))
)
]);
};
var footLink = function (ref, loc, text) {
var footLink = function (ref, loc, text, icon) {
if (!ref) { return; }
var attrs = {
href: ref,
};
var iconName = '';
if (!/^\//.test(ref)) {
attrs.target = '_blank';
attrs.rel = 'noopener noreferrer';
@ -99,68 +88,96 @@ define([
attrs['data-localization'] = loc;
text = Msg[loc];
}
return h('a', attrs, text);
if (icon) {
iconName = 'i.fa.fa-' + icon;
icon = h(iconName);
}
return h('a', attrs, [icon, text]);
};
var imprintUrl = AppConfig.imprint && (typeof(AppConfig.imprint) === "boolean" ?
'/imprint.html' : AppConfig.imprint);
Pages.versionString = "5.1.0";
Pages.versionString = "v4.12.1";
var customURLs = Pages.customURLs = {};
(function () {
var defaultURLs = {
source: 'https://github.com/xwiki-labs/cryptpad',
};
var l = Msg._getLanguage();
['imprint', 'privacy', 'terms', 'roadmap', 'source'].forEach(function (k) {
var value = AppConfig[k];
//console.log('links', k, value);
if (value === false) { return; }
if (value === true) {
customURLs[k] = defaultURLs[k];
return;
}
if (typeof(value) === 'string') {
customURLs[k] = value;
return;
}
if (typeof(value) === 'object') {
customURLs[k] = value[l] || value['default'];
}
});
var value = AppConfig.hostDescription;
Pages.hostDescription = (value && (value[l] || value.default)) || Msg.home_host;
Pages.Instance = {};
Object.keys(Instance).forEach(function (k) {
var value = Instance[k];
Pages.Instance[k] = value[l] || value.default || undefined;
});
var name;
try {
name = Pages.Instance.name || new URL('/', ApiConfig.httpUnsafeOrigin).host;
} catch (err) {
name = 'CryptPad';
}
Pages.Instance.name = name;
Pages.Instance.description = Pages.Instance.description || Msg.main_catch_phrase;
}());
// used for the about menu
Pages.imprintLink = AppConfig.imprint ? footLink(imprintUrl, 'imprint') : undefined;
Pages.privacyLink = footLink(AppConfig.privacy, 'privacy');
Pages.githubLink = footLink('https://github.com/xwiki-labs/cryptpad', null, 'GitHub');
Pages.docsLink = footLink('https://docs.cryptpad.fr', 'docs_link');
Pages.roadmapLink = footLink(AppConfig.roadmap, 'footer_roadmap');
Pages.imprintLink = footLink(customURLs.imprint, 'imprint');
Pages.privacyLink = footLink(customURLs.privacy, 'privacy');
Pages.termsLink = footLink(customURLs.terms, 'terms');
Pages.sourceLink = footLink(customURLs.source, 'footer_source');
Pages.docsLink = footLink('https://docs.cryptpad.org', 'docs_link');
Pages.roadmapLink = footLink(customURLs.roadmap, 'footer_roadmap');
Pages.infopageFooter = function () {
var terms = footLink('/terms.html', 'footer_tos'); // FIXME this should be configurable like the other legal pages
var legalFooter;
// only display the legal part of the footer if it has content
if (terms || Pages.privacyLink || Pages.imprintLink) {
legalFooter = footerCol('footer_legal', [
terms,
Pages.privacyLink,
Pages.imprintLink,
]);
var donateButton;
if (!ApiConfig.removeDonateButton) {
donateButton = footLink('https://opencollective.com/cryptpad/contribute/', 'footer_donate', null, 'money'); // TODO migrate to forkawesome and use the OpenCollective icon
}
return h('footer', [
h('div.container', [
h('div.row', [
h('div.col-sm-3', [
h('div.cp-logo-foot', [
h('img', {
src: '/customize/CryptPad_logo.svg',
"aria-hidden": true,
alt: ''
}),
h('span.logo-font', 'CryptPad')
])
], ''),
footerCol('footer_product', [
footLink('/what-is-cryptpad.html', 'topbar_whatIsCryptpad'),
Pages.docsLink,
footLink('/features.html', Pages.areSubscriptionsAllowed()? 'pricing': 'features'), // Messages.pricing, Messages.features
Pages.githubLink,
footLink('https://opencollective.com/cryptpad/contribute/', 'footer_donate'),
]),
footerCol('footer_aboutUs', [
footLink('https://blog.cryptpad.fr/', 'blog'),
footLink('/contact.html', 'contact'),
footLink('https://github.com/xwiki-labs/cryptpad/wiki/Contributors', 'footer_team'),
footLink('http://www.xwiki.com', null, 'XWiki SAS'),
Pages.roadmapLink,
]),
legalFooter,
return h('footer.cp-footer', [
h('div.cp-footer-left', [
h('a', {href:"https://cryptpad.org"}, [
h('div.cp-logo-foot', [
h('img', {
src: '/customize/CryptPad_logo.svg',
"aria-hidden": true,
alt: ''
}),
h('span.logo-font', 'CryptPad')
])
]),
h('span.cp-footer-version', 'v' + Pages.versionString)
]),
h('div.cp-footer-center', [
h('div.cp-logo-btns', [
footLink('https://cryptpad.org', null, Msg.footer_website, 'link'),
donateButton,
])
]),
h('div.cp-version-footer', [
languageSelector(),
h('span', "CryptPad " + Pages.versionString)
h('div.cp-footer-right', [
h('div.cp-footer-language', [
h('i.fa.fa-language', {'aria-hidden': 'true'}),
languageSelector()
])
])
]);
};
@ -171,90 +188,51 @@ define([
var registerLink;
if (!ApiConfig.restrictRegistration) {
registerLink = h('a.nav-item.nav-link.cp-register-btn', { href: '/register/'}, Msg.login_register);
registerLink = h('a.nav-item.nav-link.cp-register-btn', { href: '/register/'}, [
h('i.fa.fa-user', {'aria-hidden':'true'}),
Msg.login_register
]);
}
if (username === null) {
rightLinks = [
h('a.nav-item.nav-link.cp-login-btn', { href: '/login/'}, Msg.login_login),
h('a.nav-item.nav-link.cp-login-btn', { href: '/login/'}, [
h('i.fa.fa-sign-in', {'aria-hidden':'true'}),
Msg.login_login
]),
registerLink,
];
} else {
rightLinks = h('a.nav-item.nav-link.cp-user-btn', { href: '/drive/' }, [
h('i.fa.fa-user-circle'),
h('i.fa.fa-user-circle', {'aria-hidden':'true'}),
" ",
username
]);
}
var button = h('button.navbar-toggler', {
'type':'button',
/*'data-toggle':'collapse',
'data-target':'#menuCollapse',
'aria-controls': 'menuCollapse',
'aria-expanded':'false',
'aria-label':'Toggle navigation'*/
}, h('i.fa.fa-bars '));
$(button).click(function () {
if ($('#menuCollapse').is(':visible')) {
return void $('#menuCollapse').slideUp();
}
$('#menuCollapse').slideDown();
});
var isHome = ['/', '/index.html'].includes(window.location.pathname);
var homeLink = h('a.nav-item.nav-link.cp-back-home' /* .navbar-brand */, { href: '/index.html' }, [
h('i.fa.fa-arrow-left'),
h('img', {
src: '/customize/CryptPad_logo.svg',
"aria-hidden": true,
alt: ''
}),
Msg.homePage
]);
return h('nav.navbar.navbar-expand-lg',
h('a.navbar-brand', { href: '/index.html'}, [
h('img', {
src: '/customize/CryptPad_logo.svg?',
'aria-hidden': true,
alt: ''
}), 'CryptPad'
]),
button,
h('div.collapse.navbar-collapse.justify-content-end#menuCollapse', [
h('a.nav-item.nav-link', { href: '/what-is-cryptpad.html'}, Msg.about),
h('a.nav-item.nav-link', { href: 'https://docs.cryptpad.fr'}, Msg.docs_link),
h('a.nav-item.nav-link', { href: '/features.html'}, Pages.areSubscriptionsAllowed()? Msg.pricing: Msg.features),
].concat(rightLinks))
[
!isHome? homeLink: undefined,
h('a.nav-item.nav-link', { href: '/features.html'}, [
h('i.fa.fa-info-circle'),
Pages.areSubscriptionsAllowed()? Msg.pricing: Msg.features
]),
h('a.nav-item.nav-link', { href: 'https://docs.cryptpad.org'},
[h('i.fa.fa-book', {'aria-hidden':'true'}),Msg.docs_link]),
].concat(rightLinks)
);
};
Pages.crowdfundingButton = function (onClick) {
var _link = h('a', {
href: "https://opencollective.com/cryptpad/",
target: '_blank',
rel: 'noopener',
});
var crowdFunding = h('button', [
Msg.crowdfunding_button
]);
$(crowdFunding).click(function () {
_link.click();
if (typeof(onClick) === 'function') { onClick(); }
});
return crowdFunding;
};
Pages.subscribeButton = function (onClick) {
var _link = h('a', {
href: AppConfig.upgradeURL || "/accounts/",
});
var subscribe = h('button', [
Msg.features_f_subscribe,
]);
$(subscribe).click(function () {
_link.click();
if (typeof(onClick) === 'function') { onClick(); }
});
return subscribe;
};
return Pages;
});

View File

@ -7,6 +7,7 @@ define([
], function (Config, h, Msg, Pages, LocalStore) {
return function () {
document.title = Msg.contact;
var developerEmail = "contact@cryptpad.fr";
var adminEmail = Config.adminEmail && [
'i.did.not.read.my.config@cryptpad.fr',
@ -22,8 +23,8 @@ define([
]),
(adminEmail || adminMailbox) ? h('div.row.cp-iconCont.align-items-center', [
h('div.col-12',
Pages.setHTML(h('h2.text-center'), Msg.contact_admin),
h('p', Msg.contact_adminHint)
h('h2.text-center', Msg._getKey('contact_admin', [ Pages.Instance.name ])),
h('p.center', Msg.contact_adminHint)
),
adminEmail ? h('div.col-12.col-sm-6.col-md-3.col-lg-3',
h('a.card', {href : "mailto:"+Config.adminEmail},
@ -57,51 +58,10 @@ define([
h('div.row.cp-iconCont.align-items-center', [
h('div.col-12',
Pages.setHTML(h('h2.text-center'), Msg.contact_dev),
h('p', Msg.contact_devHint)
h('p.center', Msg.contact_devHint)
),
h('div.col-12.col-sm-6.col-md-3.col-lg-3',
h('a.card', {href : "https://twitter.com/cryptpad"},
h('div.card-body',
h('p', [
// this is not a typo. adblock plus blocks images with src *twitter* apparently
h('img', {
src: '/customize/images/twiitter.svg',
alt: '',
'aria-hidden': 'true'}),
'Twitter'
])
)
)
),
h('div.col-12.col-sm-6.col-md-3.col-lg-3',
h('a.card', {href : "https://social.weho.st/@cryptpad"},
h('div.card-body',
h('p', [
h('img', {
src: '/customize/images/mastodon.svg',
alt: '',
'aria-hidden': 'true'
}),
'Mastodon'
])
)
)
),
h('div.col-12.col-sm-6.col-md-3.col-lg-3',
h('a.card', {href : "https://github.com/xwiki-labs/cryptpad/issues/"},
h('div.card-body',
h('p', [
h('img', {
src: '/customize/images/github.svg',
alt: '',
'aria-hidden': 'true'}),
Msg.contact_bug || 'Bug report'
])
)
)
),
h('div.col-12.col-sm-6.col-md-3.col-lg-3',
h('a.card', {href : "https://app.element.io/#/room/#cryptpad:matrix.xwiki.com"},
h('div',
h('a.card-small', {href : "https://matrix.to/#/#cryptpad:matrix.xwiki.com"},
h('div.card-body',
h('p', [
h('img', {
@ -114,8 +74,49 @@ define([
)
)
),
h('div.col-12.col-sm-6.col-md-3.col-lg-3',
h('a.card', {href : "mailto:" + developerEmail},
h('div',
h('a.card-small', {href : "https://fosstodon.org/@cryptpad"},
h('div.card-body',
h('p', [
h('img', {
src: '/customize/images/mastodon.svg',
alt: '',
'aria-hidden': 'true'
}),
'Mastodon'
])
)
)
),
h('div',
h('a.card-small', {href : "https://twitter.com/cryptpad"},
h('div.card-body',
h('p', [
// this is not a typo. adblock plus blocks images with src *twitter* apparently
h('img', {
src: '/customize/images/twiitter.svg',
alt: '',
'aria-hidden': 'true'}),
'Twitter'
])
)
)
),
h('div',
h('a.card-small', {href : "https://github.com/xwiki-labs/cryptpad/issues/"},
h('div.card-body',
h('p', [
h('img', {
src: '/customize/images/github.svg',
alt: '',
'aria-hidden': 'true'}),
Msg.contact_bug || 'Bug report'
])
)
)
),
h('div',
h('a.card-small', {href : "mailto:" + developerEmail},
h('div.card-body',
h('p', [
h('img', {

View File

@ -12,6 +12,7 @@ define([
var accounts = Pages.accounts;
return function () {
document.title = Msg.features;
Msg.features_f_apps_note = AppConfig.availablePadTypes.map(function (app) {
if (AppConfig.registeredOnlyTypes.indexOf(app) !== -1) { return; }
if (AppConfig.premiumTypes && AppConfig.premiumTypes.includes(app)) { return; }

View File

@ -2,8 +2,6 @@ define([
'jquery',
'/api/config',
'/common/hyperscript.js',
'/common/common-feedback.js',
'/common/common-interface.js',
'/common/common-hash.js',
'/common/common-constants.js',
'/common/common-util.js',
@ -11,8 +9,8 @@ define([
'/customize/messages.js',
'/customize/application_config.js',
'/common/outer/local-store.js',
'/customize/pages.js'
], function ($, Config, h, Feedback, UI, Hash, Constants, Util, TextFit, Msg, AppConfig, LocalStore, Pages) {
'/customize/pages.js',
], function ($, Config, h, Hash, Constants, Util, TextFit, Msg, AppConfig, LocalStore, Pages) {
var urlArgs = Config.requireConf.urlArgs;
var isAvailableType = function (x) {
@ -46,8 +44,7 @@ define([
[ 'code', Msg.type.code],
[ 'form', Msg.type.form],
[ 'whiteboard', Msg.type.whiteboard],
[ 'slide', Msg.type.slide],
[ 'drive', Msg.type.drive]
[ 'slide', Msg.type.slide]
].filter(function (x) {
return isAvailableType(x[0]);
})
@ -55,6 +52,7 @@ define([
var s = 'div.bs-callout.cp-callout-' + x[0];
var cls = '';
var isEnabled = checkRegisteredType(x[0]);
var isEAEnabled = checkEarlyAccess(x[0]);
//if (i > 2) { s += '.cp-more.cp-hidden'; }
var icon = AppConfig.applicationsIcon[x[0]];
@ -62,6 +60,8 @@ define([
var href = '/'+ x[0] +'/';
var attr = isEnabled ? { href: href } : {
onclick: function () {
// if the app is not enabled then we send them to the login page
// which will redirect to the app in question ?
var loginURL = Hash.hashToHref('', 'login');
var url = Hash.getNewPadURL(loginURL, { href: href });
window.location.href = url;
@ -89,93 +89,119 @@ define([
TextFit($(a).find('.pad-button-text')[0], {minFontSize: 13, maxFontSize: 18});
});
});
UI.addTooltips();
var subscribeButton;
/* Display a subscribe button if they are enabled and the button's translation key exists */
if (Config.allowSubscriptions) {
subscribeButton = Pages.subscribeButton(function () {
Feedback.send('HOME_SUBSCRIBE_CRYPTPAD');
});
}
var isLocalURL = url => {
try {
return new URL(url, window.location.href).origin === window.location.origin;
} catch (err) {
console.error(err);
return /^\//.test(url);
}
};
var supportText = Pages.setHTML(h('span'), Msg.home_support);
Pages.documentationLink(supportText.querySelector('a'), "https://docs.cryptpad.fr/en/how_to_contribute.html");
var pageLink = function (ref, loc, text) {
if (!ref) { return; }
var attrs = {
href: ref,
};
if (!isLocalURL(ref)) {
attrs.target = '_blank';
attrs.rel = 'noopener noreferrer';
}
if (loc) {
attrs['data-localization'] = loc;
text = Msg[loc];
}
return h('a', attrs, text);
};
var opensource = Pages.setHTML(h('p'), Msg.home_opensource);
Pages.externalLink(opensource.querySelector('a'), "https://github.com/xwiki-labs/cryptpad");
var fastLink = k => pageLink(Pages.customURLs[k], k);
var blocks = [
h('div.row.cp-page-section', [
h('div.col-sm-6',
h('img.img-fluid.cp-img-invert', {
src:'/customize/images/shredder.png',
alt:'',
'aria-hidden': 'true'
})
),
h('div.col-sm-6', [
h('h2', Msg.home_privacy_title),
h('p', Msg.home_privacy_text)
])
]),
h('div.row.cp-page-section',
h('div.col-sm-12', [
h('h2', Msg.home_host_title),
h('p'), Msg.home_host
])
),
h('div.row.cp-page-section', [
h('div.col-sm-6', [
h('h2', Msg.home_opensource_title),
opensource,
h('img.small-logo.cp-img-invert', {
src: '/customize/images/logo_AGPLv3.svg',
alt: 'APGL3 License Logo'
})
]),
h('div.col-sm-6', [
h('h2', Msg.home_support_title),
supportText,
subscribeButton,
Pages.crowdfundingButton(function () {
Feedback.send('HOME_SUPPORT_CRYPTPAD');
}),
])
])
];
var imprintLink = fastLink('imprint');
var privacyLink = fastLink('privacy');
var termsLink = fastLink('terms');
var notice;
/* Admins can specify a notice to display in application_config.js via the `homeNotice` attribute.
If the text is the key for the translation system then then the most appropriate translated text
will be displayed. Otherwise, the direct text will be included as HTML.
*/
if (AppConfig.homeNotice) {
notice = h('div.alert.alert-info', Pages.setHTML(h('span'), [
Msg[AppConfig.homeNotice] || AppConfig.homeNotice
]));
if (Pages.Instance.notice) {
console.log(Pages.Instance.notice);
notice = h('div.alert.alert-info', Pages.setHTML(h('span'), Pages.Instance.notice));
}
// instance title
var instanceTitle = h('h1.cp-instance-title', Pages.Instance.name);
// instance location
var locationBlock;
if (Pages.Instance.location) {
locationBlock = h('div.cp-instance-location', [
h('i.fa.fa-map-pin', {'aria-hidden': 'true'}),
Msg._getKey('home_location', [ Pages.Instance.location ]),
]);
} else {
locationBlock = h('div', h('br'));
}
var subButton = function () {
if (Pages.areSubscriptionsAllowed() && !LocalStore.getPremium()) {
var sub = h('div.cp-sub-prompt', [
h('span', Msg.home_morestorage),
h('a', {href:"/accounts/"}, h('button', [
h('i.fa.fa-ticket'),
Msg.features_f_subscribe
]))
]);
return sub;
} else {
return h('div');
}
};
return [
h('div#cp-main', [
Pages.infopageTopbar(),
notice,
h('div.container.cp-container', [
h('div.row.cp-home-hero', [
h('div.cp-title.col-md-7', [
h('div.cp-title.col-lg-6', [
h('img', {
src: '/customize/CryptPad_logo.svg?' + urlArgs,
src: '/customize/CryptPad_logo_hero.svg?' + urlArgs,
'aria-hidden': 'true',
alt: ''
}),
h('h1', 'CryptPad'),
UI.setHTML(h('span.tag-line'), Msg.main_catch_phrase)
instanceTitle,
Pages.setHTML(h('span.tag-line'), Pages.Instance.description),
locationBlock,
h('div.cp-instance-links', [
termsLink,
privacyLink,
imprintLink,
h('a', {href:"/contact.html"}, Msg.contact)
])
]),
h('div.col-md-5.cp-app-grid', [
icons,
h('div.cp-apps.col-lg-6', [
h('div.cp-app-grid', [
h('span.cp-app-new', [
h('i.fa.fa-plus'),
Msg.fm_newFile
]),
h('div.cp-app-grid-apps', [
icons,
])
]),
h('div.cp-app-drive', [
h('a.cp-drive-btn', {'href': '/drive/'}, [
h('i.fa.fa-hdd-o', {'aria-hidden': 'true'}),
Msg.team_cat_drive
]),
subButton
])
])
]),
notice,
blocks
]),
Pages.infopageFooter(),
]),

View File

@ -6,6 +6,7 @@ define([
'/api/config',
], function (h, UI, Msg, Pages, Config) {
return function () {
document.title = Msg.login_login;
return [h('div#cp-main', [
Pages.infopageTopbar(),
h('div.container.cp-container', [
@ -13,6 +14,7 @@ define([
h('div.row', [
h('div.col-md-3'),
h('div#userForm.form-group.hidden.col-md-6', [
h('div.cp-login-instance', Msg._getKey('login_instance', [ Pages.Instance.name ])),
h('input.form-control#name', {
name: 'name',
type: 'text',
@ -32,15 +34,20 @@ define([
UI.createCheckbox('import-recent', Msg.register_importRecent),
]),
h('div.extra', [
h('button.login', Msg.login_login),
(Config.restrictRegistration?
undefined:
h('button#register.cp-secondary', Msg.login_register)
)
),
h('button.login', Msg.login_login)
])
]),
h('div.col-md-3')
]),
h('div.row', [
h('div.col-md-3'),
h('div.col-md-6', Msg.register_warning_note),
h('div.col-md-3'),
]),
]),
Pages.infopageFooter(),
])];

View File

@ -7,26 +7,26 @@ define([
'/customize/pages.js'
], function (Config, $, h, UI, Msg, Pages) {
return function () {
var urlArgs = Config.requireConf.urlArgs;
document.title = Msg.register_header;
var tos = $(UI.createCheckbox('accept-terms')).find('.cp-checkmark-label').append(Msg.register_acceptTerms).parent()[0];
var termsLink = Pages.customURLs.terms;
$(tos).find('a').attr({
href: '/terms.html',
href: termsLink,
target: '_blank',
tabindex: '-1',
});
var frame = function (content) {
return [
h('div#cp-main', [
Pages.infopageTopbar(),
h('div.container.cp-container', [
h('div.row.cp-page-title', h('h1', Msg.register_header)),
//h('div.row.cp-register-det', content),
].concat(content)),
Pages.infopageFooter(),
]),
Pages.infopageFooter(),
];
};
@ -38,6 +38,11 @@ define([
]);
}
var termsCheck;
if (termsLink) {
termsCheck = h('div.checkbox-container', tos);
}
return frame([
h('div.row.cp-register-det', [
h('div#data.hidden.col-md-6', [
@ -45,13 +50,14 @@ define([
Pages.setHTML(h('div.cp-register-notes'), Msg.register_notes)
]),
h('div.cp-reg-form.col-md-6', [
h('img.img-fluid', {
src: '/customize/images/swallow-the-key.png?' + urlArgs
}),
h('div#userForm.form-group.hidden', [
h('a', {
href: '/features.html'
}, Msg.register_whyRegister),
h('div.cp-register-instance', [
Msg._getKey('register_instance', [ Pages.Instance.name ]),
h('br'),
h('a', {
href: '/features.html'
}, Msg.register_whyRegister)
]),
h('input.form-control#username', {
type: 'text',
autocomplete: 'off',
@ -72,9 +78,7 @@ define([
h('div.checkbox-container', [
UI.createCheckbox('import-recent', Msg.register_importRecent, true)
]),
h('div.checkbox-container', [
tos,
]),
termsCheck,
h('button#register', Msg.login_register)
])
]),

View File

@ -1,23 +0,0 @@
define([
'/common/hyperscript.js',
'/customize/messages.js',
'/customize/pages.js'
], function (h, Msg, Pages) {
return function () {
return h('div#cp-main', [
Pages.infopageTopbar(),
h('div.container.cp-container', [
h('.row.cp-page-title', h('h1', Msg.tos_title)),
h('.row', [
h('p', Msg.tos_legal),
h('p', Msg.tos_availability),
h('p', Msg.tos_e2ee),
h('p', Msg.tos_logs),
h('p', Msg.tos_3rdparties),
])
]),
Pages.infopageFooter()
]);
};
});

View File

@ -1,113 +0,0 @@
define([
'/api/config',
'/common/hyperscript.js',
'/customize/messages.js',
'/customize/pages.js',
'/common/common-feedback.js',
], function (Config, h, Msg, Pages, Feedback) {
var urlArgs = Config.requireConf.urlArgs;
var logoLink = function (alt, src, url, cls) {
var img = h('img' + (cls || ''), {
src: src + '?' + urlArgs,
alt: alt,
});
if (!url) { return img; }
return h('a', { href: url, }, img);
};
return function () {
var xwiki_info = Pages.setHTML(h('span'), Msg.whatis_xwiki_info);
Pages.externalLink(xwiki_info.querySelector('a'), "https://xwiki.com");
return h('div#cp-main', [
Pages.infopageTopbar(),
h('div.container.cp-container', [
h('div.row.cp-page-title',[
h('div.col-12.text-center', h('h1', Msg.whatis_title)),
]),
h('div.row.cp-page-section', [
h('div.col-md-6', [
Pages.setHTML(h('h2'), Msg.whatis_collaboration),
Pages.setHTML(h('span'), Msg.whatis_collaboration_info),
]),
h('div.col-md-6', [
h('img.cp-img-invert', {
src: '/customize/images/collaboration.png?' + urlArgs,
alt: '',
'aria-hidden': 'true'
}),
]),
]),
h('div.row.cp-page-section', [
h('div.col-md-6.order-md-2', [
Pages.setHTML(h('h2'), Msg.whatis_apps),
Pages.setHTML(h('span'), Msg.whatis_apps_info),
]),
h('div.col-md-6.order-md-1', [
h('img', {
src: '/customize/images/apps-preview.png?' + urlArgs,
alt: '',
'aria-hidden': 'true'
}),
]),
]),
h('div.row.cp-page-section', [
h('div.col-md-6', [
Pages.setHTML(h('h2'), Msg.whatis_drive),
Pages.setHTML(h('span'), Msg.whatis_drive_info),
]),
h('div.col-md-6', [
h('img.cp-shadow', {
src: '/customize/images/drive-grid.png?' + urlArgs,
alt: '',
'aria-hidden': 'true'
}),
]),
]),
h('div.row.cp-page-section', [
h('div.col-md-6.order-md-2', [
Pages.setHTML(h('h2'), Msg.whatis_model),
Pages.setHTML(h('span'), Msg.whatis_model_info),
Config.allowSubscriptions ?
Pages.subscribeButton(function () {
Feedback.send('WHATIS_SUBSCRIBE_CRYPTPAD');
}) : undefined,
Pages.crowdfundingButton(function () {
Feedback.send('WHATIS_SUPPORT_CRYPTPAD');
}),
]),
h('div.col-md-6.order-md-1.small-logos', [
logoLink('NGI Award 2019', '/customize/images/logo_ngi.png',
'https://www.ngi.eu/', '.cp-img-invert'),
logoLink('NLnet Foundation logo', '/customize/images/logo_nlnet.svg',
'https://nlnet.nl', '.cp-img-invert'),
logoLink('BPI France logo', '/customize/images/logo_bpifrance.svg',
'https://bpifrance.com'),
logoLink('Mozilla Open Source Support logo', '/customize/images/logo_moss.jpg',
'https://www.mozilla.org/en-US/moss/'),
logoLink('NGI Trust logo', '/customize/images/logo_ngi_trust.png',
'https://www.ngi.eu/ngi-projects/ngi-trust/'),
logoLink('NGI DAPSI LOGO', '/customize/images/logo_ngi_dapsi.png',
'https://dapsi.ngi.eu/'),
]),
]),
h('div.row.cp-page-section', [
h('div.col-md-6', [
Pages.setHTML(h('h2'), Msg.whatis_xwiki),
xwiki_info,
]),
h('div.col-md-6.small-logos', [
h('img', {
src: '/customize/images/logo_XWiki.svg?' + urlArgs,
alt: 'Logo XWiki'
}),
]),
]),
]),
Pages.infopageFooter(),
]);
};
});

View File

@ -0,0 +1,58 @@
(function () {
var logoPath = '/customize/CryptPad_logo.svg';
if (location.pathname === '/' || location.pathname === '/index.html') {
logoPath = '/customize/CryptPad_logo_hero.svg';
}
var elem = document.createElement('div');
elem.setAttribute('id', 'placeholder');
elem.innerHTML = [
'<div class="placeholder-logo-container">',
'<img class="placeholder-logo" src="' + logoPath + '">',
'</div>',
'<div class="placeholder-message-container">',
'<p>Loading...</p>',
'</div>'
].join('');
var key = 'CRYPTPAD_STORE|colortheme'; // handle outer
if (localStorage[key] && localStorage[key] === 'dark') {
elem.classList.add('dark-theme');
}
if (!localStorage[key] && localStorage[key+'_default'] && localStorage[key+'_default'] === 'dark') {
elem.classList.add('dark-theme');
}
var req;
try {
req = JSON.parse(decodeURIComponent(window.location.hash.substring(1)));
if ((req.theme || req.themeOS) === 'dark') { // handle inner
elem.classList.add('dark-theme');
}
} catch (e) {}
document.addEventListener('DOMContentLoaded', function() {
document.body.appendChild(elem);
window.CP_preloadingTime = +new Date();
// soft transition between inner and outer placeholders
if (req && req.time && (+new Date() - req.time > 2000)) {
try {
var logo = document.querySelector('.placeholder-logo-container');
var message = document.querySelector('.placeholder-message-container');
logo.style.opacity = 100;
message.style.opacity = 100;
logo.style.animation = 'none';
message.style.animation = 'none';
} catch (err) {}
}
// fallback if CSS animations not available
setTimeout(() => {
try {
document.querySelector('.placeholder-logo-container').style.opacity = 100;
document.querySelector('.placeholder-message-container').style.opacity = 100;
} catch (e) {}
}, 3000);
});
}());

View File

@ -122,6 +122,7 @@
.dialog {
& > div {
background-color: @cp_alertify-bg;
border-radius: @variables_radius_L;
&.half {
width: 50%;
max-width: 50%;
@ -205,6 +206,8 @@
box-sizing: border-box;
padding: 0 15px;
cursor: pointer;
border-top-left-radius: @variables_radius;
border-top-right-radius: @variables_radius;
&:not(.disabled):hover {
background-color: @cp_alertify-hover;
}

View File

@ -1,5 +1,6 @@
@import (reference) "./tools.less";
@import (reference) "./colortheme-all.less";
@import (reference) "./variables.less";
.avatar_vars(
@width: 30px
) {
@ -24,6 +25,7 @@
font-size: 16px;
display: flex;
align-items: center;
border-radius: @variables_radius;
.cp-avatar-default, media-tag {
display: inline-flex;
@ -32,6 +34,8 @@
height: @avatar-width;
height: var(--avatar-width);
border-radius: @variables_radius;
justify-content: center;
align-items: center;

View File

@ -1,5 +1,6 @@
@import (reference) "./colortheme-all.less";
@import (reference) "./tools.less";
@import (reference) "./variables.less";
.checkmark_vars(
@size: 20px
@ -39,6 +40,9 @@
align-items: center;
position: relative;
.tools_unselectable();
.cp-checkmark-mark {
border-radius: @variables_radius;
}
& > a {
margin-left: 0.25em;

View File

@ -48,6 +48,9 @@
@cryptpad_color_black: #000;
@cryptpad_text_col: @cryptpad_color_grey_200;
@cryptpad_text_col_inv: @cryptpad_color_grey_900;
@cryptpad_ui_shadow: 0px 0px 5px 1px #00000030;
@cryptpad_color_blue: #326599; // former logo-1
@cryptpad_color_light_blue: #00b7d8;
@ -168,11 +171,13 @@
@cp_buttons-cancel-border: @cryptpad_color_grey_400;
// Sidebar layout
@cp_sidebar-left-bg: @cryptpad_color_grey_850;
@cp_sidebar-left-bg: @cryptpad_color_grey_900;
@cp_sidebar-left-fg: @cryptpad_text_col;
@cp_sidebar-left-item-bg: @cryptpad_color_grey_800;
@cp_sidebar-right-bg: @cryptpad_color_grey_900;
@cp_sidebar-right-fg: @cryptpad_text_col;
@cp_sidebar-left-active: @cp_sidebar-right-bg;
@cp_sidebar-left-active: @cryptpad_color_grey_400;
@cp_sidebar-left-active-fg: @cryptpad_color_grey_900;
@cp_sidebar-hint: fade(@cryptpad_text_col, 80%);
// Drive
@ -190,9 +195,9 @@
@cp_drive-droppable-bg: @cryptpad_color_grey_700;
@cp_drive-droppable-fg: @cryptpad_text_col;
@cp_drive-infobox-bg: @cryptpad_color_brand_fadest;
@cp_drive-infobox-fg: @cryptpad_text_col;
@cp_drive-warnbox-bg: @cryptpad_color_warn_red;
@cp_drive-warnbox-fg: @cryptpad_text_col;
@cp_drive-infobox-fg: @cryptpad_color_brand_300;
@cp_drive-warnbox-bg: @cryptpad_color_red_fader;
@cp_drive-warnbox-fg: @cryptpad_color_light_red;
@cp_drive-tree-branch: @cryptpad_text_col;
// Contextmenu
@ -232,6 +237,7 @@
// Pad Creation Screen
@cp_creation-bg: @cryptpad_color_grey_800;
@cp_creation-fg: @cryptpad_text_col;
@cp_creation-template: @cryptpad_color_grey_700;
@cp_creation-button-bg: @cryptpad_color_brand;
@cp_creation-button-fg: @cryptpad_color_white;
@cp_creation-error-bg: @cryptpad_color_blue;
@ -259,10 +265,11 @@
@cp_static-fg: @cryptpad_text_col;
@cp_static-link: @cryptpad_color_brand_300;
@cp_static-title: @cryptpad_color_brand;
@cp_static-footer: @cryptpad_color_grey_950;
@cp_static-footer: fade(@cryptpad_color_brand, 20%);
@cp_static-footer-border: @cryptpad_color_grey_600;
@cp_static-topbar-fg: @cryptpad_color_brand_300;
@cp_static-card-bg: @cryptpad_color_grey_800;
@cp_static-danger: @cryptpad_color_red_fade;
@cp_static-img-invert-filter: hue-rotate(200grad) invert();
// Limit
@ -293,9 +300,10 @@
@cp_support-header-bg: @cryptpad_color_grey_700;
// Toolbar
@cp_toolbar-bg: @cryptpad_color_grey_850;
@cp_toolbar-bg: @cryptpad_color_grey_900;
@cp_toolbar-fg: @cryptpad_text_col;
@cp_toolbar-bottom-fg: @cryptpad_text_col;
@cp_toolbar-bottom-bg: @cryptpad_text_col;
@cp_toolbar-bottom-fg: @cryptpad_color_grey_900;
@cp_toolbar-logo-bg: @cryptpad_color_grey_200;
@cp_toolbar-fade1: fade(@cryptpad_text_col, 10%);
@ -305,7 +313,7 @@
@cp_history-line-bg: @cryptpad_color_grey_900;
@cp_history-bg1: @cryptpad_color_grey_600;
@cp_history-bg2: @cryptpad_color_grey_800;
@cp_history-fg: @cp_toolbar-bottom-fg;
@cp_history-fg: @cp_toolbar-fg;
// Tokenfield
@cp_token-bg: @cryptpad_color_grey_700;
@ -371,8 +379,10 @@
@cp_kanban-tags-bg: @cryptpad_color_grey_700;
@cp_kanban-add-hover: fade(@cryptpad_color_black, 10%);
@cp_kanban-trash-bg: @cryptpad_color_warn_red;
@cp_kanban-color0: @cryptpad_color_grey_600;
@cp_kanban-colors: @cp_palette-dark;
@cp_kanban-color0: @cryptpad_color_grey_400;
@cp_kanban-colors: @cp_palette;
@cp_kanban-card-colors: @cp_palette-dark;
// Notifications
@cp_notif-hover: fade(@cryptpad_color_black, 10%);
@ -417,7 +427,7 @@
// Teams
@cp_teams-card-bg: @cryptpad_color_grey_800;
@cp_teams-leftside-bg: darken(@cryptpad_color_grey_800, 10%);
@cp_teams-leftside-bg: @cp_sidebar-left-bg;
@cp_teams-invite-bg: fade(@cryptpad_color_brand, 50%);
@cp_teams-invite-fg: @cryptpad_text_col;
@cp_teams-roster-odd: fade(@cryptpad_text_col, 15%);

View File

@ -48,6 +48,9 @@
@cryptpad_color_black: #000;
@cryptpad_text_col:@cryptpad_color_grey_800;
@cryptpad_text_col_inv: @cryptpad_color_grey_50;
@cryptpad_ui_shadow: 0px 0px 5px 1px #00000030;
@cryptpad_color_blue: #326599; // former logo-1
@cryptpad_color_light_blue: #00b7d8;
@ -167,11 +170,13 @@
@cp_buttons-cancel-border: #949494;
// Sidebar layout
@cp_sidebar-left-bg: @cryptpad_color_grey_200;
@cp_sidebar-left-bg: @cryptpad_color_white;
@cp_sidebar-left-fg: @cryptpad_text_col;
@cp_sidebar-left-item-bg: @cryptpad_color_grey_200;
@cp_sidebar-right-bg: @cryptpad_color_white;
@cp_sidebar-right-fg: @cryptpad_text_col;
@cp_sidebar-left-active: @cp_sidebar-right-bg;
@cp_sidebar-left-active: @cryptpad_color_grey_700;
@cp_sidebar-left-active-fg: @cryptpad_color_grey_200;
@cp_sidebar-hint: @cryptpad_color_grey_600;
// Drive
@ -190,8 +195,8 @@
@cp_drive-droppable-fg: @cryptpad_text_col;
@cp_drive-infobox-bg: @cryptpad_color_brand_fadest;
@cp_drive-infobox-fg: @cryptpad_text_col;
@cp_drive-warnbox-bg: @cryptpad_color_warn_red;
@cp_drive-warnbox-fg: @cryptpad_text_col;
@cp_drive-warnbox-bg: @cryptpad_color_light_red_fade;
@cp_drive-warnbox-fg: darken(@cp_alerts-danger-fg, 55%);
@cp_drive-tree-branch: @cryptpad_text_col;
// Contextmenu
@ -231,6 +236,7 @@
// Pad Creation Screen
@cp_creation-bg: @cryptpad_color_white;
@cp_creation-fg: @cryptpad_text_col;
@cp_creation-template: @cryptpad_color_grey_100;
@cp_creation-button-bg: @cryptpad_color_brand;
@cp_creation-button-fg: @cryptpad_color_white;
@cp_creation-error-bg: @cryptpad_color_blue;
@ -258,15 +264,16 @@
@cp_static-fg: @cryptpad_text_col;
@cp_static-link: @cryptpad_color_brand;
@cp_static-title: @cryptpad_color_brand;
@cp_static-footer: @cryptpad_color_grey_300;
@cp_static-footer: fade(@cryptpad_color_brand_300, 30%);
@cp_static-footer-border: @cryptpad_color_white;
@cp_static-topbar-fg: @cryptpad_color_brand;
@cp_static-card-bg: @cryptpad_color_white;
@cp_static-danger: fade(@cryptpad_color_red, 30%);
@cp_static-img-invert-filter: none;
// Limit
@cp_limit-fg: @cryptpad_text_col;
@cp-limit-bar-bg: @cryptpad_color_white;
@cp-limit-bar-bg: @cryptpad_color_grey_200;
@cp-limit-bar-normal: @cryptpad_color_green;
@cp-limit-bar-warning: @cryptpad_color_orange;
@cp-limit-bar-above: @cryptpad_color_red;
@ -292,8 +299,9 @@
@cp_support-header-bg: @cryptpad_color_grey_300;
// Toolbar
@cp_toolbar-bg: @cryptpad_color_grey_200;
@cp_toolbar-bg: @cryptpad_color_white;
@cp_toolbar-fg: @cryptpad_text_col;
@cp_toolbar-bottom-bg: @cryptpad_color_grey_200;
@cp_toolbar-bottom-fg: @cryptpad_text_col;
@cp_toolbar-logo-bg: @cryptpad_color_white;
@ -304,7 +312,7 @@
@cp_history-line-bg: @cryptpad_color_white;
@cp_history-bg1: #DDD;
@cp_history-bg2: #BBB;
@cp_history-fg: @cp_toolbar-bottom-fg;
@cp_history-fg: @cp_toolbar-fg;
// Tokenfield
@cp_token-bg: @cryptpad_color_grey_400;
@ -318,10 +326,10 @@
@cp_usergrid-selected-fg: @cryptpad_color_white;
// Other
@cp_shadow-color: fade(@cryptpad_color_black, 30%);
@cp_shadow-color: fade(@cryptpad_color_black, 20%);
// Apps
@cp_app-bg: @cryptpad_color_grey_100;
@cp_app-bg: @cryptpad_color_white;
@cp_app-fg: @cryptpad_text_col;
// Accounts
@ -372,6 +380,7 @@
@cp_kanban-trash-bg: @cryptpad_color_warn_red;
@cp_kanban-color0: @cryptpad_color_grey_400;
@cp_kanban-colors: @cp_palette;
@cp_kanban-card-colors: @cp_palette;
// Notifications
@cp_notif-hover: fade(@cryptpad_color_black, 10%);
@ -416,7 +425,7 @@
// Teams
@cp_teams-card-bg: @cryptpad_color_grey_300;
@cp_teams-leftside-bg: darken(@cryptpad_color_grey_200, 5%);
@cp_teams-leftside-bg: @cp_sidebar-left-bg;
@cp_teams-invite-bg: fade(@cryptpad_color_brand, 50%);
@cp_teams-invite-fg: @cryptpad_text_col;
@cp_teams-roster-odd: fade(@cryptpad_text_col, 15%);

View File

@ -98,6 +98,8 @@
background-color: @cp_comments-bg;
position: relative;
padding: 5px;
border-top-left-radius: @variables_radius;
border-top-right-radius: @variables_radius;
box-sizing: content-box;
.avatar_main(40px);
.cp-comment-metadata {
@ -114,8 +116,8 @@
cursor: pointer;
outline: none;
position: absolute;
right: 0;
top: 0;
right: 5px;
top: 5px;
width: 20px;
height: 20px;
text-align: center;
@ -128,6 +130,8 @@
.cp-comment-content {
background-color: @cp_comments-bg;
padding: 0px 5px 5px 5px;
border-bottom-left-radius: @variables_radius;
border-bottom-right-radius: @variables_radius;
white-space: pre-wrap;
word-break: break-word;
}
@ -150,6 +154,7 @@
}
.cp-comment-active {
background-color: rgba(0,0,0,0.2);
border-radius: @variables_radius;
.cp-comment-actions {
display: block;
}

View File

@ -1,4 +1,5 @@
@import (reference) "./colortheme-all.less";
@import (reference) "./variables.less";
.contextmenu_main() {
--LessLoader_require: LessLoader_currentFile();
@ -11,11 +12,14 @@
& > ul {
border: 1px solid @cp_context-border;
background-color: @cp_context-bg;
border-radius: 0px;
border-radius: @variables_radius;
.dropdown-divider {
border-top: 1px solid @cp_context-border;
}
}
.dropdown-menu {
padding: 6px 0px;
}
li {
padding: 0;
font-size: @colortheme_app-font-size;
@ -38,7 +42,7 @@
top: -0.7rem;
left: 100%;
background-color: @cp_context-bg;
border-radius: 0px;
border-radius: @variables_radius;
border: 1px solid @cp_context-border;
}
}
@ -46,6 +50,7 @@
cursor: pointer;
color: @cp_context-fg;
padding-left: 10px;
border-radius: @variables_radius;
&:hover {
background-color: @cp_context-bg-hover;
color: @cp_context-fg;

View File

@ -1,4 +1,5 @@
@import (reference) "./colortheme-all.less";
@import (reference) "./variables.less";
.corner_main() {
--LessLoader_require: LessLoader_currentFile();
@ -40,6 +41,7 @@
transform-origin: bottom right;
animation: appear 0.8s ease-in-out;
border: 1px solid @corner-fg;
border-radius: @variables_radius;
box-shadow: 0 0 10px 0 @cp_shadow-color;
&.cp-corner-alt {
@ -116,6 +118,7 @@
}
text-transform: uppercase;
border: 1px solid @corner-fg;
border-radius: @variables_radius;
.fa, .cptools {
margin-right: 0.3em;
}

View File

@ -3,6 +3,7 @@
@import (reference) "./tools.less";
@import (reference) './icon-colors.less';
@import (reference) "./avatar.less";
@import (reference) "./variables.less";
.creation_vars(
@bg-color: @colortheme_apps[default]
@ -63,6 +64,7 @@
width: 700px;
max-width: 90vw;
height: 500px;
border-radius: @variables_radius_L;
max-height: ~"calc(100vh - 20px)";
margin: 0px;
flex-shrink: 0;
@ -131,6 +133,7 @@
color: @cp_creation-button-fg;
margin: 3px 10px;
border: none;
border-radius: @variables_radius;
cursor: pointer;
outline: none;
text-transform: uppercase;
@ -256,6 +259,7 @@
}
select {
margin-right: 5px;
border-radius: @variables_radius;
}
}
&.active {
@ -325,11 +329,12 @@
max-height: 159px;
align-items: center;
.cp-creation-template-element {
box-shadow: 2px 2px 7px @cp_shadow-color;
box-shadow: @cryptpad_ui_shadow;
width: 300px;
max-width: calc(100% - 10px);
padding: 2px;
padding: 5px;
margin: 5px;
border-radius: @variables_radius;
display: inline-flex;
box-sizing: border-box;
@ -337,7 +342,7 @@
text-align: left;
line-height: 1em;
cursor: pointer;
background-color: @cp_creation-template;
color: @creation-color;
color: var(--creation-color);
border: 1px solid transparent;

View File

@ -121,6 +121,9 @@
.cp-app-drive-tree-category {
margin-top: 0.5em;
}
.cp-splitter {
display: none;
}
}
}
}
@ -164,6 +167,10 @@
.cptools {
color: @cp_drive-selected-fg;
}
&.cp-app-drive-element-active {
background: @cp_drive-selected-bg !important;
color: @cryptpad_text_col !important;
}
}
.cp-app-drive-element-selected-tmp {
@ -265,12 +272,11 @@
box-sizing: border-box;
background: @cp_sidebar-left-bg;
overflow: auto;
resize: horizontal;
width: auto;
white-space: nowrap;
max-width: 500px;
min-width: 200px;
padding: 0px;
padding: 10px 0px 0px 0px;
color: @cp_sidebar-left-fg;
display: flex;
flex-flow: column;
@ -279,6 +285,7 @@
.cp-app-drive-tree-categories-container {
flex: 1;
overflow: auto;
padding: 0px 5px;
}
img.cp-app-drive-icon {
margin-bottom: 3px;
@ -288,6 +295,8 @@
margin-top: 15px;
//padding: 0 0 0 20px;
padding: 0;
background-color: @cp_sidebar-left-item-bg;
border-radius: @variables_radius;
cursor: auto;
&li, li {
padding: 0;
@ -295,7 +304,6 @@
display: none;
}
input {
//width: ~"calc(100% - 30px)";
flex: 1;
min-width: 0;
padding: 0 10px;
@ -305,11 +313,8 @@
& > span.cp-app-drive-element-row {
overflow: hidden;
text-overflow: ellipsis;
//min-width: ~"calc(100% + 5px)";
.leftside-menu-category_main();
width: ~"calc(100% + 5px)";
margin: 0;
//margin-bottom: -6px;
display: flex;
align-items: center;
cursor: pointer;
@ -318,8 +323,9 @@
.fa, .cptools {
display: inline-block;
min-width: 0;
width: 25px;
width: 20px;
margin-right: 0px;
z-index: 99;
}
.cp-app-drive-element {
flex: 1;
@ -335,7 +341,10 @@
}
.cp-app-drive-tree-category {
margin: 0;
margin-top: 15px;
margin-top: 10px;
background-color: @cp_sidebar-left-item-bg;
border-radius: @variables_radius;
box-shadow: @cryptpad_ui_shadow;
.cp-app-drive-tree-root {
.fa-trash-o {
padding-left: 2px;
@ -361,11 +370,11 @@
margin-left: -10px;
font-size: 14px;
position: absolute;
left: -20px;
top: 10px;
left: -17px;
top: 11px;
width: 11px !important;
height: 11px !important;
background-color: @cp_sidebar-left-bg;
background-color: @cp_sidebar-left-item-bg;
padding: 0;
margin: 0;
z-index: 10;
@ -376,17 +385,35 @@
}
}
.cp-app-drive-tree-docs {
box-shadow: @cryptpad_ui_shadow;
.cp-app-drive-element-row {
&.cp-leftside-active {
.cp-app-drive-icon-expcol {
color: @cryptpad_text_col; // +/- expand icon for folders
}
}
}
.cp-app-drive-tree-root > .cp-app-drive-element-row {
margin-left: 0px;
&.cp-app-drive-element-active {
.cp-app-drive-icon-expcol {
color: @cp_sidebar-left-active-fg; // +/- expand icon for drive
}
}
}
.cp-app-drive-tree-root > .cp-app-drive-element-row > .cp-app-drive-icon-expcol {
position: relative;
top: 0;
left: -10px;
background-color: transparent;
}
.cp-app-drive-tree-root > .cp-app-drive-element-row > .cp-app-drive-icon-folder {
margin-left: -5px;
}
.cp-app-drive-tree-root {
&> .cp-app-drive-element-row {
padding-left: 20px;
padding-left: 15px;
}
&> ul {
padding-left: 30px;
@ -403,8 +430,8 @@
position: relative;
&:before {
position: absolute;
left: -15px;
top: -11px;
left: -12px;
top: -10px;
content: '';
display: block;
border-left: 1px solid @cp_drive-tree-branch;
@ -414,7 +441,7 @@
}
&:after {
position: absolute;
left: -15px;
left: -12px;
bottom: -7px;
content: '';
display: block;
@ -441,13 +468,40 @@
#cp-app-drive-content-container {
display: flex;
flex-flow: column;
flex: 1 1 100%;
flex: 1;
min-width: 0;
position: relative;
.cp-splitter {
position: absolute;
height: 100%;
width: 8px;
top: 0;
left: 0;
cursor: col-resize;
display: flex;
align-items: center;
justify-content: flex-end;
&:hover {
border-left: 1px solid @cryptpad_text_col;
}
i {
color: @cryptpad_text_col;
font-size: 1.6rem;
}
}
&.cp-app-drive-readonly { // applied to offline drive (not read-only shared folders)
#cp-app-drive-content-folder {
opacity: 0.5;
}
// background: contrast(@cp_sidebar-right-bg, darken(@cp_sidebar-right-bg, 10%), lighten(@cp_sidebar-right-bg, 10%));
}
}
#cp-app-drive-content {
box-sizing: border-box;
background: @cp_sidebar-right-bg;
color: @cp_sidebar-right-fg;
padding-top: 10px;
overflow-y: auto;
flex: 1;
display: flex;
@ -459,9 +513,6 @@
position: absolute;
z-index: 50;
}
&.cp-app-drive-readonly {
background: contrast(@cp_sidebar-right-bg, darken(@cp_sidebar-right-bg, 10%), lighten(@cp_sidebar-right-bg, 10%));
}
h1 {
padding-left: 10px;
margin-top: 10px;
@ -473,6 +524,7 @@
margin: 1em;
background: @cp_drive-infobox-bg;
color: @cp_drive-infobox-fg;
border-radius: @variables_radius;
cursor: default;
a {
color: @cryptpad_color_link;
@ -570,6 +622,7 @@
}
.drive_fileIcon;
li {
border-radius: @variables_radius;
&.cp-app-drive-element {
position: relative;
}
@ -639,6 +692,7 @@
}
li {
display: flex;
border-radius: @variables_radius;
input {
border: 1px solid transparent;
margin: 0;
@ -727,6 +781,7 @@
}
&> span {
padding: 14px 5px;
border-radius: @variables_radius;
&.cp-app-drive-sort-clickable {
cursor: pointer;
&:hover {
@ -858,6 +913,7 @@
flex-flow: column;
li, li .fa, li .cptools {
cursor: pointer;
border-radius: @variables_radius;
}
&> p {
display: flex;
@ -912,6 +968,18 @@
.cp-toolbar-bottom {
.cp-toolbar-bottom-left {
@drive-light: lighten(@cryptpad_color_brand, 30%);
.cp-app-drive-toolbar-new {
border-radius: @variables_radius;
color: @cryptpad_color_grey_900;
border-color: @drive-light;
background-color: @drive-light;
&:hover {
background-color: fade(@drive-light, 80%);
}
}
}
.cp-toolbar-bottom-right {
.fa-history { order: 50; }
// .fa-list, .fa-th-large,

View File

@ -60,6 +60,8 @@
position: absolute;
background-color: @cp_dropdown-bg;
min-width: 250px;
padding: 5px;
border-radius: @variables_radius;
box-shadow: 0px 1px 5px 0px rgba(0, 0, 0, 0.2);
z-index: 1000; //Z dropdown content
max-height: 300px;
@ -77,7 +79,8 @@
& > a, & > span {
color: @cp_dropdown-fg;
padding: 5px 16px;
border-radius: @variables_radius;
padding: 5px;
text-decoration: none;
display: flex;
cursor: pointer;
@ -160,7 +163,6 @@
height: 1px;
background: @cp_dropdown-bg-active;
border: 0 !important;
border-top: 1px solid rgba(0,0,0,.1) !important;
& + hr {
display: none;
}

View File

@ -1,6 +1,7 @@
@import (reference) "./browser.less";
@import (reference) './colortheme-all.less';
@import (reference) './modal.less';
@import (reference) './variables.less';
.fileupload_main () {
--LessLoader_require: LessLoader_currentFile();
@ -13,6 +14,7 @@
position: absolute;
right: 10vw;
bottom: 10vh;
border-radius: @variables_radius;
box-sizing: border-box;
z-index: 100001; //Z file upload table container: just above the file picker
display: none;
@ -88,6 +90,7 @@
height: 100%;
background-color: @cp_upload-progress;
z-index: -1; //Z file upload progress container
border-radius: @variables_radius;
}
.cp-fileupload-table-cancel {
text-align: center;

View File

@ -14,6 +14,7 @@
color: @cp_forms-fg;
background-color: @cp_forms-bg;
border: 1px solid @cp_forms-border;
border-radius: @variables_radius;
font-size: 100%;
padding: @alertify_padding-base;
&:not(.tui-full-calendar-content) {
@ -39,6 +40,7 @@
input {
margin: 0 !important;
flex: 1;
border-radius: @variables_radius 0 0 @variables_radius !important;
min-width: 0;
}
span {
@ -47,6 +49,7 @@
height: 100%;
margin-left: -1px;
text-transform: unset !important;
border-radius: 0 @variables_radius @variables_radius 0;
}
}
}
@ -79,11 +82,15 @@
}
button {
margin: 0 !important;
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.cp-button-timer {
height: 3px;
& > div {
height: 100%;
border-bottom-left-radius: 3px;
border-bottom-right-radius: 3px;
background-color: @cp_buttons-primary;
&.danger, &.btn-danger, &.danger-alt, &.btn-danger-alt {
background-color: @cp_buttons-red;
@ -109,7 +116,7 @@
font-size: 14px;
text-decoration: none;
cursor: pointer;
border-radius: 0;
border-radius: @variables_radius;
transition: none;
i, .fa, .cptools {
@ -230,7 +237,7 @@
margin: 0px 0px @alertify_padding-base 0px;
font-size: 12px;
padding: 5px;
border-radius: 0px;
border-radius: @variables_radius;
i {
margin-right: 10px;
}
@ -288,9 +295,11 @@
font-weight: bold;
text-transform: uppercase;
cursor: default;
border-radius: @variables_radius;
&.cp-banner-danger {
background-color: @cp_drive-warnbox-bg;
color: @cp_drive-warnbox-fg;
border: 1px solid @cp_drive-warnbox-fg;
}
&.cp-banner-info {
background-color: @cp_drive-infobox-bg;
@ -303,7 +312,7 @@
.flatpickr-calendar {
background: @cp_flatpickr-bg;
color: @cryptpad_text_col;
border-radius: 0;
border-radius: @variables_radius;
box-shadow: @variables_shadow;
-webkit-box-shadow: @variables_shadow;
&.arrowTop::before, &.arrowTop::after {

View File

@ -11,6 +11,7 @@
padding-top: 5px;
padding-bottom: 5px;
border: 1px solid transparent;
border-radius: @variables_radius;
.cp-icons-name {
width: 100%;

View File

@ -1,6 +1,9 @@
@import (reference) "./colortheme-all.less";
@import (reference) "./font.less";
@infopages-radius: 5px;
@infopages-radius-L: 10px;
.infopages_link () {
text-decoration: none;
color: @cryptpad_color_link;
@ -11,7 +14,7 @@
}
}
.cp-shadow() {
box-shadow: 0px 0px 25px 0px @cp_shadow-color;
box-shadow: 0px 0px 20px 0px @cp_shadow-color;
}
.infopages_main () {
@ -52,7 +55,7 @@ body.html {
padding-top: @infopages_padding;
padding-bottom: @infopages_padding;
min-height: 75vh;
max-width: 950px;
max-width: 1200px;
h1 {
font-size: 3em;
margin-bottom: 0.5em;
@ -109,7 +112,7 @@ body.html {
border: none;
padding: 10px 20px;
margin-right: 10px;
border-radius: 0px;
border-radius: @infopages-radius;
cursor: pointer;
&:hover, &:focus {
background-color: contrast(@cp_buttons-primary-text, darken(@cp_buttons-primary, 10%), lighten(@cp_buttons-primary, 10%));
@ -122,9 +125,9 @@ body.html {
}
.form-group {
& > * {
margin-top: 0.5em;
}
// & > * {
// margin-bottom: 0.5em;
// }
display: flex;
flex-direction: column;
align-items: center;
@ -142,56 +145,103 @@ body.html {
}
}
footer {
background-color: @cp_static-footer;
padding-top: 20px;
align-self: normal; // override align-items:center from parent in index.html
.container {
margin-bottom: 20px;
box-shadow: inset 0px 7px 15px -7px rgba(0,0,0,0.3);
display: flex;
align-items: center;
justify-content: space-between;
flex-direction: row;
flex-wrap: wrap;
.cp-footer-left, .cp-footer-center, .cp-footer-right {
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
a {
color: @cp_static-link;
&:visited {
color: @cp_static-link;
}
margin-right: 10px;
}
}
.cp-logo-foot {
display: flex;
flex-flow: column;
width: 100%;
flex-flow: row;
align-items: center;
padding: 10px;
img {
max-width: 60px;
display: block;
max-height: 40px;
margin-right: 10px;
}
.logo-font {
display: block;
font-family: "IBM Plex Mono";
font-size: 1.5rem;
color: @cp_static-title;
margin-bottom: 10px;
color: @cryptpad_text_col;
height: 40px;
}
}
.cp-version-footer {
background-color: @cp_static-footer;
display: flex;
flex-flow: column;
align-items: center;
padding: 0.5em;
border-top: 1px solid @cp_static-footer-border;
.cp-logo-btns {
padding: 10px;
a {
background-color: @cryptpad_color_link;
color: @cryptpad_text_col_inv;
border-radius: @infopages-radius;
padding: 0.5em 0.7em;
white-space: nowrap;
display: inline-block;
i {
margin-right: 5px;
}
&:hover {
background-color: @cp_static-card-bg;
color: @cryptpad_text_col;
text-decoration: none;
}
}
}
.cp-footer-language {
padding: 10px;
margin-right: 10px;
i {
font-size: 1.3em;
margin-right: 5px;
}
select {
min-width: 0;
margin-bottom: 10px;
background-color: @cp_static-card-bg;
color: @cryptpad_text_col;
border: 0px;
border-radius: @infopages-radius;
padding: 0.5em 0.7em;
}
}
.cp-footer-version {
padding: 10px;
font-family: 'IBM Plex Mono';
}
// .cp-version-footer {
// background-color: @cp_static-footer;
// display: flex;
// flex-flow: column;
// align-items: center;
// padding: 0.5em;
// border-top: 1px solid @cp_static-footer-border;
// select {
// min-width: 0;
// margin-bottom: 10px;
// }
// }
}
// navigation top bar
.navbar {
width: 100%;
color: @cp_static-topbar-fg;
justify-content: flex-end;
.navbar-brand {
display: block;
height: 50px;
@ -208,20 +258,39 @@ body.html {
margin-right: 0;
}
a {
border: 2px solid transparent;
//border: 2px solid transparent;
white-space: nowrap;
color: @cp_static-title;
background-color: @cp_static-card-bg;
border-radius: @infopages-radius;
}
.nav-link {
padding: 0.5em 0.7em;
margin: 5px;
color: @cp_static-link;
display: inline-block;
img {
max-height: 30px;
margin-right: 10px;
}
&.cp-back-home {
margin-right: auto;
}
&:hover {
color: @cryptpad_text_col;
}
i {
margin-right: 5px;
}
}
.cp-register-btn {
border: 2px solid @cp_static-topbar-fg;
background-color: @cp_static-topbar-fg;
color: @cp_static-bg;
display: inline-block;
&:hover {
background-color: @cp_static-card-bg;
color: @cryptpad_text_col;
}
}
button:focus {
outline: none;
@ -231,26 +300,5 @@ body.html {
color: @cp_static-topbar-fg;
}
}
@media (max-width: 1000px) {
#menuCollapse {
text-align: right;
/* @media (min-width: 576px) {
top: 100%;
background: rgba(255,255,255,0.8);
position: absolute;
right: 0px;
padding: 0 20px;
z-index: 1;
}
*/
}
.navbar-nav a {
text-align: right !important;
}
.cp-register-btn {
margin-right: 13px;
text-align: center;
}
}
}

View File

@ -4,20 +4,23 @@
.leftside-menu-category_main() {
.unselectable_make();
padding: 5px 15px;
margin: 15px 0;
padding: 5px;
margin: 10px 0;
cursor: pointer;
height: @variables_bar-height;
border-radius: @variables_radius;
background-color: @cp_sidebar-left-item-bg;
.fa, .cptools {
display: inline-flex;
justify-content: center;
margin-right: 5px;
min-width: 25px;
min-width: 20px;
}
&:hover {
background: fade(@cryptpad_text_col, 10%);
background: @cryptpad_text_col_inv;
}
&.cp-leftside-active {
background: @cp_sidebar-left-active;
color: @cp_sidebar-left-active-fg;
}
}

View File

@ -1,4 +1,5 @@
@import (reference) "./colortheme-all.less";
@import (reference) "./variables.less";
.limit-bar_main () {
--LessLoader_require: LessLoader_currentFile();
@ -23,6 +24,7 @@
width: ~"calc(100% - 10px)";
height: 10px;
overflow: hidden;
border-radius: @variables_radius;
.cp-limit-usage {
height: 10px;
display: inline-block;
@ -65,7 +67,7 @@
padding-bottom: 0;
justify-content: center;
flex: 1;
border-radius: 0px;
border-radius: @variables_radius;
}
}
}

View File

@ -96,6 +96,7 @@
background: @cp_loading-msg-bg;
padding: 20px;
width: 100%;
border-radius: @variables_radius;
color: @cp_loading-fg;
text-align: left;
display: none;
@ -180,6 +181,7 @@
height: 24px;
background: @cp_loading-progress-bg;
border: 1px solid @cp_loading-progress-bar-bg;
border-radius: @variables_radius;
}
.cp-loading-progress-bar-value {
height: 100%;

View File

@ -15,7 +15,14 @@
margin-bottom: 10px !important;
}
}
// todo ul, ol
// fix silly spacing around sublists in "loose lists"
:is(ul, ol) li > p {
& + :is(ul, ol) {
margin-bottom: 1rem;
}
}
// TOC
div.cp-md-toc {
background: @cp_markdown-bg;
@ -117,6 +124,11 @@
}
}
text {
&.taskText {
&[class*="doneText"], &[class*="activeText"] {
fill: #444 !important; // XXX PR to mermaid or find a suitable variable
}
}
&.titleText {
fill: @cp_markdown-block-fg;
}
@ -132,6 +144,24 @@
g.legend text, text.pieTitleText {
fill: @cp_markdown-block-fg;
}
g.legend rect {
stroke: @cryptpad_text_col !important;
stroke-width: 1px;
}
.pieCircle {
stroke: @cryptpad_text_col;
}
text.slice {
fill: @cryptpad_text_col;
}
}
&[mermaid-source^="erDiagram"] {
rect.er:not(.relationshipLabelBox) {
fill: #ECECFF;
}
g text.er {
fill: #333;
}
}
}
pre.markmap {

View File

@ -39,6 +39,7 @@
background-color: @cp_alertify-bg;
color: @cp_alertify-fg;
box-shadow: @variables_shadow;
border-radius: @variables_radius;
padding: @variables_padding;
padding-top: @variables_padding * 2;

View File

@ -41,6 +41,7 @@
.cp-app-prop-size-container {
height: 20px;
background-color: @cryptpad_color_brand;
border-radius: @variables_radius;
margin: 10px 0;
padding: 0;
div {
@ -48,6 +49,8 @@
margin: 0;
padding: 0;
background-color: @cryptpad_color_grey_500;
border-top-left-radius: @variables_radius;
border-bottom-left-radius: @variables_radius;
}
}
.cp-app-prop-size-legend {
@ -65,6 +68,7 @@
height: 20px;
width: 20px;
margin-right: 10px;
border-radius: @variables_radius;
}
.cp-app-prop-history-size-color {
background-color: @cryptpad_color_grey_500;
@ -159,6 +163,7 @@
align-items: center;
padding: 5px 0;
outline: none;
border-radius: @variables_radius;
& > i {
margin-left: @snapshot_spacing;
text-align: center;

View File

@ -24,12 +24,14 @@
background: @cp_sidebar-left-bg;
display: flex;
flex-flow: column;
padding: 0px 5px;
.cp-sidebarlayout-categories {
flex: 1;
.cp-sidebarlayout-category {
display: flex;
align-items: center;
.leftside-menu-category_main();
box-shadow: @cryptpad_ui_shadow;
}
}
&.cp-leftside-narrow {
@ -111,10 +113,12 @@
//border-radius: 0.25em 0 0 0.25em;
border: 1px solid @cryptpad_color_grey_500;
border-right: 0px;
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
}
button {
//border-radius: 0 0.25em 0.25em 0;
//border: 1px solid #adadad;
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
border-left: 0px;
height: 40px;
margin: 0 !important;

View File

@ -42,10 +42,11 @@
width: 1200px;
max-width: 90%;
margin: 5px auto;
border-radius: @variables_radius;
.cp-support-list-message {
background-color: @msg-bg;
margin: 2px;
padding: 2px 5px;
padding: 5px 5px;
border-radius: @variables_radius;
.cp-support-fromme {
background-color: @fromme-bg;
}
@ -73,6 +74,7 @@
.cp-support-list-actions {
display: flex;
order: 3;
margin-top: 5px;
.cp-support-hide {
display: none;
}

View File

@ -1,4 +1,5 @@
@import (reference) './colortheme-all.less';
@import (reference) './variables.less';
.tippy_main() {
--LessLoader_require: LessLoader_currentFile();
@ -6,7 +7,7 @@
& {
.tippy-tooltip.cryptpad-theme {
background-color: @cp_tooltip-bg;
border-radius: 0px;
border-radius: @variables_radius;
color: @cp_tooltip-fg;
overflow-wrap: break-word;
[x-circle] {

View File

@ -1,5 +1,6 @@
@import (reference) "./colortheme-all.less";
@import (reference) "./tools.less";
@import (reference) "./variables.less";
.tokenfield_main () {
--LessLoader_require: LessLoader_currentFile();
@ -35,6 +36,12 @@
flex: 1;
min-width: 0 !important;
}
button {
// no radius in input + button combo
// input .token-input is styled at the bottom of this file
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
}
}
.token {
box-sizing: border-box;
@ -45,6 +52,7 @@
margin: 2px 0;
margin-right: 5px;
height: 24px;
border-radius: @variables_radius;
vertical-align: middle;
cursor: default;
color: @cp_token-fg;
@ -92,6 +100,8 @@
max-width: 100%;
width: 100%;
min-width: 100% !important;
border-top-right-radius: 0px !important;
border-bottom-right-radius: 0px !important;
&:focus {
outline: 0;
box-shadow: none;

View File

@ -1,4 +1,5 @@
@import (reference) "./colortheme-all.less";
@import (reference) "./variables.less";
.history_main () {
--LessLoader_require: LessLoader_currentFile();
@ -88,13 +89,20 @@
}
button {
margin: 0 5px;
border: 1px solid @cryptpad_text_col;
border: 1px solid @cp_toolbar-fg;
background-color: @cp_toolbar-bg;
color: @cp_toolbar-fg;
border-radius: @variables_radius;
text-transform: uppercase;
display: inline-flex;
align-items: center;
.fa:not(:last-child) {
margin-right: 5px;
}
&:hover {
// XXX DB: check hover in light/dark themes
background-color: fade(@cp_toolbar-fg, 30%);
}
&:disabled {
cursor: not-allowed !important;
opacity: 0.6;
@ -233,9 +241,11 @@
display: flex;
justify-content: space-between;
align-items: center;
margin-left: 40px;
margin: 5px 0px 5px 40px;
button {
width: 50px;
color: @cp_toolbar-fg;
border-radius: @variables_radius;
.fa:first-child:not(:last-child) {
margin-right: 5px;
}

View File

@ -15,9 +15,9 @@
@bg-color: @colortheme_apps[default], // color of the toolbar background
) {
@toolbar-bg-color: @bg-color;
@desat-color: desaturate(@bg-color, 20%);
@toolbar-bg-color-light: contrast(@cp_toolbar-fg, lighten(@bg-color, 30%), darken(@desat-color, 20%));
@toolbar-bg-color-active: contrast(@cp_toolbar-fg, lighten(@bg-color, 20%), darken(@desat-color, 10%));
// XXX: check contrasts of app colors used as btn background
@toolbar-bg-color-light: lighten(@bg-color, 30%);
@toolbar-bg-color-fade: fade(@toolbar-bg-color-light, 60%);
};
.toolbar_main (
@ -27,8 +27,8 @@
.toolbar_vars(@bg-color);
--toolbar-bg-color: @toolbar-bg-color;
--toolbar-bg-color-fade: @toolbar-bg-color-fade;
--toolbar-bg-color-light: @toolbar-bg-color-light;
--toolbar-bg-color-active: @toolbar-bg-color-active;
.help_main();
.notifications_main();
@ -108,6 +108,7 @@
}
.cp-toolbar-chat-drawer {
border-radius: @variables_radius;
background-color: @toolbar-bg-color;
background-color: var(--toolbar-bg-color);
font: @colortheme_app-font-size @colortheme_font;
@ -392,7 +393,6 @@
//display: inline-block;
button {
height: 100%;
border-radius: 0;
margin: 0;
background: transparent;
}
@ -503,9 +503,12 @@
.cp-toolbar-link {
height: @toolbar_line-height;
width: @toolbar_line-height;
transform: scale(0.5);
//transform: scale(0.5);
.cp-toolbar-link-logo {
padding: 5px;
span {
font-size: 24px;
}
}
}
.cp-toolbar-user {
@ -514,21 +517,26 @@
height: @toolbar_line-height;
width: @toolbar_line-height;
margin-left: 0;
padding: 0px;
button {
height: @toolbar_line-height;
width: @toolbar_line-height;
font-size: 15px;
margin-top: -1px;
.cp-dropdown-button-title {
transform: scale(0.5);
bottom: -5px;
right: -5px;
&::before {
padding-top: 1px;
}
// .cp-dropdown-button-title {
// transform: scale(0.5);
// bottom: -5px;
// right: -5px;
// }
}
}
.cp-toolbar-user-dropdown {
height: @toolbar_line-height;
width: @toolbar_line-height;
padding: 0;
&> button {
height: @toolbar_line-height;
width: @toolbar_line-height;
@ -638,6 +646,7 @@
align-items: center;
font-size: 20px;
vertical-align: middle;
border-radius: 0 @variables_radius @variables_radius 0;
.fa {
font-size: 20px;
}
@ -677,6 +686,7 @@
}
.cp-toolbar-title-editable {
cursor: text;
border-radius: @variables_radius 0 0 @variables_radius;
}
}
}
@ -723,7 +733,7 @@
line-height: @toolbar_top-height;
width: @toolbar_top-height;
height: @toolbar_top-height;
padding: 0;
padding: 5px;
box-sizing: border-box;
display: inline-block;
}
@ -735,9 +745,10 @@
display: flex;
align-items: center;
justify-content: center;
width: @toolbar_top-height;
width: @toolbar_top-height - 10px;
font-size: 1em;
height: @toolbar_top-height;
height: @toolbar_top-height - 10px;
border-radius: @variables_radius;
padding: 0px;
margin: 0;
&::before {
@ -795,22 +806,41 @@
text-decoration: none;
height: auto;
padding: 10px;
color: @toolbar-bg-color;
color: var(--toolbar-bg-color);
svg {
#outline, #squares {
fill: @toolbar-bg-color;
fill: var(--toolbar-bg-color);
span {
font-size: 45px;
}
&:hover {
// Icons shown when hovering the toolbar icon (where logo used to be)
.cptools::before {
content: "\e920"; // shows drive icon in document toolbars
}
#background {
fill: @cp_toolbar-logo-bg;
.fa::before {
content: "\f0a0"; // shows hdd-o for all FA icons (settings, etc)
}
.fa-hdd-o::before {
content: "\f015"; // shows home for drive
}
}
img {
cursor: pointer;
height: 100%;
width: 100%;
}
// svg {
// #outline, #squares {
// fill: @toolbar-bg-color;
// fill: var(--toolbar-bg-color);
// }
// #background {
// fill: @cp_toolbar-logo-bg;
// }
// }
// img {
// cursor: pointer;
// height: 100%;
// width: 100%;
// }
}
}
.cp-toolbar-user {
@ -828,21 +858,10 @@
}
.cp-toolbar-user-dropdown {
z-index: 10000; //Z cp-toolbar-user-dropdown
//margin-left: 20px;
height: @toolbar_top-height;
width: @toolbar_top-height;
padding: 0px;
padding: 5px;
box-sizing: border-box;
text-align: center;
/*
background-color: rgba(0,0,0,0.3);
transition: all 0.15s;
&:hover {
background-color: rgba(0,0,0,0.4);
}
*/
.cp-dropdown-content {
margin: 0;
padding-bottom: 10px;
@ -851,8 +870,9 @@
display: flex;
justify-content: center;
align-items: center;
height: @toolbar_top-height;
width: @toolbar_top-height;
height: @toolbar_top-height - 10px;
width: @toolbar_top-height - 10px;
border-radius: @variables_radius;
padding: 0;
&:hover {
border-color: transparent;
@ -876,6 +896,19 @@
}
}
}
.cp-user-menu-logo {
text-align: left;
font-family: "IBM Plex Mono";
color: @cryptpad_color_grey_500;
font-size: 1.5em;
padding: 5px;
img {
width: 25px;
}
.cp-user-menu-logo-text {
margin-left: 10px;
}
}
p.cp-toolbar-account {
&> span {
font-weight: bold;
@ -896,8 +929,8 @@
}
.cp-toolbar-history, .cp-toolbar-snapshots {
background-color: @toolbar-bg-color-light;
background-color: var(--toolbar-bg-color-light);
background-color: @cp_toolbar-bg;
//background-color: var(--toolbar-bg-color-light);
color: @toolbar-color;
}
.cp-toolbar-snapshots {
@ -935,24 +968,9 @@
}
}
.cp-toolbar-bottom {
background-color: @toolbar-bg-color-light;
background-color: var(--toolbar-bg-color-light);
color: @cp_toolbar-bottom-fg;
button:hover, button.cp-toolbar-button-active {
background-color: @toolbar-bg-color-active;
background-color: var(--toolbar-bg-color-active);
}
button.cp-toolbar-button-active {
border-color: @toolbar-bg-color-active;
border-color: var(--toolbar-bg-color-active);
}
button:hover, button:focus {
border-color: @toolbar-bg-color-active;
border-color: var(--toolbar-bg-color-active);
//border-color: @cryptpad_text_col;
}
display: inline-flex;
margin: 5px 0px;
align-items: center;
justify-content: space-between;
max-width: 100%;
@ -967,18 +985,57 @@
margin: 5px 0px;
}
}
button {
border: 1px solid transparent;
border: 1px solid @cp_toolbar-bottom-bg;
box-sizing: border-box;
position: relative;
margin: 0px;
border-radius: 0;
border-radius: @variables_radius;
height: @toolbar_line-height;
display: inline-flex;
align-items: center;
.fa, .cptools {
margin-right: 5px;
}
&:hover {
background-color: fade(@cp_toolbar-bottom-bg, 70%);
}
}
.cp-toolbar-bottom-left > button,
.cp-toolbar-bottom-mid > button,
.cp-toolbar-bottom-right > button,
.cp-toolbar-bottom-right > span > button {
background-color: @cp_toolbar-bottom-bg;
color: @cp_toolbar-bottom-fg;
&:hover {
background-color: fade(@cryptpad_text_col, 20%);
border-color: @cryptpad_text_col;
color: @cryptpad_text_col;
}
&.cp-toolbar-button-active {
background-color: @cp_toolbar-bg;
border-color: @cp_toolbar-fg;
color: @cp_toolbar-fg;
&:hover {
background-color: fade(@cryptpad_text_col, 20%);
}
}
}
button.cp-toolbar-button-primary {
background-color: @toolbar-bg-color-light;
background-color: var(--toolbar-bg-color-light);
border-color: @toolbar-bg-color-light;
border-color: var(--toolbar-bg-color-light);
color: @cp_toolbar-bottom-fg;
&:hover {
background-color: @toolbar-bg-color-fade;
background-color: var(--toolbar-bg-color-fade);
border-color: @toolbar-bg-color-fade;
border-color: var(--toolbar-bg-color-fade);
color: @cp_toolbar-bottom-fg;
}
}
button.cp-toolbar-collapse {
/*
@ -988,10 +1045,24 @@
is very small, which makes it unlikely that you'll see the title unless
you hover perfectly. The same is true of the drive's grid/list view toggle.
*/
position: relative;
.fa {
margin-right: 0px;
}
.cp-collapsed-notif {
display: inline-block;
width: 12px;
height: 12px;
background-color: @cryptpad_color_red;
position: absolute;
bottom: -3px;
right: -3px;
border: 2px solid @cp_toolbar-bg;
border-radius: 50%;
}
&:not(.cp-toolbar-button-active) .cp-collapsed-notif {
display: none;
}
}
&.cp-toolbar-small {
@ -1013,14 +1084,25 @@
.cp-toolbar-bottom-left {
display: flex;
order: 1;
padding-left: 5px;
button {
margin-right: 5px;
}
}
.cp-toolbar-bottom-mid {
display: flex;
order: 2;
button {
margin-right: 5px;
}
}
.cp-toolbar-bottom-right {
order: 3;
display: flex;
padding-right: 5px;
button {
margin-left: 5px;
}
#cp-toolbar-chat-drawer-open { order: 0; }
#cp-toolbar-userlist-drawer-open { order: 1; }
& > .cp-dropdown-container {
@ -1081,6 +1163,7 @@
}
.cp-toolbar-drawer-content {
box-shadow: 0px 1px 5px 0px @cp_shadow-color;
border-radius: @variables_radius;
overflow-y: auto;
overflow-x: hidden;
&.cp-dropdown-visible {
@ -1089,7 +1172,8 @@
position: absolute;
left: 0px;
top: @toolbar_line-height;
margin: -1px;
//margin: -1px;
padding: 5px;
min-width: 50px;
background: @cp_dropdown-bg;
display: flex;
@ -1105,15 +1189,15 @@
box-sizing: border-box;
min-width: 150px;
height: @toolbar_line-height;
border-radius: 0;
border-radius: @variables_radius;
border: 0;
}
button {
white-space: nowrap;
padding: 5px 16px;
padding: 5px;
text-align: left;
margin: 0;
border-radius: 0;
border-radius: @variables_radius;
border: 0;
width: 100%;
line-height: 1em;

View File

@ -1,6 +1,7 @@
@import (reference) "./colortheme-all.less";
@import (reference) "./avatar.less";
@import (reference) "./tools.less";
@import (reference) "./variables.less";
.usergrid_main() {
--LessLoader_require: LessLoader_currentFile();
@ -52,6 +53,7 @@
justify-content: center;
align-items: center;
padding: 5px;
border-radius: @variables_radius;
margin: 3px !important;
cursor: default;
transition: order 0.5s, background-color 0.5s;

View File

@ -10,3 +10,8 @@
// Used in modal.less and alertify.less
@variables_padding: 12px;
@variables_shadow: 0 8px 32px 0 @cp_shadow-color;
// Rounded corners
@variables_radius: 5px;
@variables_radius_L: 10px;

View File

@ -11,14 +11,21 @@
.cp-container {
.cp-iconCont {
text-align: center;
&.align-items-center {
justify-content: center;
}
h4 {
margin-top: 1.5em;
margin-bottom: 1.5em;
}
p.center {
text-align: center;
}
div {
.card {
a.card {
.cp-shadow();
border-radius: 0;
border-radius: @infopages-radius-L;
margin-bottom: 1em;
border: 0;
background-color: @cp_static-card-bg;
@ -53,6 +60,34 @@
font-size: 1.3em;
}
}
a.card-small {
.cp-shadow();
border-radius: @infopages-radius-L;
display: inline-block;
background-color: @cp_static-card-bg;
margin: 15px;
.card-body {
padding: 10px;
p {
display: flex;
flex-flow: row;
justify-content: center;
align-items: center;
margin: 0;
height: 100%;
font-size: 1.3em;
}
}
img {
width: 40px;
margin: 0 10px 0 0;
}
&:hover, &:focus {
text-decoration: none;
color: @cryptpad_text_col;
background-color: @cryptpad_color_brand_fadest;
}
}
}
}
}

View File

@ -22,10 +22,11 @@
.cp-shadow();
border: none;
background-color: @cp_static-card-bg;
border-radius: 0px;;
border-radius: @infopages-radius;
.title-card {
background-color: @cryptpad_color_brand;
padding: 20px;
border-radius: @infopages-radius @infopages-radius 0 0;
}
.card-body, .title-card {
display: flex;

View File

@ -10,21 +10,20 @@
flex-direction: column;
justify-content: space-between;
align-items: center;
.container {
@media only screen and (max-device-width : 576px) {
margin-top: 6em;
}
.alert-info {
font-size: 16px;
background-color: @cp_alerts-info-bg;
color: @cp_alerts-info-text;
}
& > .cp-container {
flex: 1;
display: flex;
flex-flow: column;
justify-content: space-around;
justify-content: space-evenly;
.alert-info {
font-size: 16px;
border-radius: 0px;
}
max-width: 1000vh;
}
}
body {
@ -32,35 +31,62 @@
color: @cryptpad_text_col;
}
h1.cp-instance-title {
text-align: center;
font-family: "IBM Plex Mono";
font-weight: 500;
color: @cryptpad_color_brand;
font-size: 2.8rem;
overflow-wrap: break-word;
word-wrap: break-word;
word-break: break-word;
}
.cp-home-hero {
width: 100%;
margin-bottom: 50px;
align-self: center;
align-items: center;
justify-content: flex-end;
@media screen and (max-width: 990px) {
justify-content: center;
}
}
.cp-title {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: @cryptpad_color_brand;
margin-top: 1.5em;
margin: 0 auto;
flex-grow: 1;
max-width: unset;
img {
max-width: 200px;
margin-bottom: 1.5em;
}
margin-left: 0;
h1 {
font-family: "IBM Plex Mono";
font-weight: 500;
//font-family: Garamond, Baskerville, "Baskerville Old Face", "Hoefler Text", "Times New Roman", Times, serif;
//font-family: "Raleway";
color: @cryptpad_color_brand;
font-size: 3.7rem;
}
.tag-line {
text-align: center;
font-size: 1.4em;
color: @cp_static-link;
max-width: 50ch;
}
.cp-instance-location {
margin-top: 20px;
i {
font-size: 1.2em;
margin-right: 5px;
}
}
.cp-instance-links {
padding: 1.3rem;
a {
margin: 1.3rem;
}
}
}
@ -69,15 +95,36 @@
text-decoration: none;
}
.cp-apps {
max-width: 575px;
@media screen and (max-width: 990px) {
align-self: baseline;
}
}
.cp-app-grid {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
background-color: @cp_alertify-bg;
border-radius: @infopages-radius-L;
padding: 15px;
box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.2);
.cp-app-new {
font-size: 1.4em;
line-height: 100%;
color: fade(@cryptpad_text_col, 80%);
i {
margin-right: 5px;
}
}
.cp-app-grid-apps {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
padding: 0 0.8rem;
}
a {
margin: 10px;
text-decoration: none;
}
@media screen and (max-width: 768px) {
@media screen and (max-width: 990px) {
margin-top: 40px;
}
}
@ -153,6 +200,7 @@
each(@colortheme_apps, {
.cp-callout-@{key} {
border-radius: @infopages-radius;
i { color: @value; }
&:hover {
@desat: desaturate(@value, 15%);
@ -161,6 +209,55 @@
}
}
});
.cp-app-drive {
display: flex;
flex-direction: row;
margin: 20px 0px;
// font-size: 1.4rem;
a.cp-drive-btn {
color: @cryptpad_text_col;
font-size: 1.5rem;
display: block;
height: min-content;
flex-shrink: 0;
width: fit-content;
padding: 10px;
border-radius: @infopages-radius-L;
margin-right: 25px;
&:visited {
color: @cryptpad_text_col;
}
&:hover {
background-color: fade(@cryptpad_text_col, 10%);
}
i {
color: @cryptpad_color_brand;
margin-right: 10px;
font-size: 1.3em;
}
}
.cp-sub-prompt {
* {
display: block;
}
button {
background-color: @cryptpad_color_link;
color: @cryptpad_text_col_inv;
font-size: 1.4rem;
margin: 10px 0;
border-radius: @infopages-radius-L;
padding: 0.75rem;
i {
display: inline;
margin-right: 10px;
}
&:hover, &:focus {
background-color: @cp_static-card-bg;
color: @cryptpad_text_col;
}
}
}
}
.cp-hidden { display: none !important; }
.cp-callout-more {

View File

@ -23,11 +23,16 @@
.cp-shadow();
background-color: @cp_static-card-bg;
padding: 10px;
margin: 0 10px 10px 10px;
border-radius: @infopages-radius-L;
.cp-login-instance {
margin-bottom: 10px;
}
.form-control {
border-radius: 0;
border-radius: @infopages-radius;
color: @cryptpad_text_col;
background-color: @cp_forms-bg;
margin-bottom: 5px;
margin-bottom: 10px;
&:focus {
border-color: @cryptpad_color_brand;
}
@ -43,14 +48,8 @@
}
.extra {
margin-top: 1em;
#register {
border-color: @cryptpad_color_brand;
background: @cryptpad_color_white;
color: @cryptpad_color_brand;
padding: 10px;
border-radius: 0;
margin: 0px;
button.login {
margin-right: 0px;
}
}
}

View File

@ -13,13 +13,9 @@
.cp-container {
.form-group {
.checkbox-container {
&:nth-of-type(1) {
margin-top: 2em;
}
&:last-of-type {
margin-bottom: 1em;
}
.cp-register-instance {
text-align: center;
margin-bottom: 10px;
}
#register {
&.btn {
@ -85,12 +81,13 @@
position: relative;
z-index: 2;
margin-bottom: 100px;
border-radius: @infopages-radius-L;
.cp-shadow();
.form-control {
border-radius: 0;
border-radius: @infopages-radius;
color: @cryptpad_text_col;
background-color: @cp_forms-bg;
margin-top: 5px;
margin-bottom: 10px;
&:focus {
border-color: @cryptpad_color_brand;
}
@ -100,7 +97,7 @@
color: @cryptpad_text_col;
}
button#register {
margin: 0px;
margin-top: 10px;
}
}
@ -119,7 +116,7 @@
content: "\f071";
}
.red {
color: @cryptpad_color_red;
background-color: @cp_static-danger;
}
}
}

View File

@ -0,0 +1,114 @@
.cp-app-noscroll body {
background: transparent;
}
.cp-app-noscroll #placeholder {
z-index: 9999999; /* loading screen -1 */
background-color: transparent;
}
#placeholder {
visibility: visible;
position: fixed;
z-index: -10;
top: 0px;
bottom: 0px;
left: 0px;
right: 0px;
background-color: #EEEEEE; /* @cp_loading-bg */
color: #424242; /* @cp_loading-fg */
font-size: 1.3em;
line-height: 120%;
opacity: 1;
display: flex;
flex-flow: column;
justify-content: center;
align-items: center;
font: 20px 'Helvetica Neue', sans-serif !important;
}
html:not(.cp-app-noscroll) #placeholder.dark-theme {
background-color: #212121; /* @cp_loading-bg (dark) */
}
#placeholder.dark-theme {
color: #EEEEEE; /* @cp_loading-fg (dark) */
}
#placeholder .placeholder-logo-container {
height: 300px;
width: 300px;
margin-top: 50px;
flex: 0 1 auto;
min-height: 0;
text-align: center;
opacity: 0;
animation: fadein 5s ease 2s forwards;
}
#placeholder .placeholder-logo-container img {
max-width: 100%;
max-height: 100%;
}
#placeholder .placeholder-message-container {
width: 700px;
max-width: 90vw;
height: 236px;
max-height: calc(100vh - 20px);
margin: 50px;
flex-shrink: 0;
display: flex;
flex-flow: column;
align-items: center;
opacity: 0;
animation: fadein 5s ease 2s forwards;
}
#placeholder .placeholder-message-container p {
margin-top: 0;
}
#placeholder .placeholder-logo {
margin-left: auto;
margin-right: auto;
max-width: 90vw;
max-height: 300px;
width: auto;
height: auto;
margin-bottom: 2em;
}
@keyframes fadein {
from { opacity: 0; }
to { opacity: 1; }
}
@media screen and (max-width: 500px) {
#placeholder {
font-size: 16px !important;
}
#placeholder .placeholder-message-container {
height: 206px;
}
}
@media screen and (max-height: 700px) {
#placeholder {
font-size: 16px !important;
}
#placeholder .placeholder-message-container {
height: 206px;
}
}
@media screen and (max-height: 500px) {
#placeholder .placeholder-logo-container {
display: none;
}
}
:is(div, noscript) > p.noscript {
font-family: sans-serif;
z-index: 999;
padding: 15px;
font-size: 20px;
margin-top: 30px !important;
max-width: 800px;
margin: auto;
background-color: #424242;
color: #eee;
border-radius: 5px;
}

View File

@ -1,16 +1,14 @@
<!DOCTYPE html>
<html class="cp">
<html>
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
<head>
<title data-localization="main_title">CryptPad: Collaboration suite,encrypted and open-source</title>
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
<script src="/customize/pre-loading.js?ver=1.1"></script>
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
</head>
<body class="html">
<noscript>
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
</noscript>
</html>
<noscript></noscript>

View File

@ -6,6 +6,10 @@ define([
'css!/bower_components/components-font-awesome/css/font-awesome.min.css',
], function ($, h, Pages, nThen) {
// we consider that there is no valid reason to load any of the info pages
// in an iframe. abort everything if you detect that you are embedded.
if (window.top !== window) { return; }
$(function () {
var $body = $('body');
@ -43,6 +47,8 @@ $(function () {
], function () {
var $main = $(infoPage());
$('#placeholder').remove();
$body.append($main);
if (/^\/register\//.test(pathname)) {

View File

@ -1,16 +0,0 @@
<!DOCTYPE html>
<html class="cp">
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
<head>
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
</head>
<body class="html">
<noscript>
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
</noscript>
</html>

View File

@ -1,6 +1,8 @@
# Translations
Translations can now be made using [Weblate](https://weblate.cryptpad.fr). We may still accept PRs for the internal translation files, but we won't provide support for this.
Translations can now be made using [Weblate](https://weblate.cryptpad.fr). We may still accept PRs for the internal translation files, but we won't provide support for this. See the state of the translated languages:
![](https://weblate.cryptpad.fr/widgets/cryptpad/-/app/multi-auto.svg)
## Request a new language

View File

@ -0,0 +1,14 @@
/*
* You can override the translation text using this file.
* The recommended method is to make a copy of this file (/customize.dist/translations/messages.{LANG}.js)
in a 'customize' directory (/customize/translations/messages.{LANG}.js).
* If you want to check all the existing translation keys, you can open the internal language file
but you should not change it directly (/common/translations/messages.{LANG}.js)
*/
define(['/common/translations/messages.cs.js'], function (Messages) {
// Replace the existing keys in your copied file here:
// Messages.button_newpad = "New Rich Text Document";
return Messages;
});

View File

@ -0,0 +1,14 @@
/*
* You can override the translation text using this file.
* The recommended method is to make a copy of this file (/customize.dist/translations/messages.{LANG}.js)
in a 'customize' directory (/customize/translations/messages.{LANG}.js).
* If you want to check all the existing translation keys, you can open the internal language file
but you should not change it directly (/common/translations/messages.{LANG}.js)
*/
define(['/common/translations/messages.eu.js'], function (Messages) {
// Replace the existing keys in your copied file here:
// Messages.button_newpad = "New Rich Text Document";
return Messages;
});

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