mirror of
https://github.com/spacedeck/spacedeck-open.git
synced 2026-01-29 22:45:25 +01:00
Compare commits
52 Commits
pr169
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9a0f388c11 | ||
|
|
a5914ab600 | ||
|
|
1d7a014fd4 | ||
|
|
43577337aa | ||
|
|
eb9c767afc | ||
|
|
cf8902f3c5 | ||
|
|
d5cd829834 | ||
|
|
1109537675 | ||
|
|
a6952e877b | ||
|
|
65282fef26 | ||
|
|
8fb37f93a4 | ||
|
|
aacc3a8f10 | ||
|
|
6551734ac1 | ||
|
|
ef0d085e22 | ||
|
|
f94f05b77a | ||
|
|
1504b4bff6 | ||
|
|
f94c136f26 | ||
|
|
6e76db7108 | ||
|
|
0179681b9b | ||
|
|
2ff5ebe849 | ||
|
|
f413d0e0a3 | ||
|
|
601211e294 | ||
|
|
3dd0fce139 | ||
|
|
50e421d64d | ||
|
|
c88433fcff | ||
|
|
ff403a9c23 | ||
|
|
79384a2fb2 | ||
|
|
7fba188661 | ||
|
|
1242cb84ee | ||
|
|
8cc027ed95 | ||
|
|
aa3deb9d72 | ||
|
|
0cb5ecb08c | ||
|
|
364578b0aa | ||
|
|
08b9bb4118 | ||
|
|
63d70c498a | ||
|
|
38fffa5644 | ||
|
|
b626a21b83 | ||
|
|
6cdb804a8b | ||
|
|
89d5a7fd9f | ||
|
|
8ea0fd190f | ||
|
|
9018a233a1 | ||
|
|
d196af739c | ||
|
|
0c877bc20b | ||
|
|
803aad6219 | ||
|
|
79cd848cbb | ||
|
|
7a42865c84 | ||
|
|
7c8ef82bd1 | ||
|
|
0e2c6401e0 | ||
|
|
28c31e9331 | ||
|
|
4df480c8c5 | ||
|
|
a184225c8b | ||
|
|
0fdeef12ed |
44
.gitlab-ci.yml
Normal file
44
.gitlab-ci.yml
Normal 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
19
.vscode/launch.json
vendored
@@ -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
8
CHANGELOG.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# Changelog
|
||||
|
||||
## [X.X.X] - 2021-03-23
|
||||
|
||||
### Changes
|
||||
|
||||
- Replaced phantomjs with puppeteer #169
|
||||
- Create Hungarian language pack #174
|
||||
21
Dockerfile
21
Dockerfile
@@ -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 \
|
||||
|
||||
26
README.md
26
README.md
@@ -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,7 +60,8 @@ 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 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
|
||||
|
||||
@@ -155,7 +151,7 @@ Spacedeck Open source code is released under the GNU Affero General Public Licen
|
||||
Spacedeck Open - Web-based Collaborative Whiteboard For Rich Media
|
||||
Copyright (C) 2011-2018 Lukas F. Hartmann, Martin Güther
|
||||
Icons and original CSS design copyright by Thomas Helbig
|
||||
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
|
||||
@@ -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
0
database/.gitkeep
Normal 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
32
docs/email_setup.md
Normal 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
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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});
|
||||
}
|
||||
|
||||
@@ -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
332
locales/cs.js
Normal 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“?"
|
||||
}
|
||||
@@ -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\"?"
|
||||
}
|
||||
@@ -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,30 +40,30 @@
|
||||
"space": "Espace",
|
||||
"second": "Seconde",
|
||||
"not_found": "Pas trouvé.",
|
||||
"untitled": "sans titre",
|
||||
"untitled_space": "Espace sans titre",
|
||||
"untitled_folder": "Dossier sans titre",
|
||||
"sure": "Êtes-vous sûr?",
|
||||
"specify": "Veuillez préciser:",
|
||||
"untitled": "sans titre",
|
||||
"sure": "Êtes-vous sûr ?",
|
||||
"specify": "Veuillez préciser :",
|
||||
"confirm": "Veuillez confirmer",
|
||||
"signup_google": "S'inscrire avec Google",
|
||||
"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.",
|
||||
"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",
|
||||
"welcome": "Bienvenue",
|
||||
"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,28 +126,28 @@
|
||||
"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é?",
|
||||
"reset_password": "Mot de passe oublié ?",
|
||||
"terminate_caption": "Supprimer le compte",
|
||||
"terminate_warning": "En supprimant votre compte, vos messages, espaces, dossiers et tout leur contenu seront effacés. Cette action ne peut être annulée.",
|
||||
"terminate_warning2": "Cela ne peut pas être annulée.",
|
||||
"terminate_reason": "Problèmes rencontrés",
|
||||
"terminate_reason_caption": "Aidez-nous à améliorer le produit en précisant les raisons de la suppression de votre compte.",
|
||||
"terminate_terminate": "Supprimer le compte définitivement?",
|
||||
"terminate_terminate": "Supprimer le compte définitivement ?",
|
||||
"space_blank1": "Ceci est votre nouvel espace.",
|
||||
"space_blank2": "Déposez des fichiers, collez des liens web",
|
||||
"space_blank3": "ou utilisez les outils.",
|
||||
"space_blank4": "Soyez créatifs!",
|
||||
"space_blank4": "Soyez créatifs !",
|
||||
"draft": "Conception",
|
||||
"publish": "Publier",
|
||||
"published": "Publié",
|
||||
"save_version": "Enregistrer une version",
|
||||
"version_saved": "Version enregistrée.",
|
||||
"post": "Envoyer",
|
||||
"chat_invite_cta1": "Travailler ensemble est amusant!",
|
||||
"chat_invite_cta1": "Travailler ensemble est amusant !",
|
||||
"chat_invite_cta2": "Pourquoi ",
|
||||
"chat_invite_cta3": "ne pas vous invitez quelques collaborateurs?",
|
||||
"chat_invite_cta3": "ne pas vous invitez quelques collaborateurs ?",
|
||||
"chat_invite_cta4": "",
|
||||
"chat_message_placeholder": "Votre message ici…",
|
||||
"view": "Vue",
|
||||
@@ -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,9 +237,10 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"landing_claim": "Le tableau blanc partagé pour tout le monde.",
|
||||
"landing_example": "Que vous soyez étudiant, enseignant ou chercheur: Avec Spacedeck il est facile pour vous de créer, de gérer et de partager des cours ou le travail en classe. Développez vos théories visuellement. Organisez des notes de recherche, web, images, audio et vidéo.",
|
||||
@@ -271,18 +272,18 @@
|
||||
"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!",
|
||||
"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_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",
|
||||
"was_offline": "The connection to Spacedeck was interrupted. If you have unsaved work, please keep this browser tab open until the connection is re-established, then touch the unsaved objects again.",
|
||||
"subscription_failed_user_subject": "Problem with your Spacedeck Payment",
|
||||
@@ -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
328
locales/hu.js
Normal 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"
|
||||
}
|
||||
@@ -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 l’escòla e a l’universitat pels mai rics, experiéncia d’aprendissatge 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 qualqu’un mai presenta aqueste espaci, los demai membres seguiràn automaticament la presentacion. Basculatz l’abonament 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 d’aisina per apondre de contengut.",
|
||||
"tool_space_help_part_two": "Podètz tanben lisar d’imatges o de fichièrs sons o vidèos.",
|
||||
"tool_delete_space": "Suprimir « %s » per de bon ?"
|
||||
}
|
||||
|
||||
@@ -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 => {
|
||||
req.user = user;
|
||||
next();
|
||||
}).error(err => {
|
||||
res.status(403).json({
|
||||
"error": "invalid_api-token"
|
||||
});
|
||||
next();
|
||||
if (api_token && api_token.length > 7) {
|
||||
db.User.findOne({ where: { api_token: api_token } }).then((user) => {
|
||||
if (user) {
|
||||
req.user = user;
|
||||
next();
|
||||
} else {
|
||||
res.status(403).json({
|
||||
error: "invalid_api-token",
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
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 => {
|
||||
db.Session.findOne({ where: { token: token } })
|
||||
.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 => {
|
||||
console.error("Session resolve error",err);
|
||||
.catch((err) => {
|
||||
console.error("Session resolve error", err);
|
||||
next();
|
||||
});
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
15362
package-lock.json
generated
15362
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
50
package.json
50
package.json
@@ -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": "",
|
||||
|
||||
@@ -193,7 +193,7 @@ var SpacedeckBoardArtifacts = {
|
||||
|
||||
z = a.z;
|
||||
if (z<0) z=0; // fix negative z-index
|
||||
|
||||
|
||||
styles = [
|
||||
"left:" +a.x+"px",
|
||||
"top:" +a.y+"px",
|
||||
@@ -206,7 +206,7 @@ var SpacedeckBoardArtifacts = {
|
||||
if (a.margin_right) styles.push("margin-right:"+a.margin_right+"px");
|
||||
if (a.margin_top) styles.push("margin-top:"+a.margin_top+"px");
|
||||
if (a.margin_bottom) styles.push("margin-bottom:"+a.margin_bottom+"px");
|
||||
|
||||
|
||||
// FIXME: via class logic?
|
||||
if (a.mime.match("vector")) {
|
||||
styles.push("overflow:visible");
|
||||
|
||||
@@ -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,17 +2296,19 @@ var SpacedeckSections = {
|
||||
for (var i=0; i<parsed.length; i++) {
|
||||
if (parsed[i].mime) {
|
||||
var z = this.highest_z()+1;
|
||||
if (parsed.length==1) {
|
||||
var w = parsed[i].w;
|
||||
var h = parsed[i].h;
|
||||
var point = this.find_place_for_item(w,h);
|
||||
parsed[i].x = point.x;
|
||||
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].y = parsed[i].z+z;
|
||||
if(!this.isShift) {
|
||||
if (parsed.length==1) {
|
||||
var w = parsed[i].w;
|
||||
var h = parsed[i].h;
|
||||
var point = this.find_place_for_item(w,h);
|
||||
parsed[i].x = point.x;
|
||||
parsed[i].y = point.y;
|
||||
parsed[i].z = point.z;
|
||||
} else {
|
||||
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]);
|
||||
@@ -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") {
|
||||
|
||||
@@ -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 {
|
||||
@@ -417,7 +418,7 @@ var SpacedeckSpaces = {
|
||||
if (!space_type) space_type = "space";
|
||||
|
||||
var s = {
|
||||
name: space_type == "space" ? __("untitled_space") : __("untitled_folder") ,
|
||||
name: space_type == "space" ? __("untitled_space") : __("untitled_folder"),
|
||||
artifacts: [],
|
||||
space_type: space_type,
|
||||
parent_space_id: this.active_folder._id
|
||||
@@ -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() {
|
||||
|
||||
@@ -121,20 +121,26 @@ 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();
|
||||
|
||||
|
||||
i18n.init({ lng: lang, resStore: window.locales }, function(err, t) {
|
||||
console.log("i18n initialized: "+lang);
|
||||
});
|
||||
|
||||
window.__ = function() {
|
||||
window.__ = function() {
|
||||
var params = Array.prototype.slice.call(arguments);
|
||||
params.shift();
|
||||
window.refreshLocale();
|
||||
|
||||
@@ -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
@@ -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) {
|
||||
|
||||
@@ -16,12 +16,12 @@ router.post('/', function(req, res) {
|
||||
res.status(400).json({});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var email = req.body.email.toLowerCase();
|
||||
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);
|
||||
})
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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');
|
||||
@@ -81,13 +81,13 @@ function listSpacesInFolder(req, res, parent_space_id) {
|
||||
}
|
||||
|
||||
router.get('/', function(req, res, next) {
|
||||
|
||||
|
||||
if (req.query.parent_space_id && req["spaceAuth"]) {
|
||||
// list subspaces of a space authorized anonymously
|
||||
listSpacesInFolder(req, res, req.query.parent_space_id);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!req.user) {
|
||||
res.status(403).json({
|
||||
error: "auth required"
|
||||
@@ -127,11 +127,11 @@ router.get('/', function(req, res, next) {
|
||||
|
||||
} else if (req.query.parent_space_id && req.query.parent_space_id != req.user.home_folder_id) {
|
||||
// list spaces in a folder
|
||||
|
||||
|
||||
listSpacesInFolder(req, res, req.query.parent_space_id);
|
||||
} else {
|
||||
// list home folder and spaces/folders that the user is a member of
|
||||
|
||||
|
||||
db.Membership.findAll({ where: {
|
||||
user_id: req.user._id
|
||||
}}).then(memberships => {
|
||||
@@ -186,10 +186,8 @@ router.post('/', function(req, res, next) {
|
||||
attrs.edit_hash = crypto.randomBytes(64).toString('hex').substring(0, 7);
|
||||
attrs.edit_slug = attrs.edit_slug || slug(attrs.name);
|
||||
attrs.access_mode = "private";
|
||||
|
||||
|
||||
db.Space.create(attrs).then(createdSpace => {
|
||||
res.status(201).json(createdSpace);
|
||||
|
||||
// create initial admin membership
|
||||
var membership = {
|
||||
_id: uuidv4(),
|
||||
@@ -198,7 +196,7 @@ router.post('/', function(req, res, next) {
|
||||
role: "admin",
|
||||
state: "active"
|
||||
};
|
||||
|
||||
|
||||
db.Membership.create(membership).then(() => {
|
||||
res.status(201).json(createdSpace);
|
||||
});
|
||||
|
||||
@@ -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');
|
||||
@@ -32,7 +33,7 @@ router.get('/current', function(req, res, next) {
|
||||
u.token = req.cookies['sdsession'];
|
||||
|
||||
console.log(u);
|
||||
|
||||
|
||||
res.status(200).json(u);
|
||||
} else {
|
||||
res.status(401).json({"error":"user_not_found"});
|
||||
@@ -45,7 +46,7 @@ router.post('/', function(req, res) {
|
||||
res.status(400).json({"error":"email or password missing"});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var email = req.body["email"].toLowerCase();
|
||||
var nickname = req.body["nickname"];
|
||||
var password = req.body["password"];
|
||||
@@ -56,17 +57,17 @@ router.post('/', function(req, res) {
|
||||
res.status(400).json({"error":"password_confirmation"});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (config.invite_code && invite_code != config.invite_code) {
|
||||
res.status(400).json({"error":"Invalid Invite Code."});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!validator.isEmail(email)) {
|
||||
res.status(400).json({"error":"email_invalid"});
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var createUser = function() {
|
||||
bcrypt.genSalt(10, function(err, salt) {
|
||||
bcrypt.hash(password, salt, function(err, hash) {
|
||||
@@ -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 => {
|
||||
@@ -112,9 +113,9 @@ router.post('/', function(req, res) {
|
||||
"state": "pending"
|
||||
}
|
||||
});
|
||||
res.status(201).json({});
|
||||
res.status(201).json({});
|
||||
})
|
||||
.error(err => {
|
||||
.catch(err => {
|
||||
res.status(400).json(err);
|
||||
});
|
||||
})
|
||||
@@ -123,7 +124,7 @@ router.post('/', function(req, res) {
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
db.User.findAll({where: {email: email}})
|
||||
.then(users => {
|
||||
if (users.length == 0) {
|
||||
@@ -193,7 +194,7 @@ router.delete('/:id', (req, res, next) => {
|
||||
// TODO: this doesn't currently work.
|
||||
// all objects (indirectly) belonging to the user have
|
||||
// to be walked and deleted first.
|
||||
|
||||
|
||||
user.destroy().then(err => {
|
||||
if(err)res.status(400).json(err);
|
||||
else res.sendStatus(204);
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
.artifact {
|
||||
position: relative;
|
||||
line-height: normal;
|
||||
//-webkit-transform: translate3d(0,0,0); // hw accel
|
||||
|
||||
iframe {
|
||||
|
||||
@@ -3,12 +3,17 @@
|
||||
@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;
|
||||
font-family: $main-font;
|
||||
@@ -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%;
|
||||
@@ -137,7 +144,7 @@
|
||||
z-index: initial;
|
||||
}
|
||||
|
||||
.folder .icon {
|
||||
.folder .icon {
|
||||
color: $yellow;
|
||||
opacity: 1;
|
||||
}
|
||||
@@ -150,7 +157,7 @@
|
||||
width: 100%;
|
||||
}
|
||||
> .icon {
|
||||
margin-left: -15px
|
||||
margin-left: -15px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -176,30 +183,30 @@
|
||||
// margin-top: -18px;
|
||||
margin-right: -60px;
|
||||
// margin-bottom: -18px;
|
||||
@include transition( all 0.125s ease-in-out);
|
||||
@include transition(all 0.125s ease-in-out);
|
||||
.icon {
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
line-height: 60px;
|
||||
font-size: 13px;
|
||||
position: absolute;
|
||||
@include scale(0,0);
|
||||
@include transition( all 0.125s ease-in-out);
|
||||
@include scale(0, 0);
|
||||
@include transition(all 0.125s ease-in-out);
|
||||
@include opacity(0.25);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
margin-right: -12px;
|
||||
.icon {
|
||||
@include scale(1,1);
|
||||
@include scale(1, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#folder-header {
|
||||
background-color: rgba(41,41,41,0.95);
|
||||
background-color: rgba(245,245,245,0.95);
|
||||
background-color: rgba(41, 41, 41, 0.95);
|
||||
background-color: rgba(245, 245, 245, 0.95);
|
||||
}
|
||||
|
||||
#folder-wrapper {
|
||||
@@ -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 {
|
||||
@@ -256,8 +270,8 @@
|
||||
.item {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
padding-right: $folder-gutter*2;
|
||||
padding-bottom: $folder-gutter*2;
|
||||
padding-right: $folder-gutter * 2;
|
||||
padding-bottom: $folder-gutter * 2;
|
||||
margin-bottom: $folder-gutter;
|
||||
|
||||
position: relative;
|
||||
@@ -265,36 +279,38 @@
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
.folder-drop {display:none; }
|
||||
.folder-drop {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.appear > a,
|
||||
&.creating > a {
|
||||
opacity: 0;
|
||||
-webkit-animation: appear 0.25s ease-out 0.05s;
|
||||
-moz-animation: appear 0.25s ease-out 0.05s;
|
||||
-ms-animation: appear 0.25s ease-out 0.05s;
|
||||
-o-animation: appear 0.25s ease-out 0.05s;
|
||||
animation: appear 0.25s ease-out 0.05s;
|
||||
-moz-animation: appear 0.25s ease-out 0.05s;
|
||||
-ms-animation: appear 0.25s ease-out 0.05s;
|
||||
-o-animation: appear 0.25s ease-out 0.05s;
|
||||
animation: appear 0.25s ease-out 0.05s;
|
||||
|
||||
-webkit-animation-fill-mode: forwards;
|
||||
-moz-animation-fill-mode: forwards;
|
||||
-ms-animation-fill-mode: forwards;
|
||||
-o-animation-fill-mode: forwards;
|
||||
animation-fill-mode: forwards;
|
||||
-moz-animation-fill-mode: forwards;
|
||||
-ms-animation-fill-mode: forwards;
|
||||
-o-animation-fill-mode: forwards;
|
||||
animation-fill-mode: forwards;
|
||||
}
|
||||
|
||||
&.deleting > a {
|
||||
-webkit-animation: disappear 0.25s ease-out 0.05s;
|
||||
-moz-animation: disappear 0.25s ease-out 0.05s;
|
||||
-ms-animation: disappear 0.25s ease-out 0.05s;
|
||||
-o-animation: disappear 0.25s ease-out 0.05s;
|
||||
animation: disappear 0.25s ease-out 0.05s;
|
||||
-moz-animation: disappear 0.25s ease-out 0.05s;
|
||||
-ms-animation: disappear 0.25s ease-out 0.05s;
|
||||
-o-animation: disappear 0.25s ease-out 0.05s;
|
||||
animation: disappear 0.25s ease-out 0.05s;
|
||||
|
||||
-webkit-animation-fill-mode: forwards;
|
||||
-moz-animation-fill-mode: forwards;
|
||||
-ms-animation-fill-mode: forwards;
|
||||
-o-animation-fill-mode: forwards;
|
||||
animation-fill-mode: forwards;
|
||||
-moz-animation-fill-mode: forwards;
|
||||
-ms-animation-fill-mode: forwards;
|
||||
-o-animation-fill-mode: forwards;
|
||||
animation-fill-mode: forwards;
|
||||
}
|
||||
|
||||
&.tag-important > a {
|
||||
@@ -308,7 +324,7 @@
|
||||
|
||||
&.dropping {
|
||||
.folder-drop {
|
||||
display:block;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -360,7 +382,7 @@
|
||||
.fav-toggle {
|
||||
margin-right: -12px;
|
||||
.icon {
|
||||
@include scale(1,1);
|
||||
@include scale(1, 1);
|
||||
@include opacity(1);
|
||||
}
|
||||
}
|
||||
@@ -384,7 +406,7 @@
|
||||
|
||||
> a {
|
||||
/* aspect ratio without spacer image */
|
||||
&:before{
|
||||
&:before {
|
||||
content: "";
|
||||
display: block;
|
||||
padding-top: 100%; /* initial ratio of 1:1*/
|
||||
@@ -392,9 +414,11 @@
|
||||
}
|
||||
|
||||
background-color: white;
|
||||
border-radius: $radius*2;
|
||||
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;
|
||||
@@ -406,7 +430,7 @@
|
||||
font-weight: 400;
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
border-radius: $radius*2;
|
||||
border-radius: $radius * 2;
|
||||
position: relative;
|
||||
|
||||
.item-thumbnail {
|
||||
@@ -420,8 +444,9 @@
|
||||
overflow: hidden;
|
||||
|
||||
background-color: transparent;
|
||||
border-top-left-radius: $radius*2;
|
||||
border-top-right-radius: $radius*2;
|
||||
background-size: cover;
|
||||
border-top-left-radius: $radius * 2;
|
||||
border-top-right-radius: $radius * 2;
|
||||
|
||||
border-bottom-left-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
@@ -431,7 +456,7 @@
|
||||
|
||||
.item-title {
|
||||
display: block;
|
||||
border-top: 1px solid rgba(0,0,0,0.05);
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.05);
|
||||
background-color: white;
|
||||
font-size: 18px;
|
||||
width: 100%;
|
||||
@@ -439,15 +464,15 @@
|
||||
left: 0px;
|
||||
bottom: 0px;
|
||||
position: absolute;
|
||||
border-bottom-left-radius: $radius*2;
|
||||
border-bottom-right-radius: $radius*2;
|
||||
border-bottom-left-radius: $radius * 2;
|
||||
border-bottom-right-radius: $radius * 2;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
color: $dark;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
|
||||
.thumbnail-loading {
|
||||
position: absolute;
|
||||
z-index: 0;
|
||||
@@ -464,11 +489,11 @@
|
||||
}
|
||||
|
||||
.item-meta {
|
||||
border-top: 2px solid rgba(0,0,0,0.025);
|
||||
border-radius: 2*$radius;
|
||||
border-top: 2px solid rgba(0, 0, 0, 0.025);
|
||||
border-radius: 2 * $radius;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
|
||||
|
||||
@include clearfix;
|
||||
color: $medium;
|
||||
position: absolute;
|
||||
@@ -493,8 +518,8 @@
|
||||
left: 0px;
|
||||
bottom: 0px;
|
||||
position: relative;
|
||||
border-bottom-left-radius: $radius*2;
|
||||
border-bottom-right-radius: $radius*2;
|
||||
border-bottom-left-radius: $radius * 2;
|
||||
border-bottom-right-radius: $radius * 2;
|
||||
//white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
@@ -509,7 +534,7 @@
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: $folder-gutter*2;
|
||||
right: $folder-gutter * 2;
|
||||
color: $medium;
|
||||
font-size: 11px;
|
||||
font-family: $main-font;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -110,7 +110,10 @@
|
||||
</label>
|
||||
<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>
|
||||
<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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;">
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user