Compare commits

..

37 commits

Author SHA1 Message Date
timvisee
e0a3d2bf2c
Bump version to 3.4.27 2025-07-01 08:50:51 +02:00
timvisee
b93256316b
Move icon styles into stylesheet 2025-07-01 08:50:18 +02:00
timvisee
8a82e53e82
Bump version to 3.4.26 2025-06-30 23:51:56 +02:00
Tim Visée
6215bb1555 Merge branch 'add-thunderbird-sponsor-banner' into 'master'
Add Thunderbird sponsor banner

See merge request timvisee/send!37
2025-06-30 23:50:14 +02:00
timvisee
d7e929a0d1
Merge branch 'master' of github.com:timvisee/send 2025-06-30 23:30:05 +02:00
timvisee
154a8a90c1
Add sponsored by Thunderbird label to translations 2025-06-30 23:25:51 +02:00
timvisee
0a6bf39353
Add Thunderbird sponsorship banner to home, uploads and download page 2025-06-30 23:12:54 +02:00
Raymond Hear
c0cf7bbda2 fix: use Authorization header 2025-05-23 17:30:29 +02:00
timvisee
197b0bcf59
Update contribute.json 2025-04-23 21:01:10 +02:00
timvisee
56a0e830bd
Bump version to 3.4.25 2025-04-23 10:47:15 +02:00
timvisee
b3317df707
Move main notice on top of text 2025-04-23 10:46:26 +02:00
Tim Visée
9931074905 Merge branch 'more-customizable-notices' into 'master'
More customizable notices

See merge request timvisee/send!36
2025-04-23 10:37:44 +02:00
timvisee
0088a4ccc0
Add class to underline text 2025-04-23 10:12:16 +02:00
timvisee
11aad6eac5
Rename downloads list to uploads list 2025-04-23 10:09:51 +02:00
timvisee
1fb2f45285
Rename existing warnings to notices 2025-04-23 10:08:11 +02:00
timvisee
d0f21e8078
Add customizable notice on main page and in downloads list 2025-04-23 10:07:40 +02:00
timvisee
c71100c82a
Bump version to 3.4.24 2025-04-22 22:03:29 +02:00
Tim Visée
4f2dd96708 Merge branch 'update-dependencies' into 'master'
Update dependencies

See merge request timvisee/send!35
2025-04-22 21:59:01 +02:00
Tim Visée
d8456c2c51 Merge branch 'add-custom-upload-download-warnings' into 'master'
Add customizable warnings shown on upload and download pages

See merge request timvisee/send!34
2025-04-22 21:55:25 +02:00
timvisee
b7324f3a5b
Update dependencies 2025-04-22 21:35:39 +02:00
timvisee
6890165f67
Add customizable warnings shown on upload and download pages 2025-04-22 21:31:23 +02:00
Tim Visée
5124572dba Merge branch 'fix-node-18-crypto' into 'master'
Fix build failure due to crypto when using Node 18 or higher

See merge request timvisee/send!33
2025-02-04 19:32:41 +00:00
timvisee
0c1819bb15
Fix build failure due to crypto when using Node 18 or higher 2025-02-04 20:08:03 +01:00
LOLSALT
906990991e Update send.ftl 2024-12-20 11:34:42 +01:00
LOLSALT
48bdf734c5 Update send.ftl 2024-12-20 11:34:42 +01:00
LOLSALT
cf63e0e804 Update send.ftl 2024-12-20 11:34:42 +01:00
LOLSALT
ec66c2dc4e Update send.ftl 2024-12-20 11:34:42 +01:00
LOLSALT
67dfc94ef3 Update send.ftl 2024-12-20 11:34:42 +01:00
Filip Znachor
f54f3ccaa2 Update CS send.ftl
Improved Czech translations
2024-04-19 12:12:13 +02:00
DeAlexPesh
a35e2e58a3 Update RU send.ftl 2024-03-13 17:14:17 +01:00
Tim Visée
6ad2885a16 Merge branch 'aron9861623-master-patch-24529' into 'master'
Fixed docker.md first example

See merge request timvisee/send!32
2023-06-09 13:31:51 +00:00
Aron Tecsi
70662888b1 Fixed docker.md first example 2023-06-09 11:19:42 +00:00
timvisee
9f09a79986
Merge branch 'emilstahl-patch-1' into master
See https://github.com/timvisee/send/pull/149
2023-02-27 21:45:59 +01:00
Emil Stahl
db64c0467a
Small typo 2023-02-27 21:02:53 +01:00
Tim Visée
ca52f84aa5 Merge branch 'master' into 'master'
Add build for arm64v8

See merge request timvisee/send!27
2023-02-22 11:40:25 +00:00
simepy
91773832c1 Updated from timvisee/send master 2023-02-03 14:29:30 +01:00
Simon PERA
c524804c63 Add build for arm64v8 2022-10-25 19:08:27 +02:00
22 changed files with 5647 additions and 20770 deletions

