mirror of
https://github.com/cryptpad/cryptpad.git
synced 2026-09-12 19:49:59 +05:00
Merge branch '2025.9-rc'
This commit is contained in:
commit
0d3907d9c5
21
.github/workflows/test-trigger.yml
vendored
21
.github/workflows/test-trigger.yml
vendored
@ -6,18 +6,27 @@ name: Trigger E2E tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ staging ]
|
||||
branches: [ staging, 2025.9-rc, 2025.9-test ]
|
||||
|
||||
jobs:
|
||||
trigger:
|
||||
trigger-tests:
|
||||
if: github.ref_name == 'staging'
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Trigger E2E test run - local and remote
|
||||
- name: Trigger E2E test run (local)
|
||||
run: |
|
||||
branch="${GITHUB_REF_NAME}"
|
||||
|
||||
if [ "$branch" = "staging" ]; then
|
||||
event_type="trigger-e2e-tests-staging"
|
||||
elif [ "$branch" = "2025.9-rc" ]; then
|
||||
event_type="trigger-e2e-tests-rc"
|
||||
elif [ "$branch" = "2025.9-test" ]; then
|
||||
event_type="trigger-e2e-tests-test"
|
||||
fi
|
||||
|
||||
repo_owner="cryptpad"
|
||||
repo_name="e2e-test-suite"
|
||||
event_type="trigger-e2e-tests"
|
||||
|
||||
curl -L \
|
||||
-X POST \
|
||||
@ -26,3 +35,5 @@ jobs:
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
https://api.github.com/repos/cryptpad/e2e-test-suite/dispatches \
|
||||
-d "{\"event_type\": \"$event_type\", \"client_payload\": {\"service\": \"$service\", \"version\": \"$version\", \"unit\": false, \"integration\": true}}"
|
||||
|
||||
|
||||
|
||||
170
CHANGELOG.md
170
CHANGELOG.md
@ -4,6 +4,176 @@ SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and cont
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
|
||||
|
||||
# 🍁 Autumn release (2025.9.0)
|
||||
|
||||
## Goals
|
||||
|
||||
This release improves the look and feel of CryptPad and resolves a long-standing technical debt by updating all icons in the product from Fontawesome 4.7 (2016) to [Lucide](https://lucide.dev/). Other improvements include a redesigned loading screen and bug fixes.
|
||||
|
||||
## Features
|
||||
|
||||
- Update icons [#1987](https://github.com/cryptpad/cryptpad/pull/1987)
|
||||
|
||||
## Improvements
|
||||
|
||||
- Loading screen [#2058](https://github.com/cryptpad/cryptpad/pull/2058)
|
||||
- Form participant UX fixes [#2007](https://github.com/cryptpad/cryptpad/pull/2007)
|
||||
- Improve keyboard & screen reader support for Forms [#1923](https://github.com/cryptpad/cryptpad/pull/1923)
|
||||
- Make client compatible with new server [#2059](https://github.com/cryptpad/cryptpad/pull/2059)
|
||||
- Guard against misconfiguration of `fileHost` setting [#2017](https://github.com/cryptpad/cryptpad/pull/2017) @ansuz
|
||||
- Add a checkup page test for `/upload-blob` [#1995](https://github.com/cryptpad/cryptpad/pull/1995) @ansuz
|
||||
- Add forceRedirect to SSO [#1868](https://github.com/cryptpad/cryptpad/pull/1868) @avinash-0007
|
||||
- SSO login redirect [#2057](https://github.com/cryptpad/cryptpad/pull/2057)
|
||||
|
||||
|
||||
## Fixes
|
||||
|
||||
- OnlyOffice
|
||||
- Make sure OnlyOffice user index does not change [#2066](https://github.com/cryptpad/cryptpad/pull/2066)
|
||||
- Office documents corruption on server issues [#2064](https://github.com/cryptpad/cryptpad/pull/2064)
|
||||
- Fix disappearing sheets [#1991](https://github.com/cryptpad/cryptpad/pull/1991)
|
||||
- Hardcoded values in PDF export metadata [#2015](https://github.com/cryptpad/cryptpad/pull/2015)
|
||||
- Forms
|
||||
- Fix deletion of conditional section contents [#2014](https://github.com/cryptpad/cryptpad/pull/2014)
|
||||
- Remove nested conditionals [#2026](https://github.com/cryptpad/cryptpad/pull/2026)
|
||||
- Form auditor link fix [#2008](https://github.com/cryptpad/cryptpad/pull/2008)
|
||||
- Fix text-tools button visibility for Kanban card title editing [#2049](https://github.com/cryptpad/cryptpad/pull/2049)
|
||||
- Fix calendar-picker dropdown styling in event modal [#2031](https://github.com/cryptpad/cryptpad/pull/2031)
|
||||
- Can open files in read only mode from guest drive [#2025](https://github.com/cryptpad/cryptpad/pull/2025)
|
||||
- Update trigger/target branches for tests [#2023](https://github.com/cryptpad/cryptpad/pull/2023)
|
||||
- Switch to our new email address [#2018](https://github.com/cryptpad/cryptpad/pull/2018)
|
||||
- Very minor typo fix regarding macOS [#2056](https://github.com/cryptpad/cryptpad/pull/2056)
|
||||
- Fix minor typos in `docs/ARCHITECTURE.md` [#2050](https://github.com/cryptpad/cryptpad/pull/2050) @touilleMan
|
||||
|
||||
## Deployment
|
||||
|
||||
- Performance improvements (2/3) to example-advanced.nginx.conf [#2005](https://github.com/cryptpad/cryptpad/pull/2005) @nisbet-hubbard
|
||||
|
||||
## Dependencies
|
||||
|
||||
- Upgraded
|
||||
- `@node-saml/node-saml`: from ^4.0.5 to ^5.1.0
|
||||
- `netflux-websocket`: from ^1.2.1 to ^1.3.0
|
||||
- Removed
|
||||
- `components-font-awesome`
|
||||
- `prompt-confirm`
|
||||
|
||||
## Upgrade notes
|
||||
|
||||
If you are upgrading from a version older than `2025.6.0` please read the upgrade notes of all versions between yours and `2025.9.0` to avoid configuration issues.
|
||||
|
||||
> [!WARNING]
|
||||
> The CryptPad SSO plugin needs to be upgraded to a compatible version at the same time as CryptPad
|
||||
> - [SSO plugin 0.4.0](https://github.com/cryptpad/sso/releases/tag/0.4.0)
|
||||
|
||||
To upgrade:
|
||||
|
||||
1. Stop your server
|
||||
2. Get the latest code with git
|
||||
|
||||
```bash
|
||||
git fetch --depth 1 origin tag 2025.9.0
|
||||
git checkout 2025.9.0
|
||||
npm ci
|
||||
npm run install:components
|
||||
```
|
||||
|
||||
3. Restart your server
|
||||
4. Review your instance's checkup page to ensure that you are passing all tests
|
||||
|
||||
## Contributors
|
||||
|
||||
Community: @touilleMan, @ansuz, @nisbet-hubbard
|
||||
|
||||
CryptPad team: @AAAMON @Chouhartem @dariiing @davidbenque @DianaXWiki @mathilde-cryptpad @wginolas @yflory @zuzanna-maria
|
||||
|
||||
|
||||
# 🌻 Summer 2025 release (2025.6.0)
|
||||
|
||||
## Goals
|
||||
|
||||
This release introduces badges that users can display on their avatar if they are instance administrator, part of the moderation/support team, or subscriber on cryptpad.fr. We also include a host of improvements and fixes to forms, calendar, drive, accessibility and many more…
|
||||
|
||||
## Features
|
||||
|
||||
- Badges: instance administrators, moderation/support accounts, and subscribers on cryptpad.fr can now display a bage next to their avatar (activated in the new Profile settings)
|
||||
|
||||
## Improvements
|
||||
|
||||
- Accessibility
|
||||
- Improve keyboard & screen reader support for Document access [#1913](https://github.com/cryptpad/cryptpad/pull/1913)
|
||||
- Improve keyboard navigation & screen reader support for "Create New Document" modal [#1911](https://github.com/cryptpad/cryptpad/pull/1911)
|
||||
- Improve screen reader support for register/login flow [#1910](https://github.com/cryptpad/cryptpad/pull/1910)
|
||||
- Improve notification page accessibility, responsiveness and UI [#1848](https://github.com/cryptpad/cryptpad/pull/1848)
|
||||
- Documentation notification can be dismissed via keyboard [#1847](https://github.com/cryptpad/cryptpad/pull/1847)
|
||||
- Improve Kanban Tags accessibility with keyboard navigation [#1846](https://github.com/cryptpad/cryptpad/pull/1846)
|
||||
- QA and tests
|
||||
- Workflow to automate Playwright tests [#1853](https://github.com/cryptpad/cryptpad/pull/1853)
|
||||
- Only Office load messages [#1959](https://github.com/cryptpad/cryptpad/pull/1959)
|
||||
- Make text area markdown toolbar responsive [#1845](https://github.com/cryptpad/cryptpad/pull/1845)
|
||||
- Move profile modification to the settings page [#1960](https://github.com/cryptpad/cryptpad/pull/1960)
|
||||
- Ability to delete multiple documents at once as an admin [#1973](https://github.com/cryptpad/cryptpad/pull/1973)
|
||||
- Upload static files using HTTP [#1925](https://github.com/cryptpad/cryptpad/pull/1925)
|
||||
- Add Diagram history [#1906](https://github.com/cryptpad/cryptpad/pull/1906)
|
||||
- Modularize and deduplicate worker code [#1898](https://github.com/cryptpad/cryptpad/pull/1898)
|
||||
- Deduplicate common files [#1872](https://github.com/cryptpad/cryptpad/pull/1872)
|
||||
|
||||
|
||||
## Fixes
|
||||
|
||||
- Calendar
|
||||
- Fix export bug on calendars with recurring event with expiry date [#1940](https://github.com/cryptpad/cryptpad/pull/1940)
|
||||
- Fix missing recurring calendar after update [#1936](https://github.com/cryptpad/cryptpad/pull/1936)
|
||||
- Improve responsiveness of the calendar preview popup & add screen reader support [#1849](https://github.com/cryptpad/cryptpad/pull/1849)
|
||||
- Form
|
||||
- Use a default date rather than empty answer in Forms [#1931](https://github.com/cryptpad/cryptpad/pull/1931)
|
||||
- Fix auditor features in forms [#1927](https://github.com/cryptpad/cryptpad/pull/1927)
|
||||
- Reset form answers [#1908](https://github.com/cryptpad/cryptpad/pull/1908)
|
||||
- Drive
|
||||
- Remove redundant ellipsis on desktop [#1907](https://github.com/cryptpad/cryptpad/pull/1907)
|
||||
- Fix inconsistent behaviour in natural sort [#1894](https://github.com/cryptpad/cryptpad/pull/1894)
|
||||
- Remove side splitter from drive on mobile [#1857](https://github.com/cryptpad/cryptpad/pull/1857)
|
||||
- Presentation mode
|
||||
- Fix exit from presentation mode on mobile [#1926](https://github.com/cryptpad/cryptpad/pull/1926)
|
||||
- Make buttons visible in mobile version of presentation mode in slides [#1112](https://github.com/cryptpad/cryptpad/pull/1112) thanks @lemondevxyz
|
||||
- Update config.example.js comment for admins section [#1963](https://github.com/cryptpad/cryptpad/pull/1963)
|
||||
- Fix AppConfig.disableFeedback [#1920](https://github.com/cryptpad/cryptpad/pull/1920)
|
||||
- fix typo in shebang of rc.d-cryptpad [#1885](https://github.com/cryptpad/cryptpad/pull/1885) thanks @p4tpr0
|
||||
- Fix mobile scrolling within kanban columns in arrow-buttons mode [#1873](https://github.com/cryptpad/cryptpad/pull/1873) thanks @xenofem
|
||||
- Update contact page [#1869](https://github.com/cryptpad/cryptpad/pull/1869)
|
||||
- Fix diagram export [#1866](https://github.com/cryptpad/cryptpad/pull/1866) thanks @naitikraj1000
|
||||
|
||||
## Deployment
|
||||
|
||||
- Note that we have made a [change in the Nginx advanced example config](https://github.com/cryptpad/cryptpad/commit/30715da2bae25ad9868366cfdd28bdaec8160f50) that may need to be reflected in your own configuration.
|
||||
|
||||
## Upgrade notes
|
||||
|
||||
If you are upgrading from a version older than `2025.3.1` please read the upgrade notes of all versions between yours and `2025.6.0` to avoid configuration issues.
|
||||
|
||||
To upgrade:
|
||||
|
||||
1. Stop your server
|
||||
2. Get the latest code with git
|
||||
|
||||
```bash
|
||||
git fetch --depth 1 origin tag 2025.6.0
|
||||
git checkout 2025.6.0
|
||||
npm ci
|
||||
npm run install:components
|
||||
```
|
||||
|
||||
1. Restart your server
|
||||
2. Review your instance's checkup page to ensure that you are passing all tests
|
||||
|
||||
## Contributors
|
||||
|
||||
Community: @p4tpr0, @naitikraj1000, @xenofem, @lemondevxyz
|
||||
|
||||
CryptPad team: @AAAMON @Chouhartem @dariiing @davidbenque @DianaXWIKI @mathilde-cryptpad @wginolas @yflory @zuzanna-maria
|
||||
|
||||
|
||||
# 2025.3.1
|
||||
|
||||
## Goals
|
||||
|
||||
8
LICENSES/ISC.txt
Normal file
8
LICENSES/ISC.txt
Normal file
@ -0,0 +1,8 @@
|
||||
ISC License:
|
||||
|
||||
Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC")
|
||||
Copyright (c) 1995-2003 by Internet Software Consortium
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
@ -235,4 +235,10 @@ SPDX-License-Identifier = "Unlicense"
|
||||
path = "www/common/worker.bundle.min.js"
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "2025 XWiki CryptPad Team <contact@cryptpad.org> and contributors"
|
||||
SPDX-License-Identifier = "AGPL-3.0-or-later"
|
||||
SPDX-License-Identifier = "AGPL-3.0-or-later"
|
||||
|
||||
[[annotations]]
|
||||
path = "customize.dist/lucide.js"
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "Cole Bemis 2013-2023 as part of Feather, Lucide Contributors 2025"
|
||||
SPDX-License-Identifier = "ISC OR MIT"
|
||||
@ -293,8 +293,3 @@ media-tag button.btn b {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
media-tag button.btn .fa {
|
||||
display: inline;
|
||||
margin-right: 5px;
|
||||
flex: 0;
|
||||
}
|
||||
|
||||
@ -1,9 +0,0 @@
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
-->
|
||||
|
||||
The "cptools" font is using the [palette-solid icon](https://fontawesome.com/icons/palette?style=solid) from the "Font Awesome 5 Free" icon set.
|
||||
|
||||
This icon is licensed under the [Creative Commons Attribution 4.0 International license](https://fontawesome.com/license/free).
|
||||
Binary file not shown.
@ -1,3 +0,0 @@
|
||||
SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
@ -1,44 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="cptools" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||
<glyph unicode="" 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="" 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="" 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="" 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" />
|
||||
<glyph unicode="" glyph-name="shared-folder" d="M829.44 727.251h-296.84l-47.104 62.886c-25.923 34.066-66.406 55.898-111.999 56.139h-178.938c-77.457-0.137-140.211-62.891-140.348-140.335v-515.868c0.137-77.457 62.891-140.211 140.335-140.348h634.893c77.457 0.137 140.211 62.891 140.348 140.335v396.482c0 0.036 0 0.078 0 0.121 0 77.561-62.807 140.452-140.335 140.589h-0.013zM911.119 190.072c-0.068-45.083-36.597-81.611-81.673-81.679h-634.887c-45.083 0.068-81.611 36.597-81.679 81.673v515.862c0.068 45.083 36.597 81.611 81.673 81.679h178.906c26.48-0.030 50.004-12.656 64.908-32.207l0.146-0.199 47.104-62.765 17.709-24.094h326.114c45.125-0.069 81.679-36.665 81.679-81.799 0 0 0 0 0 0v0zM614.4 451.132c0.071 0 0.156 0 0.24 0 34.132 0 61.801 27.669 61.801 61.801s-27.669 61.801-61.801 61.801c-34.047 0-61.664-27.532-61.801-61.547v-0.013c0-0.018 0-0.040 0-0.061 0-7.309 1.235-14.33 3.508-20.865l-0.135 0.446-103.966-60.235c-0.474 0.655-1.031 1.213-1.665 1.672l-0.021 0.015c-10.785 9.46-25.010 15.231-40.582 15.231-34.065 0-61.681-27.615-61.681-61.681 0-11.035 2.898-21.393 7.974-30.355l-0.16 0.307c11.046-18 30.619-29.824 52.953-29.824 16.92 0 32.255 6.786 43.431 17.785l-0.008-0.008 103.966-60.235c-2.138-5.921-3.374-12.754-3.374-19.876 0-0.085 0-0.171 0.001-0.256v0.013c-0.003-0.217-0.005-0.474-0.005-0.731 0-7.409 1.417-14.486 3.994-20.977l-0.135 0.384c8.944-23.66 31.407-40.178 57.728-40.178 33.999 0 61.56 27.562 61.56 61.56 0 28.833-19.822 53.036-46.582 59.725l-0.424 0.090c-4.366 1.539-9.418 2.572-14.664 2.884l-0.154 0.007c-19.639 0-37.082-9.398-48.078-23.943l-0.11-0.152-101.798 59.031c3.729 7.764 5.908 16.879 5.908 26.504s-2.179 18.74-6.070 26.88l0.162-0.376 101.798 58.79c11.336-14.332 28.681-23.481 48.167-23.612h0.022z" />
|
||||
<glyph unicode="" glyph-name="file-upload" 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.905zM438.857 487.905c-8.019 0-15.814-3.102-21.238-8.762l-153.524-153.524c-5.66-5.66-8.952-13.457-8.952-21.476s3.292-15.53 8.952-21.19l17.667-17.714c5.424-5.66 13.219-8.952 21.238-8.952s15.814 3.292 21.238 8.952l69.333 69.095v-166c0-16.981 14.153-27.619 30.19-27.619h30.19c16.038 0 30.19 10.638 30.19 27.619v166l69.333-69.095c5.424-5.66 13.219-8.952 21.238-8.952s15.816 3.292 21.476 8.952l17.667 17.714c5.425 5.66 8.714 13.172 8.714 21.19s-3.29 15.816-8.714 21.476l-153.524 153.524c-5.66 5.66-13.457 8.762-21.476 8.762z" />
|
||||
<glyph unicode="" glyph-name="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.905zM535.524 513.905c-63.766 0-115.619-51.901-115.619-115.667s51.854-115.619 115.619-115.619c48.792 0 92.974 31.714 109.238 77.667 2.84 8.261 5.905 18.862 5.905 27.381 0 5.163-3.075 9.048-8.238 9.048s-65.052-37.714-73.571-42.619l-49.857 27.619v57.857l75.667 43.619c2.323 1.549 4.143 4.398 4.143 7.238 0 3.098-1.562 5.431-4.143 7.238-15.748 10.585-40.297 16.238-59.143 16.238zM412.667 349.714l-175.81-175.81c-6.196-6.196-9.81-14.699-9.81-23.476s3.614-17.3 9.81-23.238l27.333-27.905c6.196-5.938 14.746-9.524 23.524-9.524s17.3 3.586 23.238 9.524l176.048 176.095c-33.819 13.424-60.909 40.514-74.333 74.333zM304.238 183.476c9.036 0 16.524-7.488 16.524-16.524s-7.488-16.524-16.524-16.524c-9.036 0-16.524 7.488-16.524 16.524s7.488 16.524 16.524 16.524z" />
|
||||
<glyph unicode="" glyph-name="poll" 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.905zM569.762 482.524v-349.238h162.714v349.238h-162.714zM358.238 385.476v-252.19h162.714v252.19h-162.714zM146.667 277.381v-144.095h162.762v144.095h-162.762z" />
|
||||
<glyph unicode="" glyph-name="slide" 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.905zM142.286 550.714v-255.238h133.19v-109.762h133.143v-109.81h326.809v255.381h-133.143v109.81h-133.143v109.619h-326.857zM191.048 501.905h229.286v-60.81h-144.857v-96.81h-84.429v157.619zM324.238 392.333h229.286v-61.048h-144.905v-96.81h-84.381v157.857zM457.381 282.524h229.286v-157.81h-229.286v157.81z" />
|
||||
<glyph unicode="" glyph-name="sheet" 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.905zM141.286 532.571v-463.81h598.429v463.81h-598.429zM190.048 483.762h134.429v-158.714h-134.429v158.714zM373.286 483.762h134.429v-158.714h-134.429v158.714zM556.524 483.762h134.429v-158.714h-134.429v158.714zM190.048 276.286h134.429v-158.762h-134.429v158.762zM373.286 276.286h134.429v-158.762h-134.429v158.762zM556.524 276.286h134.429v-158.762h-134.429v158.762z" />
|
||||
<glyph unicode="" glyph-name="folder-open" d="M100.232 590.035h828.717c-5.175 69.899-63.091 124.668-133.829 124.808h-283.843l-44.936 60.235c-24.766 32.712-63.599 53.649-107.326 53.73h-170.599c-0.036 0-0.078 0-0.121 0-73.968 0-133.946-59.894-134.084-133.83v-213.366l10.12 76.74c2.295 17.95 17.476 31.684 35.865 31.684 0.012 0 0.025 0 0.037 0h-0.002zM929.19 541.606h-805.948c-13.269-0.004-24.238-9.848-26.006-22.632l-0.016-0.137-43.008-317.801c-0.002-0.261-0.003-0.569-0.003-0.877 0-6.111 0.483-12.11 1.413-17.96l-0.085 0.646c0.904-6.888 2.169-12.966 3.837-18.875l-0.223 0.925c16.563-56.812 68.138-97.63 129.257-97.702h606.698c61.093 0.086 112.628 40.906 128.907 96.752l0.237 0.95c1.459 5.065 2.725 11.228 3.544 17.531l0.070 0.66c0.844 5.201 1.327 11.196 1.327 17.304 0 0.227-0.001 0.454-0.002 0.681v-0.035l40.237 295.755c0.219 1.556 0.344 3.354 0.344 5.18 0 21.624-17.529 39.153-39.153 39.153-0.036 0-0.073 0-0.109 0h0.006z" />
|
||||
<glyph unicode="" glyph-name="kanban" 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.905zM146.667 493.81v-90.143h162.762v90.143h-162.762zM358.238 493.81v-90.143h162.714v90.143h-162.714zM569.762 493.81v-90.143h162.714v90.143h-162.714zM146.667 358.619v-90.143h162.762v90.143h-162.762zM569.762 358.619v-90.143h162.714v90.143h-162.714zM146.667 223.429v-90.143h162.762v90.143h-162.762z" />
|
||||
<glyph unicode="" glyph-name="folder" d="M373.459 846.276h-178.899c-77.457-0.137-140.211-62.891-140.348-140.335v-515.868c0.137-77.457 62.891-140.211 140.335-140.348h634.893c77.457 0.137 140.211 62.891 140.348 140.335v396.482c0 0.036 0 0.078 0 0.121 0 77.561-62.807 140.452-140.335 140.589h-296.853l-47.104 62.886c-25.923 34.066-66.406 55.898-111.999 56.139h-0.039z" />
|
||||
<glyph unicode="" glyph-name="shared-folder-open" d="M98.424 593.288h797.274c-4.8 67.457-60.657 120.376-128.894 120.471h-272.876l-43.249 57.705c-23.816 31.47-61.17 51.611-103.232 51.682h-164.213c-0.036 0-0.079 0-0.121 0-71.191 0-128.904-57.712-128.904-128.904 0-0.17 0-0.339 0.001-0.508v0.026-204.8l9.638 73.487c2.062 17.437 16.753 30.833 34.574 30.84h0.001zM900.759 255.608l33.973 248.049c0.196 1.447 0.308 3.12 0.308 4.819 0 20.873-16.906 37.797-37.772 37.828h-776.797c-12.746-0.016-23.272-9.5-24.923-21.796l-0.014-0.129-41.321-304.791c-0.002-0.25-0.003-0.546-0.003-0.843 0-5.87 0.483-11.628 1.412-17.235l-0.083 0.609c0.793-6.689 1.977-12.655 3.576-18.449l-0.203 0.861c15.92-54.648 65.53-93.912 124.319-93.967h583.566c0.061 0 0.133 0 0.205 0 16.48 0 32.227 3.14 46.675 8.853l-0.86-0.3c16.639-15.985 39.283-25.829 64.225-25.829 51.231 0 92.762 41.531 92.762 92.762 0 42.798-28.984 78.827-68.394 89.528l-0.65 0.15zM766.795 148.51h-583.56c-32.265 0.073-59.5 21.523-68.297 50.935l-0.13 0.506c-0.742 2.66-1.376 5.889-1.775 9.19l-0.032 0.327v1.566c0 1.566 0 3.373 0 5.301l36.382 272.023h724.751l-32.407-236.845c-1.82-0.63-3.331-1.281-4.788-2.025l0.21 0.097c-16.682-8.067-30.192-20.454-39.403-35.727l-0.232-0.415c-1.574-2.381-3.028-5.115-4.218-7.987l-0.119-0.325c-5.551-11.368-8.797-24.735-8.797-38.86 0-0.23 0.001-0.46 0.003-0.689v0.035c0-0.017 0-0.037 0-0.057 0-5.166 0.394-10.241 1.154-15.195l-0.070 0.554c-5.405-1.532-11.612-2.412-18.026-2.412-0.228 0-0.455 0.001-0.682 0.003h0.035zM877.026 84.781c-20.129 0.108-38.483 7.622-52.493 19.954l0.089-0.077c-14.994 12.543-25.212 30.362-27.788 50.568l-0.041 0.392c-0.537 3.145-0.844 6.769-0.844 10.463 0 0.091 0 0.182 0.001 0.273v-0.014c-0.001 0.109-0.001 0.239-0.001 0.368 0 12.484 2.89 24.293 8.038 34.794l-0.207-0.466c1.278 2.771 2.523 5.062 3.896 7.265l-0.161-0.278c7.898 12.884 18.884 23.175 31.958 30.024l0.449 0.214c0.692 0.493 1.491 0.902 2.346 1.186l0.064 0.018c10.065 4.991 21.914 7.922 34.445 7.951h0.010c0.046 0 0.1 0 0.154 0 7.802 0 15.336-1.144 22.444-3.275l-0.553 0.142c35.119-9.412 60.555-40.954 60.555-78.437 0-44.777-36.299-81.077-81.077-81.077-0.451 0-0.902 0.004-1.351 0.011l0.068-0.001zM906.059 183.206c9.581 0 17.348 7.767 17.348 17.348s-7.767 17.348-17.348 17.348v0c-0.002 0-0.004 0-0.007 0-9.411 0-17.072-7.495-17.341-16.841l-0.001-0.025c-0.004-0.12-0.006-0.262-0.006-0.404 0-1.849 0.356-3.615 1.003-5.232l-0.034 0.095-29.274-16.986c-3.089 3.105-7.328 5.063-12.025 5.18h-0.022c-9.003-0.772-16.019-8.271-16.019-17.408s7.015-16.636 15.954-17.404l0.065-0.004c4.719 0.117 8.958 2.075 12.046 5.179l0.001 0.001 12.047-7.228 16.504-9.638c-0.536-1.568-0.846-3.375-0.846-5.255 0-0.101 0.001-0.202 0.003-0.302v0.015c0-9.581 7.767-17.348 17.348-17.348s17.348 7.767 17.348 17.348c0 9.581-7.767 17.348-17.348 17.348v0c-5.563-0.038-10.508-2.653-13.705-6.709l-0.028-0.037-16.143 9.397-12.047 7.228c1.007 2.155 1.621 4.672 1.686 7.326v0.023c-0.052 2.758-0.667 5.36-1.736 7.712l0.050-0.122 28.672 16.625c3.116-4.367 8.151-7.19 13.848-7.228h0.006z" />
|
||||
<glyph unicode="" glyph-name="code" horiz-adv-x="878" d="M827.746 734.667l-173.333 173.333c-20.556 20.556-61.667 37.778-91.111 37.778h-497.778c-29.444 0-53.333-23.889-53.333-53.333v-888.889c0-29.444 23.889-53.333 53.333-53.333h746.667c29.444 0 53.333 23.889 53.333 53.333v640c0 29.444-17.222 70.556-37.778 91.111zM581.079 870.222c9.444-3.333 18.889-8.333 22.778-12.222l173.889-173.889c3.889-3.889 8.889-13.333 12.222-22.778h-208.889zM794.413 21.333h-711.111v853.333h426.667v-231.111c0-29.444 23.889-53.333 53.333-53.333h231.111zM278.857 519.111l-125.556-167.222c-4.444-6.111-4.444-15 0-21.111l125.556-167.222c6.111-7.778 17.222-9.444 25-3.333l28.333 21.111c7.778 6.111 9.444 17.222 3.333 25l-101.111 135 101.111 135c6.111 7.778 4.444 18.889-3.333 25l-28.333 21.111c-7.777 6.111-18.889 4.444-25-3.333zM724.413 351.889l-125.556 167.222c-6.111 7.778-17.222 9.444-25 3.333l-28.333-21.111c-7.777-6.111-9.444-17.222-3.333-25l101.111-135-101.111-135c-6.111-7.778-4.444-18.889 3.333-25l28.333-21.111c7.778-6.111 18.889-4.444 25 3.333l125.556 167.222c4.444 6.111 4.444 15 0 21.111zM379.968 95.778l35-5.556c9.444-1.667 18.889 4.444 20.556 14.444l76.667 461.667c1.667 9.444-4.444 18.889-14.444 20.556l-35 5.556c-9.444 1.667-18.889-4.444-20.556-14.444l-76.667-461.667c-1.667-9.444 4.444-18.889 14.444-20.556z" />
|
||||
<glyph unicode="" glyph-name="richtext" horiz-adv-x="878" d="M827.746 734.667l-173.333 173.333c-20.556 20.556-61.667 37.778-91.111 37.778h-497.778c-29.444 0-53.333-23.889-53.333-53.333v-888.889c0-29.444 23.889-53.333 53.333-53.333h746.667c29.444 0 53.333 23.889 53.333 53.333v640c0 29.444-17.222 70.556-37.778 91.111zM581.079 870.222c9.444-3.333 18.889-8.333 22.778-12.222l173.889-173.889c3.889-3.889 8.889-13.333 12.222-22.778h-208.889zM794.413 21.333h-711.111v853.333h426.667v-231.111c0-29.444 23.889-53.333 53.333-53.333h231.111zM225.524 501.333v-35.556c0-10 7.778-17.778 17.778-17.778h391.111c10 0 17.778 7.778 17.778 17.778v35.556c0 10-7.778 17.778-17.778 17.778h-391.111c-10 0-17.778-7.778-17.778-17.778zM634.413 376.889h-391.111c-10 0-17.778-7.778-17.778-17.778v-35.556c0-10 7.778-17.778 17.778-17.778h391.111c10 0 17.778 7.778 17.778 17.778v35.556c0 10-7.778 17.778-17.778 17.778zM634.413 234.667h-391.111c-10 0-17.778-7.778-17.778-17.778v-35.556c0-10 7.778-17.778 17.778-17.778h391.111c10 0 17.778 7.778 17.778 17.778v35.556c0 10-7.778 17.778-17.778 17.778z" />
|
||||
<glyph unicode="" glyph-name="form-poll" horiz-adv-x="1094" d="M667.572 771.752c0 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.525zM964.853 659.687c0 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.525zM300.535 659.687c0 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.525zM330.094 505.894c0 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.525zM665.995 505.894c0 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.525zM665.995 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.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.525zM832.205 352.915h-31.571q-16.264 26.256-24.024 49.855-7.76 23.705-7.76 46.985t7.76 47.091q7.866 23.918 24.024 49.961h31.571q-13.606-25.193-20.41-49.323-6.803-24.024-6.803-47.516t6.697-47.623q6.803-24.13 20.516-49.43zM913.617 352.915q13.607 25.3 20.41 49.43t6.804 47.623-6.804 47.516q-6.803 24.13-20.41 49.323h31.571q16.158-26.044 23.918-49.961 7.866-23.811 7.866-47.091t-7.76-46.985q-7.76-23.599-24.024-49.855zM169.429 84.249h-31.571q-16.264 26.256-24.024 49.855-7.76 23.705-7.76 46.985t7.76 47.091q7.866 23.918 24.024 49.961h31.571q-13.606-25.193-20.41-49.323-6.803-24.024-6.803-47.516t6.697-47.623q6.803-24.13 20.516-49.43zM250.84 84.249q13.607 25.3 20.41 49.43t6.804 47.623-6.804 47.516q-6.803 24.13-20.41 49.323h31.571q16.158-26.044 23.918-49.961 7.866-23.811 7.866-47.091t-7.76-46.985q-7.76-23.599-24.024-49.855z" />
|
||||
<glyph unicode="" glyph-name="file" horiz-adv-x="878" d="M827.745 734.666l-173.333 173.333c-20.556 20.556-61.667 37.778-91.111 37.778h-497.777c-29.444 0-53.333-23.889-53.333-53.333v-888.887c0-29.444 23.889-53.333 53.333-53.333h746.665c29.444 0 53.333 23.889 53.333 53.333v639.999c0 29.444-17.222 70.555-37.778 91.111zM581.079 870.221c9.444-3.333 18.889-8.333 22.778-12.222l173.889-173.889c3.889-3.889 8.889-13.333 12.222-22.778h-208.889zM794.412 21.334h-711.11v853.332h426.666v-231.111c0-29.444 23.889-53.333 53.333-53.333h231.111z" />
|
||||
<glyph unicode="" glyph-name="palette" d="M408.6 950c-198.8-38.8-359-198.6-398.2-396.8-74-374 263.4-652.8 517.6-613.4 82.4 12.8 122.8 109.2 85 183.4-46.2 90.8 19.8 196.8 121.8 196.8h159.4c71.6 0 129.6 59.2 129.8 130.6-1 315.2-287.8 563.2-615.4 499.4zM192 320c-35.4 0-64 28.6-64 64s28.6 64 64 64 64-28.6 64-64-28.6-64-64-64zM256 576c-35.4 0-64 28.6-64 64s28.6 64 64 64 64-28.6 64-64-28.6-64-64-64zM512 704c-35.4 0-64 28.6-64 64s28.6 64 64 64 64-28.6 64-64-28.6-64-64-64zM768 576c-35.4 0-64 28.6-64 64s28.6 64 64 64 64-28.6 64-64-28.6-64-64-64z" />
|
||||
<glyph unicode="" glyph-name="folder-upload" d="M829.44 727.251h-296.84l-47.104 62.886c-25.923 34.066-66.406 55.898-111.999 56.139h-178.938c-77.457-0.137-140.211-62.891-140.348-140.335v-515.868c0.137-77.457 62.891-140.211 140.335-140.348h634.893c77.457 0.137 140.211 62.891 140.348 140.335v396.482c0 0.036 0 0.078 0 0.121 0 77.561-62.807 140.452-140.335 140.589h-0.013zM911.119 190.072c-0.068-45.083-36.597-81.611-81.673-81.679h-634.887c-45.083 0.068-81.611 36.597-81.679 81.673v515.862c0.068 45.083 36.597 81.611 81.673 81.679h178.906c26.48-0.030 50.004-12.656 64.908-32.207l0.146-0.199 47.104-62.765 17.709-24.094h326.114c45.125-0.069 81.679-36.665 81.679-81.799 0 0 0 0 0 0v0zM562.838 166.883h-102.039v203.957h-72.523l123.723 214.076 123.723-214.076h-72.885v-203.957z" />
|
||||
<glyph unicode="" glyph-name="add-bottom" d="M108.793 271.501c-15.312 0-27.996 12.684-27.996 27.996v55.992c0 15.312 12.684 28.006 27.996 28.006h225.414v-111.993zM108.793 495.478c-15.312 0-27.996 12.694-27.996 28.006v55.992c0 15.312 12.684 27.996 27.996 27.996h403.491v-111.993zM108.793 719.465c-15.312 0-27.996 12.694-27.996 28.006v55.992c0 15.312 12.684 27.996 27.996 27.996h615.968c15.312 0 27.996-12.684 27.996-27.996v-55.992c0-15.312-12.684-28.006-27.996-28.006zM943.202 287.839c0-19.465-15.792-35.257-35.258-35.257h-152.782v-152.782c0-19.465-15.792-35.257-35.258-35.257h-70.515c-19.465 0-35.257 15.792-35.257 35.257v152.782h-152.782c-19.465 0-35.257 15.792-35.257 35.257v70.515c0 19.465 15.792 35.258 35.257 35.258h152.782v152.782c0 19.465 15.792 35.258 35.257 35.258h70.515c19.465 0 35.258-15.792 35.258-35.258v-152.782h152.782c19.465 0 35.258-15.792 35.258-35.258z" />
|
||||
<glyph unicode="" glyph-name="add-top" d="M108.793 624.499c-15.312 0-27.996-12.684-27.996-27.996v-55.992c0-15.312 12.684-28.006 27.996-28.006h225.414v111.993zM108.793 400.522c-15.312 0-27.996-12.694-27.996-28.006v-55.992c0-15.312 12.684-27.996 27.996-27.996h403.491v111.993zM108.793 176.535c-15.312 0-27.996-12.694-27.996-28.006v-55.992c0-15.312 12.684-27.996 27.996-27.996h615.968c15.312 0 27.996 12.684 27.996 27.996v55.992c0 15.312-12.684 28.006-27.996 28.006zM943.202 608.161c0 19.465-15.792 35.257-35.258 35.257h-152.782v152.782c0 19.465-15.792 35.257-35.258 35.257h-70.515c-19.465 0-35.257-15.792-35.257-35.257v-152.782h-152.782c-19.465 0-35.257-15.792-35.257-35.257v-70.515c0-19.465 15.792-35.258 35.257-35.258h152.782v-152.782c0-19.465 15.792-35.258 35.257-35.258h70.515c19.465 0 35.258 15.792 35.258 35.258v152.782h152.782c19.465 0 35.258 15.792 35.258 35.258z" />
|
||||
<glyph unicode="" glyph-name="form-list-check" horiz-adv-x="1094" d="M1012.362 763.843c0 8.831-7.792 16.623-16.623 16.623h-631.687c-8.831 0-16.623-7.792-16.623-16.623v-99.74c0-8.831 7.792-16.623 16.623-16.623h631.687c8.831 0 16.623 7.792 16.623 16.623zM1012.362 497.87c0 8.831-7.792 16.623-16.623 16.623h-631.687c-8.831 0-16.623-7.792-16.623-16.623v-99.74c0-8.831 7.792-16.623 16.623-16.623h631.687c8.831 0 16.623 7.792 16.623 16.623zM1012.362 231.897c0 8.831-7.792 16.623-16.623 16.623h-631.687c-8.831 0-16.623-7.792-16.623-16.623v-99.74c0-8.831 7.792-16.623 16.623-16.623h631.687c8.831 0 16.623 7.792 16.623 16.623zM279.136 239.834c0 22.077-17.911 39.988-39.988 39.988h-115.521c-22.077 0-39.988-17.911-39.988-39.988v-115.521c0-22.077 17.911-39.988 39.988-39.988h115.521c22.077 0 39.988 17.911 39.988 39.988zM307.396 779.338c0 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.525zM307.396 513.228c0 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.525z" />
|
||||
<glyph unicode="" glyph-name="form-grid-check" horiz-adv-x="1094" d="M645.063 506.257c0 22.077-17.911 39.988-39.988 39.988h-115.521c-22.077 0-39.988-17.911-39.988-39.988v-115.521c0-22.077 17.911-39.988 39.988-39.988h115.521c22.077 0 39.988 17.911 39.988 39.988zM1011.782 771.036c0 22.077-17.911 39.988-39.988 39.988h-115.521c-22.077 0-39.988-17.911-39.988-39.988v-115.521c0-22.077 17.911-39.988 39.988-39.988h115.521c22.077 0 39.988 17.911 39.988 39.988zM279.090 506.257c0 22.077-17.911 39.988-39.988 39.988h-115.521c-22.077 0-39.988-17.911-39.988-39.988v-115.521c0-22.077 17.911-39.988 39.988-39.988h115.521c22.077 0 39.988 17.911 39.988 39.988zM279.136 239.834c0 22.077-17.911 39.988-39.988 39.988h-115.521c-22.077 0-39.988-17.911-39.988-39.988v-115.521c0-22.077 17.911-39.988 39.988-39.988h115.521c22.077 0 39.988 17.911 39.988 39.988zM1011.753 239.834c0 22.077-17.911 39.988-39.988 39.988h-115.521c-22.077 0-39.988-17.911-39.988-39.988v-115.521c0-22.077 17.911-39.988 39.988-39.988h115.521c22.077 0 39.988 17.911 39.988 39.988zM1047.594 513.673c0 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.525zM676.789 238.106c0 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.525zM676.789 771.743c0 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.525zM318.428 771.743c0 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.525z" />
|
||||
<glyph unicode="" glyph-name="form-grid-radio" horiz-adv-x="1094" d="M181.227 823.091c-60.1 0-109.091-48.991-109.091-109.091s48.991-109.091 109.091-109.091c60.1 0 108.955 48.991 108.955 109.091s-48.855 109.091-108.955 109.091zM545.091 823.091c-60.1 0-109.091-48.991-109.091-109.091s48.991-109.091 109.091-109.091c60.1 0 109.091 48.991 109.091 109.091s-48.991 109.091-109.091 109.091zM908.955 823.091c-60.1 0-109.091-48.991-109.091-109.091s48.991-109.091 109.091-109.091c60.1 0 109.091 48.991 109.091 109.091s-48.991 109.091-109.091 109.091zM181.227 747.318c19.623 0 33.364-13.695 33.364-33.318 0-19.583-13.943-33.5-33.364-33.5-19.381 0-33.5 14.119-33.5 33.5 0 19.421 13.917 33.318 33.5 33.318zM181.227 556.955c-60.1 0-109.091-48.809-109.091-108.909s48.991-109.091 109.091-109.091c60.1 0 108.955 48.991 108.955 109.091s-48.855 108.909-108.955 108.909zM545.091 556.955c-60.1 0-109.091-48.809-109.091-108.909s48.991-109.091 109.091-109.091c60.1 0 109.091 48.991 109.091 109.091s-48.991 108.909-109.091 108.909zM908.955 556.955c-60.1 0-109.091-48.809-109.091-108.909s48.991-109.091 109.091-109.091c60.1 0 109.091 48.991 109.091 109.091s-48.991 108.909-109.091 108.909zM909.045 481.364c19.623 0 33.318-13.74 33.318-33.364 0-19.583-13.897-33.5-33.318-33.5-19.381 0-33.5 14.119-33.5 33.5 0 19.421 13.917 33.364 33.5 33.364zM181.227 291.045c-60.1 0-109.091-48.855-109.091-108.955s48.991-109.091 109.091-109.091c60.1 0 108.955 48.991 108.955 109.091s-48.855 108.955-108.955 108.955zM545.091 291.045c-60.1 0-109.091-48.855-109.091-108.955s48.991-109.091 109.091-109.091c60.1 0 109.091 48.991 109.091 109.091s-48.991 108.955-109.091 108.955zM908.955 291.045c-60.1 0-109.091-48.855-109.091-108.955s48.991-109.091 109.091-109.091c60.1 0 109.091 48.991 109.091 109.091s-48.991 108.955-109.091 108.955zM545.318 214c19.623 0 33.318-13.695 33.318-33.318 0-19.583-13.897-33.5-33.318-33.5-19.381 0-33.5 14.119-33.5 33.5 0 19.421 13.917 33.318 33.5 33.318z" />
|
||||
<glyph unicode="" glyph-name="form-list-radio" horiz-adv-x="1094" d="M1012.362 763.843c0 8.831-7.792 16.623-16.623 16.623h-631.687c-8.831 0-16.623-7.792-16.623-16.623v-99.74c0-8.831 7.792-16.623 16.623-16.623h631.687c8.831 0 16.623 7.792 16.623 16.623zM1012.362 497.87c0 8.831-7.792 16.623-16.623 16.623h-631.687c-8.831 0-16.623-7.792-16.623-16.623v-99.74c0-8.831 7.792-16.623 16.623-16.623h631.687c8.831 0 16.623 7.792 16.623 16.623zM181.227 823.091c-60.1 0-109.091-48.991-109.091-109.091s48.991-109.091 109.091-109.091c60.1 0 108.955 48.991 108.955 109.091s-48.855 109.091-108.955 109.091zM181.227 747.318c19.623 0 33.364-13.695 33.364-33.318 0-19.583-13.943-33.5-33.364-33.5-19.381 0-33.5 14.119-33.5 33.5 0 19.421 13.917 33.318 33.5 33.318zM181.227 556.955c-60.1 0-109.091-48.809-109.091-108.909s48.991-109.091 109.091-109.091c60.1 0 108.955 48.991 108.955 109.091s-48.855 108.909-108.955 108.909zM181.227 291.045c-60.1 0-109.091-48.855-109.091-108.955s48.991-109.091 109.091-109.091c60.1 0 108.955 48.991 108.955 109.091s-48.855 108.955-108.955 108.955zM1012.362 231.897c0 8.831-7.792 16.623-16.623 16.623h-631.687c-8.831 0-16.623-7.792-16.623-16.623v-99.74c0-8.831 7.792-16.623 16.623-16.623h631.687c8.831 0 16.623 7.792 16.623 16.623z" />
|
||||
<glyph unicode="" glyph-name="form-page-break" horiz-adv-x="1094" d="M190.545 923.136c-28.106 0-50.909-22.803-50.909-50.909v-410.318h67.864v393.364h407.273v-220.591c0-28.106 22.803-50.909 50.909-50.909h220.636v-121.864h67.864v172.773c0 28.106-16.424 67.333-36.045 86.955l-165.455 165.455c-19.621 19.621-58.894 36.045-87 36.045zM682.682 851.046c9.015-3.182 18.015-7.97 21.727-11.682l166-166c3.712-3.712 8.455-12.712 11.636-21.727h-199.364zM139.636 236.273v-212.5c0-28.106 22.803-50.909 50.909-50.909h712.727c28.106 0 50.909 22.803 50.909 50.909v212.5h-67.864v-195.545h-678.818v195.545zM66.394 387.23v-65.283h195.505v65.283zM327.009 387.23v-65.283h195.505v65.283zM587.797 387.23v-65.283h195.505v65.283zM848.412 387.23v-65.283h179.012v65.283z" />
|
||||
<glyph unicode="" glyph-name="form-paragraph" horiz-adv-x="1094" d="M1012.362 182.027c0 18.182-15.065 33.247-33.247 33.247h-864.413c-18.182 0-33.247-15.065-33.247-33.247v-66.493c0-18.182 15.065-33.247 33.247-33.247h864.413c18.182 0 33.247 15.065 33.247 33.247zM812.882 381.507c0 18.182-15.065 33.247-33.247 33.247h-664.933c-18.182 0-33.247-15.065-33.247-33.247v-66.493c0-18.182 15.065-33.247 33.247-33.247h664.933c18.182 0 33.247 15.065 33.247 33.247zM945.869 580.987c0 18.182-15.065 33.247-33.247 33.247h-797.92c-18.182 0-33.247-15.065-33.247-33.247v-66.493c0-18.182 15.065-33.247 33.247-33.247h797.92c18.182 0 33.247 15.065 33.247 33.247zM746.389 780.467c0 18.182-15.065 33.247-33.247 33.247h-598.44c-18.182 0-33.247-15.065-33.247-33.247v-66.493c0-18.182 15.065-33.247 33.247-33.247h598.44c18.182 0 33.247 15.065 33.247 33.247z" />
|
||||
<glyph unicode="" glyph-name="form-text" horiz-adv-x="1094" d="M1012.362 481.247c0 18.182-15.065 33.247-33.247 33.247h-864.413c-18.182 0-33.247-15.065-33.247-33.247v-66.493c0-18.182 15.065-33.247 33.247-33.247h864.413c18.182 0 33.247 15.065 33.247 33.247z" />
|
||||
<glyph unicode="" 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="" 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="" 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="" 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" />
|
||||
<glyph unicode="" glyph-name="diagram" horiz-adv-x="878" d="M827.746 734.667l-173.333 173.333c-20.556 20.556-61.667 37.778-91.111 37.778h-497.778c-29.444 0-53.333-23.889-53.333-53.333v-888.889c0-29.444 23.889-53.333 53.333-53.333h746.667c29.444 0 53.333 23.889 53.333 53.333v640c0 29.444-17.222 70.556-37.778 91.111zM581.079 870.222c9.444-3.333 18.889-8.333 22.778-12.222l173.889-173.889c3.889-3.889 8.889-13.333 12.222-22.778h-208.889zM794.413 21.333h-711.111v853.333h426.667v-231.111c0-29.444 23.889-53.333 53.333-53.333h231.111zM142.19 699.381v-233.667h242.476l103.19-129.667-66.571 7.571c-0.464 0.060-1 0.095-1.544 0.095-6.469 0-11.802-4.862-12.545-11.13l-0.006-0.060c-0.043-0.393-0.068-0.848-0.068-1.309 0-6.459 4.847-11.786 11.103-12.542l0.060-0.006 119.095-13.714 13.667 119.095c0.059 0.459 0.093 0.99 0.093 1.529 0 6.519-4.937 11.884-11.276 12.562l-0.055 0.005c-0.401 0.045-0.865 0.071-1.336 0.071-6.528 0-11.899-4.95-12.564-11.302l-0.005-0.055-7.571-66.571-101.952 128.143v210.952h-274.19zM190.952 650.619h176.667v-136.143h-176.667v136.143zM628.143 307.952c-64.030 0-117.525-47.559-126.857-109.095l-73.095 0.762 47.857 46.81c2.398 2.303 3.888 5.536 3.888 9.117 0 3.487-1.413 6.645-3.698 8.931v0c-2.288 2.295-5.452 3.714-8.947 3.714-0.018 0-0.037 0-0.055 0h0.003c-0.058 0.001-0.127 0.002-0.196 0.002-3.425 0-6.532-1.363-8.807-3.576l0.003 0.003-85.524-83.81 83.809-85.714c2.293-2.327 5.478-3.768 9.001-3.768 3.427 0 6.536 1.365 8.812 3.58l-0.003-0.003c2.327 2.293 3.768 5.478 3.768 9.001 0 3.427-1.365 6.536-3.58 8.812l0.003-0.003-46.952 47.857 73.81-0.714c9.614-61.186 62.962-108.286 126.762-108.286 70.545 0 128.095 57.551 128.095 128.095s-57.551 128.286-128.095 128.286zM626.095 259.19c0.686 0.017 1.357 0 2.048 0 44.192 0 79.333-35.332 79.333-79.524s-35.141-79.524-79.333-79.524c-44.192 0-79.524 35.332-79.524 79.524 0 43.501 34.254 78.443 77.476 79.524zM244.048 438.143l-85.381-84.048c-2.384-2.301-3.864-5.525-3.864-9.094 0-3.475 1.403-6.623 3.674-8.907l-0.001 0.001c2.295-2.341 5.49-3.792 9.024-3.792s6.729 1.451 9.022 3.79l0.002 0.002 47.571 46.762-0.952-117.667h-80.952v-191.286h202.381v191.286h-82.381l0.905 117.571 47.143-47.81c2.29-2.312 5.466-3.744 8.977-3.744 3.439 0 6.557 1.374 8.835 3.603l-0.002-0.002c2.384 2.301 3.864 5.525 3.864 9.094 0 3.475-1.403 6.623-3.674 8.907l0.001-0.001-84.19 85.333zM190.952 216.429h104.857v-93.762h-104.857v93.762z" />
|
||||
</font></defs></svg>
|
||||
|
Before Width: | Height: | Size: 44 KiB |
@ -1,3 +0,0 @@
|
||||
SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
Binary file not shown.
@ -1,3 +0,0 @@
|
||||
SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
Binary file not shown.
@ -1,3 +0,0 @@
|
||||
SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
@ -1,136 +0,0 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
font-family: 'cptools';
|
||||
src: url('fonts/cptools.eot?nobkj');
|
||||
src: url('fonts/cptools.eot?nobkj#iefix') format('embedded-opentype'),
|
||||
url('fonts/cptools.ttf?nobkj') format('truetype'),
|
||||
url('fonts/cptools.woff?nobkj') format('woff'),
|
||||
url('fonts/cptools.svg?nobkj#cptools') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
|
||||
.cptools {
|
||||
/* use !important to prevent issues with browser extensions that change fonts */
|
||||
font-family: 'cptools' !important;
|
||||
display: inline-block;
|
||||
speak: never;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
|
||||
/* Better Font Rendering =========== */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.cptools-diagram:before {
|
||||
content: "\e921";
|
||||
}
|
||||
.cptools-drive:before {
|
||||
content: "\e920";
|
||||
}
|
||||
.cptools-form-conditional:before {
|
||||
content: "\e900";
|
||||
}
|
||||
.cptools-form-poll:before {
|
||||
content: "\e910";
|
||||
}
|
||||
.cptools-form-poll-maybe:before {
|
||||
content: "\e91e";
|
||||
}
|
||||
.cptools-form-list-check:before {
|
||||
content: "\e916";
|
||||
}
|
||||
.cptools-form-grid-check:before {
|
||||
content: "\e917";
|
||||
}
|
||||
.cptools-form-grid-radio:before {
|
||||
content: "\e918";
|
||||
}
|
||||
.cptools-form-list-radio:before {
|
||||
content: "\e919";
|
||||
}
|
||||
.cptools-form-page-break:before {
|
||||
content: "\e91a";
|
||||
}
|
||||
.cptools-form-paragraph:before {
|
||||
content: "\e91b";
|
||||
}
|
||||
.cptools-form-text:before {
|
||||
content: "\e91c";
|
||||
}
|
||||
.cptools-form-list-ordered:before {
|
||||
content: "\e91d";
|
||||
}
|
||||
.cptools-folder-no-color:before {
|
||||
content: "\e901";
|
||||
}
|
||||
.cptools-whiteboard:before {
|
||||
content: "\e902";
|
||||
}
|
||||
.cptools-new-template:before {
|
||||
content: "\e903";
|
||||
}
|
||||
.cptools-shared-folder:before {
|
||||
content: "\e904";
|
||||
}
|
||||
.cptools-file-upload:before {
|
||||
content: "\e905";
|
||||
}
|
||||
.cptools-template:before {
|
||||
content: "\e906";
|
||||
}
|
||||
.cptools-poll:before {
|
||||
content: "\e907";
|
||||
}
|
||||
.cptools-slide:before {
|
||||
content: "\e908";
|
||||
}
|
||||
.cptools-sheet:before {
|
||||
content: "\e909";
|
||||
}
|
||||
.cptools-folder-open:before {
|
||||
content: "\e90a";
|
||||
}
|
||||
.cptools-kanban:before {
|
||||
content: "\e90b";
|
||||
}
|
||||
.cptools-folder:before {
|
||||
content: "\e90c";
|
||||
}
|
||||
.cptools-shared-folder-open:before {
|
||||
content: "\e90d";
|
||||
}
|
||||
.cptools-code:before {
|
||||
content: "\e90e";
|
||||
}
|
||||
.cptools-richtext:before {
|
||||
content: "\e90f";
|
||||
}
|
||||
.cptools-file:before {
|
||||
content: "\e911";
|
||||
}
|
||||
.cptools-palette:before {
|
||||
content: "\e912";
|
||||
}
|
||||
.cptools-folder-upload:before {
|
||||
content: "\e913";
|
||||
}
|
||||
.cptools-add-bottom:before {
|
||||
content: "\e914";
|
||||
}
|
||||
.cptools-add-top:before {
|
||||
content: "\e915";
|
||||
}
|
||||
.cptools-destroy:before {
|
||||
content: "\e91f";
|
||||
}
|
||||
@ -7,43 +7,58 @@
|
||||
// text #3F4141
|
||||
define([
|
||||
'/customize/messages.js',
|
||||
'/customize/lucide.js',
|
||||
'less!/customize/src/less2/include/loading.less'
|
||||
], function (Messages) {
|
||||
], function (Messages, Lucide) {
|
||||
var urlArgs = window.location.href.replace(/^.*\?([^\?]*)$/, function (all, x) { return x; });
|
||||
var elem = document.createElement('div');
|
||||
elem.setAttribute('id', 'cp-loading');
|
||||
|
||||
elem.innerHTML = [
|
||||
'<div class="cp-loading-logo">',
|
||||
'<img class="cp-loading-cryptofist" src="/api/logo?' + urlArgs + '" alt="" aria-hidden="true">',
|
||||
'</div>',
|
||||
'<div class="cp-loading-container">',
|
||||
'<div class="cp-loading-spinner-container">',
|
||||
'<span class="cp-spinner"></span>',
|
||||
'</div>',
|
||||
'<div class="cp-loading-progress" aria-hidden="true" role="presentation">',
|
||||
'<div class="cp-loading-progress-list"></div>',
|
||||
'<div class="cp-loading-progress-container"></div>',
|
||||
'</div>',
|
||||
'<p id="cp-loading-message"></p>',
|
||||
'</div>'
|
||||
].join('');
|
||||
const logoPath = '/customize/CryptPad_logo_grey.svg';// XXX custom
|
||||
elem.innerHTML = `
|
||||
<div></div>
|
||||
<div class="cp-loading-container">
|
||||
<div class="cp-loading-progress" aria-hidden="true" role="presentation">
|
||||
<div class="cp-loading-progress-list"></div>
|
||||
<div class="cp-loading-progress-container"></div>
|
||||
</div>
|
||||
<div id="cp-loading-spinner-message"></div>
|
||||
<div class="cp-loading-spinner-container">
|
||||
<div class="cp-spinner-main"></div>
|
||||
</div>
|
||||
<p id="cp-loading-message"></p>
|
||||
</div>
|
||||
<div id="cp-loading-footer">
|
||||
<div class="cp-loading-logo">
|
||||
<img class="cp-loading-cryptofist" src="${logoPath}?${urlArgs}" alt="" aria-hidden="true"><span>CryptPad</span>
|
||||
</div>
|
||||
<div id="cp-loading-status">
|
||||
<i data-lucide="lock" aria-hidden="true"></i>
|
||||
<span>${Messages.loading_encrypted}</span>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
var built = false;
|
||||
|
||||
var types = ['less', 'drive', 'migrate', 'sf', 'team', 'pad', 'end']; // Msg.loading_state_0, loading_state_1, loading_state_2, loading_state_3, loading_state_4, loading_state_5
|
||||
var current, progress;
|
||||
var makeList = function (data) {
|
||||
if (data.type === "end") { return ''; }
|
||||
var c = types.indexOf(data.type);
|
||||
current = c;
|
||||
const msg = Messages['loading_state_'+c];
|
||||
return `<span>${msg}</span>`;
|
||||
|
||||
/*
|
||||
var getLi = function (i) {
|
||||
var check = (i < c || (i === c && data.progress >= 100)) ? 'fa-check-square-o'
|
||||
: 'fa-square-o';
|
||||
var check = (i < c || (i === c && data.progress >= 100)) ? 'square-check'
|
||||
: 'square';
|
||||
var percentStr = '';
|
||||
if (i === c) {
|
||||
var p = Math.min(Math.floor(data.progress), 100);
|
||||
percentStr = '<span class="percent">('+p+'%)</span>';
|
||||
}
|
||||
return '<li><i class="fa '+check+'"></i><span>'+Messages['loading_state_'+i]+'</span>' + percentStr;
|
||||
return '<li><i data-lucide="'+check+'"></i><span>'+Messages['loading_state_'+i]+'</span>' + percentStr;
|
||||
};
|
||||
var list = '<ul>';
|
||||
types.forEach(function (el, i) {
|
||||
@ -52,6 +67,7 @@ define([
|
||||
});
|
||||
list += '</ul>';
|
||||
return list;
|
||||
*/
|
||||
};
|
||||
var makeBar = function (data) {
|
||||
var c = types.indexOf(data.type);
|
||||
@ -100,7 +116,10 @@ define([
|
||||
if (el2) { el2.innerHTML = makeList(data); }
|
||||
var el3 = document.querySelector('.cp-loading-progress-container');
|
||||
if (el3) { el3.innerHTML = makeBar(data); }
|
||||
var el4 = document.querySelector('#cp-loading-status');
|
||||
if (el4) { el4.setAttribute('style', ''); }
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
};
|
||||
window.CryptPad_updateLoadingProgress = updateLoadingProgress;
|
||||
@ -134,6 +153,7 @@ define([
|
||||
if (!document.body) { return; }
|
||||
clearInterval(intr);
|
||||
document.body.appendChild(elem);
|
||||
Lucide.createIcons();
|
||||
};
|
||||
intr = setInterval(append, 100);
|
||||
append();
|
||||
|
||||
18327
customize.dist/lucide.js
Normal file
18327
customize.dist/lucide.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -24,7 +24,7 @@ var map = {
|
||||
'pl': 'Polski',
|
||||
'pt-br': 'Português do Brasil',
|
||||
'pt-pt': 'Português do Portugal',
|
||||
//'ro': 'Română',
|
||||
'ro': 'Română',
|
||||
'ru': 'Русский',
|
||||
'sv': 'Svenska',
|
||||
//'te': 'తెలుగు',
|
||||
|
||||
@ -12,8 +12,9 @@ define([
|
||||
'/api/config',
|
||||
'/common/extensions.js',
|
||||
'optional!/api/instance',
|
||||
'/common/common-icons.js',
|
||||
], function (h, Language, Util, AppConfig, Msg, $, ApiConfig,
|
||||
Extensions, Instance) {
|
||||
Extensions, Instance, Icons) {
|
||||
var Pages = {};
|
||||
|
||||
Pages.setHTML = function (e, html) {
|
||||
@ -79,7 +80,6 @@ define([
|
||||
href: ref,
|
||||
role: 'button',
|
||||
};
|
||||
var iconName = '';
|
||||
if (!/^\//.test(ref)) {
|
||||
attrs.target = '_blank';
|
||||
attrs.rel = 'noopener noreferrer';
|
||||
@ -89,8 +89,7 @@ define([
|
||||
text = Msg[loc];
|
||||
}
|
||||
if (icon) {
|
||||
iconName = 'i.fa.fa-' + icon;
|
||||
icon = h(iconName);
|
||||
icon = Icons.get(icon);
|
||||
}
|
||||
return h('a', attrs, [icon, text]);
|
||||
};
|
||||
@ -151,7 +150,7 @@ define([
|
||||
Pages.infopageFooter = function () {
|
||||
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
|
||||
donateButton = footLink('https://opencollective.com/cryptpad/contribute/', 'footer_donate', null, 'donate'); // TODO migrate to forkawesome and use the OpenCollective icon
|
||||
}
|
||||
|
||||
return h('footer.cp-footer', [
|
||||
@ -176,7 +175,7 @@ define([
|
||||
]),
|
||||
h('div.cp-footer-right', [
|
||||
h('div.cp-footer-language', [
|
||||
h('i.fa.fa-language', {'aria-hidden': 'true'}),
|
||||
Icons.get('language'),
|
||||
languageSelector()
|
||||
])
|
||||
])
|
||||
@ -190,7 +189,7 @@ define([
|
||||
|
||||
if (!ApiConfig.restrictRegistration) {
|
||||
registerLink = h('a.nav-item.nav-link.cp-register-btn', { href: '/register/', role: 'button'}, [
|
||||
h('i.fa.fa-user', {'aria-hidden':'true'}),
|
||||
Icons.get('user-account'),
|
||||
Msg.login_register
|
||||
]);
|
||||
}
|
||||
@ -198,14 +197,14 @@ define([
|
||||
if (username === null) {
|
||||
rightLinks = [
|
||||
h('a.nav-item.nav-link.cp-login-btn', { href: '/login/', role: 'button'}, [
|
||||
h('i.fa.fa-sign-in', {'aria-hidden':'true'}),
|
||||
Icons.get('login'),
|
||||
Msg.login_login
|
||||
]),
|
||||
registerLink,
|
||||
];
|
||||
} else {
|
||||
rightLinks = h('a.nav-item.nav-link.cp-user-btn', { href: '/drive/', role: 'button'}, [
|
||||
h('i.fa.fa-user-circle', {'aria-hidden':'true'}),
|
||||
Icons.get('user-profile'),
|
||||
" ",
|
||||
username
|
||||
]);
|
||||
@ -213,7 +212,7 @@ define([
|
||||
|
||||
var isHome = ['/', '/index.html'].includes(window.location.pathname);
|
||||
var homeLink = h('a.nav-item.nav-link.cp-back-home' /* .navbar-brand */, { href: '/index.html', role: 'button'}, [
|
||||
h('i.fa.fa-arrow-left'),
|
||||
Icons.get('chevron-left'),
|
||||
h('img', {
|
||||
src: '/customize/CryptPad_logo.svg',
|
||||
"aria-hidden": true,
|
||||
@ -233,11 +232,12 @@ define([
|
||||
[
|
||||
!isHome? homeLink: undefined,
|
||||
h('a.nav-item.nav-link', { href: '/features.html', role: 'button'}, [
|
||||
h('i.fa.fa-info-circle'),
|
||||
Icons.get('properties'),
|
||||
pricingName
|
||||
]),
|
||||
h('a.nav-item.nav-link', { href: 'https://docs.cryptpad.org'},
|
||||
[h('i.fa.fa-book', {'aria-hidden':'true'}),Msg.docs_link]),
|
||||
h('a.nav-item.nav-link', { href: 'https://docs.cryptpad.org'}, [
|
||||
Icons.get('documentation'),
|
||||
Msg.docs_link]),
|
||||
].concat(rightLinks)
|
||||
);
|
||||
};
|
||||
|
||||
@ -12,7 +12,7 @@ define([
|
||||
|
||||
return function () {
|
||||
document.title = Msg.contact;
|
||||
var developerEmail = "contact@cryptpad.fr";
|
||||
var developerEmail = "contact@cryptpad.org";
|
||||
var adminEmail = Config.adminEmail && [
|
||||
'i.did.not.read.my.config@cryptpad.fr',
|
||||
developerEmail
|
||||
|
||||
@ -13,8 +13,9 @@ define([
|
||||
'/common/common-ui-elements.js',
|
||||
'/common/common-constants.js',
|
||||
'/common/pad-types.js',
|
||||
'/common/extensions.js'
|
||||
], function ($, h, Msg, AppConfig, LocalStore, Pages, Config, UIElements, Constants, PadTypes, Extensions) {
|
||||
'/common/extensions.js',
|
||||
'/common/common-icons.js'
|
||||
], function ($, h, Msg, AppConfig, LocalStore, Pages, Config, UIElements, Constants, PadTypes, Extensions, Icons) {
|
||||
return function () {
|
||||
document.title = Msg.features;
|
||||
Msg.features_f_apps_note = PadTypes.availableTypes.map(function (app) {
|
||||
@ -27,7 +28,7 @@ define([
|
||||
|
||||
var groupItemTemplate = function (title, content) {
|
||||
return h('li.list-group-item', [
|
||||
h('div.cp-check'),
|
||||
Icons.get('check'),
|
||||
h('div.cp-content', [
|
||||
h('div.cp-feature', title),
|
||||
h('div.cp-note', content),
|
||||
|
||||
@ -15,8 +15,9 @@ define([
|
||||
'/common/outer/local-store.js',
|
||||
'/customize/pages.js',
|
||||
'/common/pad-types.js',
|
||||
'/common/extensions.js'
|
||||
], function ($, Config, h, Hash, Constants, Util, TextFit, Msg, AppConfig, LocalStore, Pages, PadTypes, Extensions) {
|
||||
'/common/extensions.js',
|
||||
'/common/common-icons.js'
|
||||
], function ($, Config, h, Hash, Constants, Util, TextFit, Msg, AppConfig, LocalStore, Pages, PadTypes, Extensions, Icons) {
|
||||
var urlArgs = Config.requireConf.urlArgs;
|
||||
|
||||
var checkEarlyAccess = function (x) {
|
||||
@ -58,7 +59,6 @@ define([
|
||||
var isEAEnabled = checkEarlyAccess(x[0]);
|
||||
//if (i > 2) { s += '.cp-more.cp-hidden'; }
|
||||
var icon = AppConfig.applicationsIcon[x[0]];
|
||||
var font = icon.indexOf('cptools') === 0 ? 'cptools' : 'fa';
|
||||
var href = '/'+ x[0] +'/';
|
||||
var attr = isEnabled ? { href: href } : {
|
||||
onclick: function () {
|
||||
@ -79,7 +79,7 @@ define([
|
||||
return h('a.cp-index-appitem' + cls, [
|
||||
attr,
|
||||
h(s, [
|
||||
h('i.' + font + '.' + icon, {'aria-hidden': 'true'}),
|
||||
Icons.get(icon),
|
||||
h('div.pad-button-text', [ x[1] ])
|
||||
])
|
||||
]);
|
||||
@ -142,7 +142,7 @@ define([
|
||||
var locationBlock;
|
||||
if (Pages.Instance.location) {
|
||||
locationBlock = h('div.cp-instance-location', [
|
||||
h('i.fa.fa-map-pin', {'aria-hidden': 'true'}),
|
||||
Icons.get('map-pin'),
|
||||
Msg._getKey('home_location', [ Pages.Instance.location ]),
|
||||
]);
|
||||
} else {
|
||||
@ -203,7 +203,7 @@ define([
|
||||
h('div.cp-apps.col-lg-6', [
|
||||
h('div.cp-app-grid', [
|
||||
h('span.cp-app-new', [
|
||||
h('i.fa.fa-plus'),
|
||||
Icons.get('add'),
|
||||
Msg.fm_newFile
|
||||
]),
|
||||
h('div.cp-app-grid-apps', [
|
||||
@ -212,7 +212,7 @@ define([
|
||||
]),
|
||||
h('div.cp-app-drive', [
|
||||
h('a.cp-drive-btn', {'href': '/drive/'}, [
|
||||
h('i.fa.fa-hdd-o', {'aria-hidden': 'true'}),
|
||||
Icons.get('drive'),
|
||||
Msg.team_cat_drive
|
||||
]),
|
||||
extraButtons
|
||||
|
||||
@ -8,8 +8,9 @@ define([
|
||||
'/common/hyperscript.js',
|
||||
'/common/common-interface.js',
|
||||
'/customize/messages.js',
|
||||
'/customize/pages.js'
|
||||
], function (Config, $, h, UI, Msg, Pages) {
|
||||
'/customize/pages.js',
|
||||
'/common/common-icons.js',
|
||||
], function (Config, $, h, UI, Msg, Pages, Icons) {
|
||||
Config.adminKeys = [];
|
||||
return function () {
|
||||
// Redirect to drive if this instance already has admins
|
||||
@ -36,7 +37,23 @@ define([
|
||||
h('div.row.cp-register-det', [
|
||||
h('div#data.hidden.col-md-6', [
|
||||
h('h2', Msg.register_notes_title),
|
||||
Pages.setHTML(h('div.cp-register-notes'), Msg.install_notes)
|
||||
h('div.cp-register-notes', [
|
||||
h('ul.cp-notes-list', [
|
||||
h('li', [
|
||||
Icons.get('alert'),
|
||||
Msg.admin_note
|
||||
]),
|
||||
h('li', [
|
||||
Icons.get('alert'),
|
||||
Msg.password_note3,
|
||||
h('span.red', Msg.password_note2)
|
||||
]),
|
||||
h('li', [
|
||||
Icons.get('alert'),
|
||||
Pages.setHTML(h('span'), Msg._getKey('computer_note', ['<span class="red">','</span>']))
|
||||
])
|
||||
])
|
||||
])
|
||||
]),
|
||||
h('div.cp-reg-form.col-md-6', [
|
||||
h('div#userForm.form-group.hidden', [
|
||||
|
||||
@ -12,9 +12,15 @@ define([
|
||||
return function () {
|
||||
document.title = Msg.login_login;
|
||||
|
||||
var ssoEnabled = (Config.sso && Config.sso.list && Config.sso.list.length) ?'': '.cp-hidden';
|
||||
var ssoEnforced = (Config.sso && Config.sso.force) ? '.cp-hidden' : '';
|
||||
|
||||
const ssoLength = Config?.sso?.list?.length;
|
||||
const forceStandardLogin = window.location.hash === "#standard-login";
|
||||
var ssoEnabled = (ssoLength && !forceStandardLogin) ? '': '.cp-hidden';
|
||||
var ssoEnforced = (Config?.sso?.force && !forceStandardLogin) ? '.cp-hidden' : '';
|
||||
if (ssoLength === 1 && ssoEnforced) {
|
||||
// SSO enforced and only one provider:
|
||||
// skip login page
|
||||
return;
|
||||
}
|
||||
return [h('div#cp-main', [
|
||||
Pages.infopageTopbar(),
|
||||
h('div.container.cp-container', [
|
||||
|
||||
@ -8,8 +8,9 @@ define([
|
||||
'/common/hyperscript.js',
|
||||
'/common/common-interface.js',
|
||||
'/customize/messages.js',
|
||||
'/customize/pages.js'
|
||||
], function (Config, $, h, UI, Msg, Pages) {
|
||||
'/customize/pages.js',
|
||||
'/common/common-icons.js',
|
||||
], function (Config, $, h, UI, Msg, Pages, Icons) {
|
||||
|
||||
return function () {
|
||||
document.title = Msg.recovery_header;
|
||||
@ -68,7 +69,7 @@ define([
|
||||
autofocus: true,
|
||||
}),
|
||||
h('div.cp-recovery-forgot', [
|
||||
h('i.fa.fa-caret-right'),
|
||||
Icons.get('chevron-right'),
|
||||
h('span', Msg.recovery_forgot)
|
||||
]),
|
||||
h('div.cp-recovery-alt', {style: 'display: none;'}, [
|
||||
|
||||
@ -8,8 +8,9 @@ define([
|
||||
'/common/hyperscript.js',
|
||||
'/common/common-interface.js',
|
||||
'/customize/messages.js',
|
||||
'/customize/pages.js'
|
||||
], function (Config, $, h, UI, Msg, Pages) {
|
||||
'/customize/pages.js',
|
||||
'/common/common-icons.js',
|
||||
], function (Config, $, h, UI, Msg, Pages, Icons) {
|
||||
return function () {
|
||||
document.title = Msg.register_header;
|
||||
var tos = $(UI.createCheckbox('accept-terms')).find('.cp-checkmark-label').append(Msg.register_acceptTerms).parent()[0];
|
||||
@ -54,7 +55,23 @@ define([
|
||||
h('div.row.cp-register-det', [
|
||||
h('div#data.hidden.col-md-6', [
|
||||
h('h2', Msg.register_notes_title),
|
||||
Pages.setHTML(h('div.cp-register-notes'), Msg.register_notes)
|
||||
h('div.cp-register-notes', [
|
||||
h('ul.cp-notes-list', [
|
||||
h('li', [
|
||||
Icons.get('alert'),
|
||||
Msg.password_note1,
|
||||
h('span.red', Msg.password_note2)
|
||||
]),
|
||||
h('li', [
|
||||
Icons.get('alert'),
|
||||
Pages.setHTML(h('span'), Msg._getKey('computer_note', ['<span class="red">','</span>']))
|
||||
]),
|
||||
h('li', [
|
||||
Icons.get('alert'),
|
||||
Msg.import_note
|
||||
])
|
||||
])
|
||||
])
|
||||
]),
|
||||
h('div.col-md-3.cp-closed-filler'+ssoEnabled, h('div')),
|
||||
h('div.cp-reg-form.col-md-6', [
|
||||
|
||||
@ -3,21 +3,25 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
(function () {
|
||||
var logoPath = '/customize/CryptPad_logo.svg';
|
||||
if (location.pathname === '/' || location.pathname === '/index.html') {
|
||||
logoPath = '/api/logo';
|
||||
}
|
||||
var logoPath = '/customize/CryptPad_logo_grey.svg';
|
||||
|
||||
var elem = document.createElement('div');
|
||||
elem.setAttribute('id', 'placeholder');
|
||||
elem.innerHTML = [
|
||||
'<div class="placeholder-logo-container">',
|
||||
'<img class="placeholder-logo" alt="" aria-hidden="true" src="' + logoPath + '">',
|
||||
'</div>',
|
||||
'<div class="placeholder-message-container">',
|
||||
'<p>Loading...</p>',
|
||||
'</div>'
|
||||
].join('');
|
||||
elem.innerHTML = `
|
||||
<div></div>
|
||||
<div class="placeholder-message-container">
|
||||
<p>Loading...</p>
|
||||
</div>
|
||||
<div id="placeholder-loading-footer">
|
||||
<div class="placeholder-logo-container">
|
||||
<img class="placeholder-logo" alt="" aria-hidden="true" src="${logoPath}"><span>CryptPad</span>
|
||||
</div>
|
||||
<div id="placeholder-loading-status">
|
||||
<i data-lucide="lock" aria-hidden="true"></i>
|
||||
<span>End-to-end encrypted</span>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
var key = 'CRYPTPAD_STORE|colortheme'; // handle outer
|
||||
if (localStorage[key] && localStorage[key] === 'dark') {
|
||||
|
||||
@ -57,8 +57,9 @@
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
i.cp-icon {
|
||||
font-size: 2.8rem;
|
||||
.cp-icon {
|
||||
min-height: 2.8rem;
|
||||
min-width: 2.8rem;
|
||||
}
|
||||
.cp-app-name {
|
||||
flex-grow: 1;
|
||||
|
||||
@ -67,8 +67,19 @@
|
||||
outline: none;
|
||||
font: @colortheme_app-font;
|
||||
|
||||
.lucide {
|
||||
width: @variables_icon_width;
|
||||
height: @variables_icon_height;
|
||||
margin-right: @variables_icon_margin;
|
||||
}
|
||||
.cp-checkmark {
|
||||
color: @cryptpad_text_col;
|
||||
height: 1.5rem;
|
||||
svg {
|
||||
margin-left: @variables_icon_margin;
|
||||
min-height: @variables_icon_height;
|
||||
min-width: @variables_icon_width;
|
||||
}
|
||||
}
|
||||
|
||||
.cp-admin-message {
|
||||
@ -91,6 +102,8 @@
|
||||
|
||||
h1, h2, h3 {
|
||||
margin-top: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
&.hide {
|
||||
@ -198,12 +211,20 @@
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
.cp-usergrid-user, textarea, a, .fa-times {
|
||||
.cp-usergrid-user, textarea, a {
|
||||
outline: none;
|
||||
&:focus-visible {
|
||||
outline: @variables_focus_style;
|
||||
}
|
||||
}
|
||||
.cp-usergrid-user {
|
||||
span {
|
||||
&:focus-visible {
|
||||
outline: @variables_focus_style;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.cp-alertify-type-container {
|
||||
overflow: visible !important;
|
||||
@ -221,6 +242,8 @@
|
||||
box-sizing: content-box;
|
||||
.alertify-tabs-title {
|
||||
.tools_unselectable();
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
font-size: 20px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
@ -290,9 +313,16 @@
|
||||
button {
|
||||
margin: 0 !important;
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
.cp-password-reveal {
|
||||
margin-left: 0.5rem;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.fa-question-circle { // help links to Docs
|
||||
.lucide-circle-question-mark { // help links to Docs
|
||||
color: @cp_alertify-fg;
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
@ -323,6 +353,11 @@
|
||||
min-height: 36px;
|
||||
min-width: 88px;
|
||||
}
|
||||
.cp-spinner {
|
||||
svg {
|
||||
animation: spin 10s linear infinite;
|
||||
}
|
||||
}
|
||||
|
||||
nav {
|
||||
padding: @alertify_padding-base;
|
||||
@ -489,7 +524,6 @@
|
||||
margin-bottom: @alertify_padding-base;
|
||||
}
|
||||
button {
|
||||
width: 50px;
|
||||
margin: 0;
|
||||
min-width: 0;
|
||||
font-size: 18px !important;
|
||||
|
||||
@ -40,15 +40,9 @@
|
||||
position: relative;
|
||||
.cp-avatar-default, media-tag {
|
||||
display: inline-flex;
|
||||
|
||||
width: @avatar-width;
|
||||
width: var(--avatar-width);
|
||||
|
||||
height: @avatar-width;
|
||||
height: var(--avatar-width);
|
||||
border-radius: @variables_radius;
|
||||
|
||||
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
overflow: hidden;
|
||||
@ -84,7 +78,7 @@
|
||||
}
|
||||
}
|
||||
.badges_include();
|
||||
& > i.cp-badge {
|
||||
& > span.cp-badge {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
bottom: var(--badges-offset);
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
}
|
||||
|
||||
& {
|
||||
i.cp-badge {
|
||||
span.cp-badge {
|
||||
width: var(--badges-width);
|
||||
height: var(--badges-width);
|
||||
box-sizing: content-box;
|
||||
@ -43,7 +43,12 @@
|
||||
background-color: @value;
|
||||
}
|
||||
});
|
||||
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
.lucide-star {
|
||||
fill: currentcolor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -135,7 +135,9 @@
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.dialog .cp-radio {
|
||||
margin: 0.2rem 0;
|
||||
}
|
||||
.cp-radio {
|
||||
margin: 0;
|
||||
display: flex;
|
||||
|
||||
@ -54,6 +54,8 @@
|
||||
@cryptpad_color_grey_950: #121212;
|
||||
@cryptpad_color_black: #000;
|
||||
|
||||
@cryptpad_logo_grey: #939393;
|
||||
|
||||
@cryptpad_text_col: @cryptpad_color_grey_200;
|
||||
@cryptpad_text_col_inv: @cryptpad_color_grey_900;
|
||||
|
||||
@ -66,6 +68,7 @@
|
||||
@cryptpad_color_red_fader: fade(@cryptpad_color_red, 15%);
|
||||
@cryptpad_color_warn_red: @cryptpad_color_red_fade;
|
||||
@cryptpad_color_dark_red: #9e0000;
|
||||
@cryptpad_color_darker_red: darken(@cryptpad_color_dark_red, 15%);
|
||||
@cryptpad_color_mid_red: #FF8880;
|
||||
@cryptpad_color_light_red: #FFD4D4;
|
||||
@cryptpad_color_light_red_fade: fade(@cryptpad_color_light_red, 20%);
|
||||
@ -119,13 +122,14 @@
|
||||
// Loading screen
|
||||
@cp_loading-bg: @cryptpad_color_grey_900;
|
||||
@cp_loading-fg: @cryptpad_text_col;
|
||||
@cp_loading-color: @cryptpad_color_grey_400;
|
||||
@cp_loading-msg-bg: @cryptpad_color_grey_700;
|
||||
@cp_loading-link: @cryptpad_color_brand_300;
|
||||
@cp_loading-error-bg: @cryptpad_color_warn_red;
|
||||
@cp_loading-error-fg: @cryptpad_text_col;
|
||||
@cp_loading-progress-bg: @cryptpad_color_grey_800;
|
||||
@cp_loading-progress-bar-bg: @cryptpad_color_brand;
|
||||
@cp_loading-spinner: @cryptpad_color_grey_600;
|
||||
@cp_loading-logo: @cryptpad_logo_grey;
|
||||
|
||||
// Chat
|
||||
@cp_messenger-bg: @cryptpad_color_grey_900;
|
||||
@ -157,7 +161,7 @@
|
||||
@cp_alerts-warning-bg: @cryptpad_color_yellow_fader;
|
||||
@cp_alerts-warning-fg: @cryptpad_color_light_yellow;
|
||||
@cp_alerts-warning-text: @cryptpad_color_light_yellow;
|
||||
@cp_alerts-danger-bg: @cryptpad_color_red_fader;
|
||||
@cp_alerts-danger-bg: @cryptpad_color_darker_red;
|
||||
@cp_alerts-danger-fg: @cryptpad_color_light_red;
|
||||
@cp_alerts-danger-text: @cryptpad_color_light_red;
|
||||
@cp_alerts-info-bg: @cryptpad_color_brand_fadest;
|
||||
|
||||
@ -54,6 +54,8 @@
|
||||
@cryptpad_color_grey_950: #121212;
|
||||
@cryptpad_color_black: #000;
|
||||
|
||||
@cryptpad_logo_grey: #939393;
|
||||
|
||||
@cryptpad_text_col:@cryptpad_color_grey_800;
|
||||
@cryptpad_text_col_inv: @cryptpad_color_grey_50;
|
||||
|
||||
@ -66,6 +68,7 @@
|
||||
@cryptpad_color_red_fader: fade(@cryptpad_color_red, 15%);
|
||||
@cryptpad_color_warn_red: @cryptpad_color_red_fade;
|
||||
@cryptpad_color_dark_red: #9e0000;
|
||||
@cryptpad_color_darker_red: darken(@cryptpad_color_dark_red, 10%);
|
||||
@cryptpad_color_mid_red: #FF8880;
|
||||
@cryptpad_color_light_red: #FFD4D4;
|
||||
@cryptpad_color_light_red_fade: fade(@cryptpad_color_light_red, 75%);
|
||||
@ -116,15 +119,16 @@
|
||||
@scrollbar_color: @cp_scrollbar-fg transparent;
|
||||
|
||||
// Loading screen
|
||||
@cp_loading-bg: @cryptpad_color_grey_200;
|
||||
@cp_loading-bg: @cryptpad_color_white;
|
||||
@cp_loading-fg: @cryptpad_text_col;
|
||||
@cp_loading-msg-bg: @cryptpad_color_white;
|
||||
@cp_loading-color: @cryptpad_color_grey_700;
|
||||
@cp_loading-msg-bg: @cryptpad_color_grey_200;
|
||||
@cp_loading-link: @cryptpad_color_brand;
|
||||
@cp_loading-error-bg: @cryptpad_color_warn_red;
|
||||
@cp_loading-error-fg: @cryptpad_text_col;
|
||||
@cp_loading-progress-bg: @cryptpad_color_white;
|
||||
@cp_loading-progress-bg: @cryptpad_color_grey_200;
|
||||
@cp_loading-progress-bar-bg: @cryptpad_color_brand;
|
||||
@cp_loading-spinner: @cryptpad_color_grey_500;
|
||||
@cp_loading-logo: @cryptpad_logo_grey;
|
||||
|
||||
// Chat
|
||||
@cp_messenger-bg: @cryptpad_color_grey_200;
|
||||
@ -156,9 +160,9 @@
|
||||
@cp_alerts-warning-bg: @cryptpad_color_yellow_fade;
|
||||
@cp_alerts-warning-fg: @cryptpad_color_light_yellow;
|
||||
@cp_alerts-warning-text: darken(@cp_alerts-warning-fg, 55%);
|
||||
@cp_alerts-danger-bg: @cryptpad_color_light_red_fade;
|
||||
@cp_alerts-danger-bg: @cryptpad_color_light_red;
|
||||
@cp_alerts-danger-fg: @cryptpad_color_light_red;
|
||||
@cp_alerts-danger-text: darken(@cp_alerts-danger-fg, 55%);
|
||||
@cp_alerts-danger-text: @cryptpad_color_darker_red;
|
||||
@cp_alerts-info-bg: fade(@cryptpad_color_brand, 15%);
|
||||
@cp_alerts-info-text: @cryptpad_color_brand;
|
||||
@cp_alerts-info-fg: @cryptpad_color_brand;
|
||||
@ -258,7 +262,7 @@
|
||||
@cp_corner-text: @cryptpad_text_col;
|
||||
|
||||
// Pad Creation Screen
|
||||
@cp_creation-bg: @cryptpad_color_white;
|
||||
@cp_creation-bg: @cryptpad_color_grey_100;
|
||||
@cp_creation-fg: @cryptpad_text_col;
|
||||
@cp_creation-template: @cryptpad_color_grey_100;
|
||||
@cp_creation-button-bg: @cryptpad_color_brand;
|
||||
|
||||
@ -70,6 +70,11 @@
|
||||
button:not(:last-child) {
|
||||
margin-right: 5px;
|
||||
}
|
||||
svg {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
margin-right: 0.35rem;
|
||||
}
|
||||
}
|
||||
|
||||
.cp-comment-container {
|
||||
@ -91,6 +96,11 @@
|
||||
&:last-child {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
svg {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
margin-right: 0.35rem;
|
||||
}
|
||||
}
|
||||
.cp-comment {
|
||||
&:not(:first-child) {
|
||||
|
||||
@ -26,6 +26,10 @@
|
||||
.dropdown-menu {
|
||||
padding: 6px 0px;
|
||||
}
|
||||
.dropdown-item {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
}
|
||||
li {
|
||||
padding: 0;
|
||||
font-size: @colortheme_app-font-size;
|
||||
@ -39,10 +43,9 @@
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
.dropdown-toggle {
|
||||
transform: rotate(270deg);
|
||||
span svg {
|
||||
margin-right: 0;
|
||||
margin-left: 1rem;
|
||||
float: right;
|
||||
}
|
||||
.dropdown-menu {
|
||||
top: -0.7rem;
|
||||
@ -65,22 +68,16 @@
|
||||
background-color: @cp_context-bg-active;
|
||||
color: @cp_context-fg;
|
||||
}
|
||||
.fa, .cptools {
|
||||
&:first-child {
|
||||
margin-right: 10px;
|
||||
}
|
||||
&.cptools:not(:first-child) {
|
||||
vertical-align: middle;
|
||||
}
|
||||
color: @cp_context-icon;
|
||||
width: 16px;
|
||||
}
|
||||
&.cp-app-disabled {
|
||||
cursor: not-allowed !important;
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
}
|
||||
li.dropdown-submenu > ul.dropdown-menu li > a.dropdown-item > svg.lucide {
|
||||
vector-effect: non-scaling-stroke;
|
||||
stroke-width: 1.7;
|
||||
}
|
||||
.cp-app-drive-context-noAction {
|
||||
font-style: italic;
|
||||
color: @cp_context-disabled;
|
||||
|
||||
@ -72,10 +72,6 @@
|
||||
|
||||
.cp-corner-dontshow {
|
||||
cursor: pointer;
|
||||
.fa {
|
||||
margin-right: 0.3em;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
&:hover {
|
||||
color: @corner-fg-alt;
|
||||
|
||||
@ -125,9 +121,6 @@
|
||||
text-transform: uppercase;
|
||||
border: 1px solid @corner-fg;
|
||||
border-radius: @variables_radius;
|
||||
.fa, .cptools {
|
||||
margin-right: 0.3em;
|
||||
}
|
||||
&.cp-corner-primary {
|
||||
background-color: @corner-fg;
|
||||
color: @corner-bg;
|
||||
|
||||
@ -51,19 +51,46 @@
|
||||
overflow: auto;
|
||||
.cp-creation-fill {
|
||||
flex: 1 1 50%;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
}
|
||||
.cp-creation-logo {
|
||||
height: 300px;
|
||||
width: 200px;
|
||||
min-height: 0;
|
||||
text-align: center;
|
||||
img {
|
||||
margin-top: 50px;
|
||||
margin-bottom: 50px;
|
||||
max-width: 100%;
|
||||
max-height: ~"calc(100% - 100px)";
|
||||
#cp-creation-status {
|
||||
display: flex;
|
||||
color: @cp_loading-color;
|
||||
align-items: center;
|
||||
font-family: "IBM Plex Mono";
|
||||
font-size: 15px;
|
||||
margin-top: 2rem;
|
||||
gap: 0.5rem;
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
#cp-creation-logo {
|
||||
flex: 0 1 auto;
|
||||
min-height: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
color: @cp_loading-logo;
|
||||
font-size: 40px;
|
||||
|
||||
img {
|
||||
margin: 0;
|
||||
max-height: 60px;
|
||||
}
|
||||
span {
|
||||
font-size: 40px;
|
||||
font-family: "IBM Plex Mono";
|
||||
.tools_unselectable();
|
||||
}
|
||||
}
|
||||
#cp-creation-footer {
|
||||
margin-bottom: 2rem;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
#cp-creation {
|
||||
overflow: auto;
|
||||
@ -120,18 +147,22 @@
|
||||
}
|
||||
.cp-creation-title-text {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
a {
|
||||
position: absolute;
|
||||
top: 7px;
|
||||
margin-left: 30px;
|
||||
font-size: 16px;
|
||||
color: inherit;
|
||||
right: -30px;
|
||||
}
|
||||
a:focus-visible {
|
||||
border-radius: 50%;
|
||||
outline: @variables_focus_style;
|
||||
}
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
.cp-creation-early {
|
||||
max-width: 80%;
|
||||
@ -196,6 +227,9 @@
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
.cp-creation-slider {
|
||||
display: none;
|
||||
@ -249,11 +283,6 @@
|
||||
background-color: @cp_creation-button-bg;
|
||||
color: @cp_creation-button-fg;
|
||||
}
|
||||
.cp-creation-team-avatar {
|
||||
.fa {
|
||||
font-size: 25px;
|
||||
}
|
||||
}
|
||||
.cp-creation-team-name {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
@ -315,11 +344,14 @@
|
||||
flex: none;
|
||||
}
|
||||
.cp-password-reveal {
|
||||
margin:0.2rem;
|
||||
margin:0.5rem;
|
||||
&:focus-visible {
|
||||
outline: @variables_focus_style;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -341,9 +373,8 @@
|
||||
width: 100%;
|
||||
//flex: 1 0 auto;
|
||||
flex-wrap: nowrap;
|
||||
justify-content: space-between;
|
||||
justify-content: center;
|
||||
.cp-creation-template-more {
|
||||
font-size: 30px;
|
||||
margin: 0 5px;
|
||||
text-align: center;
|
||||
background-color: transparent;
|
||||
@ -366,6 +397,11 @@
|
||||
outline: @variables_focus_style;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
width: @variables_icon_width;
|
||||
height: @variables_icon_height;
|
||||
}
|
||||
}
|
||||
}
|
||||
.cp-creation-template-container {
|
||||
@ -399,7 +435,7 @@
|
||||
&.cp-creation-template-selected, &:hover {
|
||||
background-color: @creation-bg-color-light;
|
||||
background-color: var(--creation-bg-color-light);
|
||||
.fa, .cptools {
|
||||
svg {
|
||||
color: @creation-color;
|
||||
color: var(--creation-color);
|
||||
}
|
||||
@ -430,11 +466,12 @@
|
||||
line-height: 25px;
|
||||
max-width: 100%;
|
||||
}
|
||||
.fa, .cptools {
|
||||
svg {
|
||||
color: @creation-bg-color;
|
||||
color: var(--creation-bg-color);
|
||||
cursor: pointer;
|
||||
font-size: 30px;
|
||||
height: 1.8rem;
|
||||
width: 1.8rem;
|
||||
text-align: center;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
@ -27,6 +27,18 @@
|
||||
max-height: 100%;
|
||||
min-height: auto;
|
||||
|
||||
.lucide {
|
||||
width: @variables_icon_width;
|
||||
height: @variables_icon_height;
|
||||
margin-right: @variables_icon_margin;
|
||||
}
|
||||
.cp-icon-hidden {
|
||||
display: none;
|
||||
}
|
||||
.cp-icon-hidden > svg {
|
||||
visibility: hidden;
|
||||
position: absolute;
|
||||
}
|
||||
.cp-unselectable {
|
||||
.tools_unselectable();
|
||||
}
|
||||
@ -51,7 +63,12 @@
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
border: 1px solid transparent;
|
||||
|
||||
svg.cp-app-drive-element-icon {
|
||||
min-width: 1.25em;
|
||||
min-height: 1.25em;
|
||||
font-size: 1em;
|
||||
margin-right: 0.2rem;
|
||||
}
|
||||
&:not(.cp-app-drive-element-selected):not(.cp-app-drive-element-selected-tmp) {
|
||||
border: 1px solid @cp_drive-icon-border;
|
||||
}
|
||||
@ -83,23 +100,24 @@
|
||||
max-width: none;
|
||||
margin: 8px 0;
|
||||
}
|
||||
.fa, .cptools {
|
||||
display: block;
|
||||
svg {
|
||||
margin: auto;
|
||||
font-size: 64px;
|
||||
margin: 18px 0;
|
||||
text-align: center;
|
||||
&.listonly {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
svg {
|
||||
font-size: 55px; //temporary XXX
|
||||
}
|
||||
|
||||
&.cp-app-hidden {
|
||||
display: none !important;
|
||||
}
|
||||
&.cp-app-disabled {
|
||||
cursor: not-allowed !important;
|
||||
.fa, .cptools { cursor: not-allowed !important; }
|
||||
svg { cursor: not-allowed !important; }
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
@ -151,13 +169,6 @@
|
||||
// outline: none;
|
||||
//}
|
||||
|
||||
.fa {
|
||||
font-family: FontAwesome;
|
||||
}
|
||||
.cptools {
|
||||
font-family: cptools;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
padding-left: 0px; // Remove the default padding
|
||||
@ -180,12 +191,6 @@
|
||||
.cp-app-drive-element-selected {
|
||||
background: @cp_drive-selected-bg !important;
|
||||
color: @cp_drive-selected-fg;
|
||||
.fa-minus-square-o, .fa-plus-square-o {
|
||||
color: @cp_sidebar-left-fg;
|
||||
}
|
||||
.cptools {
|
||||
color: @cp_drive-selected-fg;
|
||||
}
|
||||
&.cp-app-drive-element-active {
|
||||
background: @cp_drive-selected-bg !important;
|
||||
color: @cryptpad_text_col !important;
|
||||
@ -195,9 +200,6 @@
|
||||
.cp-app-drive-element-selected-tmp {
|
||||
background: @cp_drive-selection-bg;
|
||||
color: @cp_drive-selection-fg;
|
||||
.fa-minus-square-o, .fa-plus-square-o {
|
||||
color: @cp_sidebar-left-fg;
|
||||
}
|
||||
}
|
||||
|
||||
.cp-app-drive-color-picker {
|
||||
@ -217,17 +219,9 @@
|
||||
position: absolute;
|
||||
font-size: 50px;
|
||||
}
|
||||
.cptools-folder-no-color {
|
||||
.folder-no-color {
|
||||
color: @cryptpad_color_grey_500;
|
||||
}
|
||||
.fa-check {
|
||||
position: absolute;
|
||||
top: 40%; left: 35%;
|
||||
color: transparent;
|
||||
}
|
||||
&.cp-app-drive-current-color > .fa-check {
|
||||
color: @cryptpad_color_grey_900;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -235,16 +229,18 @@
|
||||
#cp-app-drive-search {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
max-width: 400px;
|
||||
max-width: 500px;
|
||||
font-size: 30px;
|
||||
margin: 15px;
|
||||
height: 2.5rem;
|
||||
input {
|
||||
background: transparent;
|
||||
color: @cp_drive-fg;
|
||||
width: 20rem;
|
||||
.tools_placeholder-color();
|
||||
outline-width: 0px;
|
||||
border-radius: 0;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
border: 0;
|
||||
border-bottom: 3px solid @cp_drive-fg;
|
||||
margin: 0 5px;
|
||||
@ -270,9 +266,16 @@
|
||||
.cp-app-drive-search-spinner {
|
||||
display: inline-flex;
|
||||
color: @cp_drive-fg;
|
||||
font-size: 40px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
svg {
|
||||
height: 2rem;
|
||||
width: 2rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.cp-spinner svg {
|
||||
animation: spin 10s linear infinite;
|
||||
}
|
||||
}
|
||||
.cp-app-drive-search-noresult {
|
||||
font-size: 30px;
|
||||
@ -281,6 +284,26 @@
|
||||
color: fade(@cryptpad_text_col, 80%);
|
||||
}
|
||||
|
||||
//make search drive component responsive
|
||||
@media screen and (max-width: @browser_media-medium-screen) {
|
||||
#cp-app-drive-search {
|
||||
max-width: 100%;
|
||||
font-size: 22px;
|
||||
margin: 10px;
|
||||
input {
|
||||
border-bottom-width: 2px;
|
||||
width: 17rem;
|
||||
}
|
||||
}
|
||||
.cp-app-drive-search-spinner svg {
|
||||
width: 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.cp-app-drive-search-noresult {
|
||||
font-size: 22px;
|
||||
padding: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
/* TREE */
|
||||
|
||||
@ -344,14 +367,6 @@
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
margin: 0 0 2px -5px;
|
||||
padding-left: 5px;
|
||||
.fa, .cptools {
|
||||
display: inline-block;
|
||||
min-width: 0;
|
||||
width: 20px;
|
||||
margin-right: 0px;
|
||||
z-index: 99;
|
||||
}
|
||||
.cp-app-drive-element {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
@ -375,14 +390,13 @@
|
||||
box-shadow: @cryptpad_ui_shadow;
|
||||
.cp-app-drive-tree-root {
|
||||
.droppable-tree-element();
|
||||
.fa-trash-o {
|
||||
padding-left: 2px;
|
||||
}
|
||||
}
|
||||
li {
|
||||
padding: 0;
|
||||
.cp-app-drive-element-row {
|
||||
display: block;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
padding-left: 20px;
|
||||
.leftside-menu-category_main();
|
||||
margin: 0;
|
||||
@ -398,26 +412,32 @@
|
||||
.cp-limit-container {
|
||||
margin-top: 5px;
|
||||
}
|
||||
.fa.cp-app-drive-icon-expcol {
|
||||
margin-left: -10px;
|
||||
.cp-app-drive-icon-expcol {
|
||||
font-size: 14px;
|
||||
position: absolute;
|
||||
left: -17px;
|
||||
top: 11px;
|
||||
width: 11px !important;
|
||||
height: 11px !important;
|
||||
top: 10px;
|
||||
overflow: hidden;
|
||||
width: calc(1em - 2px) !important;
|
||||
height: calc(1em - 2px) !important;
|
||||
background-color: @cp_sidebar-left-item-bg;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
z-index: 10;
|
||||
cursor: default;
|
||||
&:before {
|
||||
position: relative;
|
||||
top: -1px;
|
||||
display: inline-flex;
|
||||
svg {
|
||||
margin: -1px;
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
}
|
||||
&:focus-visible {
|
||||
outline: @variables_focus_style;
|
||||
border-radius: @variables_radius_S;
|
||||
outline: none;
|
||||
svg {
|
||||
outline: @variables_focus_style;
|
||||
border-radius: @variables_radius_S;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.cp-app-drive-tree-docs {
|
||||
@ -432,6 +452,12 @@
|
||||
}
|
||||
.cp-app-drive-tree-root > .cp-app-drive-element-row {
|
||||
margin-left: 0px;
|
||||
.cp-icon-hidden ~ svg {
|
||||
margin-left: -21px;
|
||||
}
|
||||
.cp-app-drive-icon-expcol {
|
||||
top: -1px;
|
||||
}
|
||||
&.cp-app-drive-element-active {
|
||||
.cp-app-drive-icon-expcol {
|
||||
color: @cp_sidebar-left-active-fg; // +/- expand icon for drive
|
||||
@ -444,8 +470,8 @@
|
||||
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 > svg {
|
||||
margin-left: -6px;
|
||||
}
|
||||
.cp-app-drive-tree-root {
|
||||
&> .cp-app-drive-element-row {
|
||||
@ -466,18 +492,18 @@
|
||||
position: relative;
|
||||
&:before {
|
||||
position: absolute;
|
||||
left: -12px;
|
||||
left: -10px;
|
||||
top: -10px;
|
||||
content: '';
|
||||
display: block;
|
||||
border-left: 1px solid @cp_drive-tree-branch;
|
||||
height: ~"calc(1em + 11px)";
|
||||
border-bottom: 1px solid @cp_drive-tree-branch;
|
||||
width: 15px;
|
||||
width: 11px;
|
||||
}
|
||||
&:after {
|
||||
position: absolute;
|
||||
left: -12px;
|
||||
left: -10px;
|
||||
bottom: -7px;
|
||||
content: '';
|
||||
display: block;
|
||||
@ -511,7 +537,7 @@
|
||||
.cp-splitter {
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
width: 8px;
|
||||
width: 1rem;
|
||||
top: 0;
|
||||
left: 0;
|
||||
cursor: col-resize;
|
||||
@ -528,9 +554,9 @@
|
||||
&:hover {
|
||||
border-left: 1px solid @cryptpad_text_col;
|
||||
}
|
||||
i {
|
||||
svg {
|
||||
color: @cryptpad_text_col;
|
||||
font-size: 1.6rem;
|
||||
transform: scale(2.5);
|
||||
}
|
||||
}
|
||||
&.cp-app-drive-readonly { // applied to offline drive (not read-only shared folders)
|
||||
@ -577,10 +603,11 @@
|
||||
color: @cryptpad_color_link;
|
||||
text-decoration: underline;
|
||||
}
|
||||
span {
|
||||
svg {
|
||||
cursor: pointer;
|
||||
float: right;
|
||||
margin-top: 0.5em;
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
li {
|
||||
@ -589,6 +616,7 @@
|
||||
&:hover {
|
||||
&:not(.-cp-app-drive-element-selected, .cp-app-drive-element-selected-tmp) {
|
||||
background-color: @cp_drive-icon-hover;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -623,6 +651,10 @@
|
||||
line-height: 16px;
|
||||
color: @cp_drive-header-fg;
|
||||
}
|
||||
.cp-icon {
|
||||
height: 1.5rem;
|
||||
width: 1.5rem;
|
||||
}
|
||||
}
|
||||
&.cp-app-drive-tags-list {
|
||||
width: 100%;
|
||||
@ -646,6 +678,9 @@
|
||||
}
|
||||
.cp-app-drive-element {
|
||||
.cp-app-drive-element-truncated { display: none; }
|
||||
span.cp-app-drive-element-name {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.cp-app-drive-new-ghost {
|
||||
@ -658,7 +693,7 @@
|
||||
&:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
.fa, .cptools {
|
||||
svg {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
@ -691,16 +726,13 @@
|
||||
.cp-app-drive-element-state, .cp-app-drive-element-menu {
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
.fa, .cptools {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
svg {
|
||||
margin: 0;
|
||||
font-size: 18px;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
.cp-app-drive-element-icon {
|
||||
font-size: 0.9rem;
|
||||
margin: 0;
|
||||
margin-right: 0.3rem;
|
||||
}
|
||||
.cp-app-drive-element-name-text {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
@ -717,7 +749,7 @@
|
||||
max-width: 100px;
|
||||
max-height: 100px;
|
||||
background: @cp_drive-thumb-bg;
|
||||
& ~ .fa, & ~ .cptools {
|
||||
& ~ svg {
|
||||
display: none;
|
||||
font-size: 17px;
|
||||
position: absolute;
|
||||
@ -729,10 +761,9 @@
|
||||
}
|
||||
.cp-app-drive-new-ghost {
|
||||
flex-flow: column;
|
||||
.fa, .cptools {
|
||||
svg {
|
||||
font-size: 90px;
|
||||
margin-top: 5px;
|
||||
margin-bottom: 0;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
.cp-app-drive-element-list {
|
||||
@ -741,9 +772,6 @@
|
||||
}
|
||||
|
||||
div.cp-app-drive-content-list {
|
||||
.cp-app-drive-element-icon {
|
||||
display: none !important;
|
||||
}
|
||||
.cp-app-drive-element-grid {
|
||||
display: none;
|
||||
}
|
||||
@ -758,7 +786,14 @@
|
||||
}
|
||||
li {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-radius: @variables_radius;
|
||||
&.cp-app-drive-element-row:not(.cp-app-drive-element-header) {
|
||||
svg * {
|
||||
stroke-width: 1.5;
|
||||
vector-effect: non-scaling-stroke;
|
||||
}
|
||||
}
|
||||
input {
|
||||
border: 1px solid transparent;
|
||||
margin: 0;
|
||||
@ -793,7 +828,7 @@
|
||||
align-items: center;
|
||||
justify-content: end;
|
||||
height: @variables_bar-height;
|
||||
.fa, .cptools {
|
||||
svg {
|
||||
&:not(:last-child) {
|
||||
margin-right: 2px;
|
||||
}
|
||||
@ -815,9 +850,6 @@
|
||||
color: inherit;
|
||||
background: none;
|
||||
border: none;
|
||||
.fa {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -838,7 +870,7 @@
|
||||
cursor: default;
|
||||
color: @cp_drive-header-fg;
|
||||
span {
|
||||
&:not(.fa):not(.cptools) {
|
||||
&:not(svg) {
|
||||
text-align: left;
|
||||
}
|
||||
&.sortasc, &.sortdesc {
|
||||
@ -966,6 +998,11 @@
|
||||
#cp-app-drive-content-folder {
|
||||
padding-right: 10px;
|
||||
flex: 1;
|
||||
.cp-app-drive-element-row.cp-app-drive-element-file > svg.lucide *,
|
||||
.cp-app-drive-element-row.cp-app-drive-element-folder > svg.lucide * {
|
||||
stroke-width: 3.5;
|
||||
vector-effect: non-scaling-stroke;
|
||||
}
|
||||
}
|
||||
|
||||
#cp-app-drive-new-ghost-dialog.cp-modal-container {
|
||||
@ -977,13 +1014,34 @@
|
||||
.cp-modal {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
li, li .fa, li .cptools {
|
||||
li, li svg.lucide {
|
||||
cursor: pointer;
|
||||
border-radius: @variables_radius;
|
||||
&:focus {
|
||||
outline: @cryptpad_color_brand solid 2px;
|
||||
}
|
||||
}
|
||||
li svg.lucide * {
|
||||
stroke-width: 3.5;
|
||||
vector-effect: non-scaling-stroke;
|
||||
}
|
||||
ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
li {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
}
|
||||
h3 {
|
||||
display:inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
&> p {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@ -1020,7 +1078,7 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
align-content: unset;
|
||||
.fa, .cptools {
|
||||
svg {
|
||||
font-size: 32px;
|
||||
min-width: 50px;
|
||||
}
|
||||
@ -1050,17 +1108,16 @@
|
||||
}
|
||||
}
|
||||
.cp-toolbar-bottom-right {
|
||||
.fa-history { order: 50; }
|
||||
// .fa-list, .fa-th-large,
|
||||
.lucide-history { order: 50; }
|
||||
.cp-app-drive-viewmode-button {
|
||||
order: 25;
|
||||
i {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
svg {
|
||||
margin-right: 0;
|
||||
}
|
||||
#cp-app-drive-toolbar-context-mobile, #cp-app-drive-toolbar-contextbuttons { order: 0; }
|
||||
#cp-app-drive-toolbar-context-mobile {
|
||||
.fa { margin: 0 !important; }
|
||||
.svg { margin: 0 !important; }
|
||||
}
|
||||
#cp-app-drive-toolbar-contextbuttons {
|
||||
height: @variables_bar-height;
|
||||
@ -1080,6 +1137,12 @@
|
||||
.cp-app-drive-button {
|
||||
order: 15;
|
||||
margin: 0 1em;
|
||||
.btn.btn-danger {
|
||||
svg.lucide {
|
||||
width: @variables_icon_width;
|
||||
height: @variables_icon_height;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -58,14 +58,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
.fa {
|
||||
font-family: FontAwesome;
|
||||
}
|
||||
|
||||
button {
|
||||
.fa-caret-down {
|
||||
margin-right: 0.5em !important;
|
||||
}
|
||||
* {
|
||||
.tools_unselectable();
|
||||
}
|
||||
@ -122,26 +115,13 @@
|
||||
line-height: 1em;
|
||||
align-items: center;
|
||||
|
||||
&:not(.fa) {
|
||||
span {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
}
|
||||
&:not(svg) {
|
||||
font: @dropdown_font;
|
||||
}
|
||||
&.fa, &.cptools {
|
||||
font-size: 18px;
|
||||
&::before {
|
||||
width: 40px;
|
||||
margin-left: -10px;
|
||||
text-align: center;
|
||||
}
|
||||
* {
|
||||
font: @dropdown_font;
|
||||
}
|
||||
}
|
||||
|
||||
.fa, .cptools {
|
||||
width: 20px;
|
||||
text-align: center;
|
||||
margin-right: 5px !important;
|
||||
}
|
||||
|
||||
&.cp-dropdown-element-active {
|
||||
background-color: @cp_dropdown-bg-active;
|
||||
|
||||
@ -50,9 +50,6 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 5px 0;
|
||||
.fa {
|
||||
width: 25px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.cp-export-actions {
|
||||
|
||||
@ -49,6 +49,10 @@
|
||||
&:hover {
|
||||
color: lighten(@cp_upload-fg, 10%);
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#cp-fileupload-table {
|
||||
@ -66,9 +70,8 @@
|
||||
white-space: nowrap;
|
||||
max-width: 40vw;
|
||||
margin: 0px @upload_pad_v;
|
||||
.fa {
|
||||
svg {
|
||||
margin-top: 4px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.cp-fileupload-table-name {
|
||||
overflow: hidden;
|
||||
@ -112,9 +115,9 @@
|
||||
&:not(.success):not(.cancelled):hover {
|
||||
background-color: rgba(0,0,0,0.1);
|
||||
}
|
||||
.fa {
|
||||
svg {
|
||||
padding: @upload_pad_h @upload_pad_v;
|
||||
&.fa-times {
|
||||
.lucide-x {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
@ -64,12 +64,12 @@
|
||||
}
|
||||
}
|
||||
&.mfa-enabled {
|
||||
span, i {
|
||||
span, i, svg {
|
||||
color: @cp_settings_enabled;
|
||||
}
|
||||
}
|
||||
&.mfa-disabled {
|
||||
span, i {
|
||||
span, i, svg {
|
||||
color: @cp_settings_disabled;
|
||||
}
|
||||
}
|
||||
@ -137,7 +137,7 @@
|
||||
line-height: 30px;
|
||||
color: @cp_kanban-fg;
|
||||
border: 1px solid fade(@cp_kanban-fg, 40%);
|
||||
&.fa-check { // tick on selected color
|
||||
&.svg { // tick on selected color
|
||||
color: @cryptpad_text_col;
|
||||
}
|
||||
outline: none;
|
||||
@ -150,28 +150,19 @@
|
||||
button.btn {
|
||||
background-color: @cp_buttons-cancel;
|
||||
box-sizing: border-box;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
line-height: 20px;
|
||||
padding: 8px 6px;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
font-size: 14px;
|
||||
font-size: @variables_button-font-size;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
border-radius: @variables_radius;
|
||||
transition: none;
|
||||
|
||||
&:not(.fa):not(.cptools) {
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
i, .fa, .cptools {
|
||||
&:not(.nomargin) {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
color: @cp_buttons-fg;
|
||||
border: 1px solid @cp_buttons-fg;
|
||||
|
||||
@ -316,9 +307,6 @@
|
||||
font-size: 12px;
|
||||
padding: 5px;
|
||||
border-radius: @variables_radius;
|
||||
i {
|
||||
margin-right: 10px;
|
||||
}
|
||||
&.cp-alert-top {
|
||||
margin-top: @alertify_padding-base;
|
||||
}
|
||||
@ -358,11 +346,6 @@
|
||||
&.dismissable {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
span.fa-times {
|
||||
font-size: @colortheme_app-font-size;
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
.cp-banner {
|
||||
|
||||
@ -12,7 +12,8 @@
|
||||
};
|
||||
& {
|
||||
.cp-help-container {
|
||||
|
||||
display:inline-flex;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
background-color: @cp_help-bg;
|
||||
max-height: 50%;
|
||||
@ -25,12 +26,14 @@
|
||||
border: none;
|
||||
position: absolute;
|
||||
color: @cryptpad_text_col;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
&:focus-visible {
|
||||
outline: @variables_focus_style;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
.cp-help-text {
|
||||
color: @cp_help-fg;
|
||||
|
||||
@ -36,9 +36,9 @@
|
||||
color: @cp_drive-fg;
|
||||
outline: @cryptpad_color_brand solid 2px;
|
||||
}
|
||||
.fa, .cptools {
|
||||
display: block;
|
||||
font-size: 64px;
|
||||
svg {
|
||||
height: 4rem;
|
||||
width: 4rem;
|
||||
margin: 18px 0;
|
||||
text-align: center;
|
||||
&.listonly {
|
||||
@ -51,7 +51,7 @@
|
||||
}
|
||||
&.cp-app-disabled {
|
||||
cursor: not-allowed !important;
|
||||
.fa, .cptools { cursor: not-allowed !important; }
|
||||
svg { cursor: not-allowed !important; }
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
@ -51,6 +51,11 @@ body.html {
|
||||
outline: @variables_focus_style;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
.lucide {
|
||||
width: @variables_icon_width;
|
||||
height: @variables_icon_height;
|
||||
margin-right: @variables_icon_margin;
|
||||
}
|
||||
border: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
@ -209,10 +214,8 @@ body.html {
|
||||
border-radius: @infopages-radius;
|
||||
padding: 0.5em 0.7em;
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
i {
|
||||
margin-right: 5px;
|
||||
}
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
&:hover {
|
||||
background-color: @cp_static-card-bg;
|
||||
color: @cryptpad_text_col;
|
||||
@ -225,10 +228,8 @@ body.html {
|
||||
.cp-footer-language {
|
||||
padding: 10px;
|
||||
margin-right: 10px;
|
||||
i {
|
||||
font-size: 1.3em;
|
||||
margin-right: 5px;
|
||||
}
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
select {
|
||||
min-width: 0;
|
||||
background-color: @cp_static-card-bg;
|
||||
@ -290,9 +291,11 @@ body.html {
|
||||
padding: 0.5em 0.7em;
|
||||
margin: 5px;
|
||||
color: @cp_static-link;
|
||||
display: inline-block;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
img {
|
||||
max-height: 30px;
|
||||
width: @variables_icon_width;
|
||||
height: @variables_icon_height;
|
||||
margin-right: 10px;
|
||||
}
|
||||
&.cp-back-home {
|
||||
@ -304,14 +307,10 @@ body.html {
|
||||
&:focus-visible {
|
||||
outline: @variables_focus_style;
|
||||
}
|
||||
i {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
.cp-register-btn {
|
||||
background-color: @cp_static-topbar-fg;
|
||||
color: @cp_static-bg;
|
||||
display: inline-block;
|
||||
&:hover {
|
||||
background-color: @cp_static-card-bg;
|
||||
color: @cryptpad_text_col;
|
||||
|
||||
@ -16,12 +16,6 @@
|
||||
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: 20px;
|
||||
}
|
||||
&:hover {
|
||||
background: @cryptpad_text_col_inv;
|
||||
}
|
||||
|
||||
@ -37,7 +37,7 @@
|
||||
opacity: 1;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
justify-content: center;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font: 20px 'Open Sans', 'Helvetica Neue', sans-serif !important;
|
||||
&.cp-loading-transparent {
|
||||
@ -49,23 +49,27 @@
|
||||
transition: opacity 0.75s, visibility 0s 0.75s;
|
||||
}
|
||||
.cp-loading-logo {
|
||||
height: 300px;
|
||||
width: 300px;
|
||||
margin-top: 50px;
|
||||
flex: 0 1 auto;
|
||||
min-height: 0;
|
||||
text-align: center;
|
||||
}
|
||||
.cp-loading-logo img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
color: @cp_loading-logo;
|
||||
|
||||
img {
|
||||
margin: 0;
|
||||
max-height: 60px;
|
||||
}
|
||||
span {
|
||||
font-size: 40px;
|
||||
font-family: "IBM Plex Mono";
|
||||
.tools_unselectable();
|
||||
}
|
||||
}
|
||||
.cp-loading-container {
|
||||
width: 700px;
|
||||
max-width: 90vw;
|
||||
min-height: 236px;
|
||||
max-height: calc(100vh - 20px);
|
||||
margin: 50px;
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
@ -82,32 +86,58 @@
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
&.cp-loading-empty {
|
||||
&>:not(.cp-loading-empty) {
|
||||
display: none !important;
|
||||
}
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 500px) {
|
||||
font-size: 16px !important;
|
||||
.cp-loading-container {
|
||||
height: 206px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-height: 700px) {
|
||||
font-size: 16px !important;
|
||||
.cp-loading-container {
|
||||
height: 206px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-height: 500px) {
|
||||
@media screen and (max-width: 300px) {
|
||||
.cp-loading-logo {
|
||||
display: none;
|
||||
img {
|
||||
max-height: 40px;
|
||||
}
|
||||
span {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@media screen and (max-height: 600px) {
|
||||
font-size: 16px !important;
|
||||
}
|
||||
|
||||
#cp-loading-spinner-message {
|
||||
color: @cp_loading-color;
|
||||
}
|
||||
#cp-loading-message {
|
||||
background: @cp_loading-msg-bg;
|
||||
padding: 20px;
|
||||
padding: 1rem;
|
||||
width: 100%;
|
||||
border-radius: @variables_radius;
|
||||
color: @cp_loading-fg;
|
||||
text-align: left;
|
||||
display: none;
|
||||
overflow-y: auto;
|
||||
&.cp-error-message, &.cp-error-message-alt {
|
||||
margin: 0;
|
||||
font-size: 16px;
|
||||
padding: 0.5rem;
|
||||
width: auto;
|
||||
}
|
||||
&.cp-error-message {
|
||||
background-color: @cp_alerts-danger-bg;
|
||||
color: @cp_alerts-danger-text;
|
||||
}
|
||||
&.cp-error-message-alt {
|
||||
background-color: @cp_alerts-danger-text;
|
||||
color: @cp_alerts-danger-bg;
|
||||
}
|
||||
&:empty {
|
||||
display: none;
|
||||
}
|
||||
a {
|
||||
color: @cp_loading-link;
|
||||
border-radius: @variables_radius;
|
||||
@ -115,14 +145,39 @@
|
||||
p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
#cp-loading-status {
|
||||
display: flex;
|
||||
color: @cp_loading-color;
|
||||
align-items: center;
|
||||
font-family: "IBM Plex Mono";
|
||||
font-size: 0.75em;
|
||||
margin-top: 2rem;
|
||||
gap: 0.5rem;
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
#cp-loading-footer {
|
||||
margin-bottom: 2rem;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#cp-loading-password-prompt {
|
||||
p.cp-password-error {
|
||||
color: @cp_loading-error-fg;
|
||||
background: @cp_loading-error-bg;
|
||||
padding: 5px;
|
||||
margin-bottom: 15px;
|
||||
margin: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: 16px;
|
||||
padding: 0.5rem;
|
||||
background-color: @cp_alerts-danger-bg;
|
||||
color: @cp_alerts-danger-text;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
.cp-password-form {
|
||||
display: flex;
|
||||
@ -130,7 +185,7 @@
|
||||
gap:0.5rem;
|
||||
width: 100%;
|
||||
.cp-password-container {
|
||||
flex-shrink: 1;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
.cp-password-reveal {
|
||||
@ -152,14 +207,9 @@
|
||||
|
||||
p.cp-password-info {
|
||||
text-align: left;
|
||||
margin-bottom: 15px;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.cp-loading-spinner-container {
|
||||
position: relative;
|
||||
height: 80px;
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
.cp-loading-progress {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
@ -170,42 +220,23 @@
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.cp-loading-progress-list {
|
||||
text-align: left;
|
||||
display: inline-block;
|
||||
margin-bottom: 50px;
|
||||
max-width: 100%;
|
||||
ul {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
margin: 0;
|
||||
}
|
||||
li {
|
||||
padding: 0px 5px;
|
||||
.tools_unselectable();
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
i {
|
||||
width: 22px;
|
||||
}
|
||||
span {
|
||||
margin-left: 10px;
|
||||
&.percent {
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
}
|
||||
color: @cp_loading-color;
|
||||
}
|
||||
|
||||
.cp-loading-progress-bar {
|
||||
height: 24px;
|
||||
margin: 1rem 0;
|
||||
height: 5px;
|
||||
background: @cp_loading-progress-bg;
|
||||
border: 1px solid @cp_loading-progress-bar-bg;
|
||||
border: 0;
|
||||
//border: 1px solid @cp_loading-progress-bar-bg;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
.cp-loading-progress-bar-value {
|
||||
height: 100%;
|
||||
background: @cp_loading-progress-bar-bg;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
|
||||
}
|
||||
@ -219,16 +250,44 @@
|
||||
}
|
||||
}
|
||||
|
||||
.cp-spinner {
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
border: 11px solid @cp_loading-spinner;
|
||||
border-radius: 50%;
|
||||
border-top-color: transparent;
|
||||
animation: spin infinite 3s;
|
||||
animation-timing-function: cubic-bezier(.6,0.15,0.4,0.85);
|
||||
.cp-loading-spinner-container {
|
||||
margin: 1rem 0;
|
||||
height: 5px;
|
||||
width: 100%;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
background: @cp_loading-progress-bg;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
.cp-spinner-main {
|
||||
width: 100%;
|
||||
height: 5px;
|
||||
background: @cp_loading-progress-bar-bg;
|
||||
border-radius: @variables_radius;
|
||||
animation: loading-animation 1s infinite linear;
|
||||
transform-origin: 0% 50%;
|
||||
}
|
||||
|
||||
@keyframes loading-animation {
|
||||
0% {
|
||||
transform: translateX(0) scaleX(0);
|
||||
}
|
||||
40% {
|
||||
transform: translateX(0) scaleX(0.4);
|
||||
}
|
||||
100% {
|
||||
transform: translateX(100%) scaleX(0.5);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
button {
|
||||
.cp-spinner {
|
||||
svg {
|
||||
animation: spin 10s linear infinite ;
|
||||
margin: 0 0 0.1rem 0.3rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -99,9 +99,6 @@
|
||||
max-width: 250px;
|
||||
min-height: 38px;
|
||||
justify-content: center;
|
||||
.fa {
|
||||
margin-right: 5px;
|
||||
}
|
||||
b {
|
||||
margin-left: 5px;
|
||||
white-space: nowrap;
|
||||
@ -210,16 +207,6 @@
|
||||
a {
|
||||
color: @cryptpad_text_col;
|
||||
font-size: 0.8em;
|
||||
&.cp-remote-img::before { // .fa.fa-question-circle
|
||||
font-family: FontAwesome;
|
||||
//content: "\f08e\00a0";
|
||||
content: "\f08e\00a0\00a0";
|
||||
}
|
||||
&.cp-learn-more::before { // .fa.fa-external-link
|
||||
font-family: FontAwesome;
|
||||
content: "\f059\00a0";
|
||||
//content: "\f059\00a0\00a0";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -237,12 +224,6 @@
|
||||
}
|
||||
.todo-list-item {
|
||||
list-style: none;
|
||||
position: relative;
|
||||
.fa {
|
||||
position: absolute;
|
||||
margin-left: -17px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.mediatag_cryptpad();
|
||||
|
||||
@ -62,12 +62,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
span.cp-app-contacts-spinner {
|
||||
.cp-app-contacts-spinner {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.cp-app-contacts-initializing {
|
||||
span.cp-app-contacts-spinner {
|
||||
svg.cp-app-contacts-spinner {
|
||||
color: @cp_messenger-fg;
|
||||
display: block;
|
||||
}
|
||||
@ -115,16 +115,19 @@
|
||||
& > span:hover {
|
||||
color: @msg-color-hover;
|
||||
}
|
||||
svg {
|
||||
margin-right: 0.1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
i.cp-badge {
|
||||
span.cp-badge {
|
||||
color: var(--msg-bg-color-dark);
|
||||
border-color: var(--msg-bg-color-dark);
|
||||
}
|
||||
&:hover {
|
||||
background-color: @msg-bg-color-darker;
|
||||
background-color: var(--msg-bg-color-darker);
|
||||
i.cp-badge {
|
||||
span.cp-badge {
|
||||
color: var(--msg-bg-color-darker);
|
||||
border-color: var(--msg-bg-color-darker);
|
||||
}
|
||||
@ -174,9 +177,6 @@
|
||||
margin: 10px;
|
||||
display: none;
|
||||
order: 3;
|
||||
.fa-bell-slash {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -247,7 +247,7 @@
|
||||
.cp-app-contacts-header {
|
||||
background-color: @msg-bg-color-lighter;
|
||||
background-color: var(--msg-bg-color-lighter);
|
||||
i.cp-badge {
|
||||
span.cp-badge {
|
||||
color: var(--msg-bg-color-lighter);
|
||||
border-color: var(--msg-bg-color-lighter);
|
||||
}
|
||||
@ -256,8 +256,12 @@
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
height: 50px;
|
||||
svg {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.hover () {
|
||||
cursor: pointer;
|
||||
height: 100%;
|
||||
line-height: 30px;
|
||||
padding: 10px;
|
||||
@ -307,6 +311,7 @@
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
right: 2px;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
.cp-app-contacts-chat {
|
||||
@ -392,6 +397,10 @@
|
||||
&[disabled="true"] {
|
||||
.tools_placeholder-color();
|
||||
}
|
||||
&:focus-visible {
|
||||
outline: @variables_focus_style;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
}
|
||||
button {
|
||||
height: 54px !important;
|
||||
@ -404,6 +413,13 @@
|
||||
background-color: @msg-bg-color-dark;
|
||||
background-color: var(--msg-bg-color-dark);
|
||||
}
|
||||
&:focus-visible {
|
||||
outline: @variables_focus_style;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -129,16 +129,16 @@
|
||||
|
||||
// Access modal
|
||||
button.cp-access-add {
|
||||
i {
|
||||
svg {
|
||||
margin-right: 0px !important;
|
||||
}
|
||||
i.fa-arrow-left {
|
||||
svg[data-lucide='arrow-left'] {
|
||||
display: inline;
|
||||
@media (max-width: @browser_media-medium-screen) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
i.fa-arrow-up {
|
||||
svg[data-lucide='arrow-up'] {
|
||||
display: none;
|
||||
@media (max-width: @browser_media-medium-screen) {
|
||||
display: inline;
|
||||
@ -161,6 +161,14 @@
|
||||
.cp-access-margin-right {
|
||||
margin-right: 5px !important;
|
||||
}
|
||||
.cp-share-columns {
|
||||
.cp-checkmark {
|
||||
svg.lucide {
|
||||
margin-left: 0;
|
||||
margin-right: 0.2rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// teams invite modal
|
||||
.cp-teams-invite-block {
|
||||
@ -184,9 +192,6 @@
|
||||
}
|
||||
.cp-teams-invite-spinner {
|
||||
font-size: 1.2em;
|
||||
.fa {
|
||||
margin-right: 10px;;
|
||||
}
|
||||
}
|
||||
.cp-teams-help {
|
||||
margin-left: 10px;
|
||||
@ -209,6 +214,14 @@
|
||||
.cp-snapshot-spinner {
|
||||
min-height: 90px;
|
||||
text-align: center;
|
||||
.cp-spinner {
|
||||
svg {
|
||||
width: 4rem;
|
||||
height: 4rem;
|
||||
vertical-align: middle;
|
||||
animation: spin 10s linear infinite;
|
||||
}
|
||||
}
|
||||
}
|
||||
.cp-snapshot-element {
|
||||
display: flex;
|
||||
@ -216,7 +229,7 @@
|
||||
padding: 5px 0;
|
||||
outline: none;
|
||||
border-radius: @variables_radius;
|
||||
& > i {
|
||||
& > svg {
|
||||
margin-left: @snapshot_spacing;
|
||||
text-align: center;
|
||||
}
|
||||
@ -310,17 +323,13 @@
|
||||
color: @cp_markdown-block-fg;
|
||||
}
|
||||
}
|
||||
.cp-spinner {
|
||||
.cp-spinner-main {
|
||||
border-color: @cryptpad_color_brand;
|
||||
border-top-color: transparent;
|
||||
}
|
||||
}
|
||||
.cp-mediatag-control {
|
||||
align-self: center;
|
||||
.fa {
|
||||
margin: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.cp-mediatag-outer {
|
||||
display: flex;
|
||||
|
||||
@ -11,6 +11,11 @@
|
||||
--LessLoader_require: LessLoader_currentFile();
|
||||
}
|
||||
& {
|
||||
.lucide {
|
||||
width: @variables_icon_width;
|
||||
height: @variables_icon_height;
|
||||
margin-right: @variables_icon_margin;
|
||||
}
|
||||
@notif-height: 50px;
|
||||
.cp-notifications-container {
|
||||
max-width: 300px;
|
||||
@ -24,13 +29,16 @@
|
||||
.cp-notification {
|
||||
min-height: @notif-height;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
svg {
|
||||
margin: @variables_icon_margin;
|
||||
}
|
||||
.cp-broadcast {
|
||||
display: flex;
|
||||
font-size: 30px;
|
||||
align-items: center;
|
||||
padding: 0 5px;
|
||||
margin: @variables_icon_margin;
|
||||
width: var(--avatar-width);
|
||||
height: var(--avatar-width);
|
||||
color: @cp_dropdown-fg;
|
||||
&.preview:not(.fa-calendar) {
|
||||
&.preview:not(.lucide-calendar-days) {
|
||||
color: @cryptpad_color_red;
|
||||
}
|
||||
}
|
||||
@ -39,7 +47,7 @@
|
||||
}
|
||||
.cp-avatar {
|
||||
.avatar_main(30px);
|
||||
padding: 0 5px;
|
||||
padding: 5px;
|
||||
}
|
||||
.cp-avatar-image {
|
||||
display: inline-flex;
|
||||
@ -50,8 +58,9 @@
|
||||
}
|
||||
}
|
||||
.cp-notification-content {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
align-items: stretch;
|
||||
align-items: center;
|
||||
min-width: 0;
|
||||
p {
|
||||
word-break: break-word;
|
||||
@ -62,7 +71,6 @@
|
||||
}
|
||||
.cp-notification-dismiss {
|
||||
color: @cp_dropdown-fg;
|
||||
width: 25px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
@ -16,13 +16,7 @@
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
.fa {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
svg {
|
||||
&:hover {
|
||||
color: darken(@cryptpad_color_brand, 10%);
|
||||
}
|
||||
|
||||
@ -60,9 +60,9 @@
|
||||
display: flex;
|
||||
max-width: 100%;
|
||||
align-items: center;
|
||||
.fa, .cptools {
|
||||
margin-right: 0;
|
||||
flex: 0;
|
||||
svg {
|
||||
min-width: @variables_icon_width;
|
||||
min-height: @variables_icon_height;
|
||||
}
|
||||
span.cp-sidebarlayout-category-name {
|
||||
padding-left: 5px;
|
||||
@ -257,9 +257,6 @@
|
||||
}
|
||||
label.noTitle {
|
||||
display: inline-flex;
|
||||
.fa {
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
@ -301,7 +298,7 @@
|
||||
margin: 10px 0;
|
||||
}
|
||||
button.btn {
|
||||
margin: 0 @sidebar_base-margin 0 0;
|
||||
//margin: 0 @sidebar_base-margin 0 0;
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
@ -43,9 +43,9 @@
|
||||
}
|
||||
.cp-support-attachments {
|
||||
display: flex;
|
||||
.fa {
|
||||
svg {
|
||||
cursor: pointer;
|
||||
margin-right: 10px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
&> span {
|
||||
border: 1px solid @fromme-bg;
|
||||
@ -95,6 +95,9 @@
|
||||
}
|
||||
.cp-support-title-buttons {
|
||||
margin-left: 1em;
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.cp-support-ticket-tags {
|
||||
@ -155,6 +158,9 @@
|
||||
display: none;
|
||||
cursor: default;
|
||||
position: relative;
|
||||
button svg {
|
||||
margin-right: 0;
|
||||
}
|
||||
.cp-support-copydata {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
@ -196,7 +202,7 @@
|
||||
display: none;
|
||||
}
|
||||
.cp-support-hide {
|
||||
display: inline;
|
||||
display: inline-flex;
|
||||
}
|
||||
}
|
||||
.cp-support-form-container {
|
||||
|
||||
@ -101,6 +101,11 @@
|
||||
&:hover {
|
||||
color: contrast(@cp_token-fg, darken(@cp_token-fg, 10%), lighten(@cp_token-fg, 10%));
|
||||
}
|
||||
svg {
|
||||
width: @variables_icon_width;
|
||||
height: @variables_icon_height;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.token-input {
|
||||
|
||||
@ -32,6 +32,9 @@
|
||||
&.cp-history-init {
|
||||
padding: 0;
|
||||
height: 32px;
|
||||
svg {
|
||||
animation: spin 10s linear infinite;
|
||||
}
|
||||
}
|
||||
|
||||
.cp-toolbar-history-timeline {
|
||||
@ -62,6 +65,11 @@
|
||||
align-self: baseline;
|
||||
margin-right: 5px;
|
||||
.cp-history-actions-first {
|
||||
.cp-history-create-snapshot {
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
margin-right: @fill-width;
|
||||
}
|
||||
button {
|
||||
@ -104,6 +112,13 @@
|
||||
}
|
||||
.cp-toolbar-history-loadmore {
|
||||
font-size: 10px !important;
|
||||
&:focus-visible {
|
||||
outline: @variables_focus_style;
|
||||
border-radius: @variables_radius;
|
||||
}
|
||||
.cp-loadmore-loading {
|
||||
animation: spin 10s linear infinite;
|
||||
}
|
||||
}
|
||||
.cp-history-timeline-actions {
|
||||
margin-left: 21px !important;
|
||||
@ -123,9 +138,6 @@
|
||||
border-left: none;
|
||||
width: 2px !important;
|
||||
background: @pos-color;
|
||||
&:before {
|
||||
left: -6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.cp-history-oo {
|
||||
@ -159,9 +171,6 @@
|
||||
height: 100%;
|
||||
background: @history_lineBg;
|
||||
margin-right: 1px;
|
||||
.fa-refresh {
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.cp-history-timeline-container {
|
||||
@ -222,8 +231,8 @@
|
||||
width: 50px;
|
||||
color: @cp_toolbar-fg;
|
||||
border-radius: @variables_radius;
|
||||
.fa:first-child:not(:last-child) {
|
||||
margin-right: 5px;
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
&:disabled {
|
||||
cursor: not-allowed !important;
|
||||
@ -257,11 +266,10 @@
|
||||
height: 37px;
|
||||
//background: @pos-color;
|
||||
position: absolute;
|
||||
&:before {
|
||||
top: -17px;
|
||||
font-size: 24px;
|
||||
svg {
|
||||
top: -14px;
|
||||
position: absolute;
|
||||
left: ~"calc(50% - 6px)";
|
||||
left: ~"calc(50% - 9px)";
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 870px) {
|
||||
@ -273,6 +281,9 @@
|
||||
.cp-history-actions-first {
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
.cp-history-actions-last {
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
button {
|
||||
margin: 0.1rem;
|
||||
}
|
||||
|
||||
@ -51,10 +51,6 @@
|
||||
@toolbar_top-height: 76px;
|
||||
@toolbar_button-font: @colortheme_app-font;
|
||||
|
||||
// if we spell 'share' correctly, then adblock plus hides the share button
|
||||
// this is a workaround
|
||||
.fa-shhare-alt:before { content: "\f1e0"; }
|
||||
|
||||
.ckeditor_fix();
|
||||
|
||||
.cp-burn-after-reading {
|
||||
@ -77,7 +73,7 @@
|
||||
border-radius: @variables_radius;
|
||||
color: @toolbar-color;
|
||||
.toolbar_button;
|
||||
padding: 3px 9px;
|
||||
padding: 3px 7px;
|
||||
&:hover {
|
||||
background-color: contrast(@cp_toolbar-bg, darken(@cp_toolbar-bg, 5%), lighten(@cp_toolbar-bg, 5%));
|
||||
}
|
||||
@ -85,10 +81,11 @@
|
||||
outline: @variables_focus_style;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: @browser_media-medium-screen) {
|
||||
button:nth-of-type(1) {
|
||||
margin-left: 0;
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
button:nth-of-type(1) {
|
||||
margin-left: 0.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
@ -99,7 +96,7 @@
|
||||
.toolbar_button {
|
||||
height: @toolbar_line-height;
|
||||
box-sizing: border-box;
|
||||
padding: 3px 10px;
|
||||
padding: 5px 7px;
|
||||
margin: 0;
|
||||
transition: all 0.15s;
|
||||
.tools_unselectable();
|
||||
@ -166,6 +163,9 @@
|
||||
box-sizing: border-box;
|
||||
order: 100;
|
||||
z-index: 1;
|
||||
span.cp-badge > svg.lucide {
|
||||
width: 0.625rem; // ~10px
|
||||
}
|
||||
.cp-toolbar-userlist-drawer-close {
|
||||
position: absolute;
|
||||
margin-top: -10px;
|
||||
@ -220,7 +220,7 @@
|
||||
border-radius: @variables_radius;
|
||||
border-right: 3px solid transparent;
|
||||
.avatar_main(35px);
|
||||
i.cp-badge {
|
||||
span.cp-badge {
|
||||
color: @cp_toolbar-bg2;
|
||||
border-color: @cp_toolbar-bg2;
|
||||
}
|
||||
@ -228,7 +228,7 @@
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
background: @cp_toolbar-bg3;
|
||||
i.cp-badge {
|
||||
span.cp-badge {
|
||||
color: @cp_toolbar-bg3;
|
||||
border-color: @cp_toolbar-bg3;
|
||||
}
|
||||
@ -259,6 +259,10 @@
|
||||
border: none;
|
||||
height: 20px;
|
||||
cursor: pointer;
|
||||
svg {
|
||||
width: @variables_icon_width;
|
||||
margin: 0 0 @variables_icon_margin 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.cp-toolbar-userlist-name-input {
|
||||
@ -280,10 +284,10 @@
|
||||
padding: 0;
|
||||
}
|
||||
.cp-userlist-badge {
|
||||
i {
|
||||
span {
|
||||
color: @cryptpad_color_brand;
|
||||
}
|
||||
i.cp-badge-error {
|
||||
span.cp-badge-error {
|
||||
color: @cryptpad_color_warn_red;
|
||||
}
|
||||
}
|
||||
@ -298,7 +302,16 @@
|
||||
|
||||
#cp-app-toolbar-creation-dialog.cp-modal-container {
|
||||
.icons_main();
|
||||
h3 {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
svg {
|
||||
height: 2rem;
|
||||
width: 2rem;
|
||||
}
|
||||
}
|
||||
li {
|
||||
color: @cp_drive-fg;
|
||||
border: 1px solid @cp_drive-icon-border;
|
||||
@ -310,8 +323,21 @@
|
||||
.cp-modal {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
li, li .fa {
|
||||
li {
|
||||
cursor: pointer;
|
||||
svg.lucide * {
|
||||
stroke-width: 3.5;
|
||||
vector-effect: non-scaling-stroke;
|
||||
}
|
||||
@media screen and (max-width: @browser_media-medium-screen) {
|
||||
svg {
|
||||
margin: 0 @variables_icon_margin 0 @variables_icon_margin;
|
||||
width: 2.5rem;
|
||||
}
|
||||
svg.lucide, svg.lucide * {
|
||||
stroke-width: 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
&> p {
|
||||
text-align: center;
|
||||
@ -359,10 +385,6 @@
|
||||
width: 200px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.fa, .cptools {
|
||||
font-size: 32px;
|
||||
min-width: 50px;
|
||||
}
|
||||
.cp-icons-name {
|
||||
height: auto;
|
||||
text-align: left;
|
||||
@ -412,10 +434,6 @@
|
||||
color: @toolbar-bg-color;
|
||||
color: var(--toolbar-bg-color);
|
||||
|
||||
.fa {
|
||||
font: normal normal normal 14px/1 FontAwesome;
|
||||
}
|
||||
|
||||
.tools_unselectable();
|
||||
|
||||
font: @toolbar_button-font;
|
||||
@ -426,16 +444,25 @@
|
||||
//height: 100%;
|
||||
//display: inline-block;
|
||||
button {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
background: transparent;
|
||||
}
|
||||
svg {
|
||||
height: @variables_icon_height;
|
||||
width: @variables_icon_width;
|
||||
margin-right: @variables_icon_margin;
|
||||
}
|
||||
}
|
||||
|
||||
button {
|
||||
.toolbar_button;
|
||||
&.cp-notifications-bell, &.cp-maintenance-wrench {
|
||||
color: @cryptpad_text_col;
|
||||
svg {
|
||||
margin:0;
|
||||
height: 2.5rem;
|
||||
width: 2.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -526,9 +553,6 @@
|
||||
line-height: @toolbar_line-height;
|
||||
display: inline-flex;
|
||||
|
||||
.fa {
|
||||
font-size: @colortheme_app-font-size;
|
||||
}
|
||||
}
|
||||
input {
|
||||
height: @toolbar_line-height;
|
||||
@ -550,9 +574,6 @@
|
||||
//transform: scale(0.5);
|
||||
.cp-toolbar-link-logo {
|
||||
padding: 5px;
|
||||
span {
|
||||
font-size: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.cp-toolbar-user {
|
||||
@ -601,6 +622,12 @@
|
||||
line-height: 32px;
|
||||
margin: 0;
|
||||
}
|
||||
.cp-notifications-bell {
|
||||
svg {
|
||||
width: @variables_icon_width;
|
||||
height: @variables_icon_height;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -648,12 +675,7 @@
|
||||
.cp-toolbar-title-edit, .cp-toolbar-title-save {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 20px;
|
||||
vertical-align: middle;
|
||||
border-radius: 0 @variables_radius @variables_radius 0;
|
||||
.fa {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
.cp-toolbar-title-readonly {
|
||||
margin-left: 10px;
|
||||
@ -699,8 +721,8 @@
|
||||
border: 1px solid transparent;
|
||||
padding: 0 5px;
|
||||
border-collapse: collapse;
|
||||
span {
|
||||
cursor: pointer;
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
.cp-toolbar-title-save {
|
||||
@ -709,8 +731,8 @@
|
||||
cursor: pointer;
|
||||
padding: 5px;
|
||||
border-collapse: collapse;
|
||||
span {
|
||||
cursor: pointer;
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
.cp-toolbar-title-value {
|
||||
@ -780,7 +802,7 @@
|
||||
.cp-dropdown-button-title {
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
right: 16px;
|
||||
right: 13px;
|
||||
font-size: 14px;
|
||||
border: 1px solid;
|
||||
border-radius: 50%;
|
||||
@ -814,36 +836,27 @@
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
order: 1;
|
||||
.fa {
|
||||
margin: 0;
|
||||
}
|
||||
a.cp-toolbar-link-logo {
|
||||
cursor: pointer;
|
||||
display: inline-flex;
|
||||
text-decoration: none;
|
||||
position: absolute;
|
||||
height: auto;
|
||||
padding: 10px;
|
||||
color: @toolbar-bg-color;
|
||||
color: var(--toolbar-bg-color);
|
||||
border-radius: @variables_radius;
|
||||
|
||||
span {
|
||||
font-size: 45px;
|
||||
padding: 0;
|
||||
line-height: 0;
|
||||
svg {
|
||||
height: 3rem;
|
||||
width: 3rem;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
// Icons shown when hovering the toolbar icon (where logo used to be)
|
||||
.cptools::before {
|
||||
content: "\e920"; // shows drive icon in document toolbars
|
||||
}
|
||||
.fa::before {
|
||||
content: "\f0a0"; // shows hdd-o for all FA icons (settings, etc)
|
||||
}
|
||||
.fa-hdd-o::before {
|
||||
content: "\f015"; // shows home for drive
|
||||
}
|
||||
.lucide * {
|
||||
stroke-width: 3;
|
||||
vector-effect: non-scaling-stroke;
|
||||
}
|
||||
|
||||
// svg {
|
||||
// #outline, #squares {
|
||||
// fill: @toolbar-bg-color;
|
||||
@ -860,6 +873,21 @@
|
||||
// width: 100%;
|
||||
// }
|
||||
}
|
||||
@media screen and (max-height: @browser_media-medium-screen),
|
||||
screen and (max-width: @browser_media-medium-screen) {
|
||||
a.cp-toolbar-link-logo {
|
||||
svg {
|
||||
width: @variables_icon_width;
|
||||
height: @variables_icon_height;
|
||||
}
|
||||
.lucide * {
|
||||
stroke-width: 1.5;
|
||||
}
|
||||
}
|
||||
}
|
||||
a.cp-toolbar-link-logo > svg:nth-of-type(2){ display: none; }
|
||||
a.cp-toolbar-link-logo:hover > svg:nth-of-type(1){ display: none; }
|
||||
a.cp-toolbar-link-logo:hover > svg:nth-of-type(2){ display: block; }
|
||||
}
|
||||
.cp-toolbar-user {
|
||||
height: @toolbar_top-height;
|
||||
@ -994,6 +1022,8 @@
|
||||
}
|
||||
.cp-toolbar-dropdown-nowrap {
|
||||
white-space: nowrap;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
}
|
||||
.cp-toolbar-bottom {
|
||||
color: @cp_toolbar-bottom-fg;
|
||||
@ -1047,6 +1077,11 @@
|
||||
border-color: @cryptpad_text_col;
|
||||
color: @cryptpad_text_col;
|
||||
}
|
||||
.cp-toolbar-userlist-button {
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
&.cp-toolbar-button-active {
|
||||
background-color: @cp_toolbar-bg;
|
||||
border-color: @cp_toolbar-fg;
|
||||
@ -1080,8 +1115,8 @@
|
||||
you hover perfectly. The same is true of the drive's grid/list view toggle.
|
||||
*/
|
||||
position: relative;
|
||||
.fa {
|
||||
margin-right: 0px;
|
||||
svg {
|
||||
margin-right: 0;
|
||||
}
|
||||
.cp-collapsed-notif {
|
||||
display: inline-block;
|
||||
@ -1104,7 +1139,7 @@
|
||||
.cp-toolbar-name, .cp-button-name, .cp-dropdown-button-title {
|
||||
display: none;
|
||||
}
|
||||
i, span {
|
||||
span, svg {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
@ -1166,24 +1201,24 @@
|
||||
.cp-toolbar-icon-pad_toc {
|
||||
order: 8;
|
||||
}
|
||||
.cp-toolbar-file {
|
||||
li, button {
|
||||
.fa-plus { order: 0; }
|
||||
.fa-history { order: 5; }
|
||||
.fa-hashtag { order: 10; }
|
||||
.fa-bookmark { order: 15; }
|
||||
.fa-upload { order: 20; }
|
||||
.fa-files-o { order: 25; }
|
||||
.fa-download { order: 30; }
|
||||
.fa-print { order: 35; }
|
||||
.fa-trash { order: 40; }
|
||||
.cp-toolbar-icon-pad-settings { order: 75; }
|
||||
.fa-info-circle { order: 100; }
|
||||
.cp-toolbar-file li > a {
|
||||
&.cp-toolbar-icon-newpad .lucide { order: 0; }
|
||||
&.cp-toolbar-icon-snapshots .lucide { order: 5; }
|
||||
&.cp-toolbar-icon-template .lucide { order: 10; }
|
||||
&.cp-toolbar-icon-pad-settings .lucide { order: 15; }
|
||||
&.cp-toolbar-icon-history .lucide { order: 20; }
|
||||
&.cp-toolbar-icon-hashtag .lucide { order: 25; }
|
||||
&.cp-toolbar-icon-import-template .lucide { order: 30; }
|
||||
&.cp-toolbar-icon-import .lucide { order: 35; }
|
||||
&.cp-toolbar-icon-copy .lucide { order: 40; }
|
||||
&.cp-toolbar-icon-export .lucide { order: 45; }
|
||||
&.cp-toolbar-icon-print .lucide { order: 50; }
|
||||
&.cp-toolbar-icon-forget .lucide { order: 60; }
|
||||
|
||||
.fa-question { order: 150; }
|
||||
&.cp-toolbar-icon-properties .lucide { order: 100; }
|
||||
&.cp-toolbar-icon-help .lucide { order: 150; }
|
||||
|
||||
span { order: 1000; } // text always after icon
|
||||
}
|
||||
> span { order: 1000; } // text always after icon
|
||||
}
|
||||
|
||||
.cp-toolbar-drawer-contentsss:empty ~ .cp-toolbar-drawer-button {
|
||||
@ -1209,9 +1244,6 @@
|
||||
z-index: 10000; //Z cp-toolbar-drawer-content
|
||||
color: @cp_dropdown-fg;
|
||||
.tools_unselectable();
|
||||
.fa {
|
||||
font-size: 17px;
|
||||
}
|
||||
&> span {
|
||||
order: 8;
|
||||
box-sizing: border-box;
|
||||
@ -1259,27 +1291,12 @@
|
||||
min-width: 200px;
|
||||
box-sizing: border-box;
|
||||
margin-bottom: 5px;
|
||||
&> span.fa {
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
//margin: 8px;
|
||||
line-height: 20px;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.cp-toolbar-readonly {
|
||||
margin-right: 5px;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.cp-toolbar-share {
|
||||
a {
|
||||
.fa {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -120,7 +120,7 @@
|
||||
color: @cp_usergrid-selected-fg;
|
||||
}
|
||||
}
|
||||
.fa-times {
|
||||
.lucide-x {
|
||||
border-radius: @variables_radius;
|
||||
margin-left: 5px;
|
||||
cursor: pointer;
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
// Elements size
|
||||
@variables_bar-height: 32px;
|
||||
@variables_input-height: 38px;
|
||||
@variables_button-font-size: 14px;
|
||||
|
||||
// Used in modal.less and alertify.less
|
||||
@variables_padding: 12px;
|
||||
@ -23,3 +24,7 @@
|
||||
@variables_radius_L: 10px;
|
||||
|
||||
@variables_focus_style: @cryptpad_color_brand solid 2px;
|
||||
|
||||
@variables_icon_margin: 0.5rem;
|
||||
@variables_icon_height: 1.2em;
|
||||
@variables_icon_width: 1.2em;
|
||||
|
||||
@ -10,10 +10,6 @@
|
||||
&.cp-page-contact {
|
||||
.infopages_main();
|
||||
|
||||
.fa {
|
||||
padding-right: 0.25em;
|
||||
}
|
||||
|
||||
.cp-container {
|
||||
|
||||
.cp-iconCont {
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
background-color: @cp_buttons-primary;
|
||||
color: @cryptpad_text_col;
|
||||
color: @cryptpad_text_col_inv;
|
||||
font-size: 20px;
|
||||
margin: 10px 0;
|
||||
border-radius: @infopages-radius;
|
||||
@ -27,7 +27,7 @@
|
||||
background-color: contrast(@cp_buttons-primary-text, darken(@cp_buttons-primary, 10%), lighten(@cp_buttons-primary, 10%));
|
||||
}
|
||||
&:visited {
|
||||
color: @cryptpad_text_col;
|
||||
color: @cryptpad_text_col_inv;
|
||||
}
|
||||
}
|
||||
.cp-features-web {
|
||||
@ -76,22 +76,15 @@
|
||||
.list-group {
|
||||
li {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-left: 0;
|
||||
padding-right: 5px;
|
||||
svg {
|
||||
width: 30px;
|
||||
color: @cryptpad_color_brand;
|
||||
}
|
||||
}
|
||||
div {
|
||||
&.cp-check {
|
||||
width: 30px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
&:before {
|
||||
content: "\f00c";
|
||||
font-family: "FontAwesome";
|
||||
font-size: 14px;
|
||||
color: @cryptpad_color_brand;
|
||||
}
|
||||
}
|
||||
&.cp-content {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
|
||||
@ -52,7 +52,6 @@
|
||||
font-size: 2.5em;
|
||||
}
|
||||
}
|
||||
|
||||
.cp-home-hero {
|
||||
width: 100%;
|
||||
align-self: center;
|
||||
@ -90,9 +89,11 @@
|
||||
}
|
||||
.cp-instance-location {
|
||||
margin-top: 20px;
|
||||
i {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
svg {
|
||||
font-size: 1.2em;
|
||||
margin-right: 5px;
|
||||
margin-right: @variables_icon_margin;
|
||||
}
|
||||
}
|
||||
.cp-instance-links {
|
||||
@ -126,15 +127,21 @@
|
||||
font-size: 1.4em;
|
||||
line-height: 100%;
|
||||
color: fade(@cryptpad_text_col, 80%);
|
||||
i {
|
||||
margin-right: 5px;
|
||||
}
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
}
|
||||
.cp-app-grid-apps {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
padding: 0 0.8rem;
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
.lucide * {
|
||||
stroke-width: 2.7;
|
||||
vector-effect: non-scaling-stroke;
|
||||
}
|
||||
}
|
||||
a {
|
||||
margin: 10px;
|
||||
@ -147,7 +154,7 @@
|
||||
@icons-text-size: 24px;
|
||||
.bs-callout {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
align-items: center;
|
||||
margin: 0;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
@ -167,11 +174,10 @@
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
font-size: 16px;
|
||||
}
|
||||
.fa, .cptools {
|
||||
svg {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 3.5em;
|
||||
@ -183,6 +189,8 @@
|
||||
.pad-button-text {
|
||||
color: @cryptpad_text_col;
|
||||
padding: 5px;
|
||||
white-space: wrap;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.cp-index-appitem {
|
||||
@ -216,11 +224,11 @@
|
||||
each(@colortheme_apps, {
|
||||
.cp-callout-@{key} {
|
||||
border-radius: @infopages-radius;
|
||||
i { color: @value; }
|
||||
svg { color: @value; }
|
||||
&:hover {
|
||||
@desat: desaturate(@value, 15%);
|
||||
background-color: contrast(@cryptpad_text_col, lighten(@value, 30%), darken(@desat, 20%));
|
||||
i { color: @cryptpad_text_col; }
|
||||
svg { color: @cryptpad_text_col; }
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -232,7 +240,8 @@
|
||||
a.cp-drive-btn {
|
||||
color: @cryptpad_text_col;
|
||||
font-size: 1.5rem;
|
||||
display: block;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
height: min-content;
|
||||
flex-shrink: 0;
|
||||
width: fit-content;
|
||||
@ -245,10 +254,13 @@
|
||||
&:hover {
|
||||
background-color: fade(@cryptpad_text_col, 10%);
|
||||
}
|
||||
i {
|
||||
svg {
|
||||
color: @cryptpad_color_brand;
|
||||
margin-right: 10px;
|
||||
font-size: 1.3em;
|
||||
}
|
||||
svg.lucide, svg.lucide * {
|
||||
stroke-width: 2;
|
||||
vector-effect: non-scaling-stroke;
|
||||
}
|
||||
}
|
||||
.cp-sub-prompt {
|
||||
@ -263,7 +275,7 @@
|
||||
margin: 10px 0;
|
||||
border-radius: @infopages-radius-L;
|
||||
padding: 0.75rem;
|
||||
i {
|
||||
svg {
|
||||
display: inline;
|
||||
margin-right: 10px;
|
||||
}
|
||||
@ -288,10 +300,11 @@
|
||||
div {
|
||||
.infopages_link();
|
||||
color: @cryptpad_color_white;
|
||||
.fa, .cptools {
|
||||
svg {
|
||||
font-size: inherit;
|
||||
padding: 0;
|
||||
width: 1em;
|
||||
width: @variables_icon_width;
|
||||
height: @variables_icon_height;
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,9 +62,9 @@
|
||||
li {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.fa {
|
||||
padding-right: 10px;
|
||||
}
|
||||
}
|
||||
h2 {
|
||||
padding-left: 30px;
|
||||
}
|
||||
h3 {
|
||||
font-weight: 700;
|
||||
@ -112,12 +112,6 @@
|
||||
position: relative;
|
||||
li {
|
||||
margin-bottom: 10px;
|
||||
&::before {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
font-family: "FontAwesome";
|
||||
content: "\f071";
|
||||
}
|
||||
.red {
|
||||
background-color: @cp_static-danger;
|
||||
}
|
||||
|
||||
@ -87,9 +87,6 @@
|
||||
li {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.fa {
|
||||
padding-right: 10px;
|
||||
}
|
||||
}
|
||||
h3 {
|
||||
font-weight: 700;
|
||||
@ -122,7 +119,9 @@
|
||||
#ssoForm {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
padding-left: 30px;
|
||||
}
|
||||
.cp-register-notes {
|
||||
ul.cp-notes-list {
|
||||
list-style: none;
|
||||
@ -131,12 +130,6 @@
|
||||
position: relative;
|
||||
li {
|
||||
margin-bottom: 10px;
|
||||
&::before {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
font-family: "FontAwesome";
|
||||
content: "\f071";
|
||||
}
|
||||
.red {
|
||||
background-color: @cp_static-danger;
|
||||
}
|
||||
|
||||
@ -4,6 +4,23 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
font-family: 'IBM Plex Mono';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: url("/customize/fonts/IBMPlexMono-Medium.woff2") format("woff2"), url("/customize/fonts/IBMPlexMono-Medium.woff") format("woff"); }
|
||||
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
src: url('/components/open-sans-fontface/fonts/Regular/OpenSans-Regular.eot');
|
||||
src: url('/components/open-sans-fontface/fonts/Regular/OpenSans-Regular.eot?#iefix') format('embedded-opentype'),
|
||||
url('/components/open-sans-fontface/fonts/Regular/OpenSans-Regular.woff') format('woff'),
|
||||
url('/components/open-sans-fontface/fonts/Regular/OpenSans-Regular.ttf') format('truetype'),
|
||||
url('/components/open-sans-fontface/fonts/Regular/OpenSans-Regular.svg#OpenSansLight') format('svg');
|
||||
font-weight: 300;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.cp-app-noscroll body {
|
||||
background: transparent;
|
||||
}
|
||||
@ -21,61 +38,79 @@
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
background-color: #EEEEEE; /* @cp_loading-bg */
|
||||
color: #424242; /* @cp_loading-fg */
|
||||
color: #757575; /* grey_600 */
|
||||
font-size: 1.3em;
|
||||
line-height: 120%;
|
||||
opacity: 1;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
justify-content: center;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font: 20px 'Helvetica Neue', sans-serif !important;
|
||||
font: 20px 'Open Sans', sans-serif !important;
|
||||
}
|
||||
html:not(.cp-app-noscroll) #placeholder.dark-theme {
|
||||
html #placeholder.dark-theme {
|
||||
background-color: #212121; /* @cp_loading-bg (dark) */
|
||||
}
|
||||
#placeholder.dark-theme {
|
||||
color: #EEEEEE; /* @cp_loading-fg (dark) */
|
||||
color: #BDBDBD; /* grey_400 */
|
||||
}
|
||||
|
||||
#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;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
color: #939393;
|
||||
}
|
||||
#placeholder .placeholder-logo-container img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
margin: 0;
|
||||
max-height: 60px;
|
||||
}
|
||||
#placeholder .placeholder-logo-container span {
|
||||
font-size: 40px;
|
||||
font-family: "IBM Plex Mono";
|
||||
user-select: none;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
#placeholder .placeholder-message-container {
|
||||
width: 700px;
|
||||
max-width: 90vw;
|
||||
height: 236px;
|
||||
height: auto;
|
||||
max-height: calc(100vh - 20px);
|
||||
margin: 50px;
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
align-items: center;
|
||||
justify-content: 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: max(40vh, 250px);
|
||||
width: auto;
|
||||
height: auto;
|
||||
margin-bottom: 2em;
|
||||
|
||||
#placeholder-loading-status {
|
||||
font-size: 0.75em;
|
||||
margin-top: 2rem;
|
||||
font-family: "IBM Plex Mono";
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
#placeholder-loading-footer {
|
||||
margin-bottom: 2rem;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
align-items: center;
|
||||
|
||||
flex: 0 1 auto;
|
||||
min-height: 0;
|
||||
opacity: 0;
|
||||
animation: fadein 5s ease 2s forwards;
|
||||
}
|
||||
|
||||
@keyframes fadein {
|
||||
@ -87,22 +122,19 @@ html:not(.cp-app-noscroll) #placeholder.dark-theme {
|
||||
#placeholder {
|
||||
font-size: 16px !important;
|
||||
}
|
||||
#placeholder .placeholder-message-container {
|
||||
height: 206px;
|
||||
}
|
||||
@media screen and (max-width: 300px) {
|
||||
#placeholder .placeholder-logo-container img {
|
||||
max-height: 40px;
|
||||
}
|
||||
#placeholder .placeholder-logo-container span {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-height: 700px) {
|
||||
@media screen and (max-height: 600px) {
|
||||
#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;
|
||||
|
||||
@ -7,8 +7,6 @@ define([
|
||||
'/common/hyperscript.js',
|
||||
'/customize/pages.js',
|
||||
'/components/nthen/index.js',
|
||||
|
||||
'css!/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.
|
||||
@ -16,7 +14,6 @@ define([
|
||||
|
||||
$(function () {
|
||||
var $body = $('body');
|
||||
|
||||
var pathname = location.pathname;
|
||||
|
||||
// add class on info-pages
|
||||
@ -50,7 +47,6 @@ $(function () {
|
||||
'optional!/api/instance',
|
||||
'less!/customize/src/less2/pages/page-' + pageName + '.less',
|
||||
'css!/components/bootstrap/dist/css/bootstrap.min.css',
|
||||
'css!/customize/fonts/cptools/style.css'
|
||||
], function (ApiConfig, Util, Instance) {
|
||||
var $main = $(infoPage());
|
||||
var titleSuffix = (Util.find(Instance, ['name','default']) || '').trim();
|
||||
@ -58,7 +54,6 @@ $(function () {
|
||||
titleSuffix = window.location.hostname;
|
||||
}
|
||||
document.title = document.title + ' - ' + titleSuffix;
|
||||
|
||||
$('#placeholder').remove();
|
||||
|
||||
$body.append($main);
|
||||
|
||||
@ -69,7 +69,7 @@ This means that using chainpad, clients can collaborate in realtime while using
|
||||
|
||||
## Datastore
|
||||
|
||||
While it's possible for messages to propogate using a [gossip protocol](https://en.wikipedia.org/wiki/Gossip_protocol) and therefore not rely on havinga centralized service for storing messages, it's possible for the members of a gossip network to [Netsplit](https://en.wikipedia.org/wiki/Netsplit).
|
||||
While it's possible for messages to propagate using a [gossip protocol](https://en.wikipedia.org/wiki/Gossip_protocol) and therefore not rely on having a centralized service for storing messages, it's possible for the members of a gossip network to [Netsplit](https://en.wikipedia.org/wiki/Netsplit).
|
||||
Chainpad currently has no mechanism for resolving such an event.
|
||||
|
||||
If a member of a session disconnects (as defined by not responding to a ping with a pong in a specified timeframe) any revisions that they make to their version of a document will be ignored.
|
||||
@ -128,7 +128,7 @@ If an interface is interactive, which they typically are, then the user will lik
|
||||
If the interface is a plain text editor, maintaining the location of the cursor while updating the contents of the editor is not especially difficult.
|
||||
The process involves checking where the user's selection is located (possibly a start and end), determining whether the changes to the document occurred before or after those points, and updating the selection boundaries if necessary.
|
||||
|
||||
If the interface is a WYSIWYG editor, maintaining the location of the cursor is more difficult, as the number of characters changed in the authoratative document does not correspond directly to the number of characters which the user perceives.
|
||||
If the interface is a WYSIWYG editor, maintaining the location of the cursor is more difficult, as the number of characters changed in the authoritative document does not correspond directly to the number of characters which the user perceives.
|
||||
It is the application developers' responsibility to infer from the new content where the cursor should be, and to render the modified content in such a way that it does not disrupt user experience.
|
||||
In the process of developing its [Realtime CKEditor](https://cryptpad.fr) XWiki Labs discovered that many of the [existing Javascript libraries](https://github.com/Matt-Esch/virtual-dom) for updating a **DOM** are very destructive, and replace elements completely once a difference is detected within the tree (when scanning left to right).
|
||||
|
||||
@ -213,7 +213,7 @@ The encryption scheme employed by CryptPad is a [symmetric encryption](https://e
|
||||
Encryption is complex, and poorly understood by the majority of those who use it on a daily basis.
|
||||
Pre-shared-keys are among the weakest possible cryptographic tools available today, however, few if any other encryption schemes scale to any number of users.
|
||||
|
||||
For our purposes, we would like our application to offerthe benefits of encryption without being any more difficult to use.
|
||||
For our purposes, we would like our application to offer the benefits of encryption without being any more difficult to use.
|
||||
Since the method of collaborating on any web resource typically involves sharing the URL, we use the hash of the URl to share the pre-shared-key.
|
||||
Anything in a URL which follows a `#` is not sent to the server, meaning that our web app will store your users' messages without ever knowing their content.
|
||||
|
||||
|
||||
@ -49,6 +49,7 @@ module.exports = [{
|
||||
"_build",
|
||||
"scripts/api/testapi.js",
|
||||
"rollup.config.mjs",
|
||||
"*/lucide.js"
|
||||
],
|
||||
}, ...compat.extends("eslint:recommended", "plugin:compat/recommended"), {
|
||||
plugins: {
|
||||
|
||||
@ -92,7 +92,7 @@ main() {
|
||||
# From all the older versions only v7 has 'dictionaries', we remove it for the same reasons
|
||||
rm -rf "$OO_DIR/v7/dictionaries/"
|
||||
;;
|
||||
v8) install_version v8 v8.3.3.23+4 01abfb3e13dae2066c9fcdc9fd3a3a21cd08212feb7ee2f927d8acaa5c3e560f8ce7c78c533c6aad7048aaecc14f7445891f06cb38a1720e1637a971c0a02295 ;;
|
||||
v8) install_version v8 v8.3.3.23+5 de5056c12e1d91b054251b50a2326d5705ccd0c529b20b936ea1dc08d9d9458e99206de1fc52076af85df9352f1961c8ba9474c864f76bea59bce19b0595dd72 ;;
|
||||
x2t) install_x2t v7.3+1 ab0c05b0e4c81071acea83f0c6a8e75f5870c360ec4abc4af09105dd9b52264af9711ec0b7020e87095193ac9b6e20305e446f2321a541f743626a598e5318c1 ;;
|
||||
*)
|
||||
echo "Unknown version: $version"
|
||||
|
||||
@ -196,6 +196,7 @@ Data.setMetadata = function (Env, safeKey, data, cb, Server) {
|
||||
}
|
||||
// otherwise they are not in the list.
|
||||
// send them an error and kick them out!
|
||||
toRemove.push(userId);
|
||||
Server.send(userId, [
|
||||
0,
|
||||
hk_id,
|
||||
|
||||
@ -8,7 +8,8 @@ const Pinning = require("./pin-rpc");
|
||||
const nThen = require("nthen");
|
||||
const Core = require("./core");
|
||||
|
||||
Upload.status = function (Env, safeKey, filesize, _cb) { // FIXME FILES
|
||||
Upload.status = function (Env, safeKey, data, _cb) { // FIXME FILES
|
||||
const filesize = data.size;
|
||||
var cb = Util.once(Util.mkAsync(_cb));
|
||||
|
||||
// validate that the provided size is actually a positive number
|
||||
@ -74,12 +75,12 @@ Upload.status = function (Env, safeKey, filesize, _cb) { // FIXME FILES
|
||||
});
|
||||
};
|
||||
|
||||
Upload.upload = function (Env, safeKey, chunk, cb) {
|
||||
Env.blobStore.uploadWs(safeKey, chunk, cb);
|
||||
Upload.upload = function (Env, safeKey, data, cb) {
|
||||
Env.blobStore.uploadWs(safeKey, data?.chunk, cb);
|
||||
};
|
||||
|
||||
Upload.cancel = function (Env, safeKey, arg, cb) {
|
||||
Env.blobStore.cancel(safeKey, arg, cb);
|
||||
Env.blobStore.cancel(safeKey, arg?.size, cb);
|
||||
};
|
||||
|
||||
var completeUpload = function (owned) {
|
||||
|
||||
@ -98,7 +98,7 @@ module.exports.create = function (config) {
|
||||
|
||||
protocol: new URL(httpUnsafeOrigin).protocol,
|
||||
|
||||
fileHost: config.fileHost || undefined,
|
||||
fileHost: config.fileHost? new URL(config.fileHost).origin : undefined,
|
||||
NO_SANDBOX: NO_SANDBOX,
|
||||
httpSafePort: httpSafePort,
|
||||
websocketPort: config.websocketPort,
|
||||
|
||||
@ -107,6 +107,10 @@ HK.authenticateNetfluxSession = function (Env, netfluxId, unsafeKey) {
|
||||
var user = Env.netfluxUsers[netfluxId] = Env.netfluxUsers[netfluxId] || {};
|
||||
user[unsafeKey] = +new Date();
|
||||
};
|
||||
HK.unauthenticateNetfluxSession = function (Env, netfluxId, unsafeKey) {
|
||||
var user = Env.netfluxUsers[netfluxId] = Env.netfluxUsers[netfluxId] || {};
|
||||
delete user[unsafeKey];
|
||||
};
|
||||
|
||||
HK.closeNetfluxSession = function (Env, netfluxId) {
|
||||
delete Env.netfluxUsers[netfluxId];
|
||||
|
||||
@ -777,7 +777,10 @@ app.get('/api/logo', function (req, res) {
|
||||
});
|
||||
});
|
||||
|
||||
app.post('/upload-blob', Express.json({limit:"500kb"}), (req, res) => {
|
||||
app.use('/upload-blob', Express.json({limit:"500kb"}), (req, res) => {
|
||||
if (req.method !== "POST") {
|
||||
return res.status(403).send();
|
||||
}
|
||||
const { chunk, sig, edPublic } = req.body;
|
||||
if (!cpcrypto) {
|
||||
return void res.status(500).send({error: 'NOCRYPTO'});
|
||||
|
||||
@ -72,6 +72,7 @@ const AUTHENTICATED_USER_SCOPED = {
|
||||
REMOVE_PINS: Pinning.removePins,
|
||||
TRIM_PINS: Pinning.trimPins,
|
||||
COOKIE: Core.haveACookie,
|
||||
DESTROY: () => {}
|
||||
};
|
||||
|
||||
var isAuthenticatedCall = function (call) {
|
||||
@ -190,6 +191,11 @@ var rpc = function (Env, Server, userId, data, respond) {
|
||||
if (command === 'COOKIE' && !hadSession && Env.logIP) {
|
||||
Env.Log.info('NEW_RPC_SESSION', {userId: userId, publicKey: publicKey});
|
||||
}
|
||||
if (command === "DESTROY") {
|
||||
HK.unauthenticateNetfluxSession(Env, userId, publicKey);
|
||||
return; // No need to respond, user will close the session
|
||||
}
|
||||
|
||||
HK.authenticateNetfluxSession(Env, userId, publicKey);
|
||||
return void handleAuthenticatedMessage(Env, publicKey, msg, respond, Server);
|
||||
});
|
||||
|
||||
1577
package-lock.json
generated
1577
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "cryptpad",
|
||||
"description": "a collaborative office suite that is end-to-end encrypted and open-source",
|
||||
"version": "2025.6.0",
|
||||
"version": "2025.9.0",
|
||||
"license": "AGPL-3.0+",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -13,7 +13,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@mcrowe/minibloom": "^0.2.0",
|
||||
"@node-saml/node-saml": "^4.0.5",
|
||||
"@node-saml/node-saml": "^5.1.0",
|
||||
"alertify.js": "1.0.11",
|
||||
"body-parser": "^1.20.2",
|
||||
"bootstrap": "^4.0.0",
|
||||
@ -25,7 +25,6 @@
|
||||
"chainpad-server": "^5.2.4",
|
||||
"ckeditor": "npm:ckeditor4@~4.22.1",
|
||||
"codemirror": "^5.19.0",
|
||||
"components-font-awesome": "^4.6.3",
|
||||
"connect-gzip-static": "^4.2.1",
|
||||
"cookie-parser": "^1.4.7",
|
||||
"croppie": "^2.5.0",
|
||||
@ -45,13 +44,12 @@
|
||||
"localforage": "^1.5.2",
|
||||
"marked": "^4.3.0",
|
||||
"mathjax": "3.0.5",
|
||||
"netflux-websocket": "^1.2.1",
|
||||
"netflux-websocket": "^1.3.0",
|
||||
"notp": "^2.0.3",
|
||||
"nthen": "0.1.8",
|
||||
"open-sans-fontface": "^1.4.0",
|
||||
"openid-client": "^5.7.1",
|
||||
"pako": "^2.1.0",
|
||||
"prompt-confirm": "^2.0.4",
|
||||
"pull-stream": "^3.6.1",
|
||||
"require-css": "0.1.10",
|
||||
"requirejs": "2.3.7",
|
||||
|
||||
@ -2,26 +2,37 @@
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
var prompt = require('prompt-confirm');
|
||||
const p = new prompt('Are you sure? This will permanently delete all existing data on your instance.');
|
||||
|
||||
const Fs = require("fs");
|
||||
const readline = require("node:readline");
|
||||
const inter = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
});
|
||||
|
||||
var config = require("../lib/load-config");
|
||||
var Env = require("../lib/env").create(config);
|
||||
Env.Log = { error: console.log };
|
||||
|
||||
var paths = Env.paths;
|
||||
p.ask(function (answer) {
|
||||
if (!answer) {
|
||||
|
||||
const q = 'This will permanently delete all existing data on your instance. Are you sure (y/n)? ';
|
||||
inter.question(q, response => {
|
||||
let msg = response.toLowerCase().trim();
|
||||
if (!['y', 'yes'].includes(msg)) {
|
||||
console.log('Abort');
|
||||
inter.close();
|
||||
process.exit();
|
||||
return;
|
||||
}
|
||||
console.log('Deleting all data...');
|
||||
|
||||
Object.values(paths).forEach(function (path) {
|
||||
console.log(`Deleting ${path}`);
|
||||
Fs.rmSync(path, { recursive: true, force: true });
|
||||
console.log('Deleted');
|
||||
});
|
||||
console.log('Success');
|
||||
|
||||
inter.close();
|
||||
process.exit();
|
||||
});
|
||||
|
||||
@ -20,7 +20,6 @@ Fse.rmSync(oldComponentsPath, { recursive: true, force: true });
|
||||
"chainpad-netflux",
|
||||
"ckeditor",
|
||||
"codemirror",
|
||||
"components-font-awesome",
|
||||
"croppie",
|
||||
"file-saver",
|
||||
"hyper-json",
|
||||
|
||||
@ -52,8 +52,7 @@ var grep = function (pattern, cb) {
|
||||
'./github/*',
|
||||
'*.svg',
|
||||
'*.md',
|
||||
'./config/*',
|
||||
'www/oldadmin/*', // XXX
|
||||
'./config/*'
|
||||
].map(function (patt) {
|
||||
return "':(exclude)" + patt + "'";
|
||||
}).join(' ');
|
||||
|
||||
@ -31,7 +31,7 @@ const factory = function (AppConfig = {}) {
|
||||
MAX_PREMIUM_TEAMS_SLOTS: Math.max(AppConfig.maxTeamsSlots || 0, AppConfig.maxPremiumTeamsSlots || 0) || 5,
|
||||
MAX_PREMIUM_TEAMS_OWNED: Math.max(AppConfig.maxOwnedTeams || 0, AppConfig.maxPremiumTeamsOwned || 0) || 5,
|
||||
// Apps
|
||||
criticalApps: ['profile', 'settings', 'debug', 'admin', 'support', 'notifications', 'calendar', 'moderation', 'oldadmin'], // XXX oldadmin
|
||||
criticalApps: ['profile', 'settings', 'debug', 'admin', 'support', 'notifications', 'calendar', 'moderation'],
|
||||
earlyAccessApps: []
|
||||
};
|
||||
};
|
||||
|
||||
@ -91,17 +91,6 @@ var factory = function (Util, Rpc) {
|
||||
});
|
||||
};
|
||||
|
||||
// Update the limit value for all the users and return the limit for your publicKey
|
||||
exp.updatePinLimits = function (cb) {
|
||||
rpc.send('UPDATE_LIMITS', undefined, function (e, response) {
|
||||
if (e) { return void cb(e); }
|
||||
if (response && response.length && typeof(response[0]) === "number") {
|
||||
cb (void 0, response[0], response[1], response[2]);
|
||||
} else {
|
||||
cb('INVALID_RESPONSE');
|
||||
}
|
||||
});
|
||||
};
|
||||
// Get the storage limit associated with your publicKey
|
||||
exp.getLimit = function (cb) {
|
||||
rpc.send('GET_LIMIT', undefined, function (e, response) {
|
||||
@ -189,13 +178,13 @@ var factory = function (Util, Rpc) {
|
||||
});
|
||||
};
|
||||
|
||||
exp.uploadStatus = function (size, cb) {
|
||||
if (typeof(size) !== 'number') {
|
||||
exp.uploadStatus = function (data, cb) {
|
||||
if (typeof(data?.size) !== 'number') {
|
||||
return void setTimeout(function () {
|
||||
cb('INVALID_SIZE');
|
||||
});
|
||||
}
|
||||
rpc.send('UPLOAD_STATUS', size, function (e, res) {
|
||||
rpc.send('UPLOAD_STATUS', data, function (e, res) {
|
||||
if (e) { return void cb(e); }
|
||||
var pending = res[0];
|
||||
if (typeof(pending) !== 'boolean') {
|
||||
@ -205,8 +194,8 @@ var factory = function (Util, Rpc) {
|
||||
});
|
||||
};
|
||||
|
||||
exp.uploadCancel = function (size, cb) {
|
||||
rpc.send('UPLOAD_CANCEL', size, function (e) {
|
||||
exp.uploadCancel = function (data, cb) {
|
||||
rpc.send('UPLOAD_CANCEL', data, function (e) {
|
||||
if (e) { return void cb(e); }
|
||||
cb();
|
||||
});
|
||||
|
||||
@ -264,6 +264,8 @@ var factory = function (Util, Nacl) {
|
||||
clearTimeout(to);
|
||||
});
|
||||
|
||||
ctx.send('DESTROY', "", function () {});
|
||||
|
||||
// remove the ctx from the network's stack
|
||||
var idx = networkContext.authenticated.indexOf(ctx);
|
||||
if (idx === -1) { return; }
|
||||
|
||||
@ -25,6 +25,7 @@ const factory = (Sortify, UserObject, ProxyManager,
|
||||
const Saferphore = Util.Saferphore;
|
||||
var onReadyEvt = Util.mkEvent(true);
|
||||
var onCacheReadyEvt = Util.mkEvent(true);
|
||||
var onDriveReadyEvt = Util.mkEvent(true);
|
||||
var onPadRejectedEvt = Util.mkEvent(true);
|
||||
|
||||
const setCustomize = data => {
|
||||
@ -392,7 +393,10 @@ const factory = (Sortify, UserObject, ProxyManager,
|
||||
var s = getStore(data.teamId);
|
||||
if (!s) { return void cb({ error: 'ENOTFOUND' }); }
|
||||
if (!s.rpc) { return void cb({error: 'RPC_NOT_READY'}); }
|
||||
s.rpc.uploadStatus(data.size, function (err, res) {
|
||||
s.rpc.uploadStatus({
|
||||
id: data.id,
|
||||
size: data.size
|
||||
}, function (err, res) {
|
||||
if (err) { return void cb({error:err}); }
|
||||
cb(res);
|
||||
});
|
||||
@ -402,7 +406,10 @@ const factory = (Sortify, UserObject, ProxyManager,
|
||||
var s = getStore(data.teamId);
|
||||
if (!s) { return void cb({ error: 'ENOTFOUND' }); }
|
||||
if (!s.rpc) { return void cb({error: 'RPC_NOT_READY'}); }
|
||||
s.rpc.uploadCancel(data.size, function (err, res) {
|
||||
s.rpc.uploadCancel({
|
||||
id: data.id,
|
||||
size: data.size
|
||||
}, function (err, res) {
|
||||
if (err) { return void cb({error:err}); }
|
||||
cb(res);
|
||||
});
|
||||
@ -412,7 +419,10 @@ const factory = (Sortify, UserObject, ProxyManager,
|
||||
var s = getStore(data.teamId);
|
||||
if (!s) { return void cb({ error: 'ENOTFOUND' }); }
|
||||
if (!s.rpc) { return void cb({error: 'RPC_NOT_READY'}); }
|
||||
s.rpc.send.unauthenticated('UPLOAD', data.chunk, function (e, msg) {
|
||||
s.rpc.send.unauthenticated('UPLOAD', {
|
||||
chunk: data.chunk,
|
||||
id: data.id
|
||||
}, function (e, msg) {
|
||||
cb({
|
||||
error: e,
|
||||
msg: msg
|
||||
@ -483,7 +493,8 @@ const factory = (Sortify, UserObject, ProxyManager,
|
||||
|
||||
Store.isNewChannel = function (clientId, data, cb) {
|
||||
if (!store.anon_rpc) { return void cb({error: 'ANON_RPC_NOT_READY'}); }
|
||||
var channelId = data.channel || Hash.hrefToHexChannelId(data.href, data.password);
|
||||
let channelId = typeof(data) === "string" ? data :
|
||||
(data.channel || Hash.hrefToHexChannelId(data.href, data.password));
|
||||
store.anon_rpc.send("IS_NEW_CHANNEL", channelId, function (e, response) {
|
||||
if (e) { return void cb({error: e}); }
|
||||
if (response && response.length && typeof(response[0]) === 'object') {
|
||||
@ -1608,7 +1619,7 @@ const factory = (Sortify, UserObject, ProxyManager,
|
||||
if (!Array.isArray(allowed)) { return void cb('ERESTRICTED'); }
|
||||
|
||||
onPadRejectedEvt.fire();
|
||||
onReadyEvt.reg(() => {
|
||||
onDriveReadyEvt.reg(() => {
|
||||
// There is an allow list: check if we can authenticate
|
||||
if (!store.loggedIn || !store.proxy.edPublic) { return void cb('ERESTRICTED'); }
|
||||
|
||||
@ -2570,6 +2581,7 @@ const factory = (Sortify, UserObject, ProxyManager,
|
||||
cacheCb(store.cacheReturned || store.returned);
|
||||
});
|
||||
onDriveReady(() => {
|
||||
onDriveReadyEvt.fire();
|
||||
cb(store.returned);
|
||||
});
|
||||
|
||||
|
||||
@ -849,6 +849,8 @@ const factory = (Messaging, Hash, Util, Crypto, Block) => {
|
||||
if (!teamId) { return void cb(false); }
|
||||
|
||||
var team = ctx.store.proxy.teams[teamId];
|
||||
if (!team) { return void cb(false); }
|
||||
|
||||
content.teamName = team.metadata && team.metadata.name;
|
||||
cb(false);
|
||||
};
|
||||
|
||||
@ -24,7 +24,16 @@ const factory = (Crypto) => {
|
||||
msg: data.msg,
|
||||
uid: data.uid,
|
||||
};
|
||||
chan.sendMsg(JSON.stringify(obj), cb);
|
||||
if (obj.msg === 'ISAVE') {
|
||||
ctx.pending[data.uid] = true;
|
||||
}
|
||||
chan.sendMsg(JSON.stringify(obj), obj => {
|
||||
if (!ctx.pending[data.uid]) {
|
||||
return void setTimeout(cb, 1000);
|
||||
}
|
||||
delete ctx.pending[data.uid];
|
||||
cb(obj);
|
||||
});
|
||||
ctx.emit('MESSAGE', obj, chan.clients.filter(function (cl) {
|
||||
return cl !== client;
|
||||
}));
|
||||
@ -90,6 +99,9 @@ const factory = (Crypto) => {
|
||||
var parsed;
|
||||
try {
|
||||
parsed = JSON.parse(msg);
|
||||
if (parsed.msg === "ISAVE") {
|
||||
delete ctx.pending[parsed.uid];
|
||||
}
|
||||
ctx.emit('MESSAGE', parsed, chan.clients);
|
||||
} catch (e) { console.error(e); }
|
||||
});
|
||||
@ -176,6 +188,7 @@ const factory = (Crypto) => {
|
||||
store: cfg.store,
|
||||
emit: emit,
|
||||
channels: {},
|
||||
pending: {}, // prevent ISAVE race condition
|
||||
clients: {}
|
||||
};
|
||||
|
||||
|
||||
@ -107,6 +107,7 @@ const factory = (Util, Hash, Constants, Realtime, ProxyManager,
|
||||
try { team.roster.stop(); } catch (e) {}
|
||||
team.proxy = {};
|
||||
team.stopped = true;
|
||||
team?.rpc?.destroy();
|
||||
delete ctx.teams[teamId];
|
||||
delete ctx.cache[teamId];
|
||||
delete ctx.store.proxy.teams[teamId];
|
||||
|
||||
@ -21,6 +21,17 @@
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
font: @colortheme_app-font;
|
||||
.cp-spinner {
|
||||
svg {
|
||||
animation: spin 10s linear infinite;
|
||||
}
|
||||
}
|
||||
.cp-checkmark {
|
||||
height: 1.2rem;
|
||||
svg {
|
||||
margin-left: @variables_icon_margin;
|
||||
}
|
||||
}
|
||||
|
||||
input, textarea, .cp-appblock {
|
||||
&:focus-visible {
|
||||
@ -83,6 +94,14 @@
|
||||
width: ~"calc(100% - 5rem)";
|
||||
padding-left: 0.5rem;
|
||||
vertical-align: middle;
|
||||
.cp-palette-color {
|
||||
svg.lucide {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
.is-hidden {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.cp-admin-color-preview {
|
||||
@ -119,10 +138,14 @@
|
||||
flex-flow: column;
|
||||
}
|
||||
.cp-broadcast-lang {
|
||||
h4 {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
margin-left: 30px;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
align-items: baseline;
|
||||
gap: 1rem;
|
||||
&:not(:last-child) {
|
||||
margin-bottom: @sidebar_base-margin;
|
||||
}
|
||||
@ -134,7 +157,7 @@
|
||||
}
|
||||
|
||||
.cp-admin-support-state {
|
||||
i {
|
||||
svg {
|
||||
margin-right: @sidebar_base-margin;
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,10 +22,10 @@ define([
|
||||
'/api/instance',
|
||||
'/lib/datepicker/flatpickr.js',
|
||||
'/install/onboardscreen.js',
|
||||
'/common/common-icons.js',
|
||||
|
||||
'css!/lib/datepicker/flatpickr.min.css',
|
||||
'css!/components/bootstrap/dist/css/bootstrap.min.css',
|
||||
'css!/components/components-font-awesome/css/font-awesome.min.css',
|
||||
'less!/admin/app-admin.less',
|
||||
], function(
|
||||
$,
|
||||
@ -47,6 +47,7 @@ define([
|
||||
Instance,
|
||||
Flatpickr,
|
||||
Onboarding,
|
||||
Icons
|
||||
) {
|
||||
|
||||
var APP = window.APP = {};
|
||||
@ -60,7 +61,7 @@ define([
|
||||
// UNUSED-TRANSLATIONS:START
|
||||
var categories = {
|
||||
'general': { // Msg.admin_cat_general
|
||||
icon: 'fa fa-user-o',
|
||||
icon: 'user-account',
|
||||
content: [
|
||||
'instance-info-notice',
|
||||
'name',
|
||||
@ -71,21 +72,21 @@ define([
|
||||
]
|
||||
},
|
||||
'customize': { // Msg.admin_cat_customize
|
||||
icon: 'fa fa-paint-brush',
|
||||
icon: 'customize',
|
||||
content: [
|
||||
'logo',
|
||||
'color',
|
||||
]
|
||||
},
|
||||
'admins': {
|
||||
icon: 'fa fa-users',
|
||||
icon: 'users',
|
||||
content: [
|
||||
'list-admins',
|
||||
'add-admins'
|
||||
]
|
||||
},
|
||||
'broadcast' : { // Msg.admin_cat_broadcast
|
||||
icon: 'fa fa-bullhorn',
|
||||
icon: 'broadcast',
|
||||
content : [
|
||||
'notice',
|
||||
'maintenance',
|
||||
@ -94,20 +95,20 @@ define([
|
||||
]
|
||||
},
|
||||
'security': { // Msg.admin_cat_security
|
||||
icon: 'fa fa-lock',
|
||||
icon: 'lock',
|
||||
content: [
|
||||
'enableembeds',
|
||||
'forcemfa',
|
||||
]
|
||||
},
|
||||
'apps': { // Msg.admin_cat_apps
|
||||
icon: 'fa fa-wrench',
|
||||
icon: 'apps-settings',
|
||||
content: [
|
||||
'apps',
|
||||
]
|
||||
},
|
||||
'users' : { // Msg.admin_cat_users
|
||||
icon : 'fa fa-address-card-o',
|
||||
icon : 'user-directory',
|
||||
content : [
|
||||
'registration',
|
||||
'invitation',
|
||||
@ -115,7 +116,7 @@ define([
|
||||
]
|
||||
},
|
||||
'quota': { // Msg.admin_cat_quota
|
||||
icon: 'fa fa-hdd-o',
|
||||
icon: 'drive',
|
||||
content: [
|
||||
'defaultlimit',
|
||||
'setlimit',
|
||||
@ -123,7 +124,7 @@ define([
|
||||
]
|
||||
},
|
||||
'database' : { // Msg.admin_cat_database
|
||||
icon : 'fa fa-database',
|
||||
icon : 'database',
|
||||
content : [
|
||||
'account-metadata',
|
||||
'document-metadata',
|
||||
@ -133,14 +134,14 @@ define([
|
||||
]
|
||||
},
|
||||
'support' : { // Msg.admin_cat_support
|
||||
icon : 'fa fa-ambulance',
|
||||
icon : 'moderation',
|
||||
content : [
|
||||
'support-setup',
|
||||
'support-team',
|
||||
]
|
||||
},
|
||||
'stats' : { // Msg.admin_cat_stats
|
||||
icon : 'fa fa-line-chart',
|
||||
icon : 'stats',
|
||||
content : [
|
||||
'refresh-stats',
|
||||
'uptime',
|
||||
@ -152,7 +153,7 @@ define([
|
||||
]
|
||||
},
|
||||
'performance' : { // Msg.admin_cat_performance
|
||||
icon : 'fa fa-heartbeat',
|
||||
icon : 'performance',
|
||||
content : [
|
||||
'refresh-performance',
|
||||
'performance-profiling',
|
||||
@ -161,7 +162,7 @@ define([
|
||||
]
|
||||
},
|
||||
'network' : { // Msg.admin_cat_network
|
||||
icon : 'fa fa-sitemap',
|
||||
icon : 'network',
|
||||
content : [
|
||||
'update-available',
|
||||
'checkup',
|
||||
@ -223,7 +224,7 @@ define([
|
||||
|
||||
// Msg.admin_flushCacheHint, .admin_flushCacheTitle, .admin_flushCacheButton
|
||||
sidebar.addItem('flush-cache', function (cb) {
|
||||
var button = blocks.activeButton('primary', '',
|
||||
var button = blocks.activeButton('primary', 'trash-full',
|
||||
Messages.admin_flushCacheButton, done => {
|
||||
flushCache(function (e, data) {
|
||||
done(!!data);
|
||||
@ -265,7 +266,7 @@ define([
|
||||
const newRows = admins.map(obj => {
|
||||
let { name, edPublic, hardcoded } = obj;
|
||||
name = name || Messages.admin_admin;
|
||||
let button = blocks.button('danger','fa-ban', Messages.admin_usersRemove);
|
||||
let button = blocks.button('danger','restricted', Messages.admin_usersRemove);
|
||||
let $b = $(button);
|
||||
Util.onClickEnter($b, () => {
|
||||
$b.prop('disabled', 'disabled');
|
||||
@ -323,7 +324,7 @@ define([
|
||||
placeholder: Messages.admin_accountMetadataPlaceholder
|
||||
});
|
||||
const keyLabel = blocks.labelledInput(Messages.admin_addKeyLabel, keyInput);
|
||||
const keyButton = blocks.button('primary', 'fa-plus', Messages.tag_add);
|
||||
const keyButton = blocks.button('primary', 'add', Messages.tag_add);
|
||||
const keyForm = blocks.form([keyLabel], blocks.nav([keyButton]));
|
||||
const $keyInput = $(keyInput).on('input', () => {
|
||||
let val = $keyInput.val().trim();
|
||||
@ -364,7 +365,7 @@ define([
|
||||
large: true,
|
||||
data: friends
|
||||
}, function () {});
|
||||
let addBtn = blocks.button('primary', 'fa-plus', Messages.tag_add);
|
||||
let addBtn = blocks.button('primary', 'add', Messages.tag_add);
|
||||
Util.onClickEnter($(addBtn), () => {
|
||||
var $sel = $(contactsGrid.div).find('.cp-usergrid-user.cp-selected');
|
||||
if (!$sel.length) {
|
||||
@ -451,7 +452,6 @@ define([
|
||||
h('td', value)
|
||||
]));
|
||||
};
|
||||
|
||||
return {
|
||||
row: row,
|
||||
table: table,
|
||||
@ -504,7 +504,7 @@ define([
|
||||
};
|
||||
|
||||
var copyToClipboard = (content) => {
|
||||
var button = blocks.activeButton('primary','', Messages.copyToClipboard, () => {
|
||||
var button = blocks.activeButton('primary','copy', Messages.copyToClipboard, () => {
|
||||
var toCopy = JSON.stringify(content, null, 2);
|
||||
Clipboard.copy(toCopy, (err) => {
|
||||
if (err) { return UI.warn(Messages.error); }
|
||||
@ -568,7 +568,7 @@ define([
|
||||
row(Messages.admin_planName, data.plan || Messages.ui_none);
|
||||
|
||||
// plan note
|
||||
row(Messages.admin_note, data.note || Messages.ui_none);
|
||||
row(Messages.admin_creation_note, data.note || Messages.ui_none);
|
||||
|
||||
// storage limit
|
||||
if (data.limit) { row(Messages.admin_planlimit, getPrettySize(data.limit)); }
|
||||
@ -598,7 +598,7 @@ define([
|
||||
let button, pre;
|
||||
row(Messages.admin_accountReport, h('div', [
|
||||
pre = h('pre', data.archiveReport_formatted),
|
||||
button = blocks.activeButton('primary', '',
|
||||
button = blocks.activeButton('primary', 'report',
|
||||
Messages.admin_accountReportFull, () => {
|
||||
$(button).remove();
|
||||
$(pre).html(JSON.stringify(data.archiveReport, 0, 2));
|
||||
@ -609,7 +609,7 @@ define([
|
||||
|
||||
// actions
|
||||
if (data.archived && data.live === false && data.archiveReport) {
|
||||
let button = blocks.activeButton('primary', '',
|
||||
let button = blocks.activeButton('primary', 'restore',
|
||||
Messages.ui_restore, () => {
|
||||
justifyRestorationDialog('', reason => {
|
||||
sframeCommand('RESTORE_ACCOUNT', {
|
||||
@ -663,7 +663,7 @@ define([
|
||||
};
|
||||
|
||||
// get full pin list
|
||||
row(Messages.admin_getPinList, blocks.activeButton('primary', '', Messages.ui_fetch, getPins));
|
||||
row(Messages.admin_getPinList, blocks.activeButton('primary', 'export', Messages.ui_fetch, getPins));
|
||||
|
||||
// get full pin history
|
||||
var getHistoryHandler = (done) => {
|
||||
@ -676,7 +676,7 @@ define([
|
||||
UI.alert(history); // TODO NOT_IMPLEMENTED
|
||||
});
|
||||
};
|
||||
var pinHistoryButton = blocks.activeButton('primary', '', Messages.ui_fetch, getHistoryHandler);
|
||||
var pinHistoryButton = blocks.activeButton('primary', 'export', Messages.ui_fetch, getHistoryHandler);
|
||||
disable($(pinHistoryButton));
|
||||
|
||||
// TODO pin history is not implemented
|
||||
@ -705,7 +705,7 @@ define([
|
||||
h('br'),
|
||||
h('small', Messages.admin_archiveAccountInfo)
|
||||
]);
|
||||
let archiveAccountButton = blocks.activeButton('danger', '',
|
||||
let archiveAccountButton = blocks.activeButton('danger', 'archive',
|
||||
Messages.admin_archiveButton, archiveHandler, true);
|
||||
row(archiveAccountLabel, archiveAccountButton);
|
||||
|
||||
@ -730,7 +730,6 @@ define([
|
||||
}
|
||||
|
||||
row(reportContentLabel, copyToClipboard(data));
|
||||
|
||||
return tableObj.table;
|
||||
};
|
||||
|
||||
@ -818,7 +817,7 @@ define([
|
||||
});
|
||||
var $input = $(input);
|
||||
|
||||
var button = blocks.activeButton('primary', '', Messages.settings_save, function (done) {
|
||||
var button = blocks.activeButton('primary', 'save', Messages.settings_save, function (done) {
|
||||
sFrameChan.query('Q_ADMIN_RPC', {
|
||||
cmd: 'ADMIN_DECREE',
|
||||
data: ['SET_ADMIN_EMAIL', [$input.val().trim()]]
|
||||
@ -850,7 +849,7 @@ define([
|
||||
const appsToDisable = ApiConfig.appsToDisable || [];
|
||||
const grid = Onboarding.createAppsGrid(appsToDisable);
|
||||
|
||||
var save = blocks.activeButton('primary', '', Messages.settings_save, function (done) {
|
||||
var save = blocks.activeButton('primary', 'save', Messages.settings_save, function (done) {
|
||||
sFrameChan.query('Q_ADMIN_RPC', {
|
||||
cmd: 'ADMIN_DECREE',
|
||||
data: ['DISABLE_APPS', appsToDisable]
|
||||
@ -894,7 +893,7 @@ define([
|
||||
});
|
||||
var $input = $(input);
|
||||
|
||||
var button = blocks.activeButton('primary', '', Messages.settings_save, function (done) {
|
||||
var button = blocks.activeButton('primary', 'save', Messages.settings_save, function (done) {
|
||||
sFrameChan.query('Q_ADMIN_RPC', {
|
||||
cmd: 'ADMIN_DECREE',
|
||||
data: ['SET_INSTANCE_NAME', [$input.val().trim()]]
|
||||
@ -929,7 +928,7 @@ define([
|
||||
'aria-labelledby': 'cp-admin-description'
|
||||
}, getInstanceString('instanceDescription'));
|
||||
var $input = $(textarea);
|
||||
var button = blocks.activeButton('primary', '', Messages.settings_save, function (done) {
|
||||
var button = blocks.activeButton('primary', 'save', Messages.settings_save, function (done) {
|
||||
sFrameChan.query('Q_ADMIN_RPC', {
|
||||
cmd: 'ADMIN_DECREE',
|
||||
data: ['SET_INSTANCE_DESCRIPTION', [$input.val().trim()]]
|
||||
@ -967,7 +966,7 @@ define([
|
||||
});
|
||||
var $input = $(input);
|
||||
|
||||
var button = blocks.activeButton('primary', '', Messages.settings_save, function (done) {
|
||||
var button = blocks.activeButton('primary', 'save', Messages.settings_save, function (done) {
|
||||
sFrameChan.query('Q_ADMIN_RPC', {
|
||||
cmd: 'ADMIN_DECREE',
|
||||
data: ['SET_INSTANCE_JURISDICTION', [$input.val().trim()]]
|
||||
@ -1005,7 +1004,7 @@ define([
|
||||
});
|
||||
var $input = $(input);
|
||||
|
||||
var button = blocks.activeButton('primary', '', Messages.settings_save, function (done) {
|
||||
var button = blocks.activeButton('primary', 'save', Messages.settings_save, function (done) {
|
||||
sFrameChan.query('Q_ADMIN_RPC', {
|
||||
cmd: 'ADMIN_DECREE',
|
||||
data: ['SET_INSTANCE_NOTICE', [$input.val().trim()]]
|
||||
@ -1049,8 +1048,8 @@ define([
|
||||
};
|
||||
redraw();
|
||||
|
||||
var upload = blocks.button('primary', '', Messages.admin_logoButton);
|
||||
var remove = blocks.button('danger', '', Messages.admin_logoRemoveButton);
|
||||
var upload = blocks.button('primary', 'upload', Messages.admin_logoButton);
|
||||
var remove = blocks.button('danger', 'restore', Messages.admin_logoRemoveButton);
|
||||
|
||||
let spinnerBlock = blocks.inline();
|
||||
let spinner = UI.makeSpinner($(spinnerBlock));
|
||||
@ -1130,19 +1129,19 @@ define([
|
||||
let preview = blocks.block([
|
||||
blocks.block([
|
||||
blocks.link('CryptPad', '/admin/#customize'),
|
||||
blocks.button('primary', 'fa-floppy-o', Messages.settings_save),
|
||||
blocks.button('secondary', 'fa-floppy-o', Messages.settings_save)
|
||||
blocks.button('primary', 'save', Messages.settings_save),
|
||||
blocks.button('secondary', 'save', Messages.settings_save)
|
||||
], 'cp-admin-color-preview-dark cp-sidebar-flex-block'),
|
||||
blocks.block([
|
||||
blocks.link('CryptPad', '/admin/#customize'),
|
||||
blocks.button('primary', 'fa-floppy-o', Messages.settings_save),
|
||||
blocks.button('secondary', 'fa-floppy-o', Messages.settings_save)
|
||||
blocks.button('primary', 'save', Messages.settings_save),
|
||||
blocks.button('secondary', 'save', Messages.settings_save)
|
||||
], 'cp-admin-color-preview-light cp-sidebar-flex-block')
|
||||
], 'cp-admin-color-preview');
|
||||
let labelPreview = blocks.labelledInput(Messages.admin_colorPreview, preview);
|
||||
let $preview = $(preview);
|
||||
|
||||
let remove = blocks.button('danger', '', Messages.admin_logoRemoveButton);
|
||||
let remove = blocks.button('danger', 'restore', Messages.admin_logoRemoveButton);
|
||||
let $remove = $(remove);
|
||||
|
||||
let setColor = (color, done) => {
|
||||
@ -1182,7 +1181,7 @@ define([
|
||||
};
|
||||
$input = $(input).on('change', onColorPicked).addClass('cp-admin-color-picker');
|
||||
|
||||
let btn = blocks.activeButton('primary', '',
|
||||
let btn = blocks.activeButton('primary', 'color-palette',
|
||||
Messages.admin_colorChange, (done) => {
|
||||
let color = $input.val();
|
||||
setColor(color, done);
|
||||
@ -1282,7 +1281,7 @@ define([
|
||||
|
||||
// Msg.admin_invitationHint, admin_invitationTitle
|
||||
sidebar.addItem('invitation', function(cb){
|
||||
var button = blocks.button('primary', '', Messages.admin_invitationCreate);
|
||||
var button = blocks.button('primary', 'link', Messages.admin_invitationCreate);
|
||||
var $b = $(button);
|
||||
|
||||
var inputAlias = blocks.input({
|
||||
@ -1296,7 +1295,7 @@ define([
|
||||
var blockEmail = blocks.labelledInput(Messages.admin_invitationEmail, inputEmail);
|
||||
|
||||
var refreshInvite = function () {};
|
||||
var refreshButton = blocks.button('secondary', '', Messages.oo_refresh);
|
||||
var refreshButton = blocks.button('secondary', 'refresh', Messages.oo_refresh);
|
||||
Util.onClickEnter($(refreshButton), function () {
|
||||
refreshInvite();
|
||||
});
|
||||
@ -1358,7 +1357,7 @@ define([
|
||||
var data = all[key];
|
||||
var url = privateData.origin + Hash.hashToHref(key, 'register');
|
||||
|
||||
var del = blocks.button('danger', 'fa-trash', Messages.kanban_delete );
|
||||
var del = blocks.button('danger', 'trash-full', Messages.kanban_delete );
|
||||
var $del = $(del);
|
||||
Util.onClickEnter($del, function () {
|
||||
$del.attr('disabled', 'disabled');
|
||||
@ -1368,7 +1367,7 @@ define([
|
||||
deleteInvite(key);
|
||||
});
|
||||
});
|
||||
var copy = blocks.button('secondary', 'fa-clipboard', Messages.admin_invitationCopy);
|
||||
var copy = blocks.button('secondary', 'copy', Messages.admin_invitationCopy);
|
||||
Util.onClickEnter($(copy), function () {
|
||||
Clipboard.copy(url, () => {
|
||||
UI.log(Messages.genericCopySuccess);
|
||||
@ -1595,7 +1594,7 @@ define([
|
||||
});
|
||||
var ssoEnabled = ApiConfig.sso && ApiConfig.sso.list && ApiConfig.sso.list.length;
|
||||
|
||||
var button = blocks.button('primary', '', Messages.admin_usersAdd);
|
||||
var button = blocks.button('primary', 'add', Messages.admin_usersAdd);
|
||||
var $b = $(button);
|
||||
|
||||
var userAlias = blocks.input({ type: 'text' });
|
||||
@ -1611,7 +1610,7 @@ define([
|
||||
var blockUser = blocks.labelledInput(Messages.admin_usersBlock, userBlock);
|
||||
|
||||
var refreshUsers = function () {};
|
||||
var refreshButton = blocks.button('secondary', '', Messages.oo_refresh);
|
||||
var refreshButton = blocks.button('secondary', 'refresh', Messages.oo_refresh);
|
||||
Util.onClickEnter($(refreshButton), function () {
|
||||
refreshUsers();
|
||||
});
|
||||
@ -1688,7 +1687,7 @@ define([
|
||||
Object.keys(all).sort(sort(all)).forEach(function (key) {
|
||||
var data = all[key];
|
||||
var editUser = () => {};
|
||||
var del = blocks.button('danger', 'fa fa-trash', Messages.admin_usersRemove);
|
||||
var del = blocks.button('danger', 'trash-full', Messages.admin_usersRemove);
|
||||
var $del = $(del);
|
||||
Util.onClickEnter($del, function () {
|
||||
$del.attr('disabled', 'disabled');
|
||||
@ -1698,7 +1697,7 @@ define([
|
||||
deleteUser(key);
|
||||
});
|
||||
});
|
||||
var edit = blocks.activeButton('secondary', 'fa fa-pencil',
|
||||
var edit = blocks.activeButton('secondary', 'edit',
|
||||
Messages.tag_edit, () => { editUser(); }, true);
|
||||
|
||||
let aliasCell = blocks.inline(data.alias);
|
||||
@ -1714,8 +1713,8 @@ define([
|
||||
var emailInput = h('input');
|
||||
$(aliasInput).val(data.alias);
|
||||
$(emailInput).val(data.email);
|
||||
var save = blocks.button('primary', '', Messages.settings_save);
|
||||
var cancel = blocks.button('secondary', '', Messages.cancel);
|
||||
var save = blocks.button('primary', 'save', Messages.settings_save);
|
||||
var cancel = blocks.button('secondary', 'close', Messages.cancel);
|
||||
Util.onClickEnter($(save), function () {
|
||||
var aliasVal = $(aliasInput).val().trim();
|
||||
if (!aliasVal) { return void UI.warn(Messages.error); }
|
||||
@ -1733,7 +1732,7 @@ define([
|
||||
$actions.html('').append([save, cancel]);
|
||||
};
|
||||
|
||||
let infoBtn = blocks.activeButton('primary', 'fa fa-database',
|
||||
let infoBtn = blocks.activeButton('primary', 'database',
|
||||
Messages.admin_diskUsageButton, function (done) {
|
||||
getAccountData(key, (err, data) => {
|
||||
done(!err);
|
||||
@ -1810,7 +1809,7 @@ define([
|
||||
value: _limitMB,
|
||||
'aria-labelledby': 'cp-admin-defaultlimit'
|
||||
});
|
||||
var button = blocks.button('primary', '', Messages.admin_setlimitButton);
|
||||
var button = blocks.button('primary', 'limit', Messages.admin_setlimitButton);
|
||||
var nav = blocks.nav([button]);
|
||||
var text = blocks.inline(Messages._getKey('admin_limit', [limit]));
|
||||
|
||||
@ -1866,8 +1865,8 @@ define([
|
||||
var noteBlock = blocks.labelledInput(Messages.admin_limitSetNote, note);
|
||||
var $note = $(note);
|
||||
|
||||
var remove = blocks.button('danger', '', Messages.fc_remove );
|
||||
var set = blocks.button('primary', '', Messages.admin_setlimitButton);
|
||||
var remove = blocks.button('danger', 'restricted', Messages.fc_remove );
|
||||
var set = blocks.button('primary', 'limit', Messages.admin_setlimitButton);
|
||||
|
||||
var nav = blocks.nav([set, remove]);
|
||||
var form = blocks.form([
|
||||
@ -1984,7 +1983,7 @@ define([
|
||||
var content = list.map(function (key) {
|
||||
var user = obj[key];
|
||||
var limit = getPrettySize(user.limit);
|
||||
var infoButton = blocks.button('primary','', Messages.admin_diskUsageButton);
|
||||
var infoButton = blocks.button('primary','report', Messages.admin_diskUsageButton);
|
||||
Util.onClickEnter($(infoButton), function () {
|
||||
getAccountData(key, (err, data) => {
|
||||
if (err) { return void console.error(err); }
|
||||
@ -2030,7 +2029,7 @@ define([
|
||||
});
|
||||
var $input = $(input);
|
||||
|
||||
var btn = blocks.button('primary', '', Messages.ui_generateReport);
|
||||
var btn = blocks.button('primary', 'report', Messages.ui_generateReport);
|
||||
var $btn = $(btn);
|
||||
|
||||
var nav = blocks.nav([btn]);
|
||||
@ -2209,7 +2208,7 @@ define([
|
||||
|
||||
// actions
|
||||
// get raw metadata history
|
||||
var metadataHistoryButton = blocks.activeButton('primary', '', Messages.ui_fetch, done => {
|
||||
var metadataHistoryButton = blocks.activeButton('primary', 'export', Messages.ui_fetch, done => {
|
||||
sframeCommand('GET_METADATA_HISTORY', data.id, (err, result) => {
|
||||
done(!err);
|
||||
if (err) {
|
||||
@ -2279,7 +2278,7 @@ define([
|
||||
|
||||
if (data.live && data.archived) {
|
||||
let disableButtons;
|
||||
let restoreButton = blocks.activeButton('danger', '', Messages.admin_unarchiveButton, function () {
|
||||
let restoreButton = blocks.activeButton('danger', 'restore', Messages.admin_unarchiveButton, function () {
|
||||
justifyRestorationDialog('', reason => {
|
||||
nThen(function (w) {
|
||||
sframeCommand('REMOVE_DOCUMENT', {
|
||||
@ -2307,7 +2306,7 @@ define([
|
||||
});
|
||||
}, true);
|
||||
|
||||
let archiveButton = blocks.activeButton('danger', '',Messages.admin_archiveButton, function () {
|
||||
let archiveButton = blocks.activeButton('danger', 'archive',Messages.admin_archiveButton, function () {
|
||||
justifyArchivalDialog('', result => {
|
||||
sframeCommand('ARCHIVE_DOCUMENT', {
|
||||
id: data.id,
|
||||
@ -2344,7 +2343,7 @@ define([
|
||||
]));
|
||||
} else if (data.live) {
|
||||
// archive
|
||||
var archiveDocumentButton = blocks.activeButton('danger', '' ,Messages.admin_archiveButton, function () {
|
||||
var archiveDocumentButton = blocks.activeButton('danger', 'archive' ,Messages.admin_archiveButton, function () {
|
||||
justifyArchivalDialog('', result => {
|
||||
sframeCommand('ARCHIVE_DOCUMENT', {
|
||||
id: data.id,
|
||||
@ -2364,7 +2363,7 @@ define([
|
||||
h('small', Messages.admin_archiveHint),
|
||||
]));
|
||||
} else if (data.archived) {
|
||||
var restoreDocumentButton = blocks.activeButton('primary', '',Messages.admin_unarchiveButton, function () {
|
||||
var restoreDocumentButton = blocks.activeButton('primary', 'restore',Messages.admin_unarchiveButton, function () {
|
||||
justifyRestorationDialog('', reason => {
|
||||
sframeCommand("RESTORE_ARCHIVED_DOCUMENT", {
|
||||
id: data.id,
|
||||
@ -2386,7 +2385,6 @@ define([
|
||||
}
|
||||
|
||||
row(reportContentLabel, copyToClipboard(data));
|
||||
|
||||
return tableObj.table;
|
||||
};
|
||||
|
||||
@ -2396,7 +2394,7 @@ define([
|
||||
'aria-labelledby': 'cp-admin-documents-deletion'
|
||||
});
|
||||
const $textarea = $(textarea);
|
||||
const archiveButton = blocks.activeButton('danger', '',
|
||||
const archiveButton = blocks.activeButton('danger', 'archive',
|
||||
Messages.admin_archiveButton, () => {
|
||||
const $btn = $(archiveButton);
|
||||
justifyArchivalDialog('', result => {
|
||||
@ -2521,7 +2519,7 @@ define([
|
||||
|
||||
var results = blocks.inline([]);
|
||||
|
||||
var btn = blocks.button('primary', '', Messages.ui_generateReport);
|
||||
var btn = blocks.button('primary', 'report', Messages.ui_generateReport);
|
||||
var $btn = $(btn);
|
||||
|
||||
var nav = blocks.nav([btn]);
|
||||
@ -2626,7 +2624,7 @@ define([
|
||||
row(Messages.admin_totpRecoveryMethod, data.totp.recovery);
|
||||
|
||||
if (data.live) {
|
||||
var archiveButton = blocks.activeButton('danger', '', Messages.ui_archive, function () {
|
||||
var archiveButton = blocks.activeButton('danger', 'archive', Messages.ui_archive, function () {
|
||||
justifyArchivalDialog('', reason => {
|
||||
sframeCommand('ARCHIVE_BLOCK', {
|
||||
key: data.key,
|
||||
@ -2649,7 +2647,7 @@ define([
|
||||
row(Messages.admin_channelPlaceholder, UI.getDestroyedPlaceholderMessage(data.placeholder, true));
|
||||
}
|
||||
if (data.archived && !data.live) {
|
||||
var restoreButton = blocks.activeButton('danger', '', Messages.ui_restore, function () {
|
||||
var restoreButton = blocks.activeButton('danger', 'restore', Messages.ui_restore, function () {
|
||||
justifyRestorationDialog('', reason => {
|
||||
sframeCommand('RESTORE_ARCHIVED_BLOCK', {
|
||||
key: data.key,
|
||||
@ -2681,7 +2679,7 @@ define([
|
||||
value: ''
|
||||
});
|
||||
var $input = $(input);
|
||||
var btn = blocks.button('primary', '', Messages.ui_generateReport);
|
||||
var btn = blocks.button('primary', 'report', Messages.ui_generateReport);
|
||||
var $btn = $(btn);
|
||||
disable($btn);
|
||||
|
||||
@ -2772,7 +2770,7 @@ define([
|
||||
if (!data.totpCheck || !data.totp.enabled) { return tableObj.table; }
|
||||
|
||||
// TOTP is enabled and the signature is correct: display "disable TOTP" button
|
||||
var disableButton = blocks.button('danger', '', Messages.admin_totpDisableButton);
|
||||
var disableButton = blocks.button('danger', 'restricted', Messages.admin_totpDisableButton);
|
||||
UI.confirmButton(disableButton, { classes: 'btn-danger' }, () => {
|
||||
sframeCommand('DISABLE_MFA', data.key, (err, res) => {
|
||||
if (err) {
|
||||
@ -2808,7 +2806,7 @@ define([
|
||||
'aria-labelledby': 'cp-admin-totp-recovery'
|
||||
});
|
||||
var $input = $(textarea);
|
||||
var btn = blocks.button('primary','', Messages.admin_totpDisable);
|
||||
var btn = blocks.button('primary','restricted', Messages.admin_totpDisable);
|
||||
var $btn = $(btn);
|
||||
var results = blocks.inline([]);
|
||||
|
||||
@ -2878,7 +2876,7 @@ define([
|
||||
var onRefreshStats = Util.mkEvent();
|
||||
|
||||
sidebar.addItem('refresh-stats', function(cb){
|
||||
var btn = blocks.button('primary', '', Messages.oo_refresh);
|
||||
var btn = blocks.button('primary', 'refresh', Messages.oo_refresh);
|
||||
var $btn = $(btn);
|
||||
Util.onClickEnter($btn, function () {
|
||||
onRefreshStats.fire();
|
||||
@ -2986,7 +2984,7 @@ define([
|
||||
|
||||
// Msg.admin_diskUsageHint, .admin_diskUsageTitle, .admin_diskUsageButton
|
||||
sidebar.addItem('disk-usage', function(cb){
|
||||
var button = blocks.button('primary', '', Messages.admin_diskUsageButton);
|
||||
var button = blocks.button('primary', 'report', Messages.admin_diskUsageButton);
|
||||
var $button = $(button);
|
||||
var called = false;
|
||||
var nav = blocks.nav([button]);
|
||||
@ -3126,7 +3124,7 @@ define([
|
||||
|
||||
const state = blocks.block([], 'cp-admin-support-state');
|
||||
const $state = $(state).appendTo($div);
|
||||
const button = blocks.activeButton('primary', '',
|
||||
const button = blocks.activeButton('primary', 'support',
|
||||
Messages.admin_supportInit, done => {
|
||||
generateSupportKey(moderatorsData, supportKey, (err) => {
|
||||
done(!err);
|
||||
@ -3134,7 +3132,7 @@ define([
|
||||
});
|
||||
const $button = $(button).appendTo($div);
|
||||
|
||||
const delButton = blocks.activeButton('danger', '',
|
||||
const delButton = blocks.activeButton('danger', 'restricted',
|
||||
Messages.admin_supportDelete, done => {
|
||||
UI.confirm(Messages.admin_supportConfirm, function (yes) {
|
||||
if (!yes) { return void done(false); }
|
||||
@ -3153,7 +3151,7 @@ define([
|
||||
});
|
||||
const $delButton = $(delButton).hide();
|
||||
|
||||
const openButton = blocks.button('primary', '', Messages.admin_supportOpen);
|
||||
const openButton = blocks.button('primary', 'external-link', Messages.admin_supportOpen);
|
||||
const $openButton = $(openButton).hide();
|
||||
Util.onClickEnter($(openButton), () => {
|
||||
common.openURL('/moderation/');
|
||||
@ -3170,12 +3168,12 @@ define([
|
||||
$delButton.show();
|
||||
$openButton.show();
|
||||
return $state.append([
|
||||
blocks.icon('fa-check'),
|
||||
Icons.get('check'),
|
||||
blocks.inline(Messages.admin_supportEnabled)
|
||||
]);
|
||||
}
|
||||
$state.append([
|
||||
blocks.icon('fa-times'),
|
||||
Icons.get('close'),
|
||||
blocks.inline(Messages.admin_supportDisabled)
|
||||
]);
|
||||
};
|
||||
@ -3227,7 +3225,7 @@ define([
|
||||
const drawModerators = () => {
|
||||
if (!supportKey) {
|
||||
const list = blocks.block([
|
||||
blocks.icon('fa-times'),
|
||||
Icons.get('close'),
|
||||
blocks.inline(Messages.admin_supportDisabled)
|
||||
], 'cp-admin-support-state');
|
||||
$div.append(list);
|
||||
@ -3266,7 +3264,7 @@ define([
|
||||
data: friends
|
||||
}, function () {});
|
||||
|
||||
let addBtn = blocks.button('primary', '', Messages.tag_add);
|
||||
let addBtn = blocks.button('primary', 'add', Messages.tag_add);
|
||||
Util.onClickEnter($(addBtn), () => {
|
||||
var $sel = $(contactsGrid.div).find('.cp-usergrid-user.cp-selected');
|
||||
nThen((waitFor) => {
|
||||
@ -3399,7 +3397,7 @@ define([
|
||||
};
|
||||
// Msg.admin_maintenanceHint, admin_maintenanceTitle
|
||||
sidebar.addItem('maintenance', function(cb){
|
||||
var button = blocks.button('primary', '', Messages.admin_maintenanceButton);
|
||||
var button = blocks.button('primary', 'maintenance', Messages.admin_maintenanceButton);
|
||||
var $button = $(button);
|
||||
var start = blocks.input({
|
||||
type: 'date',
|
||||
@ -3425,7 +3423,7 @@ define([
|
||||
let send = function () {};
|
||||
var refresh = getApi(function (Broadcast) {
|
||||
$active.empty();
|
||||
var removeButton = blocks.button('danger', '', Messages.admin_maintenanceCancel);
|
||||
var removeButton = blocks.button('danger', 'close', Messages.admin_maintenanceCancel);
|
||||
|
||||
if (Broadcast && Broadcast.maintenance) {
|
||||
var m = Broadcast.maintenance;
|
||||
@ -3526,7 +3524,7 @@ define([
|
||||
|
||||
// Msg.admin_surveyHint, admin_surveyTitle
|
||||
sidebar.addItem('survey', function(cb){
|
||||
var button = blocks.button('primary', '', Messages.admin_surveyButton);
|
||||
var button = blocks.button('primary', 'survey', Messages.admin_surveyButton);
|
||||
var $button = $(button);
|
||||
let nav = blocks.nav([button]);
|
||||
let active = blocks.block([], 'cp-sidebar-flex-block');
|
||||
@ -3541,7 +3539,7 @@ define([
|
||||
|
||||
let send = function () {};
|
||||
var refresh = getApi(function (Broadcast) {
|
||||
var removeButton = blocks.button('danger', '', Messages.admin_surveyCancel);
|
||||
var removeButton = blocks.button('danger', 'restricted', Messages.admin_surveyCancel);
|
||||
UI.confirmButton(removeButton, {
|
||||
classes: 'btn-danger',
|
||||
}, function () {
|
||||
@ -3610,9 +3608,9 @@ define([
|
||||
var form = blocks.block([], 'cp-admin-broadcast-form');
|
||||
var $form = $(form);
|
||||
var refresh = getApi(function(Broadcast) {
|
||||
var button = blocks.button('primary', '', Messages.admin_broadcastButton);
|
||||
var button = blocks.button('primary', 'send', Messages.admin_broadcastButton);
|
||||
var $button = $(button);
|
||||
var removeButton = blocks.button('danger', '', Messages.admin_broadcastCancel);
|
||||
var removeButton = blocks.button('danger', 'close', Messages.admin_broadcastCancel);
|
||||
var activeContent = Messages.admin_broadcastActive;
|
||||
var active = blocks.block(blocks.inline(activeContent), 'cp-broadcast-active');
|
||||
var $active = $(active);
|
||||
@ -3712,7 +3710,7 @@ define([
|
||||
// Add a textarea
|
||||
var addLang = function (l) {
|
||||
if ($container.find('.cp-broadcast-lang[data-lang="'+l+'"]').length) { return; }
|
||||
var preview = blocks.button('secondary', '', Messages.broadcast_preview);
|
||||
var preview = blocks.button('secondary', 'broadcast', Messages.broadcast_preview);
|
||||
$(preview).click(function () {
|
||||
onPreview(l);
|
||||
});
|
||||
@ -3838,7 +3836,7 @@ define([
|
||||
var onRefreshPerformance = Util.mkEvent();
|
||||
|
||||
sidebar.addItem('refresh-performance', function(cb){
|
||||
var btn = blocks.button('primary', '', Messages.oo_refresh);
|
||||
var btn = blocks.button('primary', 'refresh', Messages.oo_refresh);
|
||||
Util.onClickEnter($(btn), function () {
|
||||
onRefreshPerformance.fire();
|
||||
});
|
||||
@ -3932,7 +3930,7 @@ define([
|
||||
min: 0,
|
||||
value: duration
|
||||
});
|
||||
var set = blocks.button('primary', '', Messages.admin_setDuration);
|
||||
var set = blocks.button('primary', 'duration', Messages.admin_setDuration);
|
||||
var label = blocks.labelledInput( Messages.ui_ms, newDuration);
|
||||
var nav = blocks.nav([set]);
|
||||
var form = blocks.form([
|
||||
@ -3978,7 +3976,7 @@ define([
|
||||
if (typeof(APP.instanceStatus.updateAvailable) === 'string') {
|
||||
updateURL = APP.instanceStatus.updateAvailable;
|
||||
}
|
||||
var button = blocks.button('primary', '', Messages.admin_updateAvailableButton);
|
||||
var button = blocks.button('primary', 'release-notes', Messages.admin_updateAvailableButton);
|
||||
Util.onClickEnter($(button), function () {
|
||||
common.openURL(updateURL);
|
||||
});
|
||||
@ -3988,7 +3986,7 @@ define([
|
||||
|
||||
// Messages.admin_checkupButton.admin_checkupHint.admin_checkupTitle
|
||||
sidebar.addItem('checkup', function(cb){
|
||||
var button = blocks.button('primary', '', Messages.admin_checkupButton);
|
||||
var button = blocks.button('primary', 'checkup', Messages.admin_checkupButton);
|
||||
Util.onClickEnter($(button), function () {
|
||||
common.openURL('/checkup/');
|
||||
});
|
||||
|
||||
@ -38,12 +38,6 @@
|
||||
|
||||
|
||||
.tui-full-calendar-confirm {
|
||||
span, i {
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
span {
|
||||
padding-left: 0;
|
||||
}
|
||||
width: unset;
|
||||
}
|
||||
|
||||
@ -67,6 +61,10 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tui-full-calendar-schedule-title {
|
||||
font-size: @colortheme_app-font-size;
|
||||
}
|
||||
.tui-full-calendar-weekday-filled {
|
||||
background-color: @cp_dropdown-bg-hover !important;
|
||||
}
|
||||
@ -171,16 +169,20 @@
|
||||
color: @cryptpad_text_col;
|
||||
border-radius: @variables_radius_L;
|
||||
font-weight: normal;
|
||||
.tui-full-calendar-icon:not(.tui-full-calendar-calendar-dot):not(.tui-full-calendar-dropdown-arrow):not(.tui-full-calendar-ic-checkbox):not(.fa-map-marker):not(.fa-align-left) {
|
||||
.tui-full-calendar-icon:not(.tui-full-calendar-calendar-dot):not(.tui-full-calendar-dropdown-arrow):not(.tui-full-calendar-ic-checkbox):not(.tui-full-calendar-dropdown-arrow-custom):not(svg) {
|
||||
display: none;
|
||||
}
|
||||
.tui-full-calendar-icon {
|
||||
text-align:center;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.tui-full-calendar-calendar-dot {
|
||||
margin-right: 10px;
|
||||
top: 0;
|
||||
.tui-full-calendar-dropdown-arrow-custom {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
svg {
|
||||
font-size: @variables_button-font-size;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
.tui-full-calendar-popup-detail-item {
|
||||
display: flex;
|
||||
@ -190,13 +192,11 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.fa-align-left {
|
||||
margin-top: 4px;
|
||||
}
|
||||
&.tui-full-calendar-popup-detail-item-separate {
|
||||
&>span {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
align-items: center;
|
||||
}
|
||||
.event-description {
|
||||
display: block;
|
||||
@ -227,7 +227,8 @@
|
||||
.tui-full-calendar-section-button-save {
|
||||
height: 40px;
|
||||
.btn-primary { // Update button
|
||||
margin-right: 0px;
|
||||
margin-right: 0;
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
@ -241,9 +242,10 @@
|
||||
margin: 0;
|
||||
&:not(li):not(button) {
|
||||
padding: 0;
|
||||
margin-top: 5px;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
#tui-full-calendar-schedule-calendar {
|
||||
font-size: @variables_button-font-size;
|
||||
width: 179px;
|
||||
top: 0;
|
||||
}
|
||||
@ -259,6 +261,7 @@
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
font: @colortheme_app-font;
|
||||
font-size: @colortheme_app-font-size;
|
||||
padding: 0 10px;
|
||||
&:focus{
|
||||
outline: @cryptpad_color_brand solid 2px;
|
||||
@ -278,6 +281,15 @@
|
||||
width: 221px; // same as button
|
||||
background-color: @cp_dropdown-bg;
|
||||
color: @cp_dropdown-fg;
|
||||
border-radius: 0 0 @variables_radius @variables_radius;
|
||||
li:focus-visible {
|
||||
outline: @cryptpad_color_brand solid 2px;
|
||||
}
|
||||
}
|
||||
button.tui-full-calendar-popup-section-item.btn.btn-secondary {
|
||||
&[aria-expanded="true"] {
|
||||
border-radius: @variables_radius @variables_radius 0 0;
|
||||
}
|
||||
}
|
||||
.tui-full-calendar-section-state, #tui-full-calendar-schedule-private {
|
||||
display: none !important;
|
||||
@ -291,6 +303,7 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
min-height: 0; // override default tui 40px
|
||||
.tui-full-calendar-section-start-date, .tui-full-calendar-section-end-date {
|
||||
flex: 1;
|
||||
}
|
||||
@ -302,12 +315,12 @@
|
||||
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAABbmlDQ1BpY2MAACiRdZHNK0RRGMZ/Zoh8NIqFNItZDFmMEiVLxsJmkgZlsLn3zpe6c93uvZNkq2wspizExtfCf8BW2VJKkZKs/AG+Npqu97hqJM7t3PfXc87zds5zIJQyjZJbPwAly3PSE8nYXGY+1vhEMy20EyaqGa49NjWV4t/xfkOdqtf9qtf/+/4cLdmca0Bdk/CwYTue8KhwasWzFW8KdxpFLSu8L5xw5IDCF0rXA35UXAj4VbEzkx6HkOoZK/xg/QcbRack3CccL5ll4/s86iatOWt2Wmq3zCguaSZIEkOnzBImHv1SLcnsb9/Al2+SZfEY8rdZxRFHgaJ4E6KWpWtOal70nHwmqyr333m6+aHBoHtrEhoefP+lBxq3oFrx/Y8D368eQvgezqyaf1lyGnkTvVLT4nsQWYeT85qmb8PpBnTd2ZqjfUlhmaF8Hp6PoS0DHVfQvBBk9b3O0S3MrMkTXcLOLvTK/sjiJ6CLZ94KREMsAAAACXBIWXMAAAsSAAALEgHS3X78AAABHUlEQVQoFWNkaP//n4EMwESGHrAW6mtkZvz3G2g03BsBagz/nRUQ7sNp49//TJ+Byv6BlMbrMjCsC2Jg3BbKwOAgB9GMolGAg4GBESIOIrmA+A9I03xvFHGwCrhGkDOe5TAw9LvAFbEn6jEwwTT9BtodvJ7h/4FHYH0MLBCKgaHTgYGBE8jLN2FgYAJae+4FA8NcLwZWkAtAmoLWMTBsuYNwECMsHrVEGBj2RzEwiIEciATANgE1bb6DJAgMNLhTr71hYHBcxsDw+htCAQ5NIAU/4RpBPKjmf2++MfwHaQpZD7cJyEMB3+BORRL+rybE8FOEk4Hj2FO4KMgdrFAMitun2DTCVSMxYAkBFFYg9j94qCIpwsZEil5wyDIDAAXIUsnSKmq7AAAAAElFTkSuQmCC);
|
||||
}
|
||||
.tui-full-calendar-ic-checkbox {
|
||||
margin-left: 5px;
|
||||
margin-left: 1px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
}
|
||||
.CodeMirror {
|
||||
margin-top: 5px;
|
||||
margin-top: 0.5rem;
|
||||
background: @cp_forms-bg !important;
|
||||
color: @cryptpad_text_col;
|
||||
border: 1px solid @cp_forms-border;
|
||||
@ -315,7 +328,6 @@
|
||||
width: 100%;
|
||||
height: 80px;
|
||||
font: @colortheme_app-font;
|
||||
font-size: 16px;
|
||||
line-height: initial;
|
||||
padding-left: 0.3rem;
|
||||
pre {
|
||||
@ -341,7 +353,7 @@
|
||||
padding-bottom: 17px;
|
||||
}
|
||||
.tui-full-calendar-popup-detail-date {
|
||||
font-size: 14px;
|
||||
font-size: @variables_button-font-size;
|
||||
}
|
||||
.tui-full-calendar-section-button {
|
||||
margin-top: 10px;
|
||||
@ -351,6 +363,8 @@
|
||||
button {
|
||||
flex: 1;
|
||||
margin: 0;
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
.tui-full-calendar-popup-top-line {
|
||||
@ -365,48 +379,51 @@
|
||||
|
||||
.cp-recurrence-label, .cp-notif-label {
|
||||
color: @cryptpad_text_col;
|
||||
margin-right: 1rem;
|
||||
i {
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.cp-calendar-recurrence-container {
|
||||
margin-top: 1rem;
|
||||
margin-top: 0.5rem;
|
||||
display: inline-flex;
|
||||
gap: 0.5rem;
|
||||
.cp-calendar-rec-translated-str {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.cp-dropdown-container button {
|
||||
font-size: @variables_button-font-size;
|
||||
}
|
||||
|
||||
.cp-calendar-add-notif {
|
||||
flex-flow: column;
|
||||
align-items: baseline !important;
|
||||
margin: 1rem 0;
|
||||
* {
|
||||
font-size: @colortheme_app-font-size;
|
||||
font-weight: normal;
|
||||
}
|
||||
margin: 0.5rem 0;
|
||||
font-size: @colortheme_app-font-size;
|
||||
& > div {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.cp-calendar-notif-list-container {
|
||||
width: 100%;
|
||||
margin-bottom: 10px;
|
||||
.cp-notif-label {
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.cp-calendar-notif-list {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
flex: 1;
|
||||
min-width: 150px;
|
||||
gap: 2px;
|
||||
&:empty {
|
||||
display: none;
|
||||
}
|
||||
.cp-notif-entry {
|
||||
display: flex;
|
||||
margin-bottom: 2px;
|
||||
margin-bottom: 0;
|
||||
border-radius: @variables_radius;
|
||||
background-color: fade(@cryptpad_text_col, 10%);
|
||||
padding: 0.25rem;
|
||||
@ -429,8 +446,8 @@
|
||||
margin-left: 0.3rem;
|
||||
}
|
||||
.btn-danger-outline {
|
||||
display: block;
|
||||
margin-right: 0px !important;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
background-color: transparent;
|
||||
color: @cryptpad_text_col;
|
||||
border-color: @cryptpad_text_col;
|
||||
@ -439,6 +456,9 @@
|
||||
background-color: @cp_buttons-red;
|
||||
border-color: @cp_buttons-red;
|
||||
}
|
||||
svg {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -458,6 +478,8 @@
|
||||
.cp-calendar-notif-form-buttons {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
font-size: @variables_button-font-size;
|
||||
& > input {
|
||||
height: 40px;
|
||||
}
|
||||
@ -466,11 +488,15 @@
|
||||
outline: @cryptpad_color_brand solid 2px;
|
||||
}
|
||||
}
|
||||
.btn-primary-outline {
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
// margin-bottom: 20px;
|
||||
input {
|
||||
width: 80px;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -485,110 +511,113 @@
|
||||
&:not(:hover) {
|
||||
background: transparent;
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.cp-calendar-rec-inline, .cp-calendar-rec-block {
|
||||
&:not(:last-child) {
|
||||
margin-bottom: 10px;
|
||||
.cp-calendar-rec-inline, .cp-calendar-rec-block {
|
||||
&:not(:last-child) {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
.cp-calendar-rec-inline {
|
||||
display: flex;
|
||||
flex-flow: row;
|
||||
align-items: center;
|
||||
& > *:not(:first-child) { margin-left: 5px; }
|
||||
.cp-dropdown-container {
|
||||
position: unset;
|
||||
}
|
||||
input[type="number"] {
|
||||
width: 80px !important;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
.cp-checkmark {
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
}
|
||||
.cp-calendar-rec-block {
|
||||
.cp-calendar-rec-block-title {
|
||||
margin-bottom: 0.5rem !important;
|
||||
}
|
||||
.cp-radio {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
input[type="radio"]:not(:checked) ~ .cp-checkmark-label {
|
||||
input {
|
||||
filter: grayscale(1);
|
||||
}
|
||||
}
|
||||
.cp-calendar-rec-inline {
|
||||
display: flex;
|
||||
flex-flow: row;
|
||||
align-items: center;
|
||||
.cp-checkmark-label {
|
||||
& > *:not(:first-child) { margin-left: 5px; }
|
||||
.cp-dropdown-container {
|
||||
position: unset;
|
||||
width: 100%;
|
||||
//height: 26px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
& > input {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
input {
|
||||
display: inline;
|
||||
height: 24px !important;
|
||||
padding: 0 5px !important;
|
||||
}
|
||||
input[type="text"] {
|
||||
width: 200px !important;
|
||||
}
|
||||
input[type="number"] {
|
||||
width: 80px !important;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
.cp-checkmark {
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
}
|
||||
.cp-calendar-rec-block {
|
||||
.cp-calendar-rec-block-title {
|
||||
margin-bottom: 0.5rem !important;
|
||||
}
|
||||
.cp-radio {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
input[type="radio"]:not(:checked) ~ .cp-checkmark-label {
|
||||
input {
|
||||
filter: grayscale(1);
|
||||
}
|
||||
}
|
||||
.cp-checkmark-label {
|
||||
& > *:not(:first-child) { margin-left: 5px; }
|
||||
width: 100%;
|
||||
//height: 26px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
& > input {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
input {
|
||||
display: inline;
|
||||
height: 24px !important;
|
||||
padding: 0 5px !important;
|
||||
}
|
||||
input[type="text"] {
|
||||
width: 200px !important;
|
||||
}
|
||||
input[type="number"] {
|
||||
width: 80px !important;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
#cp-calendar-rec-monthly-pick ~ .cp-checkmark-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
& > span {
|
||||
margin-right: 20px;
|
||||
}
|
||||
#cp-calendar-rec-monthly-pick ~ .cp-checkmark-label {
|
||||
}
|
||||
button.cp-calendar-pick-el {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
&:not(:last-child) {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
div.cp-calendar-weekly-pick {
|
||||
button {
|
||||
width: 50px;
|
||||
}
|
||||
}
|
||||
div.cp-calendar-monthly-pick {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
& > div {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
& > span {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
button.cp-calendar-pick-el {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
&:not(:last-child) {
|
||||
margin-right: 5px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
||||
div.cp-calendar-weekly-pick {
|
||||
button {
|
||||
width: 50px;
|
||||
}
|
||||
}
|
||||
div.cp-calendar-monthly-pick {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
& > div {
|
||||
display: flex;
|
||||
&:not(:last-child) {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
button {
|
||||
height: 25px;
|
||||
width: 25px;
|
||||
&.lastday {
|
||||
width: 115px;
|
||||
}
|
||||
height: 25px;
|
||||
width: 25px;
|
||||
&.lastday {
|
||||
width: 115px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tui-full-calendar-ic-repeat-b {
|
||||
.tui-full-calendar-ic-repeat-b {
|
||||
display: none;
|
||||
& ~ * {
|
||||
display: none;
|
||||
& ~ * {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#cp-toolbar .cp-calendar-browse {
|
||||
display: flex;
|
||||
@ -600,6 +629,9 @@
|
||||
background-color: fade(@cp_toolbar-fg, 50%);
|
||||
cursor: pointer;
|
||||
}
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -664,13 +696,24 @@
|
||||
padding: 5px;
|
||||
border-radius: @variables_radius;
|
||||
background-color: @cp_sidebar-left-bg;
|
||||
svg {
|
||||
margin-right: 0.25rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.cp-calendar-icon, .cp-calendar-actions {
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
&:not(.cp-unclickable) {
|
||||
cursor: pointer;
|
||||
}
|
||||
.cp-dropdown-container {
|
||||
position: initial;
|
||||
|
||||
.cp-dropdown-content{
|
||||
svg {
|
||||
margin-right: @variables_icon_margin;
|
||||
}
|
||||
@media screen and (max-width: 600px)
|
||||
{
|
||||
left: 50%;
|
||||
@ -686,7 +729,7 @@
|
||||
}
|
||||
&.cp-ghost {
|
||||
padding: 0;
|
||||
margin-top: 1rem;
|
||||
margin-top: 0.5rem;
|
||||
button {
|
||||
.tools_unselectable();
|
||||
cursor: pointer;
|
||||
@ -709,9 +752,6 @@
|
||||
&:focus-visible {
|
||||
outline: @variables_focus_style;
|
||||
}
|
||||
i {
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
&:not(:last-child) {
|
||||
@ -759,6 +799,8 @@
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
padding: 0 5px;
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -774,10 +816,11 @@
|
||||
.cp-calendar-notif-list-container, .cp-calendar-notif-form {
|
||||
flex-direction: column;
|
||||
align-items: unset !important;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.cp-calendar-newevent {
|
||||
i {
|
||||
margin: 0 !important;
|
||||
svg {
|
||||
margin: 0;
|
||||
}
|
||||
span {
|
||||
display: none;
|
||||
|
||||
@ -33,6 +33,8 @@ define([
|
||||
'/common/sframe-common-codemirror.js',
|
||||
'cm/lib/codemirror',
|
||||
|
||||
'/common/common-icons.js',
|
||||
|
||||
'cm/addon/display/autorefresh',
|
||||
'cm/addon/display/placeholder',
|
||||
'cm/mode/gfm/gfm',
|
||||
@ -41,7 +43,6 @@ define([
|
||||
'css!/lib/calendar/tui-calendar.min.css',
|
||||
'css!/components/codemirror/lib/codemirror.css',
|
||||
'css!/components/codemirror/addon/dialog/dialog.css',
|
||||
'css!/components/components-font-awesome/css/font-awesome.min.css',
|
||||
'css!/components/bootstrap/dist/css/bootstrap.min.css',
|
||||
'less!/calendar/app-calendar.less',
|
||||
], function (
|
||||
@ -69,7 +70,8 @@ define([
|
||||
Share, Access, Properties,
|
||||
diffMk,
|
||||
SFCodeMirror,
|
||||
CodeMirror
|
||||
CodeMirror,
|
||||
Icons
|
||||
)
|
||||
{
|
||||
|
||||
@ -408,14 +410,14 @@ define([
|
||||
str = `<a href="${l}" id="${uid}">${str}</a>`;
|
||||
APP.nextLocationUid = uid;
|
||||
}
|
||||
let location_icon = h('i.fa.fa-map-marker.tui-full-calendar-icon', { 'aria-hidden': true }, []);
|
||||
let location_icon = Icons.get('calendar-location', { class: 'tui-full-calendar-icon'});
|
||||
return `<div class="event-location"> ${location_icon.outerHTML} ${str} </div>`;
|
||||
},
|
||||
popupDetailBody: function(schedule) {
|
||||
var str = schedule.body;
|
||||
var str = schedule.body ? schedule.body.trim() : ""; //check also whitespace
|
||||
delete APP.eventBody;
|
||||
|
||||
let description_icon = h('i.fa.fa-align-left.tui-full-calendar-icon', { 'aria-hidden': true }, []);
|
||||
if (!str) { return "";}
|
||||
let description_icon = Icons.get('calendar-description', { class: 'tui-full-calendar-icon'});
|
||||
let description = diffMk.render(str, true);
|
||||
return `${description_icon.outerHTML}<div class="event-description">${description}</div>`;
|
||||
},
|
||||
@ -536,10 +538,7 @@ define([
|
||||
if (!data.readOnly) {
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {
|
||||
'class': 'fa fa-pencil',
|
||||
},
|
||||
content: h('span', Messages.tag_edit),
|
||||
content: h('span',[Icons.get('rename'), Messages.tag_edit]),
|
||||
action: function (e) {
|
||||
e.stopPropagation();
|
||||
editCalendar(id);
|
||||
@ -550,10 +549,7 @@ define([
|
||||
if (APP.loggedIn && (data.teams.indexOf(1) === -1 || teamId === 0)) {
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {
|
||||
'class': 'fa fa-clone',
|
||||
},
|
||||
content: h('span', Messages.calendar_import),
|
||||
content: h('span', [ Icons.get('copy'), Messages.calendar_import]),
|
||||
action: function (e) {
|
||||
e.stopPropagation();
|
||||
importCalendar({
|
||||
@ -572,10 +568,7 @@ define([
|
||||
if (!data.restricted) {
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {
|
||||
'class': 'fa fa-shhare-alt',
|
||||
},
|
||||
content: h('span', Messages.shareButton),
|
||||
content: h('span', [ Icons.get('share'), Messages.shareButton]),
|
||||
action: function (e) {
|
||||
e.stopPropagation();
|
||||
var friends = common.getFriends();
|
||||
@ -602,10 +595,7 @@ define([
|
||||
});
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {
|
||||
'class': 'fa fa-lock',
|
||||
},
|
||||
content: h('span', Messages.accessButton),
|
||||
content: h('span',[ Icons.get('lock'), Messages.accessButton]),
|
||||
action: function (e) {
|
||||
e.stopPropagation();
|
||||
var cal = APP.calendars[id];
|
||||
@ -634,10 +624,7 @@ define([
|
||||
if (!data.readOnly) {
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {
|
||||
'class': 'fa fa-upload',
|
||||
},
|
||||
content: h('span', Messages.importButton),
|
||||
content: h('span', Icons.get('upload'), Messages.importButton),
|
||||
action: function () {
|
||||
UIElements.importContent('text/calendar', function (res) {
|
||||
Export.import(res, id, function (err, json) {
|
||||
@ -660,10 +647,7 @@ define([
|
||||
}
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {
|
||||
'class': 'fa fa-download',
|
||||
},
|
||||
content: h('span', Messages.exportButton),
|
||||
content: h('span', Icons.get('download'), Messages.exportButton),
|
||||
action: function (e) {
|
||||
e.stopPropagation();
|
||||
var cal = APP.calendars[id];
|
||||
@ -705,10 +689,7 @@ define([
|
||||
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {
|
||||
'class': 'fa fa-info-circle',
|
||||
},
|
||||
content: h('span', Messages.propertiesButton),
|
||||
content: h('span', Icons.get('properties'), Messages.propertiesButton),
|
||||
action: function (e) {
|
||||
e.stopPropagation();
|
||||
var cal = APP.calendars[id];
|
||||
@ -733,10 +714,7 @@ define([
|
||||
if (!cantRemove) {
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {
|
||||
'class': 'fa fa-trash-o',
|
||||
},
|
||||
content: h('span', Messages.poll_remove),
|
||||
content: h('span', Icons.get('trash-full'), Messages.poll_remove),
|
||||
action: function (e) {
|
||||
e.stopPropagation();
|
||||
var cal = APP.calendars[id];
|
||||
@ -768,7 +746,8 @@ define([
|
||||
text: '',
|
||||
options: options, // Entries displayed in the menu
|
||||
common: common,
|
||||
buttonCls: 'btn btn-default fa fa-gear small cp-calendar-actions',
|
||||
buttonCls: 'btn btn-default small cp-calendar-actions',
|
||||
iconCls: 'settings',
|
||||
buttonTitle: Messages.calendar_settings,
|
||||
};
|
||||
return UIElements.createDropdown(dropdownConfig)[0];
|
||||
@ -777,7 +756,7 @@ define([
|
||||
var data = APP.calendars[id];
|
||||
var edit;
|
||||
if (data.loading) {
|
||||
edit = h('i.fa.fa-spinner.fa-spin', {'aria-hidden': 'true'});
|
||||
edit = Icons.get('loading');
|
||||
} else {
|
||||
edit = makeEditDropdown(id, teamId);
|
||||
}
|
||||
@ -792,14 +771,17 @@ define([
|
||||
h('span.cp-calendar-icon', {
|
||||
style: 'background-color: '+md.color+';'
|
||||
}, [
|
||||
h('i.cp-calendar-active.fa.fa-calendar', {
|
||||
Icons.get('calendar', {
|
||||
class: 'cp-calendar-active',
|
||||
style: 'color: '+getContrast(md.color)+';'
|
||||
}),
|
||||
h('i.cp-calendar-inactive.fa.fa-calendar-o')
|
||||
Icons.get('calendar-inactive',{
|
||||
class: 'cp-calendar-inactive'
|
||||
})
|
||||
]),
|
||||
h('span.cp-calendar-title', md.title),
|
||||
data.restricted ? h('i.fa.fa-ban', {title: Messages.fm_restricted, 'aria-hidden': 'true'}) :
|
||||
(isReadOnly(id, teamId) ? h('i.fa.fa-eye', {title: Messages.readonly, 'aria-hidden': 'true'}) : undefined),
|
||||
data.restricted ? Icons.get('restricted', {title: Messages.fm_restricte}) :
|
||||
(isReadOnly(id, teamId) ? Icons.get('read-only', {title: Messages.readonly}) : undefined),
|
||||
edit
|
||||
]);
|
||||
var $calendar = $(calendar).click(function () {
|
||||
@ -858,7 +840,7 @@ define([
|
||||
]));
|
||||
makeCalendarEntry(tempCalendars[0], 0);
|
||||
var importTemp = h('button', [
|
||||
h('i.fa.fa-calendar-plus-o'),
|
||||
Icons.get('calendar-add'),
|
||||
h('span', Messages.calendar_import_temp),
|
||||
h('span')
|
||||
]);
|
||||
@ -904,7 +886,7 @@ define([
|
||||
// Add the new calendar button
|
||||
var $newContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($contentContainer);
|
||||
var newButton = h('button', [
|
||||
h('i.fa.fa-calendar-plus-o', {'aria-hidden': 'true'}),
|
||||
Icons.get('calendar-add'),
|
||||
h('span', Messages.calendar_new),
|
||||
h('span')
|
||||
]);
|
||||
@ -934,10 +916,10 @@ define([
|
||||
// hide the calendars list and display a "show" button
|
||||
if (APP.numberCalendars > 2 || totalCalendars > 2) {
|
||||
var $showContainer = $(h('div.cp-calendar-entry.cp-ghost')).appendTo($calendars);
|
||||
var iconClass = visible ? 'fa-eye-slash' : 'fa-eye';
|
||||
var iconClass = visible ? 'password-hide' : 'password-reveal';
|
||||
var buttonText = visible ? Messages.calendar_hide : Messages.calendar_show;
|
||||
var showCalendarsBtn = h('button', [
|
||||
h('i.fa.' + iconClass, {'aria-hidden': "true"}),
|
||||
Icons.get(iconClass),
|
||||
h('span.cp-calendar-title', buttonText),
|
||||
h('span')
|
||||
]);
|
||||
@ -945,10 +927,12 @@ define([
|
||||
$(showCalendarsBtn).click(() => {
|
||||
visible = !visible;
|
||||
$contentContainer.toggle(visible);
|
||||
iconClass = visible ? 'fa-eye-slash' : 'fa-eye';
|
||||
iconClass = visible ? 'password-hide' : 'password-reveal';
|
||||
buttonText = visible ? Messages.calendar_hide : Messages.calendar_show;
|
||||
$(showCalendarsBtn).find('i').attr('class', 'fa ' + iconClass).attr('aria-hidden', "true");
|
||||
$(showCalendarsBtn).find('span').first().text(visible ? Messages.calendar_hide : Messages.calendar_show);
|
||||
$(showCalendarsBtn).empty();
|
||||
$(showCalendarsBtn).append(Icons.get(iconClass));
|
||||
$(showCalendarsBtn).append(h('span.cp-calendar-title', visible ? Messages.calendar_hide : Messages.calendar_show));
|
||||
$(showCalendarsBtn).append(h('span'));
|
||||
}).appendTo($showContainer);
|
||||
}
|
||||
else {visible = true;}
|
||||
@ -1332,7 +1316,7 @@ ICS ==> create a new event with the same UID and a RECURRENCE-ID field (with a v
|
||||
APP.toolbar.$bottomR.append($block);
|
||||
// New event button
|
||||
var newEventBtn = h('button.cp-calendar-newevent', [
|
||||
h('i.fa.fa-plus', {'aria-hidden': 'true'}),
|
||||
Icons.get('add'),
|
||||
h('span', Messages.calendar_newEvent)
|
||||
]);
|
||||
$(newEventBtn).click(function (e) {
|
||||
@ -1340,10 +1324,10 @@ ICS ==> create a new event with the same UID and a RECURRENCE-ID field (with a v
|
||||
cal.openCreationPopup({isAllDay:false});
|
||||
}).appendTo(APP.toolbar.$bottomL);
|
||||
// Change page
|
||||
var goLeft = h('button.fa.fa-chevron-left',{'aria-label': Messages.goLeft});
|
||||
var goRight = h('button.fa.fa-chevron-right', {'aria-label': Messages.goRight});
|
||||
var goLeft = h('button',{'aria-label': Messages.goLeft}, [Icons.get('chevron-left')]);
|
||||
var goRight = h('button', {'aria-label': Messages.goRight}, [Icons.get('chevron-right')]);
|
||||
var goToday = h('button', Messages.calendar_today);
|
||||
var goDate = h('button.fa.fa-calendar',{'aria-label': Messages.date});
|
||||
var goDate = h('button',{'aria-label': Messages.date}, Icons.get('calendar'));
|
||||
$(goLeft).click(function () {
|
||||
cal.prev();
|
||||
updateDateRange();
|
||||
@ -1378,7 +1362,6 @@ ICS ==> create a new event with the same UID and a RECURRENCE-ID field (with a v
|
||||
APP.toolbar.$bottomL.append(h('div.cp-calendar-browse', [
|
||||
goLeft, goToday, goRight, goDate
|
||||
]));
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -1951,7 +1934,7 @@ APP.recurrenceRule = {
|
||||
|
||||
return h('div.cp-calendar-recurrence-container', [
|
||||
h('span.cp-recurrence-label', [
|
||||
h('i.fa.fa-repeat', {'aria-hidden':'true'}),
|
||||
Icons.get('calendar-repeat'),
|
||||
Messages.calendar_rec]),
|
||||
$block[0],
|
||||
translated
|
||||
@ -2020,11 +2003,11 @@ APP.recurrenceRule = {
|
||||
$number.attr('max', max);
|
||||
if ($number.val() > max) { $number.val(max); }
|
||||
});
|
||||
var addNotif = h('button.btn.btn-primary-outline.fa.fa-plus');
|
||||
var addNotif = h('button.btn.btn-primary-outline', Icons.get('add'));
|
||||
var $list = $(h('div.cp-calendar-notif-list'));
|
||||
var listContainer = h('div.cp-calendar-notif-list-container', [
|
||||
h('span.cp-notif-label', [
|
||||
h('i.fa.fa-bell', {'aria-hidden':'true'}),
|
||||
Icons.get('calendar-reminder'),
|
||||
Messages.calendar_notifications
|
||||
]),
|
||||
$list[0],
|
||||
@ -2033,8 +2016,9 @@ APP.recurrenceRule = {
|
||||
|
||||
var addNotification = function (unit, value) {
|
||||
var unitValue = (unit === "minutes") ? 1 : (unit === "hours" ? 60 : (60*24));
|
||||
var del = h('button.btn.btn-danger-outline.small.fa.fa-times',
|
||||
{'title': Messages.calendar_removeNotification}
|
||||
var del = h('button.btn.btn-danger-outline.small',
|
||||
{'title': Messages.calendar_removeNotification},
|
||||
Icons.get('close')
|
||||
);
|
||||
var minutes = value * unitValue;
|
||||
if ($list.find('[data-minutes="'+minutes+'"]').length) { return; }
|
||||
@ -2070,7 +2054,7 @@ APP.recurrenceRule = {
|
||||
return h('div.tui-full-calendar-popup-section.cp-calendar-add-notif', [
|
||||
listContainer,
|
||||
h('div.cp-calendar-notif-form', [
|
||||
h('span.cp-notif-label', Messages.calendar_addNotification),
|
||||
h('span.cp-notif-label', [ Icons.get('calendar-add-reminder'), Messages.calendar_addNotification]),
|
||||
h('span.cp-calendar-notif-form-buttons', [
|
||||
number,
|
||||
$block[0],
|
||||
@ -2200,10 +2184,13 @@ APP.recurrenceRule = {
|
||||
// Customize creation/update popup
|
||||
var onCalendarPopup = function (el) {
|
||||
var $el = $(el);
|
||||
$el.find('.tui-full-calendar-confirm').addClass('btn btn-primary').prepend(h('i.fa.fa-floppy-o', {'aria-hidden': 'true'}));
|
||||
$el.find('.tui-full-calendar-confirm').addClass('btn btn-primary').prepend(Icons.get('save'));
|
||||
$el.find('input').attr('autocomplete', 'off');
|
||||
$el.find('.tui-full-calendar-dropdown-button').addClass('btn btn-secondary');
|
||||
$el.find('.tui-full-calendar-popup-close').addClass('btn btn-cancel fa fa-times cp-calendar-close').empty();
|
||||
$el.find('.tui-full-calendar-dropdown-arrow').append(Icons.get('chevron-down')).removeClass('tui-full-calendar-dropdown-arrow').addClass('tui-full-calendar-dropdown-arrow-custom');
|
||||
$el.find('.tui-full-calendar-popup-close').addClass('btn btn-cancel cp-calendar-close').empty();
|
||||
$el.find('.tui-full-calendar-dropdown-arrow').append(Icons.get('chevron-down')).removeClass('tui-full-calendar-dropdown-arrow').removeClass('tui-full-calendar-icon').addClass('tui-full-calendar-dropdown-arrow-custom');
|
||||
$el.find('.tui-full-calendar-popup-close').append(Icons.get('close'));
|
||||
$el.find('.tui-full-calendar-section-allday').attr('tabindex', 0);
|
||||
$el.find('.cp-calendar-close').attr('tabindex',-1);
|
||||
$el.find('.tui-full-calendar-section-allday').keydown(function (e) {
|
||||
@ -2237,9 +2224,19 @@ APP.recurrenceRule = {
|
||||
let $dropdownButton = $el.find('.tui-full-calendar-dropdown-button');
|
||||
let $dropdownMenu = $el.find('.tui-full-calendar-dropdown-menu');
|
||||
|
||||
let updateDropdownArrow = function(isOpen) {
|
||||
const $icon = $dropdownButton.find('.tui-full-calendar-dropdown-arrow-custom');
|
||||
if (isOpen) {
|
||||
$icon.empty().append(Icons.get('chevron-up'));
|
||||
} else {
|
||||
$icon.empty().append(Icons.get('chevron-down'));
|
||||
}
|
||||
};
|
||||
|
||||
let toggleAriaExpanded = function (isOpen) {
|
||||
$dropdownButton.attr('aria-expanded', isOpen ? 'true' : 'false');
|
||||
isOpen ? $dropdownMenu.show() : $dropdownMenu.hide();
|
||||
updateDropdownArrow(isOpen);
|
||||
};
|
||||
|
||||
let calendarDropdownNavigation = function (event) {
|
||||
@ -2288,12 +2285,11 @@ APP.recurrenceRule = {
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
$dropdownButton.on('click keydown', function (event) {
|
||||
if (event.type !== 'click' && event.key !== 'Enter' && event.key !== ' ' && event.key !== 'ArrowDown' && event.key !== 'ArrowUp') {
|
||||
return;
|
||||
}
|
||||
let isOpen = $el.find('.tui-full-calendar-open').length > 0;
|
||||
let isOpen = $el.find('.tui-full-calendar-dropdown-menu:visible').length > 0;
|
||||
toggleAriaExpanded(!isOpen);
|
||||
if (!isOpen && event.key !== 'ArrowUp') {
|
||||
$dropdownMenu.find('li').first().focus();
|
||||
@ -2301,6 +2297,10 @@ APP.recurrenceRule = {
|
||||
else if(!isOpen){
|
||||
$dropdownMenu.find('li').last().focus();
|
||||
}
|
||||
// If the menu is close, don't propagate the event
|
||||
// to make sure the "document" won't catch the click
|
||||
// and close the menu (we want to open it)
|
||||
if (!isOpen) { event.stopPropagation(); }
|
||||
});
|
||||
// click outside the dropdown button => closes the dropdown => aria-expanded is false
|
||||
$(document).on('click', function (event) {
|
||||
@ -2367,11 +2367,12 @@ APP.recurrenceRule = {
|
||||
$el.attr('aria-describedby', 'tui-full-calendar-section-detail');
|
||||
|
||||
$el.find('.tui-full-calendar-popup-edit').addClass('btn btn-primary');
|
||||
$el.find('.tui-full-calendar-popup-edit .tui-full-calendar-icon').addClass('fa fa-pencil').removeClass('tui-full-calendar-icon');
|
||||
$el.find('.tui-full-calendar-popup-edit .tui-full-calendar-icon').append(Icons.get('edit'));
|
||||
$el.find('.tui-full-calendar-popup-edit .tui-full-calendar-icon').removeClass('tui-full-calendar-icon');
|
||||
$el.find('.tui-full-calendar-content').removeClass('tui-full-calendar-content');
|
||||
|
||||
var delButton = h('button.btn.btn-danger', [
|
||||
h('i.fa.fa-trash', {'aria-hidden': 'true'}),
|
||||
Icons.get('trash-full'),
|
||||
h('span', Messages.kanban_delete)
|
||||
]);
|
||||
var $del = $el.find('.tui-full-calendar-popup-delete').hide();
|
||||
@ -2421,7 +2422,7 @@ APP.recurrenceRule = {
|
||||
|
||||
// This is a recurring event, add button to stop recurrence now
|
||||
var $b = $(h('button.btn.btn-default', [
|
||||
h('i.fa.fa-times', {'aria-hidden': 'true'}),
|
||||
Icons.get('close'),
|
||||
h('span', Messages.calendar_rec_stop)
|
||||
])).insertBefore($section);
|
||||
UI.confirmButton($b[0], { classes: 'btn-default' }, function () {
|
||||
|
||||
@ -48,9 +48,6 @@ html, body {
|
||||
|
||||
.pending {
|
||||
border: 1px solid @cryptpad_text_col;
|
||||
.fa {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
.hidden {
|
||||
display: none;
|
||||
|
||||
@ -22,7 +22,7 @@ define([
|
||||
|
||||
var OS_HINTS = {
|
||||
"Win": "Windows",
|
||||
"Mac": "MacOS",
|
||||
"Mac": "macOS",
|
||||
"X11": "UNIX",
|
||||
"Linux": "Linux",
|
||||
};
|
||||
|
||||
@ -21,14 +21,14 @@ define([
|
||||
'/checkup/checkup-tools.js',
|
||||
'/customize/application_config.js',
|
||||
'/common/onlyoffice/current-version.js',
|
||||
'/common/common-icons.js',
|
||||
|
||||
'/components/tweetnacl/nacl-fast.min.js',
|
||||
'css!/components/components-font-awesome/css/font-awesome.min.css',
|
||||
'less!/checkup/app-checkup.less',
|
||||
], function ($, ApiConfig, Assertions, h, Messages, DomReady,
|
||||
nThen, SFCommonO, Login, Hash, Util, Pinpad,
|
||||
NetConfig, Block, Pages, Tools, AppConfig,
|
||||
OOCurrentVersion) {
|
||||
OOCurrentVersion, Icons) {
|
||||
window.CHECKUP_MAIN_LOADED = true;
|
||||
|
||||
var Assert = Assertions();
|
||||
@ -1805,7 +1805,7 @@ define([
|
||||
$progress.html('').append(h('div.report.pending.summary', [
|
||||
versionStatement(),
|
||||
h('p', [
|
||||
h('i.fa.fa-spinner.fa-pulse'),
|
||||
Icons.get('loading'),
|
||||
h('span', Messages._getKey('assert_numberOfTestsCompleted', [completed, total]))
|
||||
])
|
||||
]));
|
||||
|
||||
@ -8,7 +8,6 @@ define([
|
||||
'/checkup/checkup-tools.js',
|
||||
|
||||
'/components/tweetnacl/nacl-fast.min.js',
|
||||
'css!/components/components-font-awesome/css/font-awesome.min.css',
|
||||
'less!/checkup/app-checkup.less',
|
||||
], function ($, Util, Tools) {
|
||||
var postMessage = function (content) {
|
||||
|
||||
@ -75,14 +75,6 @@
|
||||
|
||||
.markdown_main();
|
||||
.markdown_cryptpad();
|
||||
.todo-list-item {
|
||||
.fa {
|
||||
&.fa-check-square {
|
||||
font-size: 15px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cp-app-code-preview-empty {
|
||||
display: none;
|
||||
|
||||
@ -88,7 +88,7 @@ define([
|
||||
text: Messages.toolbar_theme,
|
||||
options: [],
|
||||
common: framework._.sfCommon,
|
||||
iconCls: 'cptools cptools-palette'
|
||||
iconCls: 'color-palette'
|
||||
});
|
||||
framework._.toolbar.$theme = $drawer.find('ul.cp-dropdown-content');
|
||||
framework._.toolbar.$bottomL.append($drawer);
|
||||
@ -99,7 +99,7 @@ define([
|
||||
var $showAuthorColorsButton = framework._.sfCommon.createButton('', true, {
|
||||
text: Messages.cba_hide,
|
||||
name: 'authormarks',
|
||||
icon: 'fa-paint-brush',
|
||||
icon: 'customize',
|
||||
}).hide();
|
||||
var $showAuthorColors = UIElements.getEntryFromButton($showAuthorColorsButton).hide();
|
||||
$showAuthorColors.find('span').addClass('cp-toolbar-name cp-toolbar-drawer-element');
|
||||
@ -421,7 +421,7 @@ define([
|
||||
var mkColorByAuthor = function (framework, markers) {
|
||||
var common = framework._.sfCommon;
|
||||
var $cbaButton = framework._.sfCommon.createButton(null, true, {
|
||||
icon: 'fa-paint-brush',
|
||||
icon: 'customize',
|
||||
text: Messages.cba_title,
|
||||
name: 'cba'
|
||||
}, function () {
|
||||
|
||||
@ -194,32 +194,32 @@ const factory = () => {
|
||||
// Customize the icon used for each application.
|
||||
// You can update the colors by making a copy of /customize.dist/src/less2/include/colortheme.less
|
||||
AppConfig.applicationsIcon = {
|
||||
file: 'cptools-file',
|
||||
fileupload: 'cptools-file-upload',
|
||||
folderupload: 'cptools-folder-upload',
|
||||
link: 'fa-link',
|
||||
pad: 'cptools-richtext',
|
||||
code: 'cptools-code',
|
||||
slide: 'cptools-slide',
|
||||
poll: 'cptools-poll',
|
||||
form: 'cptools-poll',
|
||||
whiteboard: 'cptools-whiteboard',
|
||||
diagram: 'cptools-diagram',
|
||||
todo: 'cptools-todo',
|
||||
contacts: 'fa-address-book',
|
||||
calendar: 'fa-calendar',
|
||||
kanban: 'cptools-kanban',
|
||||
doc: 'fa-file-word-o',
|
||||
presentation: 'fa-file-powerpoint-o',
|
||||
sheet: 'fa-file-excel-o',
|
||||
drive: 'fa-hdd-o',
|
||||
teams: 'fa-users',
|
||||
admin: 'fa-gears',
|
||||
settings: 'fa-gear',
|
||||
moderation: 'fa-ambulance',
|
||||
profile: 'fa-user-circle',
|
||||
support: 'fa-life-ring',
|
||||
accounts: 'fa-ticket'
|
||||
file: 'file',
|
||||
fileupload: 'drive-upload-file',
|
||||
folderupload: 'drive-upload-folder',
|
||||
link: 'link',
|
||||
pad: 'pad',
|
||||
code: 'code-pad',
|
||||
slide: 'slide',
|
||||
poll: 'poll',
|
||||
form: 'form',
|
||||
whiteboard: 'whiteboard',
|
||||
diagram: 'diagram',
|
||||
todo: 'file',
|
||||
contacts: 'contacts',
|
||||
calendar: 'calendar',
|
||||
kanban: 'kanban',
|
||||
doc: 'doc',
|
||||
presentation: 'presentation',
|
||||
sheet: 'sheet',
|
||||
drive: 'drive',
|
||||
teams: 'teams',
|
||||
admin: 'administration',
|
||||
settings: 'settings',
|
||||
moderation: 'moderation',
|
||||
profile: 'user-profile',
|
||||
support: 'support',
|
||||
accounts: 'subscribe'
|
||||
};
|
||||
|
||||
// Ability to create owned pads and expiring pads through a new pad creation screen.
|
||||
|
||||
302
www/common/common-icons.js
Normal file
302
www/common/common-icons.js
Normal file
@ -0,0 +1,302 @@
|
||||
// SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
define([
|
||||
'/common/hyperscript.js',
|
||||
'/customize/lucide.js'
|
||||
], function (h, Lucide) {
|
||||
const Icons = {};
|
||||
|
||||
const map = {
|
||||
// Drive
|
||||
"homepage": "house",
|
||||
"drive": "hard-drive",
|
||||
"search": "search",
|
||||
"drive-shared-folder": "folder-users",
|
||||
"drive-upload-file": "file-up",
|
||||
"drive-upload-folder": "folder-up",
|
||||
"file": "file",
|
||||
"drive-recent": "clock",
|
||||
"drive-password-document": "file-lock",
|
||||
"folder": "folder",
|
||||
"folder-open": "folder-open",
|
||||
"folder-nocolor": "folder-minus",
|
||||
"folder-check": "folder-check",
|
||||
"file-template": "file-cog",
|
||||
"file-pad": "file-text",
|
||||
"grid": "layout-grid",
|
||||
"list": "list",
|
||||
"document-owner": "id-card-lanyard",
|
||||
"burn-drive": "ban",
|
||||
// Teams
|
||||
"teams": "users-round",
|
||||
"promote": "chevrons-up",
|
||||
"downgrade": "chevrons-down",
|
||||
// CryptPad apps
|
||||
// Pad
|
||||
"pad": "file-text",
|
||||
"pad-settings": "settings",
|
||||
"expand-pad": "maximize-2",
|
||||
"shrink-pad": "minimize-2",
|
||||
"slide": "cp-file-slide",
|
||||
"poll": "file-chart-column-increasing",
|
||||
// Form
|
||||
"form": "file-chart-column-increasing",
|
||||
"form-responses": "chart-no-axes-combined",
|
||||
"form-text": "minus",
|
||||
"form-paragraph": "text",
|
||||
"form-grid-radio": "cp-form-grid-radio",
|
||||
"form-grid-check": "cp-form-grid-check",
|
||||
"form-list-check": "list-checks",
|
||||
"form-list-radio": "list",
|
||||
"form-list-ordered": "list-ordered",
|
||||
"form-poll": "cp-form-poll",
|
||||
"form-page-break": "cp-form-page-break",
|
||||
"form-conditional": "cp-form-conditional",
|
||||
"form-poll-maybe": "cp-form-poll-maybe",
|
||||
"form-poll-switch": "arrow-right-left",
|
||||
// Whiteboard
|
||||
"whiteboard": "cp-file-whiteboard",
|
||||
// Diagram
|
||||
"diagram": "cp-file-diagram",
|
||||
// Code
|
||||
"code-pad": "file-code",
|
||||
"todo": "file",
|
||||
// Kanban
|
||||
"kanban": "cp-file-kanban",
|
||||
"kanban-tags": "tags",
|
||||
"kanban-minimize": "minus",
|
||||
"kanban-maximize": "menu",
|
||||
"touch-mode": "hand",
|
||||
"kanban-add-top": "cp-kanban-add-top",
|
||||
"kanban-add-bottom": "cp-kanban-add-bottom",
|
||||
"delete-token": "x",
|
||||
// Doc
|
||||
"doc": "cp-file-oo-document",
|
||||
// Sheet
|
||||
"sheet": "cp-file-oo-sheet",
|
||||
// Presentation
|
||||
"presentation": "cp-file-oo-presentation",
|
||||
// Actions
|
||||
"add": "plus",
|
||||
"check": "check",
|
||||
"filter": "list-filter-plus",
|
||||
"share": "share-2",
|
||||
"download": "hard-drive-download",
|
||||
"destroy": "shredder",
|
||||
"donate": "hand-coins",
|
||||
"send": "send",
|
||||
"cloud-upload": "cloud-upload",
|
||||
"print": "printer",
|
||||
"play": "circle-play",
|
||||
"grip-move": "grip-horizontal",
|
||||
"grip-move-vertical": "grip-vertical",
|
||||
"refresh": "refresh-ccw",
|
||||
"select": "move",
|
||||
// General
|
||||
"trash-empty": "trash",
|
||||
"trash-full": "trash-2",
|
||||
"properties": "info",
|
||||
"documentation": "book-open-text",
|
||||
"language": "languages",
|
||||
"link": "link",
|
||||
"external-link": "external-link",
|
||||
"chevron-left": "chevron-left",
|
||||
"chevron-right": "chevron-right",
|
||||
"chevron-down": "chevron-down",
|
||||
"chevron-up": "chevron-up",
|
||||
"copy": "copy",
|
||||
"close": "x",
|
||||
"square": "square",
|
||||
"timer": "hourglass",
|
||||
"map-pin": "map-pin",
|
||||
"pin": "pin",
|
||||
"checked-box": "square-check",
|
||||
"unchecked-box": "square",
|
||||
"table": "table",
|
||||
"inbox": "inbox",
|
||||
"server": "server",
|
||||
"minus": "minus",
|
||||
"alert": "triangle-alert",
|
||||
"sort-amount-desc": "arrow-down-wide-narrow",
|
||||
"announcement": "megaphone",
|
||||
"reply": "reply",
|
||||
"comment": "message-square-text",
|
||||
"file-image": "file-image",
|
||||
"snapshot": "camera",
|
||||
"certificate": "shield-check",
|
||||
"circle-question": "circle-question-mark",
|
||||
"list-ol": "list-ordered",
|
||||
"list-todo": "list-todo",
|
||||
"ellipsis-vertical": "ellipsis-vertical",
|
||||
"ellipsis-horizontal": 'ellipsis',
|
||||
"toolbar-insert": "image-plus",
|
||||
"features": "info",
|
||||
"report": "clipboard-plus",
|
||||
"limit": "settings-2",
|
||||
"duration": "timer-reset",
|
||||
"checkup": "square-activity",
|
||||
// Login + Register
|
||||
"login": "log-in",
|
||||
"logout": "log-out",
|
||||
"logout-everywhere": "unplug",
|
||||
"register": "user-round-plus",
|
||||
// User
|
||||
"user-profile": "circle-user-round",
|
||||
"users": "users-round",
|
||||
"secret-user": "venetian-mask",
|
||||
"user-account": "user",
|
||||
// History
|
||||
"history": "history",
|
||||
"history-prev": 'arrow-left',
|
||||
"history-next": "arrow-right",
|
||||
"history-fast-next": "arrow-right-to-line",
|
||||
"history-fast-prev": "arrow-left-to-line",
|
||||
"history-timeline-position": "chevron-down",
|
||||
"history-restore": "archive-restore",
|
||||
"remove-history": "eraser",
|
||||
"history-moderation": "archive",
|
||||
"archive": "archive",
|
||||
// Calendar
|
||||
"calendar": "calendar-days",
|
||||
"calendar-inactive": "calendar",
|
||||
"calendar-add": "calendar-plus-2",
|
||||
"calendar-repeat": "calendar-sync",
|
||||
"calendar-reminder": "bell-ring",
|
||||
"calendar-add-reminder": "bell-plus",
|
||||
"calendar-location": "map-pin",
|
||||
"calendar-description": "align-justify",
|
||||
"closing-date": "calendar-x",
|
||||
// Contacts
|
||||
"contacts": "contact-round",
|
||||
"contacts-book": "book-user",
|
||||
"unfriend": "user-round-x",
|
||||
"add-friend": "user-round-plus",
|
||||
"sort-asc": "chevron-down",
|
||||
"sort-desc": "chevron-up",
|
||||
"access": "lock-open",
|
||||
"rename": "pen-line",
|
||||
"color-palette": "palette",
|
||||
"customize": "brush",
|
||||
"upload": "hard-drive-upload",
|
||||
"read-only": "pen-off",
|
||||
"preview": "eye",
|
||||
"tag": "hash",
|
||||
"password-reveal": "eye",
|
||||
"password-hide": "eye-closed",
|
||||
"password-change": "rotate-ccw-key",
|
||||
"arrow-left": "arrow-left",
|
||||
"arrow-up": "arrow-up",
|
||||
"code": "code-xml",
|
||||
"qr-code": "qr-code",
|
||||
"lock": "lock",
|
||||
"unlocked": "lock-open",
|
||||
"help": "info",
|
||||
"expand-menu": "chevron-right",
|
||||
"location": "navigation",
|
||||
"collapse": "square-minus",
|
||||
"expand": "square-plus",
|
||||
"expire": "clock-alert",
|
||||
"restricted": "ban",
|
||||
"renamed": "flag",
|
||||
"restore": "rotate-cw",
|
||||
"all": "menu",
|
||||
"chat": "message-circle-more",
|
||||
"comments": "message-square-more",
|
||||
"mail": "mail",
|
||||
"upload-avatar": "image-up",
|
||||
"edit": "pencil",
|
||||
"save": "save",
|
||||
"loading": "loader",
|
||||
"notification" : "bell",
|
||||
"notifications" : "notebook-text",
|
||||
"mute": "bell-off",
|
||||
"cursor": "text-cursor",
|
||||
"import": "upload",
|
||||
"import-template": "file-up",
|
||||
"export": "download",
|
||||
// Settings + Admin
|
||||
"settings": "settings",
|
||||
"apps-settings": "wrench",
|
||||
"administration": "monitor-cog",
|
||||
"support": "life-buoy",
|
||||
"moderation": "ambulance",
|
||||
"broadcast": "radio",
|
||||
"support-ticket": "mail",
|
||||
"user-directory": "id-card",
|
||||
"database": "database",
|
||||
"stats": "chart-line",
|
||||
"performance": "heart-pulse",
|
||||
"network": "network",
|
||||
"survey": "graduation-cap",
|
||||
// Markdown toolbar
|
||||
"undo": "undo",
|
||||
"redo": "redo",
|
||||
"type": "type",
|
||||
"clear-canvas": "brush-cleaning",
|
||||
"key": "key",
|
||||
"bold": "bold",
|
||||
"italic": "italic",
|
||||
"heading": "heading",
|
||||
"strikethrough": "strikethrough",
|
||||
"quote": "quote",
|
||||
"toc": "newspaper",
|
||||
"embed": "image-plus",
|
||||
// Badges
|
||||
"badge-admin": "star",
|
||||
"badge-moderator": "life-buoy",
|
||||
"badge-premium": "ticket-check",
|
||||
"badge-error": "circle-alert",
|
||||
// Other
|
||||
"maintenance": "construction",
|
||||
"release-notes": "notepad-text"
|
||||
};
|
||||
|
||||
Icons.add = (newIcons) => {
|
||||
Object.keys(newIcons).forEach(k => {
|
||||
map[k] = newIcons[k];
|
||||
});
|
||||
};
|
||||
|
||||
Icons.get = (name, attrs = {}) => {
|
||||
if (!map[name]) {
|
||||
console.error("Invalid icon", name);
|
||||
//alert(`Invalid icon: ${name}`);
|
||||
// throw new Error(`Invalid icon: ${name}`);
|
||||
}
|
||||
attrs['data-lucide'] = map[name];
|
||||
attrs['aria-hidden'] = "true";
|
||||
|
||||
return h('i', attrs);
|
||||
};
|
||||
|
||||
if (!window.CP_Lucide_observer) {
|
||||
window.CP_Lucide_observer = true;
|
||||
Lucide.createIcons();
|
||||
const observer = new MutationObserver((mutations) => {
|
||||
let found = mutations.some((mutation) => {
|
||||
for (var i = 0; i < mutation.addedNodes.length; i++) {
|
||||
let added = mutation.addedNodes[i];
|
||||
if (added.tagName === "svg") { continue; }
|
||||
if (added?.hasAttribute?.('data-lucide')) {
|
||||
return true;
|
||||
}
|
||||
if (added?.querySelector?.(':not(svg)[data-lucide]')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
if (found) { Lucide.createIcons(); }
|
||||
});
|
||||
observer.observe(document.body, {
|
||||
attributes: true,
|
||||
childList: true,
|
||||
characterData: false,
|
||||
subtree: true
|
||||
});
|
||||
}
|
||||
|
||||
return Icons;
|
||||
});
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user