52 Commits

Author SHA1 Message Date
dependabot[bot]
9a0f388c11 Bump postcss from 8.2.15 to 8.4.31
Bumps [postcss](https://github.com/postcss/postcss) from 8.2.15 to 8.4.31.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.2.15...8.4.31)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-06 07:43:12 +00:00
Lukas F. Hartmann
a5914ab600 bump to node 18; remove audiowaveform build from dockerfile 2023-09-21 20:58:24 +02:00
Lukas F. Hartmann
1d7a014fd4 Merge branch 'LumberjackOtters-mnt' into mnt 2023-09-21 20:44:11 +02:00
Lukas F. Hartmann
43577337aa update code for sequelize upgrade 2023-09-21 20:40:03 +02:00
PurpleBabar
eb9c767afc feat: dockerfile update 2023-09-20 18:49:39 +02:00
PurpleBabar
cf8902f3c5 feat: move to node v16 and adding a pan tool 2023-09-20 18:27:34 +02:00
Knut Ahlers
d5cd829834 Fix: Remove password reset token after successful reset (#248)
Signed-off-by: Knut Ahlers <knut@ahlers.me>

Signed-off-by: Knut Ahlers <knut@ahlers.me>
2022-11-04 15:52:07 +01:00
Florian Weber
1109537675 Merge pull request #225 from Mejans/mnt
i18n: update Occitan locale
2022-04-28 11:47:52 +02:00
Florian Weber
a6952e877b Merge pull request #238 from medienhaus/mnt
Allow providing auth session token via HTTP header
2022-04-28 11:18:48 +02:00
Florian Weber
65282fef26 Allow providing auth session token via HTTP header 2022-04-27 13:02:57 +02:00
Mejans
8fb37f93a4 Update oc.js 2021-11-10 17:54:02 +01:00
m0ppers
aacc3a8f10 🐛 add opus-dev to Dockerfile (#218)
latest audiowaveform has a dependency on opus-dev and docker wouldn't build the image without having the library
2021-08-10 19:06:21 +02:00
Romuald
6551734ac1 Fix div positioning on Firefox and Safari issue #87 (#201)
* fix div positionning on Firefox and Safari

* Use style to fix css positionning for artifact
2021-08-10 18:04:19 +02:00
nik gaffney
ef0d085e22 docs: add email config (#191) (#210) 2021-07-13 12:12:13 +02:00
dependabot[bot]
f94f05b77a Bump ws from 3.3.1 to 5.2.3 (#209)
Bumps [ws](https://github.com/websockets/ws) from 3.3.1 to 5.2.3.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/3.3.1...5.2.3)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-07-11 17:56:05 +02:00
dependabot[bot]
1504b4bff6 Bump normalize-url from 4.5.0 to 4.5.1 (#208)
Bumps [normalize-url](https://github.com/sindresorhus/normalize-url) from 4.5.0 to 4.5.1.
- [Release notes](https://github.com/sindresorhus/normalize-url/releases)
- [Commits](https://github.com/sindresorhus/normalize-url/commits)

---
updated-dependencies:
- dependency-name: normalize-url
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-07-11 17:55:57 +02:00
nblock
f94c136f26 Restore line tool (#123) 2021-07-11 17:48:22 +02:00
cynthia-rempel
6e76db7108 protect against 'ClickJacking' attacks (#197)
Sites can use this to avoid click-jacking attacks, by ensuring that their content is not embedded into other sites.
2021-07-11 17:48:00 +02:00
p-bo
0179681b9b Add Czech localization (#207) 2021-07-11 17:47:31 +02:00
1337cookie
2ff5ebe849 Empty directory to avoid errors during install. (#206) 2021-07-11 17:45:25 +02:00
mntmn
f413d0e0a3 Security Updates (#194)
* packages: automatic npm audit updates

* packages: update the rest of the packages manually

Co-authored-by: Lukas F. Hartmann <lukas@mntre.com>
2021-06-28 14:31:29 +02:00
Romuald
601211e294 fix user locale handling (#190)
* fix some french translations
add more translations
fix langage preference setup

* handle i18n for delete space or folder

* fix content layout for help text
2021-05-18 17:12:15 +02:00
Romuald
3dd0fce139 change configuration for docker compliance (#189) 2021-05-15 19:52:24 +02:00
dm
50e421d64d fix api-token check 2021-04-20 15:14:41 +02:00
dm
c88433fcff Merge branch 'mnt' of https://github.com/spacedeck/spacedeck-open into mnt 2021-04-07 02:46:09 +02:00
banglashi
ff403a9c23 Merge pull request #179 from arillo/feature/paste-in-place
check for isShift to paste in place
2021-04-07 00:03:51 +02:00
banglashi
79384a2fb2 Merge pull request #178 from arillo/mnt
set language order
2021-04-07 00:03:14 +02:00
dm
7fba188661 check for isShift to paste in place 2021-04-06 23:59:20 +02:00
dm
1242cb84ee language order 2021-04-01 20:31:19 +02:00
dm
8cc027ed95 add dev conf 2021-04-01 19:14:49 +02:00
dm
aa3deb9d72 pass on config in account 2021-04-01 17:46:26 +02:00
banglashi
0cb5ecb08c Merge pull request #169 from bckmnn/dev/puppeteer
replace phantom js with puppeteer
2021-03-24 21:12:47 +01:00
dm
364578b0aa add relative paths to docker 2021-03-24 00:19:37 +01:00
dm
08b9bb4118 empty second page ->
added small margin
2021-03-24 00:13:01 +01:00
dm
63d70c498a Upgrade puppeteer to version 8.0.0
space thumbnails background-size: cover
2021-03-24 00:03:07 +01:00
banglashi
38fffa5644 Merge pull request #154 from eneiluj/fix/space-auth-guest-nickname-issue
Fix space_auth being overriden by unused parameter, add 'nickname' GET param
2021-03-23 23:19:04 +01:00
banglashi
b626a21b83 Merge pull request #155 from eneiluj/enh/default-stroke
Set default stroke to 2 instead of 0
2021-03-23 23:03:33 +01:00
banglashi
6cdb804a8b Merge pull request #119 from juliandavidmr/patch-1
add basic SEO tags
2021-03-23 22:41:40 +01:00
banglashi
89d5a7fd9f Merge pull request #172 from Thorgrimson/mnt
improved README section Installion
2021-03-23 22:36:09 +01:00
banglashi
8ea0fd190f Merge pull request #168 from Mejans/patch-2
i18n update to correct grammar
2021-03-23 22:35:12 +01:00
dm
9018a233a1 add Hungarian 2021-03-23 22:30:37 +01:00
ovari
d196af739c Create hu.js 2021-03-19 20:12:24 +11:00
Thorgrimson
0c877bc20b Update nginx_setup.md 2021-03-07 22:16:34 +01:00
Thorgrimson
803aad6219 Update README.md 2021-03-07 21:30:00 +01:00
Thorgrimson
79cd848cbb Update README.md 2021-03-07 21:02:58 +01:00
Mejans
7a42865c84 Grammatical error
Just a small change
2021-02-17 09:22:24 +01:00
dm
7c8ef82bd1 Merge branch 'mnt' of https://github.com/spacedeck/spacedeck-open into mnt 2021-02-14 12:55:58 +01:00
dm
0e2c6401e0 build first 2021-02-12 20:15:27 +01:00
dm
28c31e9331 add mnt branch to deploy to dev 2021-02-12 20:12:00 +01:00
Julien Veyssier
4df480c8c5 set default stroke to 2 instead of 0, fixes first drawn shapes being invisible
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2021-01-04 16:17:34 +01:00
Julien Veyssier
a184225c8b fix space_auth being overriden by unused parameter, add 'nickname' GET param
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2020-12-27 16:57:27 +01:00
Julian David
0fdeef12ed add basic SEO tags 2020-11-09 20:33:00 -05:00
44 changed files with 18245 additions and 3386 deletions

44
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,44 @@
variables:
CONTAINER_IMAGE: git.universe.io:4567/$CI_PROJECT_PATH
DOCKER_HOST: tcp://docker:2376
stages:
- build
- deploy_dev
- deploy
build:
stage: build
image: docker:stable
services:
- docker:19.03.12-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
script:
- docker image build -t $CONTAINER_IMAGE:$CI_BUILD_REF -t $CONTAINER_IMAGE:latest .
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN git.universe.io:4567
- docker image push $CONTAINER_IMAGE:latest
- docker image push $CONTAINER_IMAGE:$CI_BUILD_REF
only:
- mnt
- custom/freiwerkb
deploy_dev:
stage: deploy
image: alpine
script:
- apk add --update curl
- curl -XPOST $WWW_WEBHOOK
only:
- mnt
- custom/freiwerkb
deploy:
when: manual
stage: deploy
image: alpine
script:
- apk add --update curl
- |
curl -XPOST -K - <<URL
$WWW_WEBHOOKS
URL
only:
- master
- custom/freiwerkb

19
.vscode/launch.json vendored
View File

@@ -4,11 +4,26 @@
{
"type": "node",
"request": "launch",
"name": "Nodemon",
"name": "Launch debug",
"runtimeExecutable": "${workspaceFolder}/node_modules/nodemon/bin/nodemon.js",
"skipFiles": ["<node_internals>/**"],
"program": "${workspaceFolder}/spacedeck.js",
"cwd": "${workspaceFolder}"
"cwd": "${workspaceFolder}",
"env": {
"NODE_APP_INSTANCE" :"dev"
}
},
{
"type": "node",
"request": "launch",
"name": "Launch ldap",
"runtimeExecutable": "${workspaceFolder}/node_modules/nodemon/bin/nodemon.js",
"skipFiles": ["<node_internals>/**"],
"program": "${workspaceFolder}/spacedeck.js",
"cwd": "${workspaceFolder}",
"env": {
"NODE_APP_INSTANCE" :"ldap"
}
}
]
}

8
CHANGELOG.md Normal file
View File

@@ -0,0 +1,8 @@
# Changelog
## [X.X.X] - 2021-03-23
### Changes
- Replaced phantomjs with puppeteer #169
- Create Hungarian language pack #174

View File

@@ -1,26 +1,7 @@
FROM node:10-alpine3.11
FROM node:18-alpine
WORKDIR /app
# build audiowaveform from source
RUN apk add git make cmake gcc g++ libmad-dev libid3tag-dev libsndfile-dev gd-dev boost-dev libgd libpng-dev zlib-dev
RUN apk add zlib-static libpng-static boost-static
RUN apk add autoconf automake libtool gettext
RUN wget https://github.com/xiph/flac/archive/1.3.3.tar.gz
RUN tar xzf 1.3.3.tar.gz
RUN cd flac-1.3.3/ && ./autogen.sh
RUN cd flac-1.3.3/ && ./configure --enable-shared=no
RUN cd flac-1.3.3/ && make
RUN cd flac-1.3.3/ && make install
RUN git clone https://github.com/bbc/audiowaveform.git
RUN mkdir audiowaveform/build/
RUN cd audiowaveform/build/ && cmake -D ENABLE_TESTS=0 -D BUILD_STATIC=1 ..
RUN cd audiowaveform/build/ && make
RUN cd audiowaveform/build/ && make install
# install chromium
RUN apk add --no-cache \
chromium \

View File

@@ -12,7 +12,7 @@ We appreciate filed issues, pull requests and general discussion.
# Features
- Create virtual whiteboards called *Spaces* with virtually unlimited size
- Create virtual whiteboards called _Spaces_ with virtually unlimited size
- Drag & drop images, videos and audio from your computer or the web
- Write and format text with full control over fonts, colors and style
- Draw, annotate and highlight with included graphical shapes
@@ -31,13 +31,13 @@ We appreciate filed issues, pull requests and general discussion.
Spacedeck requires:
- Node.js 10.x: Web Server / API. Download: https://nodejs.org
- Node.js 18.x: Web Server / API. Download: https://nodejs.org
- Graphicsmagick. On non-Linux, Download: http://www.graphicsmagick.org/ On Linux, install via package manager.
- Optionally ffmpeg, audiowaveform and ghostscript. See "Optional Dependencies" below.
To run Spacedeck, you only need Node.JS 10.x.
To install all node dependencies, run (do this once):
To install all node dependencies, run (do this once) after cloning the repository:
npm install
@@ -45,7 +45,6 @@ To install all node dependencies, run (do this once):
See [config/default.json](config/default.json). Set `storage_local_path` for a local sqlite database or `storage_region`, `storage_bucket`, `storage_cdn` and `storage_endpoint` for AWS S3. `mail_provider` may be one of `console` or `smtp`. Also, omit a trailing `/` for the `endpoint`.
## Disable DB logs
```json
@@ -61,6 +60,7 @@ Add a custom array of swatches to your config/default.json.
**You should include the swatch transparent (rgba(0,0,0,0)) so users can remove the color applied.**
## Configure default colors
You can define text, stroke and fill color in your config/default.json.
**You also should include the default colors in your custom swatches palette.**
@@ -107,8 +107,8 @@ For advanced media conversion:
# Data Storage
By default, media files are uploaded to the ```storage``` folder.
The database is stored in ```database.sqlite``` by default.
By default, media files are uploaded to the `storage` folder.
The database is stored in `database.sqlite` by default.
# Other databases (Not officially supported)
@@ -129,16 +129,12 @@ Adapt the other values as needed
"storage_password": "password",
```
# Run with Docker
- configure `config/default.json`
- configure `volumes` section inside `docker-compose.yml`
- point to `database.sqlite` on the host system
- `touch database.sqlite` if it not exists
- point to `storage/` on the host system
- `mkdir storage/` if it not exists
- start the container with `sudo docker-compose up -f docker-compose.yml -d --build`
- adapt your `docker-compose.yml` if needed.
- start the container with `docker-compose up`
(use `-d` for background process and `--build` for rebuilding the image)
# Hacking

View File

@@ -15,7 +15,7 @@
"storage_password": "password",
"storage_local_path": "./storage",
"storage_local_db": "./database.sqlite",
"storage_local_db": "./database/database.sqlite",
"storage_region": "eu-central-1",
"storage_endpoint": "http://localhost:4572",
"storage_bucket": "my_spacedeck_bucket",

0
database/.gitkeep Normal file
View File

View File

@@ -1,5 +1,4 @@
version: "2.0"
services:
spacedeck:
build: .
@@ -7,6 +6,5 @@ services:
ports:
- "9666:9666"
volumes:
- /absolute/path/to/storage:/app/storage
- /absolute/path/to/database.sqlite:/app/database.sqlite
- ./storage:/app/storage
- ./database:/app/database

32
docs/email_setup.md Normal file
View File

@@ -0,0 +1,32 @@
# Configuring Emails
There are several configuration options in `config/default.json`
## Email Relay Configuration
- mail_provider:
* `console`
* `smtp`
- mail_smtp_host:
* the IP address or FQDN of your SMTP email relay
- mail_smtp_port:
* the port used to connect to the email relay
- mail_smtp_secure: true
* whether to use TLS when connecting to the SMTP email relay
- mail_smtp_require_tls:
* `true`: attempt to use TLS even if the email relay doesn't advertise it, don't send the email if TLS isn't supported
* `false`: permits emails to be sents without using TLS
- mail_smtp_user:
* the username for the SMTP email relay.
* comment out this line for an email relay that doesn't use authentication
- mail_smtp_pass
* the password for the SMTP email relay
* comment out this line for an email relay that doesn't use authentication
## Content of Emails
- teamname:
* the team name appears on the emails sent by your spacedeck
- contact_email:
* the email address that appears on emails being sent by your spacedeck
- endpoint:
* the URL that users click on in the emails being sent by your spacedeck

View File

@@ -12,7 +12,7 @@ server {
listen 80;
listen [::]:80;
servername spacedeck.domain.de
server_name spacedeck.domain.de
return 301 https://$server_name$request_uri;
}

View File

@@ -36,10 +36,11 @@ module.exports = {
page.setDefaultTimeout(timeout);
await page.setJavaScriptEnabled(false);
await page.goto(space_url, {waitUntil: 'networkidle2'});
await page.emulateMedia('screen');
await page.emulateMediaType('screen');
if (type=="pdf") {
await page.pdf({path: export_path, printBackground: true, width: space.width+'px', height: space.height+'px' });
let margin = 2;
await page.pdf({path: export_path, printBackground: true, width: space.width+margin+'px', height: space.height+margin+'px' });
}else{
await page.screenshot({path: export_path, printBackground: true});
}

View File

@@ -8,7 +8,8 @@ const path = require('path')
const db = require('../models/db')
const Sequelize = require('sequelize')
const Op = Sequelize.Op
const uuidv4 = require('uuid/v4')
const { v4: uuidv4 } = require('uuid');
require('../models/db')

332
locales/cs.js Normal file
View File

@@ -0,0 +1,332 @@
{
"ok": "OK",
"cancel": "Storno",
"close": "Zavřít",
"open": "Otevřít",
"folder": "Složka",
"save": "Uložit",
"saved": "Uloženo",
"created": "vytvořeno",
"duplicate": "Zduplikovat",
"delete": "Smazat",
"remove": "Odebrat",
"set": "nastavit",
"reset": "resetovat",
"thanks": "Díky",
"share": "Sdílet",
"signup": "Zaregistrovat se",
"login": "Přihlásit se",
"logout": "Odhlásit se",
"email": "E-mailová adresa",
"password": "Heslo",
"forgot_password": "Zapomenuté heslo",
"width": "Šířka",
"height": "Výška",
"nick": "Název",
"role": "Role",
"members": "Členové",
"actions": "Akce",
"or": "nebo",
"you": "vy",
"via": "prostřednictvím",
"by": "od",
"zero": "Nula",
"page": "Stránka",
"new": "Nevé",
"copy": "Zkopírovat",
"home": "Domů",
"owner": "Vlastník",
"space": "Prostor",
"second": "Druhé",
"not_found": "Nenalezeno.",
"untitled_space": "Prostor bez názvu",
"untitled_folder": "Složka bez názvu",
"untitled": "bez názvu",
"sure": "Opravdu to chcete?",
"specify": "Zadejte prosím",
"confirm": "Potvrďte prosím",
"error_unknown_email": "Tato kombinace e-mail/heslo není známa.",
"error_password_confirmation": "Zadání hesla se neshodují.",
"error_domain_blocked": "Doména, ze které přistupujete, je blokována.",
"error_user_email_already_used": "Tato e-mailová adresa už je používána.",
"support": "Podpora pro Spacedeck",
"offline": "Bez připojení k Internetu. Pokud chcete získat další, klikněte.",
"error": "Je nám líto, ale něco se pokazilo. Obraťte se na support@spacedeck.com",
"welcome": "Vítejte",
"claim": "Vaše digitální tabule.",
"trynow": "Vyzkoušet nyní.",
"about": "O nás",
"terms": "Všeobecné podmínky",
"contact": "Kontakt",
"privacy": "Soukromí",
"business_adress": "Adresa firmy",
"post_adress": "Poštovní adresa",
"phone": "Telefon",
"ceo": "Generální ředitel",
"name": "Název",
"confirm_subject": "Potvrzení e-mailu pro Spacedeck",
"confirm_body": "Děkujeme, že jste se zaregistrovali u Spacedeck.\nPokud chcete potvrdit svou e-mailovou adresu, klikněte na následující odkaz.\n",
"confirm_action": "Potvrdit nyní",
"team_invite_membership_subject": "Pozvánka do týmu pro %s",
"team_invite_membership_body": "Byli jste pozváni do %s na Spacedeck. Pokud chcete pozvání přijmout, klikněte na následující odkaz.",
"team_invite_user_body": "Byli jste pozvání do %s na Spacedeck.\nVaše dočasné heslo je „%s“.\nPokud chcete pozvání přijmout, klikněte na následující odkaz.",
"team_invite_admin_body": "%s byl(a) pozván(a) do vašeho týmu: %s. Dočasné heslo je „%s“.",
"team_invite_membership_acction": "Přijmout",
"team_new_member_subject": "Nový člen týmu pro %s zaregistrován",
"team_new_member_body": "%s se právě přidal k týmu %s na Spacedeck.",
"space_invite_membership_subject": "%s vás pozval(a) do prostoru %s ",
"space_invite_membership_body": "Byli jste pozvání %s, abyste se připojili do prostoru %s na Spacedeck. Pokud chcete pozvání přijmout, klikněte na následující odkaz.",
"space_invite_membership_action": "Přijmout",
"folder_invite_membership_subject": "Prostor",
"folder_invite_membership_body": "Byli jste pozvání do týmu na Spacedeck. Pokud chcete pozvání přijmout, kliněte na následující odkaz.",
"folder_invite_membership_acction": "Přijmout",
"login_google": "Přihlásit se Google účtem",
"save_changes": "Uložit změny",
"upgrade": "Přejít na vyšší variantu",
"upgrade_now": "Přejí na vyšší variantu nyní",
"create_space": "Vytvořit prostor",
"create_folder": "Vytvořit složku",
"email_unconfirmed": "E-mail nepotvrzen",
"confirmation_sent": "E-mail odeslán",
"folder_filter": "Filtrovat",
"sort_by": "Seřadit podle",
"last_modified": "Naposledy změněno",
"last_opened": "Naposledy otevřeno",
"title": "Nadpis",
"edit_team": "Upravit tým",
"edit_account": "Upravit účet",
"log_out": "Odhlásit se",
"no_spaces_yet": "Vítejte! Prostory a složky zde můžete vytvářet pomocí tlačítek v levé horním rohu.",
"new_folder_title": "Nový název složky",
"folder_settings": "Nastavení složky",
"upload_cover_image": "Nahrát obrázek pro desky",
"spacedeck_pro_ad_folders": "Se Spacedeck Pro, je možné ve složkách organizovat neomezené množství prostorů a spravovat přístup pro každou ze složek. Chcete se dozvědět víc o funkcích této vyšší varianty?",
"spacedeck_pro_ad_versions": "Se Spacedeck Pro, je možné ukládat neomezený počet verzí každého prostoru a sledovat tak svůj postup nebo si tak ukládat průběžné stavy. Chcete se dozvědět víc o funkcích této vyšší varianty?",
"spacedeck_pro_ad_pdf": "Se Spacedeck Pro, je možné exportovat vaše prostory jako PDF soubory pro účely archivace, odesílání e-mailem nebo tisk. Chcete se dozvědět víc o funkcích této vyšší varianty?",
"spacedeck_pro_ad_zip": "Se Spacedeck Pro, je možné exportovat obsah prostoru jako ZIP balíček. Chcete se dozvědět víc o funkcích této vyšší varianty?",
"spacedeck_pro_ad_colors": "Se Spacedeck Pro, je možné míchat své vlastní barvy pomocí profesionálního voliče barev.",
"profile_caption": "Profil",
"upload_avatar": "Nahrát profilový obrázek",
"uploading_avatar": "Nahrát profilový obrázek…",
"avatar_dimensions": "Doporučené rozměry: 200×200 pixelů.",
"profile_name": "Jméno",
"profile_email": "E-mailová adresa",
"send_again": "Poslat znovu",
"confirmation_sent_long": "E-mail s odkazem pro potvrzení odeslán. Podívejte se do své schránky.",
"confirmation_sent_another": "Odeslán další odkaz pro potvrzení.",
"confirmation_sent_dialog_text": "Poslali jsme vám e-mail vysvětlující jak potvrdit svou e-mailovou adresu.",
"payment_caption": "Platba",
"language_caption": "Jazyk",
"notifications_caption": "Upozornění",
"notifications_option_chat": "E-mailem mne informujte o nových komentářích",
"notifications_option_spaces": "Posílejte mi denní souhrn dění v mých prostorech a složkách",
"password_caption": "Heslo",
"current_password": "Stávající heslo",
"new_password": "Nové heslo",
"verify_password": "Ověřit si heslo",
"change_password": "Změnit si heslo",
"reset_password": "Resetovat heslo",
"terminate_caption": "Smazat účet",
"terminate_warning": "Pokud svůj účet smažete, budou veškeré prostory, složky a zprávy, včetně obsahu, který jste vy a další lidé vytvořili ve vašich prostorech ZLIKVIDOVÁNY.",
"terminate_warning2": "Toto už nepůjde napravit.",
"terminate_reason": "Zpráva",
"terminate_reason_caption": "Pomozte nám zlepšit se sdělením vašeho dúvodu pro zrušení.",
"terminate_terminate": "Ukončit",
"space_blank1": "Vítejte v novém prostoru!",
"space_blank2": "Přetáhněte sem soubory, vkládejte odkazy",
"space_blank3": "nebo použijte níže uvedené nástroje",
"space_blank4": "a zaplňte tento prostor obsahem.",
"draft": "Koncept",
"publish": "Zveřejnit",
"published": "Zveřejněno",
"save_version": "Uložit verzi",
"version_saved": "Verze uložena",
"post": "Odeslat zprávu",
"chat_invite_cta1": "Spolupráce je zábava!",
"chat_invite_cta2": "Proč ",
"chat_invite_cta3": "nepozvat nějaké lidi",
"chat_invite_cta4": "ke společné práci?",
"chat_message_placeholder": "Napiště zprávu od vás…",
"view": "Zobrazit",
"edit": "Upravit",
"present": "Přezentovat",
"chat": "Chat",
"meta": "Meta",
"tool_search": "Hledat",
"tool_upload": "Nahrát",
"tool_text": "Text",
"tool_shape": "Tvar",
"tool_zones": "Oblasti",
"tool_canvas": "Plátno",
"search_media": "Hledat média…",
"type_here": "Pište sem",
"text_formats": "Formáty",
"format_p": "Odstavec",
"format_bullets": "Seznam s odrážkami",
"format_numbers": "Číslovaný seznam",
"format_h1": "Nadpis 1",
"format_h2": "Nadpis 2",
"format_h3": "Nadpis 3",
"font_size": "Velikost písma",
"line_height": "Výška řádku",
"tool_align": "Zarovnat",
"tool_styles": "Styly",
"tool_bullets": "Odrážky",
"tool_numbers": "Čísla",
"tool_font": "Písmo",
"color_fill": "Vyplnit",
"color_stroke": "Čára",
"color_text": "Text",
"tool_type": "Typ",
"tool_box": "Box",
"tool_link": "Odkaz",
"tool_layout": "Rozvržení",
"tool_options": "Předvolby",
"tool_stroke": "Čára",
"tool_delete": "Smazat",
"tool_lock": "Uzamknout",
"tool_copy": "Zkopírovat",
"stack": "Na sebe",
"tool_circle": "Kruh",
"tool_hexagon": "Šestiúhelník",
"tool_square": "Čtverec",
"tool_diamond": "Diamant",
"tool_bubble": "Bublina",
"tool_cloud": "Mrak",
"tool_burst": "Dávka",
"tool_star": "Hvězda",
"tool_heart": "Srdce",
"tool_scribble": "Kreslení",
"tool_line": "Čára",
"tool_arrow": "Šipka",
"search_media_placeholder": "HLedat webová média…",
"add_zone": "Nová oblast",
"palette": "Paleta",
"picker": "Volič",
"background_image_caption": "Obrázek",
"background_color_caption": "Barva",
"upload_background_caption": "Obrázek pro pozadí nahrajete kliknutím",
"upload_background": "Nahrát pozadí",
"access_caption": "Přístup",
"versions_caption": "Verze",
"info_caption": "Informace",
"mode_private": "Soukromé: Upravovat mohou pouze členové",
"mode_public": "Veřejné: Zobrazit si může kdokoli, kdo má odkaz",
"invite_collaborators": "Pozvat spolupracovníky",
"revoke_access": "Zrušit přístup",
"invite": "Odeslat pozvánky",
"invitee_email_address": "E-mailová adresa nového člena",
"optional_message": "Volitelná zpráva",
"role_viewer": "Prohlížející si",
"role_editor": "Editor",
"role_admin": "Správce",
"new_space_title": "Nový název pro prostor",
"team": "Tým",
"search": "Hledat",
"search_no_results": "nic nenalezeno",
"search_clear": "vyčistit hledání",
"rename": "přejmenovat",
"mobile": "mobilní",
"image": "obrázek",
"tool_filter": "filtrovat",
"canel": "kanál",
"invite_membership_action": "akce pozvání člena",
"viewer": "prohlížející si",
"editor": "editor",
"admin": "správce",
"logging_in": "přihlašování se",
"password_confirmation": "Potvrzení hesla",
"confirm_again": "Poslali jsme vám e-mail vysvětlující jak potvrdit svou e-mailovou adresu.",
"confirmed": "Váš účet byl úspěšně potvrzen. Děkujeme.",
"signing_up": "Registrace",
"password_check_inbox": "Podívejte se do své schránky",
"new_space": "Nový prostor",
"tool_more": "Více",
"what_is_your_name": "Vítejte v %s! Zvolte si uživatelské jméno.",
"lang": "cs",
"landing_title": "Vaše tabule na webu.",
"landing_claim": "Spacedeck umožňuje snadno kombinovat všechny možné druhy virtuálních tabulí: textové poznámky, fotky, webové odkazy, dokonce video a zvukové nahrávky. ",
"landing_example": "Lidé Spacedeck používají pro uspořádávání si svých nápadů, v týmech pro zobrazení přehledu projektů, nebo na školách a univerzitách pro pestřejší, propojené zážitky z učení se.",
"spaces": "Mé prostory",
"access_editor_link": "Odkaz pro okamžité upravování",
"access_editor_link_desc": "Tento odkaz pošlete komukoli, kdo by měl být schopen tento prostor okamžitě upravovat, není zapotřebí žádný účet: ",
"access_editor_link_desc_slug": "Tento odkaz obsahuje také název prostoru. ",
"access_anonymous_edit_blocking": "Anonymní editoři mohou měnit pouze své vlastní položky",
"access_current_members": "Stávající členové",
"access_new_members": "Pozvat nové členy",
"access_no_members": "Členové tohoto prostoru se zobrazí zde.",
"comments": "komentáře",
"landing_customers": "Oblíbené u tisíců dalších uživatelů.",
"landing_features_title": "Snadno použitelné.",
"landing_features_text": "Nový Spacedeck 5 má zjednodušené, hezké uživatelské rozhraní, které usnadňuje a zpříjemňuje práci ještě více, než předtím a přitom poskytuje ještě výkonnější funkce:",
"landing_features_1": "<b>Přetahujte sem</b> obrázky, videa a zvukové soubory ze svého počítače nebo webu",
"landing_features_2": "<b>Pište a formátujte text</b>t s úplnou kontrolou nad písmy, barvami a styly",
"landing_features_3": "<b>Kreslete, opatřujte poznámkami a zvýrazňujte</b> pomocí poskytovaných grafických tvarů",
"landing_features_4": "Udělejte ze své tabule <b>přezentaci s přibližováním</b>",
"landing_features_5": "<b>Spolupracujte a chatujte</b> v reálném čase s členy týmu, studenty nebo přáteli.",
"landing_features_6": "<b>Sdílejte prostory</b> prostřednictvím webu nebo e-mailu",
"landing_features_7": "<b>Exportujte svou práci</b> jako tisknutelné PDF nebo ZIP",
"landing_pricing": "Velmi levné.",
"landing_pricing_lite": "Zdarma / osobní použití",
"landing_pricing_lite_text": "Základní verze pro shromažďování obrázků a uchovávání poznámek.",
"landing_pricing_pro_features_list": "<ul><li>Neomezené prostory</li><li>Složky</li><li>Export do PDF a ZIP</li><li>Bez vodoznaků</li><li>Uživatelsky určená pozadí</li><li>Historie aktivit</li><li>20 GB úložiště</li><ul>",
"landing_pricing_pro": "4,90 € za uživatele a měsíc. <br><small>nebo 49,90 € za uživatele a rok</small>",
"landing_pricing_pro_text": "Nabité všemy schopnostmi, které očekáváte.",
"landing_pricing_pro_features": "Nabité všemy schopnostmi, které očekáváte.",
"welcome_subject": "Vítejte ve Spacedeck",
"welcome_body": "Zdravíme!\nDěkujeme, že jste se zaregistrovali ha Spacedeck.<br>Douváme, že se vám práce v prostorech bude líbit.<br>Pamatujte, že váš účet obsahuje neomezený počet spolupracovníků. Klidně sdílejte své prostory přátelům a kolegům po celém světě.",
"invite_emails": "E-mailové adresy (oddělované čárkou)",
"history_recently_updated": "Nedávno aktualizováno",
"history_recently_empty": "Doposud se nic nestalo.",
"parent_folder": "nadřazená složka",
"created_by": "Vytvořil(a)",
"last_updated": "Naposledy aktualizováno",
"feedback_sent": "Děkujeme za zpětnou vazbu!",
"role_member": "Člen",
"team_invite_membership_action": "Přijmout pozvání",
"space_message_subject": "Nová zpráva v prostoru %s",
"space_message_body": "%s napsal(a) v %s: \n",
"pro_ad_history_headline": "Pokud přejdete na Spacedeck Pro, uvidíte zde historii nedávných aktualizací napříš všemi vašimi (sdílenými) prostory.",
"password_reset_subject": "Reset Password for Spacedeck",
"password_reset_body": "Vyžádali jste si resetování vašeho hesla do Spacedeck.\nPokud chcete nastavit nové heslo, klikněte na následující odkaz.",
"password_reset_action": "Resetovat nyní",
"was_offline": "Spojení se Spacedeck bylo přerušeno. Pokud máte neuloženou práci, ponechte tento panel prohlížeče otevřený dokud nebude spojení znovu navázáno, pak znovu proveďte jakoukoli operaci na doposud neuložených objektech.",
"subscription_failed_user_subject": "Problém s vaší platbou za Spacedeck",
"subscription_failed_user_body": "Je nám líto, nepodařilo se nám zpracovat vaší platební metodu. V nastavení svého účtu můžete snadno vytvořit novou, včetně PayPal.",
"subscription_failed_team_subject": "Problém s vaší platbou za Spacedeck",
"subscription_failed_team_body": "Je nám líto, ale nepodařilo se zpracovat platební metodu pro váš týmový účet. Prosíme opravte svou platební metodu co možná nejdříve.",
"team_name": "Název týmu",
"subdomain": "Dílčí doména",
"team_adresses": "E-mailová adresa",
"add": "Přidat",
"invited": "pozván(a)",
"duplicate_destination": "Do které složky chcete tento prostor zduplikovat?",
"duplicate_confirm": "Zduplikovat %s do %s?",
"duplicate_success": "%s bylo zduplikováno do %s.",
"goto_space": "Přejít na prostor %s",
"goto_folder": "Přejít do složky %s",
"stay_here": "Zůstat zde",
"sharing": "Sdílení",
"list": "Exportovat seznam",
"link": "Odkaz",
"download_space": "Stáhnout si prostor",
"download_as_pdf": "Stáhnout si prostor jako PDF",
"type": "Typ",
"download": "Stáhnout si",
"Previous Zone": "Předchozí oblast",
"Next Zone": "Následující oblast",
"promote": "Povýšit",
"demote": "Degradovat",
"more": "Další",
"lock": "Zamknout",
"unlock": "Odemknout",
"follow_present": "Sledovat",
"mute_present": "Nesledovat",
"follow_present_help": "Pokud tento prostor přezentuje někdo další, ostatní členové automaticky sledují prezentaci. Tímto tlačítkem se toto sledování zapíná a vypíná.",
"export": "Export",
"media": "Média",
"tool_edit_text": "Upravit text",
"tool_space_help_part_one": "Pokud chcete přidat obsah, použijte lištu s nástroji.",
"tool_space_help_part_two": "Je možné sem přetáhnout také obrázky, zvukové a video soubory.",
"tool_delete_space": "Opravdu smazat „%s“?"
}

View File

@@ -19,6 +19,7 @@
"logout": "Log out",
"email": "Email Address",
"password": "Password",
"forgot_password": "Forgot Password",
"width": "Width",
"height": "Height",
"nick": "Name",
@@ -198,6 +199,7 @@
"tool_scribble": "Scribble",
"tool_line": "Line",
"tool_arrow": "Arrow",
"tool_pan": "Pan",
"search_media_placeholder": "Search web media…",
"add_zone": "New Zone",
"palette": "Palette",
@@ -324,5 +326,8 @@
"follow_present_help": "If someone else is presenting this Space, the other members automatically follow the presentation. Switch following on or off with this button.",
"export": "Export",
"media": "Media",
"tool_edit_text": "Edit Text"
"tool_edit_text": "Edit Text",
"tool_space_help_part_one": "Use the toolbar to add content.",
"tool_space_help_part_two": "You can also drop images or sound and video files.",
"tool_delete_space": "Really delete \"%s\"?"
}

View File

@@ -20,6 +20,7 @@
"logout": "Se déconnecter",
"email": "Adresse email",
"password": "Mot de passe",
"forgot_password": "Mot de passe oublié",
"width": "Largeur",
"height": "Hauteur",
"nick": "Nom",
@@ -39,9 +40,9 @@
"space": "Espace",
"second": "Seconde",
"not_found": "Pas trouvé.",
"untitled": "sans titre",
"untitled_space": "Espace sans titre",
"untitled_folder": "Dossier sans titre",
"untitled": "sans titre",
"sure": "Êtes-vous sûr ?",
"specify": "Veuillez préciser :",
"confirm": "Veuillez confirmer",
@@ -49,7 +50,7 @@
"error_unknown_email": "Combinaison inconnue de l'email et mot de passe.",
"error_password_confirmation": "Les deux mots de passe ne correspondent pas.",
"error_domain_blocked": "Ce domaine a été désactivé.",
"error_user_email_already_used": "Cette adresse email est déjà enregistré.",
"error_user_email_already_used": "Cette adresse email est déjà enregistrée.",
"support": "Aide Spacedeck",
"offline": "Désolé, mais les serveurs Spacedeck ne peuvent pas être atteint pour le moment. Plus d' informations ici.",
"error": "Désolé, une erreur s'est produite. Veuillez contacter support@spacedeck.com",
@@ -57,12 +58,12 @@
"claim": "Le tableau blanc partagé pour tout le monde",
"trynow": "Essayez-le gratuitement",
"about": "de nous",
"terms": "termes",
"contact": "contact",
"privacy": "sphère privée",
"terms": "Termes",
"contact": "Contact",
"privacy": "Sphère privée",
"business_adress": "Siège social",
"post_adress": "Adresse courrier",
"phone": "téléphone",
"phone": "Téléphone",
"ceo": "Gestionnaire",
"name": "name",
"confirm_subject": "Confirmation de l'email Spacedeck",
@@ -75,11 +76,10 @@
"team_invite_membership_acction": "Accept",
"team_new_member_subject": "New Team Member",
"team_new_member_body": "%s just joined Team %s on Spacedeck.",
"invite_emails": "Entrer les adresses email (séparées pas des virgules)",
"optional_message": "Message personnel (facultatif)",
"space_invite_membership_subject": "Invitation Espace par %s: %s",
"space_invite_membership_body": "Vous avez été invité par %s à Espace \"%s\"",
"space_invite_membership_action": "Accepter L'invitation",
"space_invite_membership_action": "Accepter l'invitation",
"folder_invite_membership_subject": "Space",
"folder_invite_membership_body": "You have been invited to a Team on Spacedeck. Please click on the following link to accept the invitation.",
"folder_invite_membership_acction": "Accept",
@@ -99,7 +99,7 @@
"edit_team": "Modifier l'équipe",
"edit_account": "Modifier le compte",
"log_out": "Déconnecter",
"no_spaces_yet": "Vous ne avez pas encore créé d'espaces.",
"no_spaces_yet": "Vous n'avez pas encore créé d'espace.",
"new_folder_title": "Nouveau titre pour le dossier",
"folder_settings": "Paramètres du dossier",
"upload_cover_image": "Charger image de couverture",
@@ -109,10 +109,10 @@
"spacedeck_pro_ad_zip": "Avec Spacedeck Pro, vous pouvez exporter le contenu d'un espace comme un paquet ZIP. Voulez-vous en savoir plus sur les fonctionnalités Pro?",
"spacedeck_pro_ad_colors": "Avec Spacedeck Pro, vous pouvez mélanger vos propres couleurs en utilisant un sélecteur de couleur professionnelle.",
"profile_caption": "Profil",
"upload_avatar": "Télécharger l'image profil",
"upload_avatar": "Télécharger l'image de profil",
"uploading_avatar": "L'image de profil est téléchargée…",
"avatar_dimensions": "Format suggéré: 200×200 pixels.",
"profile_name": "Name",
"profile_name": "Nom",
"profile_email": "Email",
"send_again": "Renvoyer",
"confirmation_sent_long": "Lien de confirmation email envoyé. Se il vous plaît vérifier votre courrier.",
@@ -126,7 +126,7 @@
"password_caption": "Mot de passe",
"current_password": "Ancien mot de passe",
"new_password": "Nouveau mot de passe",
"verify_password": "Répéter mot de passe",
"verify_password": "Répéter le mot de passe",
"change_password": "Enregistrer",
"reset_password": "Mot de passe oublié ?",
"terminate_caption": "Supprimer le compte",
@@ -208,7 +208,7 @@
"picker": "Mélange",
"background_image_caption": "Image",
"background_color_caption": "Couleur",
"upload_background_caption": "Cliquez ici pour télécharger une image de fond.",
"upload_background_caption": "Cliquer ici pour télécharger une image de fond.",
"upload_background": "Télécharger",
"access_caption": "Accès",
"versions_caption": "Versions",
@@ -222,7 +222,7 @@
"role_editor": "Éditeur",
"role_admin": "Administrateur",
"new_space_title": "Nouveau titre pour l'espace",
"invitee_email_address": "Adresse e-mail de invitee",
"invitee_email_address": "Adresse e-mail de l'invité",
"viewer": "Spectateur",
"editor": "Éditeur",
"admin": "Administrateur",
@@ -237,7 +237,8 @@
"logging_in": "Connexion",
"password_confirmation": "Confirmation du mot de passe",
"confirm_again": "Veuillez consulter votre boîte pour confirmer votre email.",
"confirmed": "Adresse email confirmée avec succès. merci!",
"confirmed": "Adresse email confirmée avec succès. Merci !",
"signing_up": "Signing Up",
"password_check_inbox": "password_check_inbox",
"what_is_your_name": "Bonjour ! Choisir un nom d'utilisateur s'il vous plaît.",
"landing_title": "Le tableau blanc partagé pour tout le monde.",
@@ -271,16 +272,16 @@
"landing_pricing_pro_features": "Avec toute la puissance que vous attendez.",
"welcome_subject": "Bienvenue sur Spacedeck",
"welcome_body": "Merci pour votre inscription à Spacedeck.\nNous espérons que vous aurez plaisir à travailler dans les Espaces. <br> Rappelez-vous que votre compte comprend un nombre illimité de collaborateurs. <br> N''hésitez pas à partager vos espaces avec des amis et collègues du monde entier.",
"invite_emails": "Entrer les adresses email (séparées pas des virgules)",
"history_recently_updated": "Nouvelles",
"history_recently_empty": "Rien ne se passe",
"parent_folder": "Dossier origine",
"created_by": "Créé par",
"last_updated": "Mis à jour",
"history_recently_updated": "Nouvelles",
"history_recently_empty": "Rien ne se passe",
"signing_up": "Signing Up",
"feedback_sent": "Merci pour votre commentaire !",
"role_member": "role_member",
"space_message_subject": "A posté sur %s",
"space_message_body": "%s a commenté dans %s:\n",
"role_member": "role_member",
"password_reset_subject": "Réinitialiser le Mot de passe pour Spacedeck",
"password_reset_body": "Salut !<br><br>Vous avez demandé la réinitialisation de votre Mot de passe.<br>Veuillez cliquer sur le lien suivant pour définir un nouveau Mot de passe.<br>",
"password_reset_action": "Définir un nouveau Mot de passe",
@@ -301,21 +302,26 @@
"goto_space": "Aller à l'espace %s",
"goto_folder": "Aller au dossier %s",
"stay_here": "Reste ici",
"download_space": "télécharger un espace",
"download_as_pdf": "télécharger un espace comme PDF",
"sharing": "Partager",
"list": "Exporter la liste",
"link": "Link",
"download_space": "Télécharger un espace",
"download_as_pdf": "Télécharger un espace comme PDF",
"type": "Type",
"download": "Télécharger",
"Previous Zone": "Zone précédent",
"Next Zone": "Zone suivante",
"list": "liste",
"promote": "promouvoir",
"demote": "rétrograder",
"lock": "bloquer",
"unlock": "déverrouillage",
"link": "link",
"download": "download",
"promote": "Promouvoir",
"demote": "Rétrograder",
"lock": "Bloquer",
"unlock": "Déverrouiller",
"more": "plus",
"follow_present": "Suivre",
"mute_present": "Pas suivre",
"follow_present_help": "follow_present_help",
"media": "Media"
"media": "Media",
"tool_edit_text": "Modifier le texte",
"tool_space_help_part_one": "Utilisez la barre d'outil pour ajouter des éléments.",
"tool_space_help_part_two": "Vous pouvez également déposer des fichiers images, son ou video.",
"tool_delete_space": "Confirmez-vous la suppression de \"%s\" ?"
}

328
locales/hu.js Normal file
View File

@@ -0,0 +1,328 @@
{
"ok": "Rendben",
"cancel": "Mégse",
"close": "Bezárás",
"open": "Megnyitás",
"folder": "Mappa",
"save": "Mentés",
"saved": "Mentve",
"created": "létrehozva",
"duplicate": "Másolás",
"delete": "Törlés",
"remove": "Eltávolítás",
"set": "készlet",
"reset": "alaphelyzet",
"thanks": "Köszönöm",
"share": "Megosztás",
"signup": "Feliratkozás",
"login": "Bejelentkezés",
"logout": "Kijelentkezés",
"email": "E-mail-cím",
"password": "Jelszó",
"width": "Szélesség",
"height": "Magasság",
"nick": "Név",
"role": "Szerepkör",
"members": "Tagok",
"actions": "Műveletek",
"or": "vagy",
"you": "Ön",
"via": "ezen keresztül:",
"by": "szerző:",
"zero": "Nulla",
"page": "Oldal:",
"new": "Új",
"copy": "Másolás",
"home": "Kezdőoldal",
"owner": "Tulajdonos",
"space": "Hely",
"second": "másodperc",
"not_found": "Nem található.",
"untitled_space": "Névtelen hely",
"untitled_folder": "Névtelen mappa",
"untitled": "névtelen",
"sure": "Biztos vagy benne?",
"specify": "Kérjük, részletezze",
"confirm": "Erősítse meg a műveletet",
"error_unknown_email": "Ez az e-mail/jelszó kombináció ismeretlen.",
"error_password_confirmation": "A megadott jelszavak nem egyeznek.",
"error_domain_blocked": "Tartománya letiltva.",
"error_user_email_already_used": "Ez az e-mail cím már használatban van.",
"support": "Spacedeck támogatás",
"offline": "Kapcsolat nélküli üzemmód. Kattintson további információkért.",
"error": "Sajnálom, de valami rosszul ment. Kérjük, lépjen kapcsolatba a support@spacedeck.com-al",
"welcome": "Üdvözöljük",
"claim": "A digitális rajztáblája.",
"trynow": "Próbálja most.",
"about": "Rólunk",
"terms": "Feltételek",
"contact": "Kapcsolat",
"privacy": "Adatvédelem",
"business_adress": "Üzleti cím",
"post_adress": "Posta cím",
"phone": "Telefon",
"ceo": "Ügyvezető igazgató",
"name": "Név",
"confirm_subject": "Spacedeck e-mail megerősítés",
"confirm_body": "Köszönjük, hogy feliratkozott a Spacedeck-re.\nKérjük, hogy kattintson az alábbi linkre az e-mail cím megerősítéséhez.\n",
"confirm_action": "Erősítse meg most",
"team_invite_membership_subject": "Csapat meghívó %-s számára",
"team_invite_membership_body": "Meghívták a(z) %s oldalra a Spacedeck-en. Kattintson a következő hivatkozásra a meghívás elfogadásához.",
"team_invite_user_body": "Meghívták a(z)%s oldalra a Spacedeck-en.\nAz ideiglenes jelszó \"%s\".\n Kérjük, kattintson a következő hivatkozásra a meghívás elfogadásához.",
"team_invite_admin_body": "%s meghívást kapott a csapatodba: %s. Az ideiglenes jelszó \"%s\".",
"team_invite_membership_acction": "Elfogad",
"team_new_member_subject": "A(z) %s új csapattagja feliratkozott",
"team_new_member_body": "%s most csatlakozott a(z) %s csoporthoz a Spacedeck-en.",
"space_invite_membership_subject": "%s meghívott %s helyre",
"space_invite_membership_body": "%s meghívta, hogy csatlakozzon a(z) %s helyre a Spacedecken. Kattintson a következő linkre a meghívás elfogadásához.",
"space_invite_membership_action": "Elfogad",
"folder_invite_membership_subject": "Hely",
"folder_invite_membership_body": "Meghívták a Spacedeck csoportjába. Kérjük, hogy kattintson a következő linkre a meghívás elfogadásához.",
"folder_invite_membership_acction": "Elfogad",
"login_google": "Bejelentkezés a Google-al",
"save_changes": "Változtatások mentése",
"upgrade": "Frissítés",
"upgrade_now": "Frissítés most",
"create_space": "Hely létrehozása",
"create_folder": "Mappa létrehozása",
"email_unconfirmed": "E-mail nincs megerősítve",
"confirmation_sent": "E-mail elküldve",
"folder_filter": "Szűrő",
"sort_by": "Rendezés",
"last_modified": "Utoljára módosítva",
"last_opened": "Utoljára nyitva",
"title": "Cím",
"edit_team": "Csapat szerkesztése",
"edit_account": "Fiók szerkesztése",
"log_out": "Kijelentkezés",
"no_spaces_yet": "Isten hozta! Itt létrehozhat helyeket és mappákat a bal felső sarokban található gombokkal.",
"new_folder_title": "Új cím a mappához",
"folder_settings": "Mappa beállításai",
"upload_cover_image": "Borító kép feltöltése",
"spacedeck_pro_ad_folders": "A Spacedeck Pro segítségével korlátlan mennyiségű helyet foglalhat el a mappákban és kezelheti az egyes mappák hozzáférési vezérléseit. Szeretne többet megtudni a Pro funkcióiról?",
"spacedeck_pro_ad_versions": "A Spacedeck Pro segítségével korlátlan verziókat menthet az egyes helyekről, hogy nyomon kövesse az előrehaladást vagy biztonságban tartsa a pillanatképeket. Szeretne többet megtudni a Pro funkcióiról?",
"spacedeck_pro_ad_pdf": "A Spacedeck Pro segítségével a helyeket éles PDF-fájlokként exportálhatja archiváláshoz, postázáshoz vagy nyomtatáshoz. Szeretne többet megtudni a Pro funkcióiról?",
"spacedeck_pro_ad_zip": "A Spacedeck Pro segítségével exportálhatja a hely tartalmát ZIP-csomagként. Szeretne többet megtudni a Pro funkcióiról?",
"spacedeck_pro_ad_colors": "A Spacedeck Pro segítségével professzionális színválasztóval keverheti össze saját színeit.",
"profile_caption": "Profil",
"upload_avatar": "Avatar feltöltése",
"uploading_avatar": "Avatar feltöltése…",
"avatar_dimensions": "Ajánlott méretek: 200 × 200 képpont.",
"profile_name": "Név",
"profile_email": "E-mail cím",
"send_again": "Küldje újra",
"confirmation_sent_long": "E-mail megerősítő hivatkozáds elküldve.Kérjük, ellenőrizze a beérkező leveleket.",
"confirmation_sent_another": "Egy másik megerősítő link elküldve.",
"confirmation_sent_dialog_text": "E-mailt küldtünk Önnek, amelyben elmagyaráztuk, hogyan erősítse meg e-mail címét.",
"payment_caption": "Fizetés",
"language_caption": "Nyelv",
"notifications_caption": "Értesítések",
"notifications_option_chat": "E-mailben értesítsen az új megjegyzésekről",
"notifications_option_spaces": "Küldjön napi összefoglalót arról, hogy mi történt a helyeim és mappáim között",
"password_caption": "Jelszó",
"current_password": "Jelenlegi jelszó",
"new_password": "Új jelszó",
"verify_password": "Jelszó megerősítése",
"change_password": "Jelszó módosítása",
"reset_password": "Jelszó visszaállítása",
"terminate_caption": "Fiók törlése",
"terminate_warning": "Ha törli a fiókját, akkor az összes hely, mappa és üzenet, beleértve az Ön összes tartalmát és a helyeiben létrehozott más embereket megsemmisül.",
"terminate_warning2": "Ezt nem lehet visszavonni.",
"terminate_reason": "Üzenet",
"terminate_reason_caption": "Segítsen nekünk a fejlesztésben, ha megosztja a lemondás okait.",
"terminate_terminate": "Leállít",
"space_blank1": "Üdvözöljük egy friss, új helyen!",
"space_blank2": "Húzza ide a fájlokat, hivatkozások beillesztése",
"space_blank3": "vagy használja az alábbi eszközöket",
"space_blank4": "hogy ezt a helyet tartalommal töltse meg.",
"draft": "Piszkozat",
"publish": "Közzététel",
"published": "Közzétett",
"save_version": "Verzió mentése",
"version_saved": "Verzió mentve",
"post": "Üzenet küldése",
"chat_invite_cta1": "Az együttműködés szórakoztató!",
"chat_invite_cta2": "Miért ne",
"chat_invite_cta3": "hívjon meg néhány embert",
"chat_invite_cta4": "Önnel dolgozni?",
"chat_message_placeholder": "Írja meg az üzenetét…",
"view": "Nézet",
"edit": "Szerkesztés",
"present": "Jelen van",
"chat": "Csevegés",
"meta": "Meta",
"tool_search": "Keresés",
"tool_upload": "Feltöltés",
"tool_text": "Szöveg",
"tool_shape": "Forma",
"tool_zones": "Zónák",
"tool_canvas": "Vászon",
"search_media": "Keresés a médiában…",
"type_here": "Írja ide",
"text_formats": "Formátumok",
"format_p": "Bekezdés",
"format_bullets": "Listajeles lista",
"format_numbers": "Számozott lista",
"format_h1": "1. címsor",
"format_h2": "2. címsor",
"format_h3": "3. címsor",
"font_size": "Betűméret",
"line_height": "Sormagasság",
"tool_align": "Igazítás",
"tool_styles": "Stílusok",
"tool_bullets": "Felsorolás",
"tool_numbers": "Számok",
"tool_font": "Betűtípus",
"color_fill": "Kitöltés",
"color_stroke": "Vonás",
"color_text": "Szöveg",
"tool_type": "Típus",
"tool_box": "Doboz",
"tool_link": "Hivatkozás",
"tool_layout": "Elrendezés",
"tool_options": "Lehetőségek",
"tool_stroke": "Vonás ",
"tool_delete": "Törlés",
"tool_lock": "Lezár",
"tool_copy": "Másol",
"stack": "Halom",
"tool_circle": "Kör",
"tool_hexagon": "Hatszög",
"tool_square": "Négyzet",
"tool_diamond": "Gyémánt",
"tool_bubble": "Buborék",
"tool_cloud": "Felhő",
"tool_burst": "Sorozatfelvétel",
"tool_star": "Csillag",
"tool_heart": "Szív",
"tool_scribble": "Irkál",
"tool_line": "Vonal",
"tool_arrow": "Nyíl",
"search_media_placeholder": "Keresés az internetes médiában…",
"add_zone": "Új zóna",
"palette": "Paletta",
"picker": "Választó",
"background_image_caption": "Kép",
"background_color_caption": "Szín",
"upload_background_caption": "Kattintson egy háttérkép feltöltéséhez",
"upload_background": "Háttér feltöltése",
"access_caption": "Hozzáférés",
"versions_caption": "Verziók",
"info_caption": "Információ",
"mode_private": "Magán: Csak a tagok tekinthetik meg és szerkeszthetik",
"mode_public": "Nyilvános: A hivatkozás birtokában bárki megtekintheti",
"invite_collaborators": "Hívjon meg együttműködőket",
"revoke_access": "Hozzáférés visszavonása",
"invite": "Meghívók küldése",
"invitee_email_address": "Az új tag e-mail címe",
"optional_message": "Választható üzenet",
"role_viewer": "Néző",
"role_editor": "Szerkesztő",
"role_admin": "Adminisztrátor",
"new_space_title": "Új cím a helynek",
"team": "Csoport",
"search": "Keresés",
"search_no_results": "keresés_nincsenek_eredmények",
"search_clear": "keresés_törlés",
"rename": "Átnevezés",
"mobile": "mobil",
"image": "kép",
"tool_filter": "szűrő",
"canel": "mégse",
"invite_membership_action": "meghívni_tagságot",
"viewer": "néző",
"editor": "szerkesztő",
"admin": "adminisztrátor ",
"logging_in": "bejelentkezés",
"password_confirmation": "Jelszó megerősítése",
"confirm_again": "E-mailt küldtünk Önnek, amelyben elmagyaráztuk, hogyan erősítse meg e-mail címét.",
"confirmed": "Fiókját sikeresen megerősítettük. Köszönjük.",
"signing_up": "Feliratkozás",
"password_check_inbox": "Kérjük, ellenőrizze a beérkező leveleket",
"new_space": "Új hely",
"tool_more": "Több",
"what_is_your_name": "Üdvözöljük a %s oldalon! Kérjük, hogy válasszon egy felhasználónevet.",
"lang": "hu",
"landing_title": "Rajztáblája az interneten.",
"landing_claim": "A Spacedeck segítségével könnyedén kombinálhat mindenféle típusú médiát a virtuális rajztáblákon: szöveges jegyzeteket, fotókat, internetes linkeket, sőt videókat és hangfelvételeket.",
"landing_example": "Az emberek a Spacedeck segítségével szervezik ötleteiket, csoportokban, hogy egy pillantással teljes projekteket láthassanak vagy iskolákban és egyetemeken gazdagabb, összekapcsolt tanulási tapasztalatokkal.",
"spaces": "Saját helyek",
"access_editor_link": "Azonnali hivatkozás szerkesztése",
"access_editor_link_desc": "Adja meg ezt a hivatkozást mindenkinek, akinek képesnek kell lennie a hely azonnali szerkesztésére, nincs szükség fiókra:",
"access_editor_link_desc_slug": "Ez a hivatkozás tartalmazza a hely nevét is.",
"access_anonymous_edit_blocking": "Névtelen szerkesztők csak a saját tételeiket változtathatják meg",
"access_current_members": "Current Members",
"access_new_members": "Új tagok meghívása",
"access_no_members": "A Hely tagjai itt jelennek meg.",
"comments": "hozzászólások",
"landing_customers": "Ezrek bíznak benne.",
"landing_features_title": "Gyerekjáték használni.",
"landing_features_text": "Az új Spacedeck 5 korszerű, gyönyörű felhasználói felülettel rendelkezik, amely minden eddiginél könnyebbé és szórakoztatóbbá teszi munkáját - miközben még erőteljesebb funkciókat kínál:",
"landing_features_1": "<b>Fogd és vidd</b> képeket, videókat és hangokat a számítógépről vagy az internetről",
"landing_features_2": "<b>Szöveg írása és formázása</b> de a betűtípusok, a színek és a stílus teljes ellenőrzésével",
"landing_features_3": "<b>Rajzoljon, kommentáljon és jelöljön ki</b> a mellékelt grafikus alakzatokkal",
"landing_features_4": "</b>Kapcsolja tábláját <b>nagyító prezentációvá</b>",
"landing_features_5": "<b>Együttműködés és csevegés</b> valós időben csoport társaival, diákjaival vagy barátaival. ",
"landing_features_6": "<b>Helyek megosztása</b> az interneten vagy e-mailben",
"landing_features_7": "<b>Exportálja munkáját</b> nyomtatható PDF vagy ZIP formátumban",
"landing_pricing": "Hihetetlenül megfizethető.",
"landing_pricing_lite": "Ingyenes/személyes használat",
"landing_pricing_lite_text": "Az alap, átfogó verzió a képek gyűjtésére és a jegyzetek vezetésére.",
"landing_pricing_pro_features_list": "<ul><li>Korlátlan helyek</li><li>Mappa struktúrák</li><li>PDF és ZIP exportálás</li><li>Nincs vízjel</li><li>Egyéni hátterek</li><li>Tevékenység előzmények</li><li>20 GB tárhely</li><ul>",
"landing_pricing_pro": "€4,90/Felhasználó/hónap. <br><small>or 49,90/Felhasználó /év</small>",
"landing_pricing_pro_text": "Turbófeltöltve minden elvárt erővel.",
"landing_pricing_pro_features": "Turbófeltöltve minden elvárt erővel.",
"welcome_subject": "Üdvözöljük a Spacedeck-en",
"welcome_body": "Üdvözlet!\nKöszönjük, hogy feliratkozott a Spacedeck webhelyre.<br>Reméljük, hogy élvezni fogja a Helyek szolgáltatásban való munkát.<br>Ne feledje, hogy fiókjában korlátlan számú munkatárs található. Nyugodtan ossza meg helyeit barátaival és kollégáival a világ minden tájáról.",
"invite_emails": "E-mail címek (vesszővel elválasztva)",
"history_recently_updated": "Mostanában frissítve",
"history_recently_empty": "Még nem történt semmi.",
"parent_folder": "szülő_mappa",
"created_by": "Készítette",
"last_updated": "Utolsó frissítés",
"feedback_sent": "Köszönjük a visszajelzését!",
"role_member": "Tag",
"team_invite_membership_action": "Meghívás elfogadása",
"space_message_subject": "Új üzenet a következő helyen % s",
"space_message_body": "%s ezt írta %s-ban: \n",
"pro_ad_history_headline": "A Spacedeck Pro verzióra való frissítéskor itt láthatja az összes (megosztott) hely legújabb frissítésének előzményeit.",
"password_reset_subject": "Spacedeck jelszavának visszaállítása",
"password_reset_body": "Ön kérte a Spacedeck jelszavának visszaállítását.\n Kérjük, hogy kattintson a következő hivatkozásra az új jelszó beállításához.",
"password_reset_action": "Visszaállítás most",
"was_offline": "A Spacedeck-hez való kapcsolat megszakadt. Ha nem mentett munkája van, kérjük, tartsa nyitva ezt a böngészőfület a kapcsolat helyreállításáig, majd érintse meg újra a nem mentett objektumokat.",
"subscription_failed_user_subject": "Probléma a Spacedeck fizetésével",
"subscription_failed_user_body": "Sajnos nem tudtuk feldolgozni a fizetési módját. A fiók beállításokban könnyedén létrehozhat egy új fizetési módot, beleértve a PayPalt is.",
"subscription_failed_team_subject": "Probléma a Spacedeck fizetésével",
"subscription_failed_team_body": "Sajnos nem tudtuk feldolgozni a fizetési módját a Team-fiókjához. Kérjük, javítsa ki fizetési módját a lehető leghamarabb.",
"team_name": "Csoport név",
"subdomain": "altartomány",
"team_adresses": "E-mail címek",
"add": "Hozzáadás",
"invited": "meghívott",
"duplicate_destination": "Melyik mappába kívánja másolni ezt a helyet?",
"duplicate_confirm": "A(z)% s másolat% s-ra?",
"duplicate_success": "% s másolva lett% s-ra.",
"goto_space": "Lépjen a(z)% s helyre",
"goto_folder": "Lépjen a(z)% s mappába",
"stay_here": "Maradjon itt",
"sharing": "Megosztás",
"list": "Lista exportálása",
"link": "Hivatkozás",
"download_space": "Hely letöltése ",
"download_as_pdf": "Hely letöltése PDF formátumban",
"type": "Típus",
"download": "Letöltés",
"Previous Zone": "Előző zóna",
"Next Zone": "Következő zóna",
"promote": "Népszerűsít",
"demote": "Lefokoz",
"more": "Több",
"lock": "Lezár",
"unlock": "Felold",
"follow_present": "Követ",
"mute_present": "Követés megszüntetése",
"follow_present_help": "Ha valaki más mutatja be ezt a helyet, a többi tag automatikusan követi az előadást. Ezzel a gombbal kapcsolhatja be vagy ki a követést.",
"export": "Exportál",
"media": "Média",
"tool_edit_text": "Szöveg szerkesztése"
}

View File

@@ -19,6 +19,7 @@
"logout": "Se desconnectar",
"email": "Adreça electronica",
"password": "Senhal",
"forgot_password": "Senhal oblidat",
"width": "Largor",
"height": "Nautor",
"nick": "Escais",
@@ -244,7 +245,7 @@
"what_is_your_name": "La benvenguda a %s! Mercés de causir un escais-nom.",
"lang": "en",
"landing_title": "Vòstre tablèu blanc sul Web.",
"landing_claim": "Spacedeck vos permet de facilament combinar quin que siá tipe de mèdias sus un tablèu virtual: tèxte, nòtas, ligams web, amai vidèos e enregistraments àudio. ",
"landing_claim": "Spacedeck vos permet de facilament combinar quin tipe que siá de mèdias sus un tablèu virtual: tèxte, nòtas, ligams web, amai vidèos e enregistraments àudio. ",
"landing_example": "Lo monde utiliza Spacedeck per organizar lors idèas, en equipa per veire totes los projèctes en una ulhada, a lescòla e a luniversitat pels mai rics, experiéncia daprendissatge connectat.",
"spaces": "Mos espacis",
"access_editor_link": "Ligam de modificacion dirècta",
@@ -323,5 +324,9 @@
"mute_present": "Quitar de seguir",
"follow_present_help": "Se qualquun mai presenta aqueste espaci, los demai membres seguiràn automaticament la presentacion. Basculatz labonament a la presentacion amb aqueste boton.",
"export": "exportar",
"media": "Mèdia"
"media": "Mèdia",
"tool_edit_text": "Editar tèxt",
"tool_space_help_part_one": "Utilizar la barra daisina per apondre de contengut.",
"tool_space_help_part_two": "Podètz tanben lisar dimatges o de fichièrs sons o vidèos.",
"tool_delete_space": "Suprimir « %s » per de bon ?"
}

View File

@@ -1,53 +1,59 @@
'use strict';
"use strict";
const db = require('../models/db');
var config = require('config');
const db = require("../models/db");
var config = require("config");
module.exports = (req, res, next) => {
// authentication via API token
const api_token = req.headers["x-spacedeck-api-token"];
if (api_token && api_token.length > 7) {
db.User.findOne({where: {api_token: api_token}}).then(user => {
db.User.findOne({ where: { api_token: api_token } }).then((user) => {
if (user) {
req.user = user;
next();
}).error(err => {
} else {
res.status(403).json({
"error": "invalid_api-token"
error: "invalid_api-token",
});
next();
}
});
return;
}
// authentication via session/cookie
const token = req.cookies["sdsession"];
let token = req.cookies["sdsession"];
if (!token || token == null) {
// authentication via session/header
token = req.headers["x-spacedeck-auth"];
}
if (token && token != "null" && token != null) {
db.Session.findOne({ where: { token: token } })
.then(session => {
.then((session) => {
if (!session) {
// session not found
next();
}
else db.User.findOne({where: {_id: session.user_id}})
.then(user => {
} else
db.User.findOne({ where: { _id: session.user_id } }).then((user) => {
if (!user) {
var domain = (process.env.NODE_ENV == "production") ? new URL(config.get('endpoint')).hostname : req.headers.hostname;
res.clearCookie('sdsession', { domain: domain });
var domain =
process.env.NODE_ENV == "production"
? new URL(config.get("endpoint")).hostname
: req.headers.hostname;
res.clearCookie("sdsession", { domain: domain });
if (req.accepts("text/html")) {
res.send("Please clear your cookies and try again.");
} else if (req.accepts('application/json')) {
} else if (req.accepts("application/json")) {
res.status(403).json({
"error": "token_not_found"
error: "token_not_found",
});
} else {
res.send("Please clear your cookies and try again.");
}
} else {
req["token"] = token;
req["user"] = user;
@@ -55,11 +61,11 @@ module.exports = (req, res, next) => {
}
});
})
.error(err => {
.catch((err) => {
console.error("Session resolve error", err);
next();
});
} else {
next();
}
}
};

15326
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,47 +11,47 @@
"node": ">=10.0.0"
},
"dependencies": {
"archiver": "1.3.0",
"async": "2.3.0",
"archiver": "5.3.1",
"async": "3.2.4",
"bcryptjs": "2.4.3",
"body-parser": "^1.19.0",
"cheerio": "0.22.0",
"config": "1.25.1",
"cheerio": "1.0.0-rc.12",
"config": "3.3.9",
"cookie-parser": "~1.4.3",
"ejs": "3.1.5",
"ejs": "3.1.9",
"execSync": "latest",
"express": "^4.16.4",
"file-type": "^7.6.0",
"glob": "7.1.1",
"file-type": "^16.5.0",
"glob": "10.3.3",
"gm": "^1.23.1",
"helmet": "^3.5.0",
"i18n-2": "0.6.3",
"helmet": "^7.0.0",
"i18n-2": "0.7.3",
"log-timestamp": "latest",
"mock-aws-s3": "^2.6.0",
"mock-aws-s3": "^4.0.2",
"moment": "^2.19.3",
"morgan": "^1.9.1",
"nodemailer": "^4.6.7",
"puppeteer": "3.0.0",
"read-chunk": "^2.1.0",
"nodemailer": "^6.6.0",
"puppeteer": "^18",
"read-chunk": "^3",
"request": "^2.88.0",
"sanitize-html": "^1.11.1",
"sequelize": "^4.37.6",
"serve-favicon": "~2.4.2",
"sanitize-html": "^2.3.3",
"sequelize": "^6.33.0",
"serve-favicon": "~2.5.0",
"serve-static": "^1.13.1",
"slug": "^1.1.0",
"sqlite3": "^4.0.0",
"umzug": "^2.1.0",
"underscore": "1.8.3",
"uuid": "^3.2.1",
"validator": "7.0.0",
"ws": "3.3.1"
"slug": "^8.2.2",
"sqlite3": "5.*",
"umzug": "^2",
"underscore": "^1.13.1",
"uuid": "^9.0.0",
"validator": "13.9.0",
"ws": "8.13.0"
},
"devDependencies": {
"gulp": "^4.0.2",
"gulp-clean-css": "^4.3.0",
"gulp-concat": "^2.6.1",
"gulp-sass": "^4.0.2",
"nodemon": "^2.0.6"
"gulp-sass": "^5",
"nodemon": "^3.0.1"
},
"main": "app.js",
"description": "",

View File

@@ -8,6 +8,8 @@ var SpacedeckSections = {
data: {
MAX_COLUMNS: 20,
isShift: false,
redo_stack: [],
undo_stack: [],
@@ -62,7 +64,7 @@ var SpacedeckSections = {
active_style: {
border_radius: 0,
stroke: 0,
stroke: 2,
font_family: "Inter",
font_size: 36,
line_height: 1.5,
@@ -206,7 +208,9 @@ var SpacedeckSections = {
Mousetrap.bind('shift+left', function(evt) { this.if_editable(function() {this.nudge_selected_artifacts(-10,0,evt);}) }.bind(this));
Mousetrap.bind('shift+right', function(evt) { this.if_editable(function() {this.nudge_selected_artifacts(10,0,evt);}) }.bind(this));
Mousetrap.bind('space', function(evt) { this.activate_pan_tool(evt); }.bind(this));
Mousetrap.bind(['shift'], function(evt) { this.isShift = true; }.bind(this), 'keydown');
Mousetrap.bind(['shift'], function(evt) { this.isShift = false; }.bind(this), 'keyup');
Mousetrap.bind('shift+up', function(evt) { this.if_editable(function() {this.nudge_selected_artifacts(0,-10,evt);}) }.bind(this));
$(document).bind("beforecopy", this.handle_onbeforecopy.bind(this));
$(window).bind("beforeunload", this.handle_onunload.bind(this));
$(window).bind("resize", this.handle_window_resize.bind(this));
@@ -1356,7 +1360,7 @@ var SpacedeckSections = {
},
reset_stroke: function() {
this.active_style.stroke = 0;
this.active_style.stroke = 2;
this.active_style.border_radius = 0;
this.active_style.stroke_style = "solid";
},
@@ -1714,7 +1718,7 @@ var SpacedeckSections = {
h: h,
stroke_color: this.active_style.stroke_color,
text_color: this.active_style.text_color,
stroke: 0,
stroke: this.active_style.stroke,
fill_color: this.active_style.fill_color,
shape: shape_type,
valign: "middle",
@@ -2292,6 +2296,7 @@ var SpacedeckSections = {
for (var i=0; i<parsed.length; i++) {
if (parsed[i].mime) {
var z = this.highest_z()+1;
if(!this.isShift) {
if (parsed.length==1) {
var w = parsed[i].w;
var h = parsed[i].h;
@@ -2300,10 +2305,11 @@ var SpacedeckSections = {
parsed[i].y = point.y;
parsed[i].z = point.z;
} else {
parsed[i].x = parsed[i].x+50;
parsed[i].y = parsed[i].y+50;
parsed[i].x = parsed[i].x+100;
parsed[i].y = parsed[i].y+100;
parsed[i].y = parsed[i].z+z;
}
}
this.clone_artifact(parsed[i], 0,0, function(a) {
this.multi_select([a]);
}.bind(this));
@@ -2556,6 +2562,17 @@ var SpacedeckSections = {
this.opened_dialog = "none";
},
start_pan: function(evt) {
this.deselect();
if (this.active_tool == "pan") {
this.active_tool = "pointer";
} else {
this.active_tool = "pan";
}
this.opened_dialog = "none";
},
start_drawing_scribble: function(evt) {
this.deselect();
if (this.active_tool == "scribble") {

View File

@@ -99,7 +99,7 @@ var SpacedeckSpaces = {
}.bind(this), {value: dft || "Guest "+parseInt(10000*Math.random()), ok: __("ok"), cancel: __("cancel")});
},
load_space: function(space_id, on_success, on_error, space_auth) {
load_space: function(space_id, on_success, on_error) {
this.folder_spaces_filter="";
this.folder_spaces_search="";
@@ -308,7 +308,8 @@ var SpacedeckSpaces = {
userReady();
}
if (!this.user && space_auth) {
if (!this.user.nickname && space_auth) {
this.guest_nickname = get_query_param("nickname") || this.guest_nickname;
if (this.guest_nickname) {
userReady();
} else {
@@ -486,7 +487,7 @@ var SpacedeckSpaces = {
},
delete_space: function(space) {
smoke.confirm("Really delete "+space.name+"?", function(confirmed) {
smoke.confirm(__("tool_delete_space", space.name), function(confirmed) {
if (!confirmed) return;
var idx = this.active_folder.children.indexOf(space);
@@ -501,7 +502,7 @@ var SpacedeckSpaces = {
this.active_folder.children.splice(idx,1);
}.bind(this));
}.bind(this));
}.bind(this), {ok: __("ok"), cancel: __("cancel")});
},
duplicate_space: function(space) {
@@ -527,7 +528,7 @@ var SpacedeckSpaces = {
space.name = title;
save_space(space);
}
}.bind(this), {value: space.name});
}.bind(this), {value: space.name, ok: __("ok"), cancel: __("cancel")});
},
rename_folder: function(folder) {
@@ -538,7 +539,7 @@ var SpacedeckSpaces = {
folder.name = title;
save_space(folder);
}
}.bind(this), {value: folder.name});
}.bind(this), {value: folder.name, ok: __("ok"), cancel: __("cancel")});
},
edit_space_title: function() {

View File

@@ -121,11 +121,17 @@ function boot_spacedeck() {
var lang = "en";
window.refreshLocale = function() {
if (spacedeck && spacedeck.user && spacedeck.user.preferences) {
lang = spacedeck.user.preferences.language || "en";
var old_lang = lang;
if (spacedeck && spacedeck.user && spacedeck.user.prefs_language) {
lang = spacedeck.user.prefs_language || "en";
} else if (window.browser_lang) {
lang = window.browser_lang;
}
if (lang != old_lang) {
i18n.init({ lng: lang, resStore: window.locales }, function(err, t) {
console.log("i18n initialized: "+lang);
});
}
}
window.refreshLocale();

View File

@@ -733,7 +733,7 @@ function setup_whiteboard_directives() {
return;
}
if (_.include(["zoom", "scribble"], $scope.active_tool)) {
if (_.include(["zoom", "scribble", "pan"], $scope.active_tool)) {
// tools that stay active after use
this.mouse_state = "idle";
$scope.mouse_state = this.mouse_state;

File diff suppressed because one or more lines are too long

View File

@@ -14,7 +14,7 @@ var router = express.Router();
const db = require('../../models/db');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
const uuidv4 = require('uuid/v4');
const { v4: uuidv4 } = require('uuid');
router.get('/:membership_id/accept', function(req, res, next) {
if (req.user) {

View File

@@ -21,7 +21,7 @@ router.post('/', function(req, res) {
var password = req.body["password"];
db.User.findOne({where: {email: email}})
.error(err => {
.catch(err => {
res.sendStatus(404);
})
.then(user => {
@@ -41,7 +41,7 @@ router.post('/', function(req, res) {
};
db.Session.create(session)
.error(err => {
.catch(err => {
console.error("Error creating Session:",err);
res.sendStatus(500);
})

View File

@@ -6,7 +6,7 @@ const os = require('os');
const db = require('../../models/db');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
const uuidv4 = require('uuid/v4');
const { v4: uuidv4 } = require('uuid');
var payloadConverter = require('../../helpers/artifact_converter');
var redis = require('../../helpers/redis');

View File

@@ -3,7 +3,7 @@ var config = require('config');
const db = require('../../models/db');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
const uuidv4 = require('uuid/v4');
const { v4: uuidv4 } = require('uuid');
var redis = require('../../helpers/redis');
var mailer = require('../../helpers/mailer');

View File

@@ -3,7 +3,7 @@ var config = require('config');
const db = require('../../models/db');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
const uuidv4 = require('uuid/v4');
const { v4: uuidv4 } = require('uuid');
var redis = require('../../helpers/redis');
var mailer = require('../../helpers/mailer');

View File

@@ -4,7 +4,7 @@ const os = require('os');
const db = require('../../models/db');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
const uuidv4 = require('uuid/v4');
const { v4: uuidv4 } = require('uuid');
var redis = require('../../helpers/redis');
var mailer = require('../../helpers/mailer');
@@ -188,8 +188,6 @@ router.post('/', function(req, res, next) {
attrs.access_mode = "private";
db.Space.create(attrs).then(createdSpace => {
res.status(201).json(createdSpace);
// create initial admin membership
var membership = {
_id: uuidv4(),

View File

@@ -2,7 +2,8 @@
var config = require('config');
const db = require('../../models/db');
const uuidv4 = require('uuid/v4');
const { v4: uuidv4 } = require('uuid');
const os = require('os');
var mailer = require('../../helpers/mailer');
@@ -84,7 +85,7 @@ router.post('/', function(req, res) {
};
db.User.create(u)
.error(err => {
.catch(err => {
res.sendStatus(400);
})
.then(u => {
@@ -95,7 +96,7 @@ router.post('/', function(req, res) {
creator_id: u._id
};
db.Space.create(homeFolder)
.error(err => {
.catch(err => {
res.sendStatus(400);
})
.then(homeFolder => {
@@ -114,7 +115,7 @@ router.post('/', function(req, res) {
});
res.status(201).json({});
})
.error(err => {
.catch(err => {
res.status(400).json(err);
});
})
@@ -289,7 +290,7 @@ router.post('/password_reset_requests/:confirm_token/confirm', function(req, res
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(password, salt, function(err, hash) {
user.password_hash = hash;
user.password_token = null;
user.password_reset_token = null;
user.save().then(function(updatedUser) {
res.sendStatus(201);
});

View File

@@ -12,7 +12,7 @@ const _ = require('underscore');
const db = require('../models/db');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
const uuidv4 = require('uuid/v4');
const { v4: uuidv4 } = require('uuid');
router.get('/', (req, res) => {
res.render('index', { config:config, user:req.user });
@@ -78,6 +78,22 @@ router.get('/oc', (req, res) => {
res.redirect("/t/oc");
});
router.get('/es/*', (req, res) => {
res.redirect("/t/es");
});
router.get('/es', (req, res) => {
res.redirect("/t/es");
});
router.get('/hu/*', (req, res) => {
res.redirect("/t/hu");
});
router.get('/hu', (req, res) => {
res.redirect("/t/hu");
});
router.get('/en/*', (req, res) => {
res.redirect("/t/en");
});
@@ -87,7 +103,7 @@ router.get('/en', (req, res) => {
});
router.get('/account', (req, res) => {
res.render('spacedeck');
res.render('spacedeck', { config:config });
});
router.get('/login', (req, res) => {

View File

@@ -33,7 +33,7 @@ console.log("Booting Spacedeck Open… (environment: " + app.get('env') + ")");
app.use(logger(isProduction ? 'combined' : 'dev'));
i18n.expressBind(app, {
locales: ["en", "de", "fr", "oc", "es"],
locales: ["de", "en", "es", "fr", "hu", "oc"],
defaultLocale: "en",
cookieName: "spacedeck_locale",
devMode: (app.get('env') == 'development')
@@ -61,7 +61,7 @@ app.use(bodyParser.urlencoded({
}));
app.use(cookieParser());
//app.use(helmet.frameguard())
//app.use(helmet.frameguard({ action: 'SAMEORIGIN' }));
//app.use(helmet.xssFilter())
/*app.use(helmet.hsts({
maxAge: 7776000000,

View File

@@ -3,6 +3,7 @@
.artifact {
position: relative;
line-height: normal;
//-webkit-transform: translate3d(0,0,0); // hw accel
iframe {

View File

@@ -3,11 +3,16 @@
@import "unicode";
@-webkit-keyframes appear {
0% { opacity: 0;}
30% { opacity: 0;}
100% { opacity: 1; }
0% {
opacity: 0;
}
30% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.avatar {
background-color: $blue;
@@ -26,7 +31,9 @@
#user-root {
margin-left: 5px !important;
padding: 0px !important;
.btn {margin-right: 10px; }
.btn {
margin-right: 10px;
}
}
#sidebar.folder-sidebar {
@@ -70,7 +77,9 @@
li {
display: inline-block;
line-height: 44px;
&.active span {color: $light; }
&.active span {
color: $light;
}
span {
color: $medium;
display: inline-block;
@@ -82,8 +91,6 @@
}
}
#folder {
position: absolute;
height: 100%;
@@ -150,7 +157,7 @@
width: 100%;
}
> .icon {
margin-left: -15px
margin-left: -15px;
}
}
@@ -212,15 +219,22 @@
margin: auto;
}
#folder-grid .item {
float: left;
width: 100%;
@media screen and (min-width: 640px) {width: 50%; }
@media screen and (min-width: 800px) {width: 33.333333%; }
@media screen and (min-width: 1000px) {width: 25%; }
@media screen and (min-width: 1200px) {width: 20%; }
@media screen and (min-width: 640px) {
width: 50%;
}
@media screen and (min-width: 800px) {
width: 33.333333%;
}
@media screen and (min-width: 1000px) {
width: 25%;
}
@media screen and (min-width: 1200px) {
width: 20%;
}
}
.compact-hidden {
@@ -265,7 +279,9 @@
cursor: pointer;
.folder-drop {display:none; }
.folder-drop {
display: none;
}
&.appear > a,
&.creating > a {
@@ -349,7 +365,13 @@
background-color: $darker;
position: absolute;
bottom: 2px;
-webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,0)), to(rgba(0,0,0,0.1)));
-webkit-mask-image: -webkit-gradient(
linear,
left top,
left bottom,
from(rgba(0, 0, 0, 0)),
to(rgba(0, 0, 0, 0.1))
);
background-color: black;
pointer-events: none;
}
@@ -394,7 +416,9 @@
background-color: white;
border-radius: $radius * 2;
&:active { opacity: 0.95 !important; }
&:active {
opacity: 0.95 !important;
}
box-shadow: 0 0 30px 1px rgba(0, 0, 0, 0.15);
border: 1px solid black;
@@ -420,6 +444,7 @@
overflow: hidden;
background-color: transparent;
background-size: cover;
border-top-left-radius: $radius * 2;
border-top-right-radius: $radius * 2;

View File

@@ -3,7 +3,12 @@
<head>
<meta charset="utf-8">
<title>Spacedeck Open</title>
<meta name="description" content="">
<meta name="title" content="Spacedeck Open">
<meta name="description" content="Whenever you need to lay out pictures, text notes, video and audio clips on a blank canvas, Spacedeck can help you."/>
<meta name="keywords" content="spacedeck, collaboration, teams, collages, moodboards, teaching, shared whiteboards, design thinking"/>
<meta name="author" content="MNT Research GmbH"/>
<meta name="copyright" content="MNT Research GmbH"/>
<meta name="robots" content="index,follow"/>
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
@@ -24,6 +29,5 @@
<a class="btn btn-md btn-dark btn-round" href="/spaces"><%=__("spaces")%></a>
<a class="btn btn-md btn-dark btn-round" href="/logout"><%=__("logout")%></a>
<% } %>
</div>
</header>

View File

@@ -3,7 +3,7 @@
<a class="btn btn-dark btn-md btn-round btn-icon" href="/spaces">
<span class="icon icon-svg icon-sd6"></span>
</a>
<h5>Edit Account</h5>
<h5><%=__('edit_account')%></h5>
</div>
<div class="header-right pull-right">
@@ -86,7 +86,7 @@
</div>
<div class="form-group">
<button class="btn btn-md btn-dark" v-on:click="save_user()">Save</button>
<button class="btn btn-md btn-dark" v-on:click="save_user()"><%=__('save')%></button>
</div>
</div>
</div>
@@ -111,6 +111,9 @@
<label class="radio" v-bind:class="{checked: user.prefs_language=='es'}" v-on:click="save_user_language('es')">
<input type="radio" id="user-preferences_language" name="language" value="es"><span>Español</span>
</label>
<label class="radio" v-bind:class="{checked: user.prefs_language=='hu'}" v-on:click="save_user_language('hu')">
<input type="radio" id="user-preferences_language" name="language" value="hu"><span>Magyar</span>
</label>
</div>
</div>
@@ -155,7 +158,7 @@
</div>
<div class="collapse" v-bind:class="{in:account=='terminate'}">
<h4>Terminate Account</h4>
<h4><%=__('terminate_caption')%></h4>
<div class="modal-section labels-inline">
<div class="form-group">
<label class="label"><%=__("current_password")%></label>
@@ -174,7 +177,7 @@
</div>
<div class="modal-footer">
<button class="btn btn-stroke-darken btn-md" v-on:click="remove_account(account_remove_password, account_remove_feedback)">Terminate Account</button>
<button class="btn btn-stroke-darken btn-md" v-on:click="remove_account(account_remove_password, account_remove_feedback)"><%=__('terminate_caption')%></button>
</div>
</div>
</div>

View File

@@ -36,7 +36,7 @@
<div class="center alert alert-danger" v-if="login_error">{{login_error}}</div>
<div style="margin-top:2em">
<a href="/password-reset">Forgot Password</a>
<a href="/password-reset"><%= __("forgot_password") %></a>
</div>
</form>
</div>

View File

@@ -43,8 +43,8 @@
<div class="space-empty" v-cloak v-if="active_view == 'space' && !present_mode && active_space_artifacts.length == 0">
<div class="table-fake">
<div class="cell">
<p>Use the toolbar to add content.<br>
You can also drop images or sound and video files.</p>
<p><%= __('tool_space_help_part_one')%><br>
<%= __('tool_space_help_part_two')%></p>
</div>
</div>
</div>

View File

@@ -18,6 +18,11 @@
<button class="btn btn-divider"></button>
<button class="btn btn-icon-labeled btn-transparent" v-on:click="start_pan()" v-bind:class="{active:active_tool=='pan'}" title="<%=__("tool_pan")%>">
<span class="icon icon-move"></span>
<span class="icon-label"><%=__("tool_pan")%></span>
</button>
<div class="dropdown top left light" v-bind:class="{open:opened_dialog=='shapes'}">
<div class="btn-collapse in" title="<%=__("tool_shape")%>">
<button class="btn btn-transparent btn-icon-labeled" v-bind:class="{open:opened_dialog=='shapes'}" v-on:click="open_dialog('shapes')">
@@ -41,6 +46,11 @@
<span class="icon-label"><%=__("tool_arrow")%></span>
</button>
<button class="btn btn-icon-labeled btn-transparent" v-on:click="start_drawing_line()" v-bind:class="{active:active_tool=='line'}" title="<%=__("tool_line")%>">
<span class="icon icon-tool-line"></span>
<span class="icon-label"><%=__("tool_line")%></span>
</button>
<div class="dropdown bottom light center">
<div class="btn-collapse in">
<input type="file" multiple v-on:change="handle_image_file_upload($event)" id="image_file_upload" class="btn btn-transparent btn-icon-labeled" style="position: absolute; z-index: 1; opacity: 0;">

View File

@@ -18,7 +18,7 @@
webEndpoint: location.origin,
apiEndpoint: location.origin,
websocketsEndpoint: location.origin.replace("https:","wss:").replace("http:","ws:"),
options: <%- config.spacedeck ? JSON.stringify(config.spacedeck) : "{}" %>
options: <%- config && config.spacedeck ? JSON.stringify(config.spacedeck) : "{}" %>
};
</script>
@@ -74,15 +74,17 @@
<script type="text/javascript">
window.locales = {};
window.locales.en = {};
window.locales.de = {};
window.locales.fr = {};
window.locales.oc = {};
window.locales.en = {};
window.locales.es = {};
window.locales.en.translation = <%- include("./../locales/en.js") %>;
window.locales.fr = {};
window.locales.hu = {};
window.locales.oc = {};
window.locales.de.translation = <%- include("./../locales/de.js") %>;
window.locales.fr.translation = <%- include("./../locales/fr.js") %>;
window.locales.oc.translation = <%- include("./../locales/oc.js") %>;
window.locales.en.translation = <%- include("./../locales/en.js") %>;
window.locales.es.translation = <%- include("./../locales/es.js") %>;
window.locales.fr.translation = <%- include("./../locales/fr.js") %>;
window.locales.hu.translation = <%- include("./../locales/hu.js") %>;
window.locales.oc.translation = <%- include("./../locales/oc.js") %>;
</script>
</html>

4865
yarn.lock Normal file

File diff suppressed because it is too large Load Diff