View file

@ -51,7 +51,8 @@ release-docker:
- web
script:
- docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
- docker build -t send .
- docker buildx create --name sendBuilder
- docker buildx use sendBuilder
- |
if [ "$CI_PIPELINE_SOURCE" == "merge_request_event" ]; then
IMAGE_NAMES="$CI_REGISTRY_IMAGE/mr:$CI_MERGE_REQUEST_IID"
@ -62,8 +63,7 @@ release-docker:
fi
- |
for image in $IMAGE_NAMES; do
docker tag send $image
docker push $image
docker buildx build --platform linux/amd64,linux/arm64 -t $image . --push
done
- |
echo "Container image pushed. You can pull it with";

View file

@ -43,7 +43,7 @@ function post(obj, bearerToken) {
'Content-Type': 'application/json'
};
if (bearerToken) {
h['Authentication'] = `Bearer ${bearerToken}`;
h['Authorization'] = `Bearer ${bearerToken}`;
}
return {
method: 'POST',

View file

@ -167,6 +167,22 @@ footer li a:hover {
width: auto;
}
.text-underline {
text-decoration: underline;
}
.d-block {
display: block;
}
.d-inline-block {
display: inline-block;
}
.align-middle {
vertical-align: middle;
}
.main {
display: flex;
position: relative;

View file

@ -486,6 +486,16 @@ module.exports.empty = function(state, emit) {
})}
</button>
`;
const uploadNotice = state.WEB_UI.UPLOAD_AREA_NOTICE_HTML
? html`
<p
class="w-full mt-8 p-2 border-default dark:border-grey-70 rounded-default text-orange-60 bg-yellow-40 text-center leading-normal"
>
${raw(state.WEB_UI.UPLOAD_AREA_NOTICE_HTML)}
</p>
`
: '';
return html`
<send-upload-area
class="flex flex-col items-center justify-center border-2 border-dashed border-grey-transparent rounded-default px-6 py-16 h-full w-full dark:border-grey-60"
@ -526,7 +536,7 @@ module.exports.empty = function(state, emit) {
>
${state.translate('addFilesButton')}
</label>
${upsell}
${upsell} ${uploadNotice}
</send-upload-area>
`;
@ -559,6 +569,38 @@ module.exports.preview = function(state, emit) {
${archiveDetails(state.translate, archive)}
</div>
`;
const notice = state.WEB_UI.DOWNLOAD_NOTICE_HTML
? html`
<p
class="w-full mt-4 p-2 border-default dark:border-grey-70 rounded-default text-orange-60 bg-yellow-40 text-center leading-normal"
>
${raw(state.WEB_UI.DOWNLOAD_NOTICE_HTML)}
</p>
`
: '';
const sponsor = state.WEB_UI.SHOW_THUNDERBIRD_SPONSOR
? html`
<a
class="w-full mt-5 mb-2 p-2 border-default dark:border-grey-70 rounded-default text-orange-60 bg-yellow-40 text-center leading-normal"
href="https://www.thunderbird.net/"
>
<svg
width="30"
height="30"
class="m-2 mr-3 d-inline-block align-middle"
>
<image
xlink:href="${assets.get('thunderbird-icon.svg')}"
src="${assets.get('thunderbird-icon.svg')}"
width="30"
height="30"
/>
</svg>
${state.translate('sponsoredByThunderbird')}
</a>
`
: '';
return html`
<send-archive
class="flex flex-col max-h-full bg-white p-4 w-full md:w-128 dark:bg-grey-90"
@ -574,6 +616,7 @@ module.exports.preview = function(state, emit) {
>
${state.translate('downloadButtonLabel')}
</button>
${notice} ${sponsor}
</send-archive>
`;

View file

@ -1,8 +1,10 @@
const html = require('choo/html');
const raw = require('choo/html/raw');
const { list } = require('../utils');
const archiveTile = require('./archiveTile');
const modal = require('./modal');
const intro = require('./intro');
const assets = require('../../common/assets');
module.exports = function(state, emit) {
const archives = state.storage.files
@ -16,7 +18,42 @@ module.exports = function(state, emit) {
} else {
left = archiveTile.empty(state, emit);
}
if (archives.length > 0 && state.WEB_UI.UPLOADS_LIST_NOTICE_HTML) {
archives.push(html`
<p
class="w-full p-2 border-default dark:border-grey-70 rounded-default text-orange-60 bg-yellow-40 text-center leading-normal"
>
${raw(state.WEB_UI.UPLOADS_LIST_NOTICE_HTML)}
</p>
`);
}
archives.reverse();
if (archives.length > 0 && state.WEB_UI.SHOW_THUNDERBIRD_SPONSOR) {
archives.push(html`
<a
class="w-full p-2 border-default dark:border-grey-70 rounded-default text-orange-60 bg-yellow-40 text-center leading-normal d-block"
href="https://www.thunderbird.net/"
>
<svg
width="30"
height="30"
class="m-2 mr-3 d-inline-block align-middle"
>
<image
xlink:href="${assets.get('thunderbird-icon.svg')}"
src="${assets.get('thunderbird-icon.svg')}"
width="30"
height="30"
/>
</svg>
Sponsored by Thunderbird
</a>
`);
}
const right =
archives.length === 0
? intro(state)

View file

@ -1,10 +1,46 @@
const html = require('choo/html');
const raw = require('choo/html/raw');
const assets = require('../../common/assets');
module.exports = function intro(state) {
const notice = state.WEB_UI.MAIN_NOTICE_HTML
? html`
<p
class="w-full mt-2 p-2 border-default dark:border-grey-70 rounded-default text-orange-60 bg-yellow-40 text-center leading-normal"
>
${raw(state.WEB_UI.MAIN_NOTICE_HTML)}
</p>
`
: '';
const sponsor = state.WEB_UI.SHOW_THUNDERBIRD_SPONSOR
? html`
<a
class="w-full mt-5 mb-2 p-2 border-default dark:border-grey-70 rounded-default text-orange-60 bg-yellow-40 text-center leading-normal"
href="https://www.thunderbird.net/"
>
<svg
width="30"
height="30"
class="m-2 mr-3 d-inline-block align-middle"
>
<image
xlink:href="${assets.get('thunderbird-icon.svg')}"
src="${assets.get('thunderbird-icon.svg')}"
width="30"
height="30"
/>
</svg>
Sponsored by Thunderbird
</a>
`
: '';
return html`
<send-intro
class="flex flex-col items-center justify-center bg-white px-6 md:py-0 py-6 mb-0 h-full w-full dark:bg-grey-90"
>
${notice}
<div class="mt-12 flex flex-col h-full">
<h1 class="text-3xl font-bold md:pb-2">
${state.translate('introTitle')}
@ -13,6 +49,7 @@ module.exports = function intro(state) {
${state.translate('introDescription')}
</p>
</div>
${sponsor}
</send-intro>
`;
};

View file

@ -0,0 +1,65 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 750 750">
<path fill="url(#a)" d="m 314.805,154.949 h 0.06 c 22.04,-77.0499 118.08,-114.6599 215.95,-114.6599 67.63,0 128.341,21.41 169.961,55.4 -24.838,1.1712 -49.362,6.0449 -72.76,14.4599 33.63,12.5 62.519,31.73 83.929,55.52 -16.153,-2.78 -32.532,-4.019 -48.919,-3.7 40.276,58.343 61.794,127.585 61.68,198.48 0,193.3 -156.701,350 -350.001,350 -190.32,0 -349.9999,-159.35 -349.9999,-350 0,-30.11 4,-61.2 11.77,-90.36 2.04,-6.12 4.88,-11.99 8.65,-14.14 4.72,-2.69 9.02,5.33 9.71,7.94 5.1177,19.17 12.0039,37.823 20.57,55.72 -0.75,-39.96 16.32,-76.36 39.7999,-107.84 15.66,-20.99 30.18,-40.44 36.88,-96.57 0.45,-3.77 4.02,-6.48 7.63,-5.3 50.96,16.68 78.2,101.54 73.97,172.5 28.15,4.03 28.02,-25.38 28.02,-25.38 -9,-27.66 -3,-79.07 53,-102.07 z"/>
<path fill="url(#b)" d="m 713.254,271.32 c 8.51,192.5 -149.74,358.47 -342.71,358.47 -180.65,0 -328.6792,-139.63 -342.0692,-316.85 -2.3889,16.596 -3.6452,33.334 -3.76,50.1 1.37,189.62 160.6592,347.41 349.9992,347.41 193.3,0 350,-156.7 350,-350 0,-30.8 -3.99,-60.67 -11.46,-89.13 z" opacity="0.9"/>
<path fill="url(#c)" d="m 366.175,180.459 c -3.77,-6.67 -21.18,-16.54 -28.79,-18.26 28.8,-92.2499 175.521,-120.5699 265.321,-104.2499 37.37,6.8 83.91,27.16 98.07,37.74 -41.62,-33.99 -102.341,-55.4 -169.961,-55.4 -97.87,0 -193.91,37.61 -215.95,114.6599 h -0.16 c -56,23 -62,74.43 -53,102.08 8.64,-32.99 49.75,-73.53 104.47,-76.57 z" style="mix-blend-mode:screen"/>
<path fill="url(#d)" d="m 467.885,116.748 c -78.62,15.47 -104.31,20.53 -130.62,45.54 29.55,-78.2297 104.98,-94.0897 194.86,-58.43 -21.391,4.41 -42.805,8.71 -64.24,12.9 z"/>
<path fill="url(#e)" d="m 43.7049,259.38 c -21.48,87.94 -4.88,191.3 92.6991,278.04 -29.05,-31.77 -64.5191,-149.07 13.75,-232.87 5.27,-5.65 14.34,-1.5 14.63,6.22 6.45,174.16 146.98,280.53 309,260.64 -50.2,-2.82 -216.22,-60.97 -92.72,-83.97 64.55,-12.03 165.76,-30.88 165.76,-121.7 0,-147.22 -113.83,-190.26 -182.86,-183.86 -47.24,4.38 -89.29,34.36 -102.23,75.13 4.97,16.07 -14.84,27.32 -28.05,25.43 4.24,-70.95 -23,-155.86 -73.97,-172.54 -3.6,-1.18 -7.18,1.53 -7.63,5.3 -6.7,56.13 -21.22,75.58 -36.87,96.57 -23.4891,31.49 -40.5591,67.88 -39.8091,107.84 -8.5659,-17.897 -15.4521,-36.55 -20.57,-55.72 -0.57,-2.16 -3.7,-8.19 -7.48,-8.47 -2.05,-0.15 -3.14,1.85 -3.65,3.96 z"/>
<path fill="url(#f)" d="m 337.695,496.349 c 95.04,77.17 286.17,19.31 286.17,-168.32 -77.16,116.96 -175.44,197.64 -286.16,168.32 z" style="mix-blend-mode:screen"/>
<path fill="url(#g)" d="m 150.155,304.55 c 0.864,-0.967 1.953,-1.706 3.17,-2.153 1.217,-0.446 2.526,-0.586 3.81,-0.407 -70.0595,85.45 -13.549,235.52 25.231,272.39 2.17,6.14 -36.791,-25.79 -42.161,-33.26 -29.5,-25.03 -71.7795,-149.06 9.95,-236.57 z" style="mix-blend-mode:screen"/>
<path fill="url(#h)" d="m 374.705,503.419 c 95.06,0 172.13,-62.879 172.13,-140.449 0,-77.57 -77.07,-140.45 -172.13,-140.45 -81.1,0 -172.17,52.76 -172.13,142.5 0.04,138.67 146.54,218.45 271.42,206.37 -9.38,-1.09 -67.9,-4.2 -107.45,-48.94 -3.57,-4.03 -9.76,-11.07 -6.95,-15.64 2.8,-4.57 10.52,-3.4 15.1,-3.4 z"/>
<path fill="#fff" d="m 528.085,299.15 -136.04,130.18 c -12.07,8.58 -24.92,9.2 -37.6,1.42 L 221.015,299.63 c 3.807,-6.118 8.087,-11.929 12.8,-17.38 l 14,13.1 c 35.04,32.84 63.37,59.37 103.3,93.45 18.02,15.38 23.62,15.08 41.3,0 45.68,-39 79.09,-68.5 122.52,-107.29 4.841,5.526 9.235,11.428 13.14,17.65 z" opacity="0.6"/>
<mask id="i" width="345" height="276" x="202" y="297" maskUnits="userSpaceOnUse">
<path fill="#fff" d="m 546.835,362.969 c 0,77.57 -77.07,140.45 -172.13,140.45 -4.59,0 -12.3,-1.18 -15.11,3.4 -2.81,4.56 3.38,11.6 6.95,15.63 37.16,42.04 91.07,47.33 105.22,48.72 l 2.23,0.22 c -124.88,12.08 -271.38,-67.7 -271.42,-206.37 -0.131,-23.089 6.295,-45.74 18.53,-65.32 l 134.08,121.78 c 9.54,8.66 25.61,8.66 35.15,0 l 136.62,-124.09 c 12.7,19.58 19.88,41.9 19.88,65.58 z"/>
</mask>
<g mask="url(#i)">
<path fill="url(#j)" d="m 162.705,200.979 h 435.07 v 394.47 h -435.07 z" opacity="0.7"/>
<g filter="url(#k)">
<path fill="#458fcd" fill-rule="evenodd" d="m 334.745,422.298 c -25.35,-26.38 -101.27,-114.03 -101.27,-114.03 l 5.87,0.26 118.86,88.77 c 8.9,6.47 21.6,6.4 30.42,-0.15 l 116.55,-88.5 6.18,-0.49 c 0,0 -73.44,85.57 -101.57,113.76 -28.13,28.19 -49.69,26.76 -75.04,0.38 z" clip-rule="evenodd"/>
</g>
</g>
<path fill="#fff" d="m 398.855,152.258 c 18.42,-5.8 16.8,-24.03 16.8,-24.03 0,0 -9.21,-10.85 -27.46,-4.84 -17.08,5.63 -19.73,17.8 -19.73,17.8 0,0 9.33,17.7 30.39,11.07 z"/>
<defs>
<linearGradient id="a" x1="146.185" x2="639.58502" y1="155.649" y2="615.86902" gradientUnits="userSpaceOnUse">
<stop stop-color="#1B91F3"/>
<stop offset="1" stop-color="#0B68CB"/>
</linearGradient>
<linearGradient id="d" x1="283.47501" x2="461.01501" y1="273.45801" y2="75.818298" gradientUnits="userSpaceOnUse">
<stop stop-color="#0F5DB0"/>
<stop offset="1" stop-color="#0F5DB0" stop-opacity="0"/>
</linearGradient>
<linearGradient id="f" x1="594.625" x2="512.07501" y1="416.55899" y2="619.24902" gradientUnits="userSpaceOnUse">
<stop stop-color="#E247C4" stop-opacity="0"/>
<stop offset="1" stop-color="#E247C4" stop-opacity="0.64"/>
</linearGradient>
<linearGradient id="g" x1="82.7155" x2="155.44501" y1="234.78999" y2="527.51001" gradientUnits="userSpaceOnUse">
<stop offset="0.1" stop-color="#EF3ACC"/>
<stop offset="1" stop-color="#EF3ACC" stop-opacity="0"/>
</linearGradient>
<linearGradient id="h" x1="374.70499" x2="374.70499" y1="273.95001" y2="569.94897" gradientUnits="userSpaceOnUse">
<stop stop-color="#fff"/>
<stop offset="0.91" stop-color="#BEE1FE"/>
<stop offset="1" stop-color="#96CEFD"/>
</linearGradient>
<linearGradient id="j" x1="380.245" x2="380.245" y1="441.44901" y2="565.44897" gradientUnits="userSpaceOnUse">
<stop stop-color="#BCE0FD"/>
<stop offset="1" stop-color="#88CCFC"/>
</linearGradient>
<radialGradient id="b" cx="0" cy="0" r="1" gradientTransform="matrix(117.92992,271.44954,-260.03887,112.97261,145.274,314)" gradientUnits="userSpaceOnUse">
<stop offset="0.53" stop-color="#0B4186" stop-opacity="0"/>
<stop offset="1" stop-color="#0B4186" stop-opacity="0.45"/>
</radialGradient>
<radialGradient id="c" cx="0" cy="0" r="1" gradientTransform="matrix(-38.950414,-49.859637,82.506525,-64.454205,383.705,192.449)" gradientUnits="userSpaceOnUse">
<stop stop-color="#EF3ACC" stop-opacity="0"/>
<stop offset="1" stop-color="#EF3ACC" stop-opacity="0.64"/>
</radialGradient>
<radialGradient id="e" cx="0" cy="0" r="1" gradientTransform="matrix(200.50032,-415.91019,513.77136,247.67684,242.704,551.15)" gradientUnits="userSpaceOnUse">
<stop offset="0.02" stop-color="#094188"/>
<stop offset="0.97" stop-color="#0B4186" stop-opacity="0"/>
</radialGradient>
<filter id="k" width="341.88" height="198.416" x="201.47501" y="276.15799" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur result="effect1_foregroundBlur_106_1002" stdDeviation="16"/>
</filter>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.1 KiB

View file

@ -9,6 +9,7 @@ docker pull registry.gitlab.com/timvisee/send:latest
docker run -v $PWD/uploads:/uploads -p 1443:1443 \
-e 'DETECT_BASE_URL=true' \
-e 'REDIS_HOST=localhost' \
-e 'FILE_DIR=/uploads' \
registry.gitlab.com/timvisee/send:latest
```
@ -33,7 +34,7 @@ Config options expecting array values (e.g. `EXPIRE_TIMES_SECONDS`, `DOWNLOAD_CO
| `PORT` | Port the server will listen on (defaults to `1443`)
| `NODE_ENV` | Run in `development` mode (unsafe) or `production` mode (the default)
| `SEND_FOOTER_DMCA_URL` | A URL to a contact page for DMCA requests (empty / not shown by default)
| `SENTRY_CLIENT`, `SENTRY_DSN` | Sentry Client ID and DNS for error tracking (optional, disabled by default)
| `SENTRY_CLIENT`, `SENTRY_DSN` | Sentry Client ID and DSN for error tracking (optional, disabled by default)
*Note: more options can be found here: https://github.com/timvisee/send/blob/master/server/config.js*

26053
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
{
"name": "send",
"description": "File Sharing Experiment",
"version": "3.4.23",
"version": "3.4.27",
"author": "Mozilla (https://mozilla.org)",
"contributors": [
"Tim Visee <3a4fb3964f@sinenomine.email> (https://timvisee.com)"

View file

@ -1,17 +1,17 @@
{
"name": "firefox-send",
"name": "send",
"description": "File Sharing Experiment",
"repository": {
"url": "https://github.com/send/send/",
"url": "https://github.com/timvisee/send/",
"license": "MPL-2.0"
},
"participate": {
"home": "https://github.com/send/send/blob/master/README.md",
"docs": "https://github.com/send/send/blob/master/README.md"
"home": "https://github.om/timvisee/send/blob/master/README.md",
"docs": "https://github.com/timvisee/send/blob/master/README.md"
},
"bugs": {
"list": "https://gitlab.com/send/send/issues",
"report": "https://gitlab.com/send/send/issues/new"
"list": "https://github.com/timvisee/send/issues",
"report": "https://github.com/timvisee/send/issues/new"
},
"keywords": [
"JavaScript",

View file

@ -48,12 +48,12 @@ passwordSetError = Toto heslo nemohlo být nastaveno
-send-brand =
{ $case ->
*[nom] Send
[gen] Send
[dat] Send
[gen] Sendu
[dat] Sendu
[acc] Send
[voc] Send
[loc] Send
[ins] Send
[voc] Sende
[loc] Sendu
[ins] Sendem
}
-send-short-brand =
{ $case ->
@ -86,7 +86,7 @@ passwordSetError = Toto heslo nemohlo být nastaveno
[ins] Mozillou
}
introTitle = Jednoduché a soukromé sdílení souborů
introDescription = S { -send-brand(case: "ins") } jsou sdílené soubory šifrované end-to-end, takže ani my nevíme, co sdílíte. Platnost odkazů je navíc omezená. Soubory tak můžete sdílet soukromě a s jistotou, že se nezůstanou na internetu válet navždy.
introDescription = Se { -send-brand(case: "ins") } jsou sdílené soubory šifrované end-to-end, takže ani my nevíme, co sdílíte. Platnost odkazů je navíc omezená. Soubory tak můžete sdílet soukromě a s jistotou, že se nezůstanou na internetu válet navždy.
notifyUploadEncryptDone = Váš soubor je zašifrovaný a připraven k odeslání
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Platnost vyprší po { $downloadCount } nebo za { $timespan }
@ -131,7 +131,7 @@ copyLinkDescription = Soubor můžete sdílet tímto odkazem:
copyLinkButton = Zkopírovat odkaz
downloadTitle = Stáhnout soubory
downloadDescription = Tento soubor byl sdílen přes { -send-brand(case: "acc") } s end-to-end šifrováním a odkazem s omezenou platností.
trySendDescription = Vyzkoušejte jednoduché a bezpečné sdílení souborů s { -send-brand(case: "ins") }
trySendDescription = Vyzkoušejte jednoduché a bezpečné sdílení souborů se { -send-brand(case: "ins") }
# count will always be > 10
tooManyFiles =
{ $count ->
@ -189,6 +189,6 @@ downloadFirefoxPromo = { -send-short-brand } od aplikace { -firefox }.
shareLinkDescription = Sdílet odkaz na soubor:
shareLinkButton = Sdílet odkaz
# $name is the name of the file
shareMessage = Stáhněte si soubor „{ $name }“ s { -send-brand(case: "ins") } - jednoduché a bezpečné sdílení souborů
shareMessage = Stáhněte si soubor „{ $name }“ se { -send-brand(case: "ins") } - jednoduché a bezpečné sdílení souborů
trailheadPromo = Existuje způsob, jak ochránit své soukromí. Používejte Firefox.
learnMore = Zjistit více.

View file

@ -147,3 +147,5 @@ shareLinkButton = Share link
shareMessage = Download “{ $name }” with { -send-brand }: simple, safe file sharing
trailheadPromo = There is a way to protect your privacy. Join Firefox.
learnMore = Learn more.
sponsoredByThunderbird = Sponsored by Thunderbird

View file

@ -152,3 +152,5 @@ shareLinkButton = Share link
shareMessage = Download “{ $name }” with { -send-brand }: simple, safe file sharing
trailheadPromo = There is a way to protect your privacy. Join Firefox.
learnMore = Learn more.
sponsoredByThunderbird = Sponsored by Thunderbird

View file

@ -143,3 +143,5 @@ shareLinkButton = Share link
# $name is the name of the file
shareMessage = Download “{ $name }” with { -send-brand }: simple, safe file sharing
learnMore = Learn more.
sponsoredByThunderbird = Sponsored by Thunderbird

View file

@ -52,7 +52,7 @@ passwordSetError = Dit wachtwoord kon niet worden ingesteld
-send-short-brand = Send
-firefox = Firefox
-mozilla = Mozilla
introTitle = Bestanden delen, eenvoudig en privé
introTitle = Bestanden delen, eenvoudig en privé
introDescription = Met { -send-brand } kunt u bestanden delen met end-to-endversleuteling en een koppeling die automatisch verloopt. Hierdoor kunt u privé houden wat u wilt delen en er zeker van zijn dat uw zaken niet voor altijd online blijven.
notifyUploadEncryptDone = Uw bestand is versleuteld en klaar voor verzending
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
@ -152,3 +152,5 @@ shareLinkButton = Koppeling delen
shareMessage = Download { $name } met { -send-brand }: eenvoudig, veilig bestanden delen
trailheadPromo = Er is een manier om uw privacy te beschermen. Doe mee met Firefox.
learnMore = Meer info.
sponsoredByThunderbird = Gesponsord door Thunderbird

View file

@ -53,7 +53,7 @@ introTitle = Простой и безопасный обмен файлами
introDescription = { -send-brand } позволяет вам делиться файлами со сквозным шифрованием и ограниченным сроком действия ссылки на загрузку. Так что, вы сможете делиться файлами приватно и они не останутся в сети навсегда.
notifyUploadEncryptDone = Ваш файл зашифрован и готов к отправке
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = Срок хранения истекает после { $downloadCount } или через { $timespan }
archiveExpiryInfo = Удалить после { $downloadCount } или через { $timespan }
timespanMinutes =
{ $num ->
[one] { $num } минуту
@ -89,7 +89,7 @@ gb = ГБ
# localized number and byte abbreviation. example "2.5MB"
fileSize = { $num }{ $units }
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
totalSize = Общий размер: { $size }
totalSize = Всего: { $size }
# the next line after the colon contains a file name
copyLinkDescription = Скопируйте ссылку, чтобы поделиться своим файлом:
copyLinkButton = Копировать ссылку
@ -117,13 +117,13 @@ legalTitle = Уведомление о конфиденциальности { -s
legalDateStamp = Версия 1.0, от 12 марта 2019 года
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
expiresDaysHoursMinutes = { $days } дн. { $hours } ч. { $minutes } мин.
addFilesButton = Выберите файлы для выгрузки
addFilesButton = Добавить
uploadButton = Выгрузить
# the first part of the string 'Drag and drop files or click to send up to 1GB'
dragAndDropFiles = Перетащите файлы сюда
# the second part of the string 'Drag and drop files or click to send up to 1GB'
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
orClickWithSize = или щёлкните здесь, чтобы отправить их (до { $size })
orClickWithSize = или кликните сюда для отправки файлов до { $size }
addPassword = Защитить паролем
emailPlaceholder = Введите ваш адрес электронной почты
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")

View file

@ -2,12 +2,12 @@ title = Send
importingFile = 正在导入…
encryptingFile = 正在加密…
decryptingFile = 正在解密…
downloadCount =
{ $num ->
downloadCount = { $num ->
[one] 1 次下载
*[other] { $num } 次下载
}
timespanHours =
{ $num ->
timespanHours = { $num ->
[one] 1 小时
*[other] { $num } 小时
}
copiedUrl = 已复制!
@ -26,6 +26,11 @@ notSupportedOutdatedDetail = 很可惜,此版本的 Firefox 不支持 Send 所
updateFirefox = 更新 Firefox
deletePopupCancel = 取消
deleteButtonHover = 删除
footerText = 不附属于 Mozilla 或 Firefox。
footerLinkDonate = 捐助
footerLinkCli = 命令行
footerLinkDmca = DMCA
footerLinkSource = 源代码
passwordTryAgain = 密码不正确。请重试。
javascriptRequired = Send 需要 JavaScript
whyJavascript = 为什么 Send 需要 JavaScript
@ -142,5 +147,4 @@ shareLinkDescription = 您的文件链接:
shareLinkButton = 分享链接
# $name is the name of the file
shareMessage = 使用 { -send-brand } 下载“{ $name }”:简单、安全的文件分享服务
trailheadPromo = 捍卫隐私不是幻想。加入 Firefox 一同抗争。
learnMore = 详细了解。

View file

@ -2,12 +2,12 @@ title = Send
importingFile = 匯入中…
encryptingFile = 加密中…
decryptingFile = 解密中…
downloadCount =
{ $num ->
downloadCount = { $num ->
[one] 1 次下載
*[other] { $num } 次下載
}
timespanHours =
{ $num ->
timespanHours = { $num ->
[one] 1 小時
*[other] { $num } 小時
}
copiedUrl = 已複製!
@ -26,6 +26,11 @@ notSupportedOutdatedDetail = 很可惜,此版本的 Firefox 不支援 Send 所
updateFirefox = 更新 Firefox
deletePopupCancel = 取消
deleteButtonHover = 刪除
footerText = 不隸屬於 Mozilla 或 Firefox。
footerLinkDonate = 捐助
footerLinkCli = 命令列
footerLinkDmca = DMCA
footerLinkSource = 原始碼
passwordTryAgain = 密碼不正確,請再試一次。
javascriptRequired = Send 需要開啟 JavaScript 功能
whyJavascript = 為什麼 Send 需要 JavaScript 才能使用?
@ -45,27 +50,28 @@ passwordSetError = 無法設定此密碼
-send-short-brand = Send
-firefox = Firefox
-mozilla = Mozilla
introTitle = 簡單而私密的檔案共享服務
introDescription = { -send-brand } 讓您可透過點對點加密的方式來分享檔案,並提供會自動失效的鏈結。這樣一來就可以保留分享時的隱私,也確保檔案不會永久保存於網路上。
notifyUploadEncryptDone = 已加密您的檔案,可以傳送
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
archiveExpiryInfo = { $downloadCount } 或 { $timespan } 後失效
timespanMinutes =
{ $num ->
timespanMinutes = { $num ->
[one] 1 分鐘
*[other] { $num } 分鐘
}
timespanDays =
{ $num ->
timespanDays = { $num ->
[one] 1 天
*[other] { $num } 天
}
timespanWeeks =
{ $num ->
timespanWeeks = { $num ->
[one] 1 週
*[other] { $num } 週
}
fileCount =
{ $num ->
*[other] { $num } 個檔案
}
fileCount = { $num ->
[one] 1 個檔案
*[other] { $num } 個檔案
}
# byte abbreviation
bytes = 位元組
# kibibyte abbreviation
@ -85,15 +91,15 @@ downloadTitle = 下載檔案
downloadDescription = 此檔案是透過 { -send-brand } 進行分享,以點對點加密的方式來分享檔案,並提供會自動失效的鏈結。
trySendDescription = 快試試 { -send-brand },簡單安全的檔案分享機制。
# count will always be > 10
tooManyFiles =
{ $count ->
*[other] 一次僅能上傳 { $count } 個檔案。
}
tooManyFiles = { $count ->
[one] 一次僅能上傳 1 個檔案。
*[other] 一次僅能上傳 { $count } 個檔案。
}
# count will always be > 10
tooManyArchives =
{ $count ->
*[other] 僅允許 { $count } 個壓縮檔。
}
tooManyArchives = { $count ->
[one] 僅允許 1 個壓縮檔。
*[other] 僅允許 { $count } 個壓縮檔。
}
expiredTitle = 此鏈結已經失效。
notSupportedDescription = 無法於此瀏覽器使用 { -send-brand }。在最新版的 { -firefox } 中使用 { -send-short-brand } 會有最佳效果,也可在大部分瀏覽器的最新版本當中使用。
downloadFirefox = 下載 { -firefox }
@ -136,5 +142,4 @@ shareLinkDescription = 您的檔案鏈結:
shareLinkButton = 分享鏈結
# $name is the name of the file
shareMessage = 使用 { -send-brand } 下載「{ $name }」: 簡單安全的檔案分享機制
trailheadPromo = 有種方法可以保護您的隱私,加入 Firefox。
learnMore = 了解更多。

View file

@ -15,6 +15,11 @@ module.exports = {
FOOTER_SOURCE_URL: config.footer_source_url,
CUSTOM_FOOTER_TEXT: config.custom_footer_text,
CUSTOM_FOOTER_URL: config.custom_footer_url,
MAIN_NOTICE_HTML: config.main_notice_html,
UPLOAD_AREA_NOTICE_HTML: config.upload_area_notice_html,
UPLOADS_LIST_NOTICE_HTML: config.uploads_list_notice_html,
DOWNLOAD_NOTICE_HTML: config.download_notice_html,
SHOW_THUNDERBIRD_SPONSOR: config.show_thunderbird_sponsor,
COLORS: {
PRIMARY: config.ui_color_primary,
ACCENT: config.ui_color_accent

View file

@ -175,7 +175,8 @@ const conf = convict({
},
custom_description: {
format: String,
default: 'Encrypt and send files with a link that automatically expires to ensure your important documents dont stay online forever.',
default:
'Encrypt and send files with a link that automatically expires to ensure your important documents dont stay online forever.',
env: 'CUSTOM_DESCRIPTION'
},
detect_base_url: {
@ -263,6 +264,31 @@ const conf = convict({
default: '',
env: 'CUSTOM_FOOTER_URL'
},
main_notice_html: {
format: String,
default: '',
env: 'SEND_MAIN_NOTICE_HTML'
},
upload_area_notice_html: {
format: String,
default: '',
env: 'SEND_UPLOAD_AREA_NOTICE_HTML'
},
uploads_list_notice_html: {
format: String,
default: '',
env: 'SEND_UPLOADS_LIST_NOTICE_HTML'
},
download_notice_html: {
format: String,
default: '',
env: 'SEND_DOWNLOAD_NOTICE_HTML'
},
show_thunderbird_sponsor: {
format: Boolean,
default: false,
env: 'SHOW_THUNDERBIRD_SPONSOR'
},
ui_color_primary: {
format: String,
default: '#0a84ff',

View file

@ -6,6 +6,13 @@ const VersionPlugin = require('./build/version_plugin');
const AndroidIndexPlugin = require('./build/android_index_plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
// Fix for node 18+
// See: <https://stackoverflow.com/a/78005686/1000145>
const crypto = require('crypto');
const crypto_orig_createHash = crypto.createHash;
crypto.createHash = algorithm =>
crypto_orig_createHash(algorithm == 'md4' ? 'sha256' : algorithm);
const webJsOptions = {
babelrc: false,
presets: [