-
+
{actions &&
{actions}
@@ -139,7 +140,7 @@ class DashboardView extends React.Component {
{this.isCollectionCreate() &&
@@ -176,6 +177,7 @@ DashboardView.propTypes = {
user: PropTypes.shape({
username: PropTypes.string,
}),
+ t: PropTypes.func.isRequired
};
-export default connect(mapStateToProps, mapDispatchToProps)(DashboardView);
+export default withTranslation()(connect(mapStateToProps, mapDispatchToProps)(DashboardView));
diff --git a/client/modules/User/pages/LoginView.jsx b/client/modules/User/pages/LoginView.jsx
index 20b48b17..f490f5f6 100644
--- a/client/modules/User/pages/LoginView.jsx
+++ b/client/modules/User/pages/LoginView.jsx
@@ -10,6 +10,7 @@ import LoginForm from '../components/LoginForm';
import { validateLogin } from '../../../utils/reduxFormUtils';
import SocialAuthButton from '../components/SocialAuthButton';
import Nav from '../../../components/Nav';
+import ResponsiveForm from '../components/ResponsiveForm';
class LoginView extends React.Component {
constructor(props) {
@@ -79,13 +80,13 @@ LoginView.propTypes = {
user: PropTypes.shape({
authenticated: PropTypes.bool
}),
- t: PropTypes.func.isRequired
+ t: PropTypes.func.isRequired,
};
LoginView.defaultProps = {
user: {
authenticated: false
- }
+ },
};
export default withTranslation()(reduxForm({
diff --git a/client/modules/User/pages/SignupView.jsx b/client/modules/User/pages/SignupView.jsx
index b646a405..55ef1ae1 100644
--- a/client/modules/User/pages/SignupView.jsx
+++ b/client/modules/User/pages/SignupView.jsx
@@ -11,6 +11,8 @@ import apiClient from '../../../utils/apiClient';
import { validateSignup } from '../../../utils/reduxFormUtils';
import SocialAuthButton from '../components/SocialAuthButton';
import Nav from '../../../components/Nav';
+import ResponsiveForm from '../components/ResponsiveForm';
+
class SignupView extends React.Component {
gotoHomePage = () => {
@@ -110,13 +112,13 @@ SignupView.propTypes = {
user: PropTypes.shape({
authenticated: PropTypes.bool
}),
- t: PropTypes.func.isRequired
+ t: PropTypes.func.isRequired,
};
SignupView.defaultProps = {
user: {
authenticated: false
- }
+ },
};
export default withTranslation()(reduxForm({
diff --git a/client/routes.jsx b/client/routes.jsx
index a9d5632c..15f631e4 100644
--- a/client/routes.jsx
+++ b/client/routes.jsx
@@ -1,5 +1,6 @@
import { Route, IndexRoute } from 'react-router';
import React from 'react';
+
import App from './modules/App/App';
import IDEView from './modules/IDE/pages/IDEView';
import MobileIDEView from './modules/IDE/pages/MobileIDEView';
@@ -19,6 +20,7 @@ import MobileDashboardView from './modules/Mobile/MobileDashboardView';
import { getUser } from './modules/User/actions';
import { stopSketch } from './modules/IDE/actions/ide';
import { userIsAuthenticated, userIsNotAuthenticated, userIsAuthorized } from './utils/auth';
+import { mobileFirst, responsiveForm } from './utils/responsive';
const checkAuth = (store) => {
store.dispatch(getUser());
@@ -27,16 +29,17 @@ const checkAuth = (store) => {
// TODO: This short-circuit seems unnecessary - using the mobile navigator (future) should prevent this from being called
const onRouteChange = (store) => {
const path = window.location.pathname;
- if (path.includes('/mobile/preview')) return;
+ if (path.includes('preview')) return;
store.dispatch(stopSketch());
};
const routes = store => (
{ onRouteChange(store); }}>
-
-
-
+
+
+
+
(
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+ {/* Mobile-only Routes */}
+
+
);
diff --git a/client/styles/abstracts/_variables.scss b/client/styles/abstracts/_variables.scss
index 80c924b1..d0f62b27 100644
--- a/client/styles/abstracts/_variables.scss
+++ b/client/styles/abstracts/_variables.scss
@@ -88,6 +88,7 @@ $themes: (
nav-border-color: $middle-light,
error-color: $p5js-pink,
table-row-stripe-color: $medium-light,
+ table-row-stripe-color-alternate: $medium-light,
codefold-icon-open: url(../images/triangle-arrow-down.svg?byUrl),
codefold-icon-closed: url(../images/triangle-arrow-right.svg?byUrl),
@@ -163,6 +164,7 @@ $themes: (
nav-border-color: $middle-dark,
error-color: $p5js-pink,
table-row-stripe-color: $dark,
+ table-row-stripe-color-alternate: $darker,
codefold-icon-open: url(../images/triangle-arrow-down-white.svg?byUrl),
codefold-icon-closed: url(../images/triangle-arrow-right-white.svg?byUrl),
@@ -236,6 +238,7 @@ $themes: (
nav-border-color: $middle-dark,
error-color: $p5-contrast-pink,
table-row-stripe-color: $dark,
+ table-row-stripe-color-alternate: $darker,
codefold-icon-open: url(../images/triangle-arrow-down-white.svg?byUrl),
codefold-icon-closed: url(../images/triangle-arrow-right-white.svg?byUrl),
diff --git a/client/styles/components/_quick-add.scss b/client/styles/components/_quick-add.scss
index 838a1d65..75f93773 100644
--- a/client/styles/components/_quick-add.scss
+++ b/client/styles/components/_quick-add.scss
@@ -1,11 +1,16 @@
.quick-add-wrapper {
min-width: #{600 / $base-font-size}rem;
- overflow-y: scroll;
+ padding: #{24 / $base-font-size}rem;
+ height: 100%;
}
.quick-add {
width: auto;
- padding: #{24 / $base-font-size}rem;
+ overflow-y: scroll;
+ height: 100%;
+ @include themify() {
+ border: 1px solid getThemifyVariable('modal-border-color');
+ }
}
.quick-add__item {
@@ -23,7 +28,7 @@
.quick-add__item:nth-child(odd) {
@include themify() {
- background: getThemifyVariable('table-row-stripe-color');
+ background: getThemifyVariable('table-row-stripe-color-alternate');
}
}
diff --git a/client/utils/responsive.jsx b/client/utils/responsive.jsx
new file mode 100644
index 00000000..05b0d84e
--- /dev/null
+++ b/client/utils/responsive.jsx
@@ -0,0 +1,23 @@
+import React from 'react';
+import { useSelector } from 'react-redux';
+import MediaQuery from 'react-responsive';
+import ResponsiveForm from '../modules/User/components/ResponsiveForm';
+
+export const mobileEnabled = () => (window.process.env.MOBILE_ENABLED === true);
+
+export const mobileFirst = (MobileComponent, Fallback) => (props) => {
+ const { forceDesktop } = useSelector(state => state.editorAccessibility);
+ return (
+
+ {matches => ((matches || forceDesktop || (!mobileEnabled()))
+ ?
+ : )}
+
+ );
+};
+
+export const responsiveForm = DesktopComponent => props => (
+
+
+
+);
diff --git a/package-lock.json b/package-lock.json
index 8abec584..cf191511 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13124,6 +13124,11 @@
}
}
},
+ "css-mediaquery": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz",
+ "integrity": "sha1-aiw3NEkoYYYxxUvTPO3TAdoYvqA="
+ },
"css-select": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
@@ -19020,6 +19025,11 @@
}
}
},
+ "hyphenate-style-name": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
+ "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
+ },
"i18next": {
"version": "19.5.4",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-19.5.4.tgz",
@@ -25866,6 +25876,14 @@
"unquote": "^1.1.0"
}
},
+ "matchmediaquery": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz",
+ "integrity": "sha512-Hlk20WQHRIm9EE9luN1kjRjYXAQToHOIAHPJn9buxBwuhfTHoKUcX+lXBbxc85DVQfXYbEQ4HcwQdd128E3qHQ==",
+ "requires": {
+ "css-mediaquery": "^0.1.2"
+ }
+ },
"material-colors": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz",
@@ -32233,6 +32251,17 @@
}
}
},
+ "react-responsive": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-8.1.0.tgz",
+ "integrity": "sha512-U8Nv2/ZWACIw/fAE9XNPbc2Xo33X5q1bcCASc2SufvJ9ifB+o/rokfogfznSVcvS22hN1rafGi0uZD6GiVFEHw==",
+ "requires": {
+ "hyphenate-style-name": "^1.0.0",
+ "matchmediaquery": "^0.3.0",
+ "prop-types": "^15.6.1",
+ "shallow-equal": "^1.1.0"
+ }
+ },
"react-router": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-3.2.5.tgz",
@@ -34519,8 +34548,7 @@
"shallow-equal": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz",
- "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==",
- "dev": true
+ "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
},
"shallowequal": {
"version": "1.1.0",
diff --git a/package.json b/package.json
index 01f558f9..3d1d85af 100644
--- a/package.json
+++ b/package.json
@@ -201,6 +201,7 @@
"react-hot-loader": "^4.12.19",
"react-i18next": "^11.5.0",
"react-redux": "^7.2.0",
+ "react-responsive": "^8.1.0",
"react-router": "^3.2.5",
"react-split-pane": "^0.1.89",
"react-tabs": "^2.3.1",
diff --git a/server/server.js b/server/server.js
index c9794925..d82aa6d8 100644
--- a/server/server.js
+++ b/server/server.js
@@ -132,10 +132,6 @@ app.get(
// isomorphic rendering
app.use('/', serverRoutes);
-if (process.env.MOBILE_ENABLED) {
- app.use('/mobile', serverRoutes);
-}
-
app.use(assetRoutes);
app.use('/', embedRoutes);
diff --git a/server/views/index.js b/server/views/index.js
index 6aca8975..ecc269c0 100644
--- a/server/views/index.js
+++ b/server/views/index.js
@@ -33,7 +33,7 @@ export function renderIndex() {
window.process.env.UI_COLLECTIONS_ENABLED = ${process.env.UI_COLLECTIONS_ENABLED === 'false' ? false : true};
window.process.env.UPLOAD_LIMIT = ${process.env.UPLOAD_LIMIT ? `${process.env.UPLOAD_LIMIT}` : undefined};
window.process.env.MOBILE_ENABLED = ${process.env.MOBILE_ENABLED ? `${process.env.MOBILE_ENABLED}` : undefined};
- window.process.env.TRANSLATIONS_ENABLED = ${process.env.TRANSLATIONS_ENABLED === 'true' ? true :false};
+ window.process.env.TRANSLATIONS_ENABLED = ${process.env.TRANSLATIONS_ENABLED === 'true' ? true : false};
diff --git a/translations/locales/en-US/translations.json b/translations/locales/en-US/translations.json
index 9ff6b536..8c548068 100644
--- a/translations/locales/en-US/translations.json
+++ b/translations/locales/en-US/translations.json
@@ -88,7 +88,8 @@
"SketchSaved": "Sketch saved.",
"SketchFailedSave": "Failed to save sketch.",
"AutosaveEnabled": "Autosave enabled.",
- "LangChange": "Language changed"
+ "LangChange": "Language changed",
+ "SettingsSaved": "Settings saved."
},
"Toolbar": {
"Preview": "Preview",
@@ -174,18 +175,42 @@
}
},
"Sidebar": {
- "Create": "Create",
- "EnterName": "enter a name",
- "Add": "Add",
- "Folder": "Folder"
+ "Title": "Sketch Files",
+ "ToggleARIA": "Toggle open/close sketch file options",
+ "AddFolder": "Create folder",
+ "AddFolderARIA": "add folder",
+ "AddFile": "Create file",
+ "AddFileARIA": "add file",
+ "UploadFile": "Upload file",
+ "UploadFileARIA": "upload file"
+ },
+ "FileNode": {
+ "OpenFolderARIA": "Open folder contents",
+ "CloseFolderARIA": "Close folder contents",
+ "ToggleFileOptionsARIA": "Toggle open/close file options",
+ "AddFolder": "Create folder",
+ "AddFolderARIA": "add folder",
+ "AddFile": "Create file",
+ "AddFileARIA": "add file",
+ "UploadFile": "Upload file",
+ "UploadFileARIA": "upload file",
+ "Rename": "Rename",
+ "Delete": "Delete"
},
"Common": {
"Error": "Error",
+ "ErrorARIA": "Error",
"Save": "Save",
- "p5logoARIA": "p5.js Logo"
+ "p5logoARIA": "p5.js Logo",
+ "DeleteConfirmation": "Are you sure you want to delete {{name}}?"
},
"IDEView": {
- "SubmitFeedback": "Submit Feedback"
+ "SubmitFeedback": "Submit Feedback",
+ "SubmitFeedbackARIA": "submit-feedback",
+ "AddCollectionTitle": "Add to collection",
+ "AddCollectionARIA":"add to collection",
+ "ShareTitle": "Share",
+ "ShareARIA":"share"
},
"NewFileModal": {
"Title": "Create File",
@@ -308,7 +333,6 @@
"AlreadyHave": "Already have an account?",
"Login": "Log In"
},
-
"EmailVerificationView": {
"Title": "p5.js Web Editor | Email Verification",
"Verify": "Verify your email",
@@ -316,5 +340,139 @@
"Checking": "Validating token, please wait...",
"Verified": "All done, your email address has been verified.",
"InvalidState": "Something went wrong."
+ },
+ "UploadFileModal": {
+ "Title": "Upload File",
+ "CloseButtonARIA": "Close upload file modal",
+ "SizeLimitError": "Error: You cannot upload any more files. You have reached the total size limit of {{sizeLimit}}.\n If you would like to upload more, please remove the ones you aren't using anymore by\n in your "
+ },
+ "FileUploader": {
+ "DictDefaultMessage": "Drop files here or click to use the file browser"
+ },
+ "ErrorModal": {
+ "MessageLogin": "In order to save sketches, you must be logged in. Please ",
+ "Login": "Login",
+ "LoginOr": " or ",
+ "SignUp": "Sign Up",
+ "MessageLoggedOut": "It looks like you've been logged out. Please ",
+ "LogIn": "log in",
+ "SavedDifferentWindow": "The project you have attempted to save has been saved from another window.\n Please refresh the page to see the latest version."
+ },
+ "ShareModal": {
+ "Embed": "Embed",
+ "Present": "Present",
+ "Fullscreen": "Fullscreen",
+ "Edit": "Edit"
+ },
+ "CollectionView": {
+ "TitleCreate": "Create collection",
+ "TitleDefault": "collection"
+ },
+ "Collection": {
+ "Title": "p5.js Web Editor | My collections",
+ "AnothersTitle": "p5.js Web Editor | {{anotheruser}}'s collections",
+ "Share": "Share",
+ "URLLink": "Link to Collection",
+ "AddSketch": "Add Sketch",
+ "DeleteFromCollection": "Are you sure you want to remove {{name_sketch}} from this collection?",
+ "SketchDeleted": "Sketch deleted",
+ "SketchRemoveARIA": "Remove sketch from collection",
+ "DescriptionPlaceholder": "Add description",
+ "Description": "description",
+ "NumSketches": "{{count}} sketch",
+ "NumSketches_plural": "{{count}} sketches",
+ "By":"Collection by ",
+ "NoSketches": "No sketches in collection",
+ "HeaderName": "Name",
+ "HeaderCreatedAt": "Date Added",
+ "HeaderUser": "Owner",
+ "DirectionAscendingARIA": "Ascending",
+ "DirectionDescendingARIA": "Descending",
+ "ButtonLabelAscendingARIA": "Sort by {{displayName}} ascending.",
+ "ButtonLabelDescendingARIA": "Sort by {{displayName}} descending."
+ },
+ "AddToCollectionList": {
+ "Title": "p5.js Web Editor | My collections",
+ "AnothersTitle": "p5.js Web Editor | {{anotheruser}}'s collections",
+ "Empty": "No collections"
+ },
+ "CollectionCreate": {
+ "Title": "p5.js Web Editor | Create collection",
+ "FormError": "Couldn't create collection",
+ "FormLabel": "Collection name",
+ "FormLabelARIA": "name",
+ "NameRequired": "Collection name is required",
+ "Description": "Description (optional)",
+ "DescriptionARIA": "description",
+ "DescriptionPlaceholder": "My fave sketches",
+ "SubmitCollectionCreate": "Create collection"
+ },
+ "DashboardView": {
+ "CreateCollection": "Create collection",
+ "NewSketch": "New sketch",
+ "CreateCollectionOverlay": "Create collection"
+ },
+ "DashboardTabSwitcher": {
+ "Sketches": "Sketches",
+ "Collections": "Collections",
+ "Assets": "Assets"
+ },
+ "CollectionList": {
+ "Title": "p5.js Web Editor | My collections",
+ "AnothersTitle": "p5.js Web Editor | {{anotheruser}}'s collections",
+ "NoCollections": "No collections.",
+ "HeaderName": "Name",
+ "HeaderCreatedAt": "Date Created",
+ "HeaderCreatedAt_mobile": "Created",
+ "HeaderUpdatedAt": "Date Updated",
+ "HeaderUpdatedAt_mobile": "Updated",
+ "HeaderNumItems": "# sketches",
+ "HeaderNumItems_mobile": "# sketches",
+ "DirectionAscendingARIA": "Ascending",
+ "DirectionDescendingARIA": "Descending",
+ "ButtonLabelAscendingARIA": "Sort by {{displayName}} ascending.",
+ "ButtonLabelDescendingARIA": "Sort by {{displayName}} descending.",
+ "AddSketch": "Add Sketch"
+ },
+ "CollectionListRow": {
+ "ToggleCollectionOptionsARIA": "Toggle Open/Close collection options",
+ "AddSketch": "Add sketch",
+ "Delete": "Delete",
+ "Rename": "Rename"
+ },
+ "Overlay": {
+ "AriaLabel": "Close {{title}} overlay"
+ },
+ "QuickAddList":{
+ "ButtonLabelRemove": "Remove from collection",
+ "ButtonLabelAddToCollection": "Add to collection",
+ "View": "View"
+ },
+ "SketchList": {
+ "View": "View",
+ "Title": "p5.js Web Editor | My sketches",
+ "AnothersTitle": "p5.js Web Editor | {{anotheruser}}'s sketches",
+ "ToggleLabelARIA": "Toggle Open/Close Sketch Options",
+ "DropdownRename": "Rename",
+ "DropdownDownload": "Download",
+ "DropdownDuplicate": "Duplicate",
+ "DropdownAddToCollection": "Add to collection",
+ "DropdownDelete": "Delete",
+ "DirectionAscendingARIA": "Ascending",
+ "DirectionDescendingARIA": "Descending",
+ "ButtonLabelAscendingARIA": "Sort by {{displayName}} ascending.",
+ "ButtonLabelDescendingARIA": "Sort by {{displayName}} descending.",
+ "AddToCollectionOverlayTitle": "Add to collection",
+ "HeaderName": "Sketch",
+ "HeaderCreatedAt": "Date Created",
+ "HeaderCreatedAt_mobile": "Created",
+ "HeaderUpdatedAt": "Date Updated",
+ "HeaderUpdatedAt_mobile": "Updated",
+ "NoSketches": "No sketches."
+ },
+ "AddToCollectionSketchList": {
+ "Title": "p5.js Web Editor | My sketches",
+ "AnothersTitle": "p5.js Web Editor | {{anotheruser}}'s sketches",
+ "NoCollections": "No collections."
}
}
diff --git a/translations/locales/es-419/translations.json b/translations/locales/es-419/translations.json
index 0217d46c..089c6768 100644
--- a/translations/locales/es-419/translations.json
+++ b/translations/locales/es-419/translations.json
@@ -88,7 +88,8 @@
"SketchSaved": "Bosquejo guardado.",
"SketchFailedSave": "Fallo al guardar el bosquejo.",
"AutosaveEnabled": "Grabado automático activado.",
- "LangChange": "Lenguaje cambiado"
+ "LangChange": "Lenguaje cambiado",
+ "SettingsSaved": "Configuración guardada."
},
"Toolbar": {
"Preview": "Vista previa",
@@ -174,18 +175,42 @@
}
},
"Sidebar": {
- "Create": "Crear",
- "EnterName": "Introduce un nombre",
- "Add": "Agregar",
- "Folder": "Directorio"
+ "Title": "Archivos de Bosquejo",
+ "ToggleARIA": "Alternar abrir/cerrar opciones de archivo de bosquejo",
+ "AddFolder": "Crear directorio",
+ "AddFolderARIA": "Agregar directorio",
+ "AddFile": "Crear archivo",
+ "AddFileARIA": "agregar archivo",
+ "UploadFile": "Subir archivo",
+ "UploadFileARIA": "Subir archivo"
+ },
+ "FileNode": {
+ "OpenFolderARIA": "Abrir contenidos del directorio",
+ "CloseFolderARIA": "Cerrar contenidos del directorio",
+ "ToggleFileOptionsARIA": "Alternar abrir/cerrar opciones de archivo",
+ "AddFolder": "Crear directorio",
+ "AddFolderARIA": "Agregar directorio",
+ "AddFile": "Crear archivo",
+ "AddFileARIA": "agregar archivo",
+ "UploadFile": "Subir archivo",
+ "UploadFileARIA": "Subir archivo",
+ "Rename": "Renombrar",
+ "Delete": "Borrar"
},
"Common": {
"Error": "Error",
+ "ErrorARIA": "Error",
"Save": "Guardar",
- "p5logoARIA": "Logo p5.js "
+ "p5logoARIA": "Logo p5.js ",
+ "DeleteConfirmation": "¿Estás seguro que quieres borrar {{name}}?"
},
"IDEView": {
- "SubmitFeedback": "Enviar retroalimentación"
+ "SubmitFeedback": "Enviar retroalimentación",
+ "SubmitFeedbackARIA": "Enviar retroalimentación",
+ "AddCollectionTitle": "Agregar a colección",
+ "AddCollectionARIA":"Agregar a colección",
+ "ShareTitle": "Compartir",
+ "ShareARIA":"compartir"
},
"NewFileModal": {
"Title": "Crear Archivo",
@@ -216,7 +241,7 @@
"ResetPasswordView": {
"Title": "Editor Web p5.js | Regenerar Contraseña",
"Reset": "Regenerar Contraseña",
- "Submitted": "Your password reset email should arrive shortly. If you don't see it, check\n in your spam folder as sometimes it can end up there.",
+ "Submitted": "Tu correo para regenerar la contraseña debe llegar pronto. Si no lo ves, revisa\n tu carpeta de spam puesto que algunas veces puede terminar ahí.",
"Login": "Ingresa",
"LoginOr": "o",
"SignUp": "Registráte"
@@ -264,7 +289,7 @@
"AccessTokensTab": "Tokens de acceso"
},
"APIKeyForm": {
- "ConfirmDelete": "¿Estas seguro que quieres borrar {{key_label}}?",
+ "ConfirmDelete": "¿Estás seguro que quieres borrar {{key_label}}?",
"Summary": " Los Tokens de acceso personal actuan como tu contraseña para permitir\n a scripts automáticos acceder al API del Editor. Crea un token por cada script \n que necesite acceso.",
"CreateToken": "Crear nuevo token",
"TokenLabel": "¿Para que es este token?",
@@ -315,5 +340,139 @@
"Checking": "Validando token, por favor espera...",
"Verified": "Concluido, tu correo electrónico ha sido verificado.",
"InvalidState": "Algo salió mal."
+ },
+ "UploadFileModal": {
+ "Title": "Subir Archivo",
+ "CloseButtonARIA": "Cerrar diálogo para subir archivo",
+ "SizeLimitError": "Error: No puedes subir archivos. Has alcanzado el limite de tamaño total de {{sizeLimit}}.\n Si quieres agregar más,por favor remueve alugnos que no estes usando en tus "
+ },
+ "FileUploader": {
+ "DictDefaultMessage": "Deposita los archivos aquí o haz click para usar el navegador de archivos"
+ },
+ "ErrorModal": {
+ "MessageLogin": "Para poder guardar bosquejos, debes ingresar a tu cuenta. Por favor ",
+ "Login": "Ingresa",
+ "LoginOr": " o ",
+ "SignUp": "Registráte",
+ "MessageLoggedOut": "Parece que has salido de tu cuenta. Por favor ",
+ "LogIn": "ingresa",
+ "SavedDifferentWindow": " El proyecto que has intentado guardar ha sido guardado desde otra ventana.\n Por favor refresca la página para ver la versión más actual."
+ },
+ "ShareModal": {
+ "Embed": "Incrustar",
+ "Present": "Presentar",
+ "Fullscreen": "Pantalla Completa",
+ "Edit": "Editar"
+ },
+ "CollectionView": {
+ "TitleCreate": "Crear colección",
+ "TitleDefault": "colección"
+ },
+ "Collection": {
+ "Title": "p5.js Web Editor | Mis colecciones",
+ "AnothersTitle": "Editor Web p5.js | Colecciones de {{anotheruser}}",
+ "Share": "Compartir",
+ "URLLink": "Liga a la Colección",
+ "AddSketch": "Agregar Bosquejo",
+ "DeleteFromCollection": "¿Estás seguro que quieres remover {{name_sketch}} de esta colección?",
+ "SketchDeleted": "El bosquejo fue eliminado",
+ "SketchRemoveARIA": "Remover bosquejo de la colección",
+ "DescriptionPlaceholder": "Agregar descripción",
+ "Description": "descripción",
+ "NumSketches": "{{count}} bosquejo",
+ "NumSketches_plural": "{{count}} bosquejos",
+ "By":"Colección por ",
+ "NoSketches": "No hay bosquejos en la colección",
+ "HeaderName": "Nombre",
+ "HeaderCreatedAt": "Fecha de agregación",
+ "HeaderUser": "Propietario",
+ "DirectionAscendingARIA": "Ascendente",
+ "DirectionDescendingARIA": "Descendente",
+ "ButtonLabelAscendingARIA": "Ordenar por {{displayName}} ascendente.",
+ "ButtonLabelDescendingARIA": "Ordenar por {{displayName}} descendente."
+ },
+ "AddToCollectionList": {
+ "Title": "p5.js Web Editor | Mis colecciones",
+ "AnothersTitle": "Editor Web p5.js | Colecciones de {{anotheruser}}",
+ "Empty": "No hay colecciones"
+ },
+ "CollectionCreate": {
+ "Title": "Editor Web p5.js | Crear colección",
+ "FormError": "No se pudo crear colección",
+ "FormLabel": "Nombre colección ",
+ "FormLabelARIA": "nombre de la colección",
+ "NameRequired": "Se requiere nombre de colección",
+ "Description": "Descripción (opcional)",
+ "DescriptionARIA": "descripción",
+ "DescriptionPlaceholder": "Mis bosquejos favoritos",
+ "SubmitCollectionCreate": "Crear colección"
+ },
+ "DashboardView": {
+ "CreateCollection": "Crear colección",
+ "NewSketch": "Nuevo bosquejo",
+ "CreateCollectionOverlay": "Crear colección"
+ },
+ "DashboardTabSwitcher": {
+ "Sketches": "Bosquejos",
+ "Collections": "Colecciones ",
+ "Assets": "Assets"
+ },
+ "CollectionList": {
+ "Title": "p5.js Web Editor | Mis colecciones",
+ "AnothersTitle": "Editor Web p5.js | Colecciones de {{anotheruser}}",
+ "NoCollections": "No hay colecciones.",
+ "HeaderName": "Nombre",
+ "HeaderCreatedAt": "Fecha Creación",
+ "HeaderCreatedAt_mobile": "Creación",
+ "HeaderUpdatedAt": "Fecha Actualización",
+ "HeaderUpdatedAt_mobile": "Actualización",
+ "HeaderNumItems": "# bosquejos",
+ "HeaderNumItems_mobile": "Bosquejos",
+ "DirectionAscendingARIA": "Ascendente",
+ "DirectionDescendingARIA": "Descendente",
+ "ButtonLabelAscendingARIA": "Ordenar por {{displayName}} ascendente.",
+ "ButtonLabelDescendingARIA": "Ordenar por {{displayName}} descendente.",
+ "AddSketch": "Agregar Bosquejo"
+ },
+ "CollectionListRow": {
+ "ToggleCollectionOptionsARIA": "Alternar Abrir/Cerrar opciones de colección",
+ "AddSketch": "Agregar bosquejo",
+ "Delete": "Borrar",
+ "Rename": "Renombrar"
+ },
+ "Overlay": {
+ "AriaLabel": "Cerrar la capa {{title}}"
+ },
+ "QuickAddList":{
+ "ButtonLabelRemove": "Remove from collection",
+ "ButtonLabelAddToCollection": "Add to collection",
+ "View": "Ver"
+ },
+ "SketchList": {
+ "View": "Ver",
+ "Title": "p5.js Web Editor | Mis bosquejos",
+ "AnothersTitle": "Editor Web p5.js | Bosquejos de {{anotheruser}}",
+ "ToggleLabelARIA": "Alternar Abrir/Cerrar Opciones de Bosquejo",
+ "DropdownRename": "Renombrar",
+ "DropdownDownload": "Descargar",
+ "DropdownDuplicate": "Duplicar",
+ "DropdownAddToCollection": "Agregar a Colección",
+ "DropdownDelete": "Borrar",
+ "DirectionAscendingARIA": "Ascendente",
+ "DirectionDescendingARIA": "Descendente",
+ "ButtonLabelAscendingARIA": "Ordenar por {{displayName}} ascendente.",
+ "ButtonLabelDescendingARIA": "Ordenar por {{displayName}} descendente.",
+ "AddToCollectionOverlayTitle": "Agregar a colección",
+ "HeaderName": "Bosquejo",
+ "HeaderCreatedAt": "Fecha Creación",
+ "HeaderCreatedAt_mobile": "Creación",
+ "HeaderUpdatedAt": "Fecha Actualización",
+ "HeaderUpdatedAt_mobile": "Actualización",
+ "NoSketches": "No hay bosquejos."
+ },
+ "AddToCollectionSketchList": {
+ "Title": "p5.js Web Editor | Mis bosquejos",
+ "AnothersTitle": "Editor Web p5.js | Bosquejos de {{anotheruser}}",
+ "NoCollections": "No hay colecciones."
}
}