Page: /
"
+"div>"
msgstr ""
-"
Página: /
"
+"
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:76
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:74
msgid ""
"
Ok, widgets have been installed successfuly.
Next step is to add "
"the YouTube Browser widget to the workspace.
"
@@ -284,15 +180,15 @@ msgstr ""
"
Ok, los widgets se han instalado correctamente.
El próximo paso es "
"añadir el widget YouTube Browser al entorno de trabajo.
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:77
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:75
msgid "Click the
Edit button"
msgstr "Haz click en el botón
Editar"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:79
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:77
msgid "Click the
Add components button"
msgstr "Haz click en el botón
Añadir componentes"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:81
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:79
msgid ""
"By typing \"browser\" we can filter widgets that contains in their name or "
"description these words"
@@ -300,7 +196,7 @@ msgstr ""
"Escribiendo \"browser\" filtraremos los widgets que contengan esta palabra "
"en el nombre o en la descripción"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:84
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:82
msgid ""
"Once you have the results, you can add the widget. So click
Add to "
"workspace"
@@ -308,7 +204,7 @@ msgstr ""
"Una vez que aparecen los resultados, puedes añadir el widget. Así que haz "
"click en
Añadir al entorno de trabajo"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:85
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:83
msgid ""
"
Great! That was easy, wasn't "
"it?.
Let's continue adding the Input Box widget.
"
@@ -316,19 +212,19 @@ msgstr ""
"
¡Genial! A que ha sido fácil, "
"¿no?.
Vamos a continuar añadiendo el widget Input Box.
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:86
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:84
msgid "Typing
input box..."
msgstr "Escribiendo
input box..."
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:89
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:87
msgid "Click
Add to workspace"
msgstr "Haz click en
Añadir al entorno de trabajo"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:90
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:88
msgid "Close the component sidebar"
msgstr "Cierra el panel lateral"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:92
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:90
msgid ""
"
One of the main features of WireCloud is that you can edit your "
"workspaces' layout not only by adding and removing widgets, but also moving, "
@@ -338,33 +234,33 @@ msgstr ""
"la distribución de los entornos de trabajo, no solo añadiendo y borrando "
"widgets, sino moviéndolos, redimensionándolos, renombrándolos, etc.
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:93
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:91
msgid "Drag & drop to resize the widget"
msgstr "Arrastra y suelta para redimensionar el widget"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:94
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:92
msgid "Drag & drop to move the widget"
msgstr "Arrastra y suelta para mover el widget"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:95
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:99
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:93
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:97
msgid "Open
Input Box menu"
msgstr "Abre el menú del
Input Box"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:96
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:94
msgid "Click
Rename"
msgstr "Haz click en
Renombrar"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:96
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:57
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:66
-#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:63
-#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:57
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:64
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:94
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:50
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:121
+#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:89
+#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:48
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:56
msgid "Rename"
msgstr "Renombrar"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:97
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:95
msgid ""
"Enter a new name for the widget (e.g
Search) and press
Enter"
"kbd> or click outside the title"
@@ -372,7 +268,7 @@ msgstr ""
"Escribe un nuevo nombre para el widget (por ejemplo: Búsqueda) y "
"pulsa la tecla Enter o pulsa fuera del título"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:98
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:96
msgid ""
"Also, some widgets can be parameterized through settings giving you the "
"chance to use them for very general purporses.
"
@@ -380,37 +276,37 @@ msgstr ""
"Además, algunos widget pueden ser parametrizados a través de preferencias "
"permitiendo su uso para tareas generales.
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:100
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:98
#: static/js/wirecloud/Tutorials/BehaviourOrientedWiring.js:236
msgid "Click Settings"
msgstr "Haz click en Configurar"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:106
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:104
msgid "Write a label for the input, e.g. Multimedia."
msgstr ""
"Escribe una etiqueta para el campo de texto, por ejemplo: Multimedia"
"em>."
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:106
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:104
msgid "Write a better placeholder text for the input, e.g. Keywords"
msgstr ""
"Escribe una mejor descripción para el campo de entrada, por ejemplo: "
"Términos"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:106
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:104
msgid "Write a better label for the button, e.g Search."
msgstr ""
"Escribe una mejor etiqueta para el botón, por ejemplo Búsqueda."
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:108
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:106
msgid "Click here to submit"
msgstr "Haz click aquí para enviar"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:113
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:111
msgid "Click Wiring to continue"
msgstr "Haz click en Wiring para continuar"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:116
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:114
msgid ""
"This is the Wiring Editor view.
Here you can wire widgets "
"and operators together turning your workspace into and application "
@@ -420,15 +316,15 @@ msgstr ""
"widgets y los operadores y convertir tu entorno de trabajo en una "
"aplicación composicional.
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:117
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:115
msgid "Click Find components to open the sidebar"
msgstr "Haz click en el botón Buscar componentes para continuar"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:119
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:117
msgid "Click Widgets"
msgstr "Haz click en Widgets"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:120
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:118
msgid ""
"In this sidebar you can find all the available widgets. In our example, "
"we are interested in the widgets added to the workspace: the YouTube "
@@ -445,7 +341,7 @@ msgstr ""
"pueden actuar como una fuente de datos, transformadores o destinos para los "
"datos y cualquier combinación de estos comportamientos.
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:121
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:119
msgid ""
"In the next steps, we are going to connect the Input Box and "
"YouTube Browser widgets together. This will allow you to perform "
@@ -457,19 +353,19 @@ msgstr ""
"searches in the YouTube Browser through the Input Box "
"widget.
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:127
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:125
msgid "Drag & drop the Input Box widget"
msgstr "Arrastra el widget Input Box hasta la zona de trabajo"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:140
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:138
msgid "Drag & drop the YouTube Browser widget"
msgstr "Arrastra el widget YouTube Browser hasta la zona de trabajo"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:148
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:146
msgid "Click Find components to close the sidebar"
msgstr "Haz click en Buscar componentes para cerrar el panel lateral"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:152
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:150
msgid ""
"Drag & drop a new connection from Search Box's keyword "
"endpoint ..."
@@ -477,26 +373,26 @@ msgstr ""
"Arrastra una nueva conexión desde el endpoint de salida keyword "
"(del widget Search Box) ..."
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:158
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:156
msgid "... to YouTube Browser's keyword endpoint"
msgstr ""
"... soltando en el endpoint de entrada keyword del widget "
"YouTube Browser"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:162
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:160
msgid "Now it's time to test our creation."
msgstr "Ahora es tiempo de probar nuestra creación."
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:163
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:161
#: static/js/wirecloud/Tutorials/BehaviourOrientedWiring.js:246
msgid "Click Back"
msgstr "Haz click en Volver"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:165
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:163
msgid "Enter a search keyword and press Enter"
msgstr "Escribe los términos de búsqueda y presiona la tecla Enter"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:167
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:165
msgid ""
"Congratulations! you have "
"finished your first application mashup.
As you can see, the "
@@ -506,7 +402,7 @@ msgstr ""
"primera aplicación composicional.
Como puedes ver, el widget "
"YouTube Browser se ha actualizado correctamente.
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:169
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:167
msgid ""
"This is the end of this tutorial. Remember that you can always go to the "
"Tutorial menu for others.
"
@@ -514,7 +410,7 @@ msgstr ""
"Este es el final de este tutorial. Recuerda que siempre puedes ir al menú "
"Tutoriales para buscar más tutoriales.
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:169
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:167
msgid "Tutorials"
msgstr "Tutoriales"
@@ -751,9 +647,9 @@ msgid ""
"the affected components were added? That saved us some steps :)."
"p>Anyway, you can also directly add components in a similar way clicking "
"on theirs Add button (take into account that associated connections "
-"are no added automatically in that case)
The third and the fourth behaviour can be created the same way, so we are "
-"going to create them for you.
"
+"are no added automatically in that case)The third and the fourth behaviour can be created the same way, so we "
+"are going to create them for you.
"
msgstr ""
"Genial! Ya tenemos nuestro "
"primer comportamiento terminado. ¿Te has dado cuenta que cuando hemos "
@@ -871,147 +767,182 @@ msgstr ""
"panel de ejemplo para comprobar si este sigue los comportamientos descritos."
"
"
-#: static/js/wirecloud/UserInterfaceManager.js:203
-msgid "Workspace loaded"
-msgstr "Entorno de trabajo cargado"
-
-#: static/js/wirecloud/UserInterfaceManager.js:331
+#: static/js/wirecloud/UserInterfaceManager.js:95
msgid "%(task)s %(percentage)s%"
msgstr "%(task)s %(percentage)s%"
-#: static/js/wirecloud/UserInterfaceManager.js:345
+#: static/js/wirecloud/UserInterfaceManager.js:109
msgid "%(subTask)s: %(percentage)s%"
msgstr "%(subTask)s: %(percentage)s%"
-#: static/js/wirecloud/Widget.js:254 static/js/wirecloud/wiring/Operator.js:165
+#: static/js/wirecloud/UserInterfaceManager.js:274
+msgid "Workspace loaded"
+msgstr "Entorno de trabajo cargado"
+
+#: static/js/wirecloud/Widget.js:371 static/js/wirecloud/Wiring.js:602
+msgid "Failed to load widget."
+msgstr "Error al cargar el widget."
+
+#: static/js/wirecloud/Widget.js:373
+msgid ""
+"This widget is currently not available. You or an administrator probably "
+"uninstalled it.
Suggestions:
- Remove this widget from the "
+"dashboard
- Reinstall the appropiated version of the widget
- Or "
+"install another version of the widget and then use the Upgrade/"
+"Downgrade option
"
+msgstr ""
+"Este widget no está actualmente disponible: Posiblemente lo hayas "
+"desinstalado tú o un administrador.
Sugerencias:
- Eliminar "
+"este widget del entorno de trabajo
- Reinstalar una versión adecuada "
+"de este widget
- O instalar otra versión de este widget y "
+"posteriormente usar la opción Actualizar/Desactualizar
"
+
+#: static/js/wirecloud/Widget.js:376
+msgid "Widget loaded successfully."
+msgstr "Widget cargado correctamente."
+
+#: static/js/wirecloud/Widget.js:413
+msgid "Widget unloaded successfully."
+msgstr "Widget descargado correctamente."
+
+#: static/js/wirecloud/Widget.js:711
+#: static/js/wirecloud/ui/CatalogueSearchView.js:150
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:272
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:87
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:73
+#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:45
+#: static/js/wirecloud/wiring/Operator.js:413
+msgid "Title"
+msgstr "Título"
+
+#: static/js/wirecloud/Widget.js:712 static/js/wirecloud/wiring/Operator.js:414
msgid "Widget's title"
msgstr "Titulo del widget"
-#: static/js/wirecloud/Widget.js:258
+#: static/js/wirecloud/Widget.js:716
msgid "X-Position"
msgstr "Posición-X"
-#: static/js/wirecloud/Widget.js:259
+#: static/js/wirecloud/Widget.js:717
msgid "Specifies the x-coordinate at which the widget is placed"
msgstr "Especifica la coordenada x en la que el widget está colocado"
-#: static/js/wirecloud/Widget.js:263
+#: static/js/wirecloud/Widget.js:721
msgid "Y-Position"
msgstr "Posición-Y"
-#: static/js/wirecloud/Widget.js:264
+#: static/js/wirecloud/Widget.js:722
msgid "Specifies the y-coordinate at which the widget is placed"
msgstr "Especifica la coordenada y en la que el widget está colocado"
-#: static/js/wirecloud/Widget.js:268
+#: static/js/wirecloud/Widget.js:726
msgid "Z-Position"
msgstr "Posición-Z"
-#: static/js/wirecloud/Widget.js:269
+#: static/js/wirecloud/Widget.js:727
msgid "Specifies the z-coordinate at which the widget is placed"
msgstr "Especifica la coordenada Z en la que el widget está colocado"
-#: static/js/wirecloud/Widget.js:273
+#: static/js/wirecloud/Widget.js:731
msgid "Height"
msgstr "Altura"
-#: static/js/wirecloud/Widget.js:274
+#: static/js/wirecloud/Widget.js:732
msgid "Widget's height in layout cells"
msgstr "Altura del widget en filas"
-#: static/js/wirecloud/Widget.js:278
+#: static/js/wirecloud/Widget.js:736
+msgid "Visible"
+msgstr ""
+
+#: static/js/wirecloud/Widget.js:737
+msgid ""
+"Specifies if the widget is being displayed, altough the user may have to do "
+"scroll to be able to see it"
+msgstr ""
+
+#: static/js/wirecloud/Widget.js:741
msgid "Width"
msgstr "Ancho"
-#: static/js/wirecloud/Widget.js:279
+#: static/js/wirecloud/Widget.js:742
msgid "Widget's width in layout cells"
msgstr "Ancho del widget en columnas"
-#: static/js/wirecloud/Widget.js:283
+#: static/js/wirecloud/Widget.js:746
msgid "Height in pixels (deprecated)"
msgstr "Altura en pixels (obsoleto)"
-#: static/js/wirecloud/Widget.js:284
+#: static/js/wirecloud/Widget.js:747
msgid "Widget's height in pixels"
msgstr "Altura del widget en pixels"
-#: static/js/wirecloud/Widget.js:288
+#: static/js/wirecloud/Widget.js:751
msgid "Width in pixels"
msgstr "Ancho en pixels"
-#: static/js/wirecloud/Widget.js:289
+#: static/js/wirecloud/Widget.js:752
msgid "Widget's width in pixels"
msgstr "Anchura del widget en pixels"
-#: static/js/wirecloud/Widget.js:296
+#: static/js/wirecloud/Widget.js:756
+#, fuzzy
+#| msgid "volatile"
+msgid "Volatile"
+msgstr "volátil"
+
+#: static/js/wirecloud/Widget.js:757
+msgid "Volatile status of the widget"
+msgstr ""
+
+#: static/js/wirecloud/Widget.js:764
msgid "Widget created successfully."
msgstr "Widget creado correctamente."
-#: static/js/wirecloud/Widget.js:615 static/js/wirecloud/wiring/Operator.js:353
+#: static/js/wirecloud/Widget.js:1130
+#: static/js/wirecloud/ui/OperatorPreferencesWindowMenu.js:42
+msgid "Exception catched while processing preference changes"
+msgstr ""
+"Excepción capturada mientras se procesaba los cambios en las preferencias"
+
+#: static/js/wirecloud/Widget.js:1256
+#: static/js/wirecloud/wiring/Operator.js:608
msgid "The %(type)s was upgraded to v%(version)s successfully."
msgstr ""
"El %(type)s ha sido correctamente actualizado a la versión v%(version)s."
-#: static/js/wirecloud/Widget.js:617 static/js/wirecloud/wiring/Operator.js:355
+#: static/js/wirecloud/Widget.js:1258
+#: static/js/wirecloud/wiring/Operator.js:610
msgid "The %(type)s was downgraded to v%(version)s successfully."
msgstr ""
"El %(type)s ha sido correctamente desactualizado a la versión v%(version)s."
-#: static/js/wirecloud/Widget.js:620 static/js/wirecloud/wiring/Operator.js:358
+#: static/js/wirecloud/Widget.js:1261
+#: static/js/wirecloud/wiring/Operator.js:613
msgid "The %(type)s was replaced using v%(version)s successfully."
msgstr ""
"El %(type)s ha sido correctamente reemplazado usando la versión v%(version)s."
-#: static/js/wirecloud/Widget.js:829 static/js/wirecloud/Wiring.js:336
-msgid "Failed to load widget."
-msgstr "Error al cargar el widget."
-
-#: static/js/wirecloud/Widget.js:831
-msgid ""
-"This widget is currently not available. You or an administrator probably "
-"uninstalled it.
Suggestions:
- Remove this widget from the "
-"dashboard
- Reinstall the appropiated version of the widget
- Or "
-"install another version of the widget and then use the Upgrade/"
-"Downgrade option
"
-msgstr ""
-"Este widget no está actualmente disponible: Posiblemente lo hayas "
-"desinstalado tú o un administrador.
Sugerencias:
- Eliminar "
-"este widget del entorno de trabajo
- Reinstalar una versión adecuada "
-"de este widget
- O instalar otra versión de este widget y "
-"posteriormente usar la opción Actualizar/Desactualizar
"
-
-#: static/js/wirecloud/Widget.js:834
-msgid "Widget loaded successfully."
-msgstr "Widget cargado correctamente."
-
-#: static/js/wirecloud/Widget.js:865
-msgid "Widget unloaded successfully."
-msgstr "Widget descargado correctamente."
-
-#: static/js/wirecloud/Widget/PreferencesWindowMenu.js:82
-#: static/js/wirecloud/ui/OperatorPreferencesWindowMenu.js:87
-msgid "Exception catched while processing preference changes"
-msgstr ""
-"Excepción capturada mientras se procesaba los cambios en las preferencias"
-
-#: static/js/wirecloud/WidgetMeta.js:77
+#: static/js/wirecloud/WidgetMeta.js:84
msgid "[Widget; Vendor: %(vendor)s, Name: %(name)s, Version: %(version)s]"
msgstr ""
"[Widget; Distribuidor: %(vendor)s, Nombre: %(name)s, Versión: %(versión)s]"
-#: static/js/wirecloud/Wiring.js:331 static/js/wirecloud/wiring/Operator.js:496
+#: static/js/wirecloud/Wiring.js:597 static/js/wirecloud/wiring/Operator.js:225
msgid "Failed to load operator."
msgstr "Error al cargar el operador."
-#: static/js/wirecloud/Workspace.js:579
+#: static/js/wirecloud/Workspace.js:75
msgid "Tab %(index)s"
msgstr "Pestaña %(index)s"
-#: static/js/wirecloud/Workspace.js:585
-msgid "%(base) (%(copy)s)"
+#: static/js/wirecloud/Workspace.js:82
+#, fuzzy
+#| msgid "%(base) (%(copy)s)"
+msgid "%(base)s (%(copy)s)"
msgstr "%(base) (%(copy)s)"
-#: static/js/wirecloud/WorkspaceTab.js:161
+#: static/js/wirecloud/WorkspaceTab.js:157
msgid "The destination tab (%(title)s) is readonly"
msgstr "La pestaña de destino (%(title)s) es de sólo lectura"
@@ -1151,51 +1082,132 @@ msgstr "No extendido"
msgid "Unknown status code"
msgstr "Código de error desconocido"
-#: static/js/wirecloud/core.js:104
+#: static/js/wirecloud/core.js:79 static/js/wirecloud/core.js:502
+msgid "Switching active workspace"
+msgstr "Cambiando el entorno de trabajo actual"
+
+#: static/js/wirecloud/core.js:241
msgid "Unloading WireCloud"
msgstr "Cerrando WireCloud"
-#: static/js/wirecloud/core.js:183
+#: static/js/wirecloud/core.js:328
msgid "Retrieving WireCloud code"
msgstr "Obteniendo el código de WireCloud"
-#: static/js/wirecloud/core.js:186
+#: static/js/wirecloud/core.js:331
msgid "Retrieving initial data"
msgstr "Obteniendo datos iniciales"
-#: static/js/wirecloud/core.js:211
+#: static/js/wirecloud/core.js:357
msgid "Error loading WireCloud"
msgstr "Error cargando WireCloud"
-#: static/js/wirecloud/core.js:222
+#: static/js/wirecloud/core.js:368
msgid "Loading WireCloud Platform"
msgstr "Cargando la plataforma WireCloud"
-#: static/js/wirecloud/core.js:291
+#: static/js/wirecloud/core.js:454
msgid "Requesting workspace data"
msgstr "Solicitando los datos del entorno de trabajo"
-#: static/js/wirecloud/core.js:351 static/js/wirecloud/core.js:576
-msgid "Switching active workspace"
-msgstr "Cambiando el entorno de trabajo actual"
-
-#: static/js/wirecloud/core.js:395
+#: static/js/wirecloud/core.js:548
msgid "Missing name or title parameter"
msgstr "Falta el parámetro name o title"
-#: static/js/wirecloud/core.js:397
+#: static/js/wirecloud/core.js:550
msgid "Workspace and mashup options cannot be used at the same time"
msgstr "Las opciones workspace y mashup no pueden ser usadas al mismo tiempo"
-#: static/js/wirecloud/ui/ComponentSidebar.js:70
+#: static/js/wirecloud/ui/CatalogueSearchView.js:43
+msgid "Clear filters"
+msgstr "Quitar filtros"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:45
+#: static/js/wirecloud/ui/CatalogueSearchView.js:138
+msgid "Refresh"
+msgstr "Refrescar"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:64
+msgid "Empty Marketplace!"
+msgstr "Marketplace vacío!"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:65
+msgid ""
+"This marketplace is empty, that is, it does not provide any resource at this "
+"time."
+msgstr ""
+"Este marketplace está vacío, esto es, actualmente no proporciona ningún "
+"recurso."
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:86
+msgid "Showing results for
"
+msgstr "Mostrando los resultados para
"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:112
+msgid "Connection error: No resource retrieved."
+msgstr "Error en la conexión: No se han obtenido recursos."
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:118
+msgid ""
+"We couldn't find anything for your search - %(keywords)s."
+"p>
Suggestions:
- Make sure all words are spelled correctly."
+"li>
- Try different keywords.
- Try more general keywords.
"
+msgstr ""
+"No hemos podido encontrar resultados que coincidan con tu búsqueda "
+"(%(keywords)s).
Sugerencias:
- Asegúrate de que todas "
+"las palabras estén escritas correctamente.
- Prueba con otras palabras "
+"clave.
- Inténtalo con palabras clave más generales.
"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:126
+msgid "Keywords..."
+msgstr "Texto de búsqueda…"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:149
+msgid "Creation date"
+msgstr "Fecha de creación"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:151
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:46
+msgid "Vendor"
+msgstr "Distribuidor"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:163
+msgid "All"
+msgstr "Todo"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:164
+#: static/js/wirecloud/ui/ComponentSidebar.js:54
+#: static/js/wirecloud/ui/WiringEditor/ComponentShowcase.js:58
+msgid "Widgets"
+msgstr "Widgets"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:165
+#: static/js/wirecloud/ui/ComponentSidebar.js:41
+msgid "Mashups"
+msgstr "Mashups"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:166
+#: static/js/wirecloud/ui/WiringEditor/ComponentShowcase.js:45
+msgid "Operators"
+msgstr "Operadores"
+
+#: static/js/wirecloud/ui/CatalogueView.js:61
+msgid "Uninstall"
+msgstr "Desinstalar"
+
+#: static/js/wirecloud/ui/CatalogueView.js:67
+msgid "Install"
+msgstr "Instalar"
+
+#: static/js/wirecloud/ui/ComponentSidebar.js:68
msgid "Add to workspace"
msgstr "Añadir al entorno de trabajo"
-#: static/js/wirecloud/ui/ComponentSidebar.js:70
+#: static/js/wirecloud/ui/ComponentSidebar.js:68
msgid "Merge"
msgstr "Mezclar"
-#: static/js/wirecloud/ui/DragboardLayout.js:236
+#: static/js/wirecloud/ui/DragboardLayout.js:246
msgid ""
"the widget could not be associated with this layout as it already has an "
"associated layout."
@@ -1203,15 +1215,19 @@ msgstr ""
"el widget no pudo ser asociado con este layout porque ya tiene asociado otro "
"layout."
-#: static/js/wirecloud/ui/EmbedCodeWindowMenu.js:51
+#: static/js/wirecloud/ui/EmbedCodeWindowMenu.js:53
+msgid "Auto"
+msgstr ""
+
+#: static/js/wirecloud/ui/EmbedCodeWindowMenu.js:69
msgid "Accept"
msgstr "Aceptar"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:34
+#: static/js/wirecloud/ui/LayoutInputInterface.js:35
msgid "Smart"
msgstr "Inteligente"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:36
+#: static/js/wirecloud/ui/LayoutInputInterface.js:37
msgid ""
"Widgets will tend to be placed on the topmost position available if this "
"option is enabled. (default: enabled)"
@@ -1219,34 +1235,34 @@ msgstr ""
"Se intentará colocar los widget en la posición más alta posible si está "
"opción está activada. (por defecto: activada)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:43
-#: static/js/wirecloud/ui/LayoutInputInterface.js:79
-#: static/js/wirecloud/ui/LayoutInputInterface.js:143
+#: static/js/wirecloud/ui/LayoutInputInterface.js:44
+#: static/js/wirecloud/ui/LayoutInputInterface.js:80
+#: static/js/wirecloud/ui/LayoutInputInterface.js:147
msgid "Columns"
msgstr "Columnas"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:45
-#: static/js/wirecloud/ui/LayoutInputInterface.js:81
+#: static/js/wirecloud/ui/LayoutInputInterface.js:46
+#: static/js/wirecloud/ui/LayoutInputInterface.js:82
msgid "Grid columns. (default: 20 columns)"
msgstr "Columnas de la rejilla. (por defecto: 20 columnas)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:52
+#: static/js/wirecloud/ui/LayoutInputInterface.js:53
msgid "Row Height (in pixels)"
msgstr "Altura de las filas (en pixels)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:54
+#: static/js/wirecloud/ui/LayoutInputInterface.js:55
msgid "Row/cell height. Must be specified in pixel units. (default: 13px)"
msgstr ""
"Altura de la filas/celdas. Hay que indicar un valor usando pixels. (por "
"defecto: 13px)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:60
-#: static/js/wirecloud/ui/LayoutInputInterface.js:96
+#: static/js/wirecloud/ui/LayoutInputInterface.js:61
+#: static/js/wirecloud/ui/LayoutInputInterface.js:97
msgid "Horizontal Margin between widgets (in pixels)"
msgstr "Margen horizontal entre widgets (en pixels)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:62
-#: static/js/wirecloud/ui/LayoutInputInterface.js:98
+#: static/js/wirecloud/ui/LayoutInputInterface.js:63
+#: static/js/wirecloud/ui/LayoutInputInterface.js:99
msgid ""
"Horizontal Margin between widgets. Must be specified in pixel units. "
"(default: 4px)"
@@ -1254,13 +1270,13 @@ msgstr ""
"Margen horizontal entre widgets. Hay que indicar un valor usando pixels. "
"(por defecto: 4px)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:68
-#: static/js/wirecloud/ui/LayoutInputInterface.js:104
+#: static/js/wirecloud/ui/LayoutInputInterface.js:69
+#: static/js/wirecloud/ui/LayoutInputInterface.js:105
msgid "Vertical Margin between widgets (in pixels)"
msgstr "Margen vertical entre widgets (en pixels)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:70
-#: static/js/wirecloud/ui/LayoutInputInterface.js:106
+#: static/js/wirecloud/ui/LayoutInputInterface.js:71
+#: static/js/wirecloud/ui/LayoutInputInterface.js:107
msgid ""
"Vertical Margin between widgets. Must be specified in pixel units. (default: "
"3px)"
@@ -1268,51 +1284,51 @@ msgstr ""
"Margen vertical entre widgets. Hay que indicar un valor usando pixels. (por "
"defecto: 3px)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:88
+#: static/js/wirecloud/ui/LayoutInputInterface.js:89
msgid "Rows"
msgstr "Filas"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:90
+#: static/js/wirecloud/ui/LayoutInputInterface.js:91
msgid "Grid rows. (default: 12 rows)"
msgstr "Filas de la rejilla. (por defecto: 12 filas)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:117
+#: static/js/wirecloud/ui/LayoutInputInterface.js:119
msgid " smart"
msgstr " inteligente"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:121
+#: static/js/wirecloud/ui/LayoutInputInterface.js:123
msgid "%(columns)s%(smart)s columns"
msgstr "%(columns)s columnas%(smart)s"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:124
+#: static/js/wirecloud/ui/LayoutInputInterface.js:126
msgid "%(columns)s columns x %(rows)s rows"
msgstr "%(columns)s columnas x %(rows)s filas"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:144
+#: static/js/wirecloud/ui/LayoutInputInterface.js:148
msgid "Grid"
msgstr "Rejilla"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:169
+#: static/js/wirecloud/ui/LayoutInputInterface.js:173
msgid "Layout configuration"
msgstr "Configuración de la distribución"
-#: static/js/wirecloud/ui/LogWindowMenu.js:41
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:79
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:83
-#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:70
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:58
+#: static/js/wirecloud/ui/LogWindowMenu.js:34
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:72
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:138
+#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:96
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:310
msgid "Logs"
msgstr "Registros"
-#: static/js/wirecloud/ui/LogWindowMenu.js:56
+#: static/js/wirecloud/ui/LogWindowMenu.js:54
msgid "Close"
msgstr "Cerrar"
-#: static/js/wirecloud/ui/LogWindowMenu.js:129
+#: static/js/wirecloud/ui/LogWindowMenu.js:121
msgid "Details"
msgstr "Detalles"
-#: static/js/wirecloud/ui/MarketplaceView.js:55
+#: static/js/wirecloud/ui/MarketplaceView.js:52
msgid ""
"WireCloud is not connected with any marketplace.
Suggestions:"
"p>
- Connect WireCloud with a new marketplace.
- Go to the my "
@@ -1322,31 +1338,31 @@ msgstr ""
"p>
- Conecta WireCloud con un nuevo marketplace.
- Ve a la vista "
"de Mis Recursos.
"
-#: static/js/wirecloud/ui/MarketplaceView.js:158
-#: static/js/wirecloud/ui/MyResourcesView.js:138
-#: static/js/wirecloud/ui/MyResourcesView.js:156
-#: static/js/wirecloud/ui/WorkspaceView.js:73
+#: static/js/wirecloud/ui/MarketplaceView.js:179
+#: static/js/wirecloud/ui/MyResourcesView.js:148
+#: static/js/wirecloud/ui/MyResourcesView.js:166
+#: static/js/wirecloud/ui/WorkspaceView.js:181
msgid "My Resources"
msgstr "Mis recursos"
-#: static/js/wirecloud/ui/MarketplaceView.js:226
+#: static/js/wirecloud/ui/MarketplaceView.js:241
msgid "loading marketplace view..."
msgstr "cargando la vista de marketplace..."
-#: static/js/wirecloud/ui/MarketplaceView.js:228
+#: static/js/wirecloud/ui/MarketplaceView.js:243
msgid "marketplace list not available"
msgstr "lista de marketplaces no disponible"
-#: static/js/wirecloud/ui/MarketplaceView.js:252
+#: static/js/wirecloud/ui/MarketplaceView.js:265
msgid "Marketplace"
msgstr "Marketplace"
-#: static/js/wirecloud/ui/MarketplaceView.js:255
+#: static/js/wirecloud/ui/MarketplaceView.js:268
msgid "Marketplace - %(marketname)s"
msgstr "Marketplace - %(marketname)s"
#: static/js/wirecloud/ui/MarketplaceViewMenuItems.js:62
-#: static/js/wirecloud/ui/MyResourcesView.js:56
+#: static/js/wirecloud/ui/MyResourcesView.js:70
msgid "Upload"
msgstr "Subir"
@@ -1355,7 +1371,7 @@ msgid "Add new marketplace"
msgstr "Añadir un nuevo marketplace"
#: static/js/wirecloud/ui/MarketplaceViewMenuItems.js:75
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:49
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:52
msgid "Name"
msgstr "Nombre"
@@ -1368,7 +1384,7 @@ msgid "Type"
msgstr "Tipo"
#: static/js/wirecloud/ui/MarketplaceViewMenuItems.js:94
-#: static/js/wirecloud/ui/SharingWindowMenu.js:46
+#: static/js/wirecloud/ui/SharingWindowMenu.js:159
msgid "Public"
msgstr "Público"
@@ -1384,38 +1400,38 @@ msgstr "Borrar marketplace"
msgid "Do you really want to remove the marketplace \"%(marketName)s\"?"
msgstr "¿Realmente quieres eliminar el marketplace \"%(marketName)s\"?"
-#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:38
+#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:36
msgid "Missing dependencies"
msgstr "Dependencias incumplidas"
-#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:42
+#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:40
msgid "The following dependencies are missing:"
msgstr "Las siguientes dependencias no se cumplen:"
-#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:54
+#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:52
msgid ""
"You will be able to continue after installing all the required dependencies."
msgstr "Podrás continuar una vez todas las dependencias sean satisfechas."
-#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:59
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:376
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:736
+#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:57
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:364
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:103
msgid "Continue"
msgstr "Continuar"
-#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:68
-#: static/js/wirecloud/ui/PreferencesWindowMenu.js:223
-#: static/js/wirecloud/ui/SharingWindowMenu.js:85
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:137
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:737
+#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:66
+#: static/js/wirecloud/ui/PreferencesWindowMenu.js:235
+#: static/js/wirecloud/ui/SharingWindowMenu.js:214
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:140
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:104
msgid "Cancel"
msgstr "Cancelar"
-#: static/js/wirecloud/ui/MyResourcesView.js:44
+#: static/js/wirecloud/ui/MyResourcesView.js:58
msgid "Empty resource list"
msgstr "Lista de recursos vacía"
-#: static/js/wirecloud/ui/MyResourcesView.js:45
+#: static/js/wirecloud/ui/MyResourcesView.js:59
msgid ""
"Currently, you do not have access to any component. You can get components "
"using the Marketplace view or by uploading components manually using the "
@@ -1425,16 +1441,16 @@ msgstr ""
"usando la vista de Marketplace o subiendo recursos de forma manual usando el "
"botón Subir."
-#: static/js/wirecloud/ui/MyResourcesView.js:66
-#: static/js/wirecloud/ui/WorkspaceView.js:82
+#: static/js/wirecloud/ui/MyResourcesView.js:80
+#: static/js/wirecloud/ui/WorkspaceView.js:190
msgid "Get more components"
msgstr "Obtener más componentes"
-#: static/js/wirecloud/ui/MyResourcesView.js:153
+#: static/js/wirecloud/ui/MyResourcesView.js:163
msgid "My Resources - %(resource)s"
msgstr "Mis recursos - %(resource)s"
-#: static/js/wirecloud/ui/MyResourcesView.js:266
+#: static/js/wirecloud/ui/MyResourcesView.js:288
msgid ""
"You have not configured any marketplace to upload this resource. Please, "
"configure one on the Marketplace view."
@@ -1442,7 +1458,7 @@ msgstr ""
"No has configurado ningún marketplace en el que que subir este recurso. Por "
"favor, configura uno en la vista Marketplace."
-#: static/js/wirecloud/ui/MyResourcesView.js:352
+#: static/js/wirecloud/ui/MyResourcesView.js:372
msgid ""
"Do you really want to remove the \"%(name)s\" (vendor: \"%(vendor)s\", "
"version: \"%(version)s\") resource?"
@@ -1450,7 +1466,7 @@ msgstr ""
"¿Realmente quieres eliminar el recurso \"%(name)s\" (distribuidor: "
"\"%(vendor)s\", versión: \"%(version)s\")?"
-#: static/js/wirecloud/ui/MyResourcesView.js:378
+#: static/js/wirecloud/ui/MyResourcesView.js:396
msgid ""
"Do you really want to remove all versions of the (vendor: \"%(vendor)s\", "
"name: \"%(name)s\") resource?"
@@ -1458,97 +1474,107 @@ msgstr ""
"¿Realmente quieres eliminar todas las versiones del recurso (distribuidor: "
"\"%(vendor)s\", nombre: \"%(name)s\")?"
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:53
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:57
+msgid "Create Workspace"
+msgstr "Crear entorno de trabajo"
+
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:57
+#, fuzzy
+#| msgid "Create Workspace"
+msgid "Copy Workspace"
+msgstr "Crear entorno de trabajo"
+
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:60
msgid "Template"
msgstr "Plantilla"
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:56
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:63
msgid "Select a mashup template"
msgstr "Selecciona una plantilla de mashup"
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:61
-msgid "Create Workspace"
-msgstr "Crear entorno de trabajo"
-
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:70
-msgid "Creating a %(owner)s/%(name)s workspace using %(mashup)s as template"
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:81
+#, fuzzy
+#| msgid "Creating a %(owner)s/%(name)s workspace using %(mashup)s as template"
+msgid "Creating a %(owner)s/%(title)s workspace using %(mashup)s as template"
msgstr ""
"Creando un entorno de trabajo %(owner)s/%(name)s usando %(mashup)s como "
"plantilla"
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:72
-msgid "Creating a %(owner)s/%(name)s workspace"
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:83
+#, fuzzy
+#| msgid "Creating a %(owner)s/%(name)s workspace"
+msgid "Creating a %(owner)s/%(title)s workspace"
msgstr "Creando el entorno de trabajo %(owner)s/%(name)s"
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:75
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:86
msgid "Creating a new workspace using %(mashup)s as template"
msgstr "Creando un nuevo entorno de trabajo usando %(mashup)s como plantilla"
-#: static/js/wirecloud/ui/OperatorPreferencesWindowMenu.js:30
+#: static/js/wirecloud/ui/OperatorPreferencesWindowMenu.js:50
msgid "Operator Settings"
msgstr "Configuración del operador"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:47
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:48
msgid "Parametrize"
msgstr "Parametrizar"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:49
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:50
msgid "Modify"
msgstr "Modificar"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:54
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:55
msgid "This value won't be editable by the user"
msgstr "El usuario no podrá modificar el valor"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:57
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:58
msgid "This value will be editable by the user"
msgstr "El usuario podrá modificar el valor"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:62
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:63
msgid "This value will be visible to the user"
msgstr "El usuario podrá ver el valor actual"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:65
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:66
msgid "This value won't be visible to the user"
msgstr "El usuario no podrá ver el valor"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:33
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:36
msgid "Normal"
msgstr "Normal"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:34
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:37
msgid "Read Only"
msgstr "Sólo lectura"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:38
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:41
msgid "Hidden"
msgstr "Oculto"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:42
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:45
msgid "Current value"
msgstr "Valor actual"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:43
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:46
msgid "Default value"
msgstr "Valor por defecto"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:44
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:47
msgid "Parametrized value"
msgstr "Valor parametrizado"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:48
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:51
msgid "Status"
msgstr "Estado"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:49
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:52
msgid "Value source"
msgstr "Fuente del valor"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:51
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:54
msgid "Value"
msgstr "Valor"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:53
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:56
msgid "Parametrization"
msgstr "Parametrización"
@@ -1557,122 +1583,126 @@ msgid "Use current value"
msgstr "Usar el valor actual"
#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:75
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:276
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:254
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:482
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:495
msgid "Add"
msgstr "Añadir"
-#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:146
-#: static/js/wirecloud/ui/WirecloudHeader.js:118
+#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:131
+#: static/js/wirecloud/ui/WirecloudHeader.js:116
msgid "User"
msgstr "Usuario"
-#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:150
+#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:135
msgid "User Name"
msgstr "Nombre de Usuario"
-#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:155
+#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:140
msgid "First Name"
msgstr "Nombre"
-#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:160
+#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:145
msgid "Last Name"
msgstr "Appellidos"
-#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:167
+#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:152
msgid "Context"
msgstr "Contexto"
-#: static/js/wirecloud/ui/PreferencesWindowMenu.js:105
+#: static/js/wirecloud/ui/PreferencesWindowMenu.js:106
msgid "Inherit"
msgstr "Heredar"
-#: static/js/wirecloud/ui/PreferencesWindowMenu.js:195
+#: static/js/wirecloud/ui/PreferencesWindowMenu.js:203
msgid "Set Defaults"
msgstr "Valores por defecto"
-#: static/js/wirecloud/ui/PreferencesWindowMenu.js:215
-#: static/js/wirecloud/ui/SharingWindowMenu.js:81
+#: static/js/wirecloud/ui/PreferencesWindowMenu.js:220
+msgid "Error"
+msgstr ""
+
+#: static/js/wirecloud/ui/PreferencesWindowMenu.js:227
+#: static/js/wirecloud/ui/SharingWindowMenu.js:210
msgid "Save"
msgstr "Guardar"
-#: static/js/wirecloud/ui/PublishResourceWindowMenu.js:37
-msgid "Upload resource"
-msgstr "Subir el recurso"
-
-#: static/js/wirecloud/ui/PublishResourceWindowMenu.js:62
+#: static/js/wirecloud/ui/PublishResourceWindowMenu.js:51
msgid "Upload to"
msgstr "Subir a"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:40
+#: static/js/wirecloud/ui/PublishResourceWindowMenu.js:69
+msgid "Upload resource"
+msgstr "Subir el recurso"
+
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:43
msgid "General info"
msgstr "Información general"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:42
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:45
msgid "Mashup Title"
msgstr "Título del Mashup"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:42
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:45
msgid "Title to display on the catalogue"
msgstr "Título a mostrar en el catálogo"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:43
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:46
msgid "Id of the vendor/distributor of the mashable application component"
msgstr "Id del distribuidor del componente"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:44
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:47
msgid "Version"
msgstr "Versión"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:45
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:48
msgid "Email"
msgstr "Email"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:46
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:49
msgid "Short Description (plain text)"
msgstr "Descripción corta (texto plano)"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:47
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:50
msgid "Detailed description (Markdown)"
msgstr "Descripción detallada (Markdown)"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:48
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:51
msgid "Home page"
msgstr "Página web"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:49
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:52
msgid "Authors"
msgstr "Autores"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:54
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:57
msgid "Media"
msgstr "Media"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:58
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:61
msgid "Image shown in catalogue (170x80 px)"
msgstr "Imagen mostrada en el catálogo (170x80px)"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:65
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:68
msgid "Advanced"
msgstr "Avanzado"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:67
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:70
msgid "Block widgets"
msgstr "Bloquear los widgets"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:68
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:71
msgid "Block connections"
msgstr "Bloquear las conexiones"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:69
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:72
msgid "Embed used widgets/operators"
msgstr "Incrustar los widgets y los operadores usados"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:76
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:79
msgid "Upload workspace to my resources"
msgstr "Subir el entorno de trabajo a mis recursos"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:82
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:85
msgid ""
"Warning! Configured and stored data in your workspace "
"(properties and preferences except passwords) will be shared by default!"
@@ -1681,86 +1711,127 @@ msgstr ""
"las preferencias y de las variables persistentes, exceptuando las "
"contraseñas) serán compartidas por defecto."
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:132
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:58
-#: static/js/wirecloud/ui/WiringEditor/Component.js:48
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:50
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:78
-#: static/js/wirecloud/ui/WorkspaceTabView.js:127
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:134
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:48
+#: static/js/wirecloud/ui/WiringEditor/Component.js:90
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:269
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:330
+#: static/js/wirecloud/ui/WorkspaceTabView.js:238
msgid "Preferences"
msgstr "Preferencias"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:139
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:141
msgid "Persistent variables"
msgstr "Variables persistentes"
-#: static/js/wirecloud/ui/RenameWindowMenu.js:32
+#: static/js/wirecloud/ui/RenameWindowMenu.js:34
msgid "New Name"
msgstr "Nuevo nombre"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:37
+#: static/js/wirecloud/ui/ScreenSizesInputInterface.js:191
+msgid "Name:"
+msgstr "Nombre:"
+
+#: static/js/wirecloud/ui/ScreenSizesInputInterface.js:192
+msgid "Name of the screen size range."
+msgstr "Nombre del rango de tamaños de pantalla."
+
+#: static/js/wirecloud/ui/ScreenSizesInputInterface.js:211
+msgid "From (px):"
+msgstr "Desde (px):"
+
+#: static/js/wirecloud/ui/ScreenSizesInputInterface.js:212
+msgid "The left limit of the screen size range (in pixels)."
+msgstr "El límite izquierdo del rango de tamaños de pantalla (en píxeles)."
+
+#: static/js/wirecloud/ui/ScreenSizesInputInterface.js:239
+msgid "To (px):"
+msgstr "Hasta (px):"
+
+#: static/js/wirecloud/ui/ScreenSizesInputInterface.js:240
+msgid ""
+"The right limit of the screen size range (in pixels). Use -1 for no limit."
+msgstr ""
+"El límite derecho del rango de tamaños de pantalla (en píxeles). Usa -1 para "
+"sin límite."
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:105
+msgid "%(fullname)s (You)"
+msgstr "%(fullname)s (Tú)"
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:122
+msgid "Owner"
+msgstr "Dueño"
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:122
+msgid "Can view"
+msgstr "Puede ver"
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:126
+#: static/js/wirecloud/ui/WidgetView.js:301
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:53
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:275
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:493
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:504
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:320
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:507
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:519
+#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:67
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:102
+msgid "Remove"
+msgstr "Eliminar"
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:150
msgid "Sharing settings"
msgstr "Configuración de compartición"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:42
+#: static/js/wirecloud/ui/SharingWindowMenu.js:155
msgid "Visibility options"
msgstr "Opciones de visibilidad"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:46
+#: static/js/wirecloud/ui/SharingWindowMenu.js:159
msgid "Anyone on the Internet can find and access this dashboard."
msgstr "Cualquier usuario en Internet puede encontrar y acceder a este panel."
-#: static/js/wirecloud/ui/SharingWindowMenu.js:47
+#: static/js/wirecloud/ui/SharingWindowMenu.js:160
+msgid "Registered User"
+msgstr ""
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:160
+#, fuzzy
+#| msgid "Anyone on the Internet can find and access this dashboard."
+msgid ""
+"Anyone on the Internet can find this dashboard. Only registered users can "
+"access it."
+msgstr "Cualquier usuario en Internet puede encontrar y acceder a este panel."
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:161
msgid "Private"
msgstr "Privado"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:47
+#: static/js/wirecloud/ui/SharingWindowMenu.js:161
msgid "Shared with specific people and organizations."
msgstr "Compartido con usuarios y organizaciones específicos."
-#: static/js/wirecloud/ui/SharingWindowMenu.js:57
+#: static/js/wirecloud/ui/SharingWindowMenu.js:171
msgid "Users and groups with access"
msgstr "Usuarios y grupos con acceso"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:60
-msgid "Add a person or an organization"
+#: static/js/wirecloud/ui/SharingWindowMenu.js:174
+#, fuzzy
+#| msgid "Add a person or an organization"
+msgid "Add a person, a group or an organization"
msgstr "Añade una persona o una organización"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:167
-msgid "%(fullname)s (You)"
-msgstr "%(fullname)s (Tú)"
-
-#: static/js/wirecloud/ui/SharingWindowMenu.js:183
-msgid "Owner"
-msgstr "Dueño"
-
-#: static/js/wirecloud/ui/SharingWindowMenu.js:185
-msgid "Can view"
-msgstr "Puede ver"
-
-#: static/js/wirecloud/ui/SharingWindowMenu.js:191
-#: static/js/wirecloud/ui/WidgetView.js:117
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:65
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:57
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:287
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:298
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:68
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:266
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:278
-#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:76
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:101
-msgid "Remove"
-msgstr "Eliminar"
-
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:44
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:45
msgid "Upgrade"
msgstr "Actualizar"
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:50
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:51
msgid "Downgrade"
msgstr "Desactualizar"
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:70
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:71
msgid ""
"There is not change information between versions %(from_version)s and "
"%(to_version)s"
@@ -1768,97 +1839,187 @@ msgstr ""
"No hay información sobre los cambios entre las versiones %(from_version)s y "
"%(to_version)s"
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:75
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:76
msgid "Unable to retrieve change log information"
msgstr "Imposible obtener la información del registro de cambios"
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:91
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:92
msgid "Available versions"
msgstr "Versiones disponibles"
-#: static/js/wirecloud/ui/WidgetView.js:151
-msgid "Menu"
-msgstr "Menú"
-
-#: static/js/wirecloud/ui/WidgetView.js:162
-#: static/js/wirecloud/ui/WidgetView.js:329
-msgid "Minimize"
-msgstr "Minimizar"
+#: static/js/wirecloud/ui/WidgetView.js:42
+#, fuzzy
+#| msgid "Drag & drop to move the widget"
+msgid "Disallow to move this widget"
+msgstr "Arrastra y suelta para mover el widget"
-#: static/js/wirecloud/ui/WidgetView.js:319
-msgid "Maximize"
-msgstr "Maximizar"
+#: static/js/wirecloud/ui/WidgetView.js:42
+#, fuzzy
+#| msgid "Drag & drop to move the widget"
+msgid "Allow to move this widget"
+msgstr "Arrastra y suelta para mover el widget"
-#: static/js/wirecloud/ui/WidgetView.js:368
+#: static/js/wirecloud/ui/WidgetView.js:48
msgid "Hide title"
msgstr "Ocultar título"
-#: static/js/wirecloud/ui/WidgetView.js:368
+#: static/js/wirecloud/ui/WidgetView.js:48
msgid "Show title"
msgstr "Mostrar título"
-#: static/js/wirecloud/ui/WidgetView.js:725
+#: static/js/wirecloud/ui/WidgetView.js:199
msgid "%(errorCount)s error"
msgid_plural "%(errorCount)s errors"
msgstr[0] "%(errorCount)s error"
msgstr[1] "%(errorCount)s errores"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:64
+#: static/js/wirecloud/ui/WidgetView.js:343
+msgid "Menu"
+msgstr "Menú"
+
+#: static/js/wirecloud/ui/WidgetView.js:354
+#: static/js/wirecloud/ui/WidgetView.js:552
+msgid "Minimize"
+msgstr "Minimizar"
+
+#: static/js/wirecloud/ui/WidgetView.js:537
+msgid "Maximize"
+msgstr "Maximizar"
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:57
msgid "Reload"
msgstr "Recargar"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:71
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:79
-#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:66
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:64
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:134
+#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:92
msgid "Upgrade/Downgrade"
msgstr "Actualizar/Desactualizar"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:92
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:85
msgid "User's Manual"
msgstr "Manual de usuario"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:96
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:89
msgid "Documentation"
msgstr "Documentación"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:105
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:104
+msgid "Left"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:116
+msgid "Center"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:128
+#, fuzzy
+#| msgid "Height"
+msgid "Right"
+msgstr "Altura"
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:143
+msgid "Top"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:155
+msgid "Bottom"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:168
+msgid "Fixed x"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:168
+msgid "Relative x"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:183
+msgid "Fixed y"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:183
+msgid "Relative y"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:198
+msgid "Fixed width"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:198
+msgid "Relative width"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:212
+msgid "Fixed height"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:212
+msgid "Relative height"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:229
msgid "Exit Full Dragboard"
msgstr "Salir de panel completo"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:108
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:232
msgid "Full Dragboard"
msgstr "Panel completo"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:122
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:249
+msgid "Extract from grid"
+msgstr "Extraer de la rejilla"
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:258
msgid "Snap to grid"
msgstr "Ajustar a la rejilla"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:125
-msgid "Extract from grid"
-msgstr "Extraer de la rejilla"
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:267
+#, fuzzy
+#| msgid "Close the component sidebar"
+msgid "Move to the top sidebar"
+msgstr "Cierra el panel lateral"
-#: static/js/wirecloud/ui/WirecloudHeader.js:109
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:276
+#, fuzzy
+#| msgid "Close the component sidebar"
+msgid "Move to the right sidebar"
+msgstr "Cierra el panel lateral"
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:285
+#, fuzzy
+#| msgid "Close the component sidebar"
+msgid "Move to the bottom sidebar"
+msgstr "Cierra el panel lateral"
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:294
+#, fuzzy
+#| msgid "Close the component sidebar"
+msgid "Move to the left sidebar"
+msgstr "Cierra el panel lateral"
+
+#: static/js/wirecloud/ui/WirecloudHeader.js:102
msgid "Django Admin panel"
msgstr "Panel de administración de Django"
-#: static/js/wirecloud/ui/WirecloudHeader.js:117
-#: static/js/wirecloud/ui/WirecloudHeader.js:118
+#: static/js/wirecloud/ui/WirecloudHeader.js:115
+#: static/js/wirecloud/ui/WirecloudHeader.js:116
msgid "Switch User"
msgstr "Cambiar usuario"
-#: static/js/wirecloud/ui/WirecloudHeader.js:142
+#: static/js/wirecloud/ui/WirecloudHeader.js:133
+msgid "Back to %(user)s"
+msgstr ""
+
+#: static/js/wirecloud/ui/WirecloudHeader.js:139
msgid "Sign out"
msgstr "Salir"
-#: static/js/wirecloud/ui/WiringEditor.js:169
-msgid "%(workspace_title)s - Wiring"
-msgstr "%(workspace_title)s - Wiring"
-
-#: static/js/wirecloud/ui/WiringEditor.js:390
+#: static/js/wirecloud/ui/WiringEditor.js:171
msgid "Hello, welcome to the Wiring Editor view!"
msgstr "Hola, ¡Bienvenido al Editor del Wiring!"
-#: static/js/wirecloud/ui/WiringEditor.js:391
+#: static/js/wirecloud/ui/WiringEditor.js:172
msgid ""
"In this view you can connect all the components of your dashboard in a "
"visual way."
@@ -1866,7 +2027,7 @@ msgstr ""
"En esta vista puedes conectar todos los componentes del panel de una forma "
"visual."
-#: static/js/wirecloud/ui/WiringEditor.js:397
+#: static/js/wirecloud/ui/WiringEditor.js:178
msgid ""
"Open the sidebar using the Find components button and drag & "
"drop components (operators/widgets) from the sidebar for being able to "
@@ -1876,15 +2037,15 @@ msgstr ""
"arrastrar y soltar componentes (operadores/widgets) desde el panel lateral y "
"poder conectarlos como quieras."
-#: static/js/wirecloud/ui/WiringEditor.js:404
+#: static/js/wirecloud/ui/WiringEditor.js:185
msgid "Find components"
msgstr "Buscar componentes"
-#: static/js/wirecloud/ui/WiringEditor.js:417
+#: static/js/wirecloud/ui/WiringEditor.js:198
msgid "List behaviours"
msgstr "Listar comportamientos"
-#: static/js/wirecloud/ui/WiringEditor.js:653
+#: static/js/wirecloud/ui/WiringEditor.js:429
msgid ""
"The connection will also be modified for the rest of behaviours, would you "
"like to continue?"
@@ -1892,34 +2053,28 @@ msgstr ""
"La conexión será modificada también en el resto de comportamientos. ¿Desea "
"continuar?"
-#: static/js/wirecloud/ui/WiringEditor.js:729
+#: static/js/wirecloud/ui/WiringEditor.js:505
msgid "Behaviour"
msgstr "Comportamiento"
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:120
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:721
-msgid "New behaviour"
-msgstr "Nuevo comportamiento"
-
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:121
-#: static/js/wirecloud/ui/WiringEditor/Endpoint.js:125
-msgid "No description provided."
-msgstr "No se ha proporcionado una descripción."
+#: static/js/wirecloud/ui/WiringEditor.js:786
+msgid "%(workspace_title)s - Wiring"
+msgstr "%(workspace_title)s - Wiring"
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:272
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:254
msgid "%(behaviour_title)s's logs"
msgstr "Registros de %(behaviour_title)s"
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:292
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:719
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:273
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:88
msgid "Description"
msgstr "Descripción"
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:294
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:275
msgid "Behaviour settings"
msgstr "Configuración del comportamiento"
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:372
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:360
msgid ""
"The following operation is irreversible and removes the behaviour "
"completely. Would you like to continue?"
@@ -1927,49 +2082,16 @@ msgstr ""
"Esta operación es irreversible y eliminirá el comportamiento por completo. "
"¿Desea continuar?"
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:377
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:365
msgid "No, thank you"
msgstr "No, gracias"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:46
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:128
-msgid "Enable"
-msgstr "Activar"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:53
-msgid "Create behaviour"
-msgstr "Crear comportamiento"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:60
-msgid "Order behaviours"
-msgstr "Ordenar los comportamientos"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:84
-msgid "New feature"
-msgstr "Nueva funcionalidad"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:85
-msgid "Enable the behaviours to enjoy with a new way to handle connections."
-msgstr ""
-"Activa los comportamientos para disfrutar de una nueva forma de manejar las "
-"conexiones."
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:88
-msgid ""
-"Click here for a quick guide/tutorial on how to use this new feature."
-msgstr ""
-"Haz click aquí para una guía rápida/tutorial sobre como usar esta "
-"nueva funcionalidad."
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:114
-msgid "Disable"
-msgstr "Desactivar"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:402
-msgid "The behaviour (%(title)s) was loaded."
-msgstr "El comportamiento (%(title)s) ha sido cargado correctamente."
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:87
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:90
+msgid "New behaviour"
+msgstr "Nuevo comportamiento"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:733
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:100
msgid ""
"The behaviours will be removed but the components and connections will still "
"exist, would you like to continue?"
@@ -1977,18 +2099,24 @@ msgstr ""
"Los comportamientos serán eliminados pero los componentes y las conexiones "
"seguirán existiendo. ¿Desea continuar?"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:801
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:111
+#, fuzzy
+#| msgid "List behaviours"
+msgid "Initial behaviour"
+msgstr "Listar comportamientos"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:166
msgid ""
"The will be removed, would you like to "
"continue?"
msgstr ""
"El será borrado. ¿Desea continuar?"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:821
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:184
msgid " - The .
"
msgstr "- El .
"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:827
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:190
msgid ""
"These components only exist within the current behaviour :
Would you like to continue?
"
@@ -1997,7 +2125,7 @@ msgstr ""
":¿Desea continuar?"
"
"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:848
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:207
msgid ""
"The will be definitely"
"strong> removed, would you like to continue?"
@@ -2005,191 +2133,241 @@ msgstr ""
"El será borrado de forma "
"definitiva. ¿Desea continuar?"
-#: static/js/wirecloud/ui/WiringEditor/Component.js:135
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:339
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:415
+msgid "Enable"
+msgstr "Activar"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:346
+msgid "Create behaviour"
+msgstr "Crear comportamiento"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:353
+msgid "Order behaviours"
+msgstr "Ordenar los comportamientos"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:377
+msgid "New feature"
+msgstr "Nueva funcionalidad"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:378
+msgid "Enable the behaviours to enjoy with a new way to handle connections."
+msgstr ""
+"Activa los comportamientos para disfrutar de una nueva forma de manejar las "
+"conexiones."
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:381
+msgid ""
+"Click here for a quick guide/tutorial on how to use this new feature."
+msgstr ""
+"Haz click aquí para una guía rápida/tutorial sobre como usar esta "
+"nueva funcionalidad."
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:401
+msgid "Disable"
+msgstr "Desactivar"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:691
+msgid "The behaviour (%(title)s) was loaded."
+msgstr "El comportamiento (%(title)s) ha sido cargado correctamente."
+
+#: static/js/wirecloud/ui/WiringEditor/Component.js:32
msgid "volatile"
msgstr "volátil"
-#: static/js/wirecloud/ui/WiringEditor/Component.js:138
+#: static/js/wirecloud/ui/WiringEditor/Component.js:35
msgid "missing"
msgstr "ausente"
-#: static/js/wirecloud/ui/WiringEditor/Component.js:141
+#: static/js/wirecloud/ui/WiringEditor/Component.js:38
msgid "in use"
msgstr "en uso"
-#: static/js/wirecloud/ui/WiringEditor/Component.js:144
+#: static/js/wirecloud/ui/WiringEditor/Component.js:41
msgid "no endpoints"
msgstr "sin conectores"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:703
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:179
msgid "Missing"
msgstr "Ausente"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:705
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:181
msgid "%(count)s error"
msgid_plural "%(count)s errors"
msgstr[0] "%(count)s error"
msgstr[1] "%(count)s errores"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:92
-msgid "Delete cascade"
-msgstr "Borrar en cascada"
-
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:132
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:56
msgid "Expand"
msgstr "Expandir"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:134
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:58
msgid "Collapse"
msgstr "Contraer"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:140
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:64
msgid "Stop ordering"
msgstr "Dejar de ordenar"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:142
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:66
msgid "Order endpoints"
msgstr "Ordenar conectores"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:150
-#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:102
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:75
+#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:47
msgid "Rename %(type)s"
msgstr "Renombrar %(type)s"
-#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:36
-msgid "Create"
-msgstr "Crear"
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:147
+msgid "Delete cascade"
+msgstr "Borrar en cascada"
-#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:106
+#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:39
msgid "No description provided"
msgstr "No se ha proporcionado una descripción"
-#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:128
+#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:61
msgid "No image available"
msgstr "Imagen no disponible"
-#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:137
+#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:70
msgid "%(version)s (latest)"
msgstr "%(version)s (última)"
-#: static/js/wirecloud/ui/WiringEditor/ConnectionHandle.js:72
+#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:84
+msgid "Create"
+msgstr "Crear"
+
+#: static/js/wirecloud/ui/WiringEditor/ConnectionHandle.js:70
msgid "Drag & Drop"
msgstr "Arrastrar & soltar"
-#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:83
-msgid "Restore defaults"
-msgstr "Restaurar"
-
-#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:104
+#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:39
msgid "Stop customizing"
msgstr "Dejar de personalizar"
-#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:104
+#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:39
msgid "Customize"
msgstr "Personalizar"
+#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:91
+msgid "Restore defaults"
+msgstr "Restaurar"
+
+#: static/js/wirecloud/ui/WiringEditor/Endpoint.js:171
+msgid "No description provided."
+msgstr "No se ha proporcionado una descripción."
+
#: static/js/wirecloud/ui/WorkspaceListItems.js:46
msgid "Empty workspace list"
msgstr "Lista de entornos de trabajo vacía"
-#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:58
+#: static/js/wirecloud/ui/WorkspaceTabView.js:373
+msgid "(Overriden) Editing for screen size %(name)s"
+msgstr "(Sobrescrito) Editando para el tamaño de pantalla %(name)s"
+
+#: static/js/wirecloud/ui/WorkspaceTabView.js:375
+msgid "Editing for screen size %(name)s"
+msgstr "Editando para el tamaño de pantalla %(name)s"
+
+#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:49
msgid "Rename Workspace Tab"
msgstr "Renombrar pestaña"
-#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:63
+#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:54
msgid "Set as initial"
msgstr "Configurar como inicial"
-#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:78
+#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:69
msgid "The tab's widgets will also be removed. Would you like to continue?"
msgstr "Los widgets de la pestaña serán también eliminados. ¿Desea continuar?"
-#: static/js/wirecloud/ui/WorkspaceView.js:64
+#: static/js/wirecloud/ui/WorkspaceView.js:172
msgid "Wiring"
msgstr "Wiring"
-#: static/js/wirecloud/ui/WorkspaceView.js:271
+#: static/js/wirecloud/ui/WorkspaceView.js:388
msgid "New tab"
msgstr "Nueva pestaña"
-#: static/js/wirecloud/ui/WorkspaceView.js:286
-#: static/js/wirecloud/ui/WorkspaceView.js:297
+#: static/js/wirecloud/ui/WorkspaceView.js:403
+#: static/js/wirecloud/ui/WorkspaceView.js:414
msgid "Full screen"
msgstr "Ver a pantalla completa"
-#: static/js/wirecloud/ui/WorkspaceView.js:293
+#: static/js/wirecloud/ui/WorkspaceView.js:410
msgid "Exit full screen"
msgstr "Salir de pantalla completa"
-#: static/js/wirecloud/ui/WorkspaceView.js:333
+#: static/js/wirecloud/ui/WorkspaceView.js:450
msgid "Add components"
msgstr "Añadir componentes"
-#: static/js/wirecloud/ui/WorkspaceView.js:392
-#: static/js/wirecloud/ui/WorkspaceView.js:406
+#: static/js/wirecloud/ui/WorkspaceView.js:509
+#: static/js/wirecloud/ui/WorkspaceView.js:523
msgid "loading..."
msgstr "cargando..."
-#: static/js/wirecloud/ui/WorkspaceView.js:445
+#: static/js/wirecloud/ui/WorkspaceView.js:561
msgid "The requested workspace is no longer available (it was deleted)."
msgstr ""
"El entorno de trabajo solicitado ya no está disponible (ha sido borrado)."
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:58
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:50
msgid "New workspace"
msgstr "Nuevo entorno de trabajo"
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:65
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:57
msgid "Rename Workspace"
msgstr "Renombrar el entorno de trabajo"
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:71
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:63
msgid "Share"
msgstr "Compartir"
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:77
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:69
msgid "Upload to my resources"
msgstr "Subir a mis recursos"
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:88
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:80
msgid "Embed"
msgstr "Incrustar"
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:89
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:81
msgid "Embed Code"
msgstr "Código a incrustar"
-#: static/js/wirecloud/wiring/Connection.js:101
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:93
+msgid "Duplicate"
+msgstr ""
+
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:95
+msgid "Copy of %(title)s"
+msgstr ""
+
+#: static/js/wirecloud/wiring/Connection.js:80
msgid "The connection ('%(source)s'-'%(target)s') was established."
msgstr ""
"La conexión (‘%(source)s’-‘%(target)s’) se ha establecido correctamente."
-#: static/js/wirecloud/wiring/Connection.js:110
+#: static/js/wirecloud/wiring/Connection.js:89
msgid "The connection ('%(source)s'-'%(target)s') was detached."
msgstr "La conexión (‘%(source)s’-‘%(target)s’) se ha eliminado."
-#: static/js/wirecloud/wiring/Connection.js:137
+#: static/js/wirecloud/wiring/Connection.js:116
msgid "The connection ('%(source)s'-'%(target)s') has a missing endpoint."
msgstr ""
"La conexión (‘%(source)s’-‘%(target)s’) implica a un conector inexistente."
-#: static/js/wirecloud/wiring/Connection.js:177
+#: static/js/wirecloud/wiring/Connection.js:156
msgid "Connection's logs"
msgstr "Registros de la conexión"
-#: static/js/wirecloud/wiring/Endpoint.js:66
+#: static/js/wirecloud/wiring/Endpoint.js:61
msgid "Unimplemented function: %(funcName)s"
msgstr "Función no implementada: %(funcName)s"
-#: static/js/wirecloud/wiring/Operator.js:179
-msgid "Operator created successfully."
-msgstr "Operador creado correctamente."
-
-#: static/js/wirecloud/wiring/Operator.js:286
-msgid "%(operator_title)s's logs"
-msgstr "Registros de %(operator_title)s"
-
-#: static/js/wirecloud/wiring/Operator.js:498
+#: static/js/wirecloud/wiring/Operator.js:227
msgid ""
"This operator is currently not available. You or an administrator "
"probably uninstalled it.
Suggestions:
- Remove the operator."
@@ -2203,23 +2381,31 @@ msgstr ""
"li>
- O instalar otra versión de este operador y posteriormente usar la "
"opción Actualizar/Desactualizar
"
-#: static/js/wirecloud/wiring/Operator.js:501
+#: static/js/wirecloud/wiring/Operator.js:230
msgid "Operator loaded successfully."
msgstr "Operador cargado correctamente."
-#: static/js/wirecloud/wiring/Operator.js:525
+#: static/js/wirecloud/wiring/Operator.js:266
msgid "Operator unloaded successfully."
msgstr "Operador descargado correctamente."
-#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:67
-#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:69
+#: static/js/wirecloud/wiring/Operator.js:431
+msgid "Operator created successfully."
+msgstr "Operador creado correctamente."
+
+#: static/js/wirecloud/wiring/Operator.js:541
+msgid "%(operator_title)s's logs"
+msgstr "Registros de %(operator_title)s"
+
+#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:75
+#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:77
msgid "Use in %(endpointName)s"
msgstr "Usar en %(endpointName)s"
-#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:83
-#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:95
-#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:86
-#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:98
+#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:90
+#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:105
+#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:94
+#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:106
msgid ""
"Exception catched while processing an event that reached the "
"\"%(inputendpoint)s\" input endpoint"
@@ -2227,10 +2413,22 @@ msgstr ""
"Excepción capturada mientras se procesaba un evento que llego al endpoint de "
"entrada \"%(inputendpoint)s\""
-#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:85
+#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:94
msgid "Operator has not registered a callback for this input endpoint"
msgstr "El operador no ha registrado un callback para este punto de entrada"
-#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:88
+#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:96
msgid "Widget has not registered a callback for this input endpoint"
msgstr "El widget no ha registrado un callback para este endpoint de entrada"
+
+#~ msgid "missing vendor"
+#~ msgstr "falta el distribuidor"
+
+#~ msgid "missing name"
+#~ msgstr "falta el nombre"
+
+#~ msgid "missing version"
+#~ msgstr "falta la versión"
+
+#~ msgid "missing type"
+#~ msgstr "falta el tipo"
diff --git a/src/wirecloud/platform/locale/ja/LC_MESSAGES/django.po b/src/wirecloud/platform/locale/ja/LC_MESSAGES/django.po
index 3fe85574fa..2495f432b6 100644
--- a/src/wirecloud/platform/locale/ja/LC_MESSAGES/django.po
+++ b/src/wirecloud/platform/locale/ja/LC_MESSAGES/django.po
@@ -10,18 +10,18 @@ msgid ""
msgstr ""
"Project-Id-Version: WireCloud 1.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-03-15 00:00+0900\n"
+"POT-Creation-Date: 2024-05-27 11:24+0200\n"
"PO-Revision-Date: 2019-03-15 00:00+0900\n"
+"Last-Translator: Kazuhito Suda \n"
+"Language-Team: Kazuhito Suda \n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"Last-Translator: Kazuhito Suda \n"
-"Language-Team: Kazuhito Suda \n"
"X-Generator: Poedit 2.2.1\n"
-#: admin.py:64
+#: admin.py:71
msgid "Edit"
msgstr "編集"
@@ -34,74 +34,84 @@ msgstr "コンセプト"
msgid "Value"
msgstr "値"
-#: core/catalogue_manager.py:58
+#: core/catalogue_manager.py:49
#, python-format
msgid "Resource already exists %(resource_id)s"
msgstr "リソースは既に存在します %(resource_id)s"
-#: core/plugins.py:266
+#: core/plugins.py:283
msgid "Language"
msgstr "言語"
-#: core/plugins.py:267
+#: core/plugins.py:284
msgid "Current language used in the platform"
msgstr "プラットフォームで使用されている現在の言語"
-#: core/plugins.py:270
+#: core/plugins.py:287
msgid "Username"
msgstr "ユーザ名"
-#: core/plugins.py:271
+#: core/plugins.py:288
msgid "User name of the current logged user"
msgstr "現在ログインしているユーザのユーザ名"
-#: core/plugins.py:274
+#: core/plugins.py:291
msgid "Full name"
msgstr "氏名"
-#: core/plugins.py:275
+#: core/plugins.py:292
msgid "Full name of the logged user"
msgstr "ログインしているユーザの氏名"
-#: core/plugins.py:278
+#: core/plugins.py:295
msgid "Avatar"
msgstr "アバター"
-#: core/plugins.py:279
+#: core/plugins.py:296
msgid "URL of the avatar"
msgstr "アバターの URL"
-#: core/plugins.py:282
+#: core/plugins.py:299
msgid "Is Anonymous"
msgstr "匿名か"
-#: core/plugins.py:283
+#: core/plugins.py:300
msgid "Boolean. Designates whether current user is logged in the system."
msgstr ""
"ブール値。 現在のユーザがシステムにログインしているかどうかを指定します。"
-#: core/plugins.py:286
+#: core/plugins.py:303
msgid "Is Staff"
msgstr "スタッフか"
-#: core/plugins.py:287
+#: core/plugins.py:304
msgid "Boolean. Designates whether current user can access the admin site."
msgstr ""
"ブール値。 現在のユーザが管理サイトにアクセスできるかどうかを指定します。"
-#: core/plugins.py:290
+#: core/plugins.py:307
msgid "Is Superuser"
msgstr "スーパーユーザか"
-#: core/plugins.py:291
+#: core/plugins.py:308
msgid "Boolean. Designates whether current user is a super user."
msgstr "ブール値。 現在のユーザがスーパーユーザーかどうかを指定します。"
-#: core/plugins.py:294
+#: core/plugins.py:311
+#, fuzzy
+#| msgid "Groups"
+msgid "User Groups"
+msgstr "グループ"
+
+#: core/plugins.py:312
+msgid "List of the groups the user belongs to."
+msgstr ""
+
+#: core/plugins.py:315
msgid "Mode"
msgstr "モード"
-#: core/plugins.py:295
+#: core/plugins.py:316
msgid ""
"Rendering mode used by the platform (available modes: classic, smartphone "
"and embedded)"
@@ -109,35 +119,55 @@ msgstr ""
"プラットフォームで使用されるレンダリングモード (使用可能なモード: classic, "
"smartphone および embedded)"
-#: core/plugins.py:298
+#: core/plugins.py:319
+msgid "User Organizations"
+msgstr ""
+
+#: core/plugins.py:320
+msgid "List of the organizations the user belongs to."
+msgstr ""
+
+#: core/plugins.py:323
msgid "Orientation"
msgstr "向き"
-#: core/plugins.py:299
+#: core/plugins.py:324
msgid "Current screen orientation"
msgstr "現在の画面の向き"
-#: core/plugins.py:302
+#: core/plugins.py:327
+#, fuzzy
+#| msgid "Username"
+msgid "Real User Username"
+msgstr "ユーザ名"
+
+#: core/plugins.py:328
+#, fuzzy
+#| msgid "User name of the current logged user"
+msgid "User name of the real logged user"
+msgstr "現在ログインしているユーザのユーザ名"
+
+#: core/plugins.py:331
msgid "Theme"
msgstr "テーマ"
-#: core/plugins.py:303
+#: core/plugins.py:332
msgid "Name of the theme used by the platform"
msgstr "プラットフォームによって使用されるテーマの名前"
-#: core/plugins.py:306
+#: core/plugins.py:335
msgid "Version"
msgstr "バージョン"
-#: core/plugins.py:307
+#: core/plugins.py:336
msgid "Version of the platform"
msgstr "プラットフォームのバージョン"
-#: core/plugins.py:310
+#: core/plugins.py:339
msgid "Version Hash"
msgstr "バージョン・ハッシュ"
-#: core/plugins.py:311
+#: core/plugins.py:340
msgid ""
"Hash for the current version of the platform. This hash changes when the "
"platform is updated or when an addon is added or removed"
@@ -145,59 +175,69 @@ msgstr ""
"現在のバージョンのプラットフォームのハッシュ。 このハッシュは、プラットフォー"
"ムが更新されたとき、またはアドオンが追加または削除されたときに変更されます"
-#: core/plugins.py:322
+#: core/plugins.py:351
msgid "Anonymous"
msgstr "匿名"
-#: core/plugins.py:343 workspace/models.py:38 workspace/models.py:104
+#: core/plugins.py:378 workspace/models.py:49
+msgid "Description"
+msgstr "説明"
+
+#: core/plugins.py:379
+msgid "Short description of the workspace without formating"
+msgstr "書式設定なしのワークスペースの簡単な説明"
+
+#: core/plugins.py:382
+msgid "Editing mode"
+msgstr ""
+
+#: core/plugins.py:383
+#, fuzzy
+#| msgid "Boolean. Designates whether current user is a super user."
+msgid "Boolean. Designates whether the workspace is in editing mode."
+msgstr "ブール値。 現在のユーザがスーパーユーザーかどうかを指定します。"
+
+#: core/plugins.py:386 workspace/models.py:39 workspace/models.py:125
msgid "Title"
msgstr "タイトル"
-#: core/plugins.py:344
+#: core/plugins.py:387
msgid "Current title of the workspace"
msgstr "現在のワークスペースのタイトル"
-#: core/plugins.py:347 iwidget/models.py:31 markets/models.py:29
+#: core/plugins.py:390 iwidget/models.py:31 markets/models.py:29
#: markets/models.py:46 preferences/models.py:29 preferences/models.py:43
-#: preferences/models.py:58 workspace/models.py:36 workspace/models.py:103
+#: preferences/models.py:58 workspace/models.py:37 workspace/models.py:124
msgid "Name"
msgstr "名前"
-#: core/plugins.py:348
+#: core/plugins.py:391
msgid "Current name of the workspace"
msgstr "現在のワークスペースの名前"
-#: core/plugins.py:351
+#: core/plugins.py:394
msgid "Owner"
msgstr "オーナー"
-#: core/plugins.py:352
+#: core/plugins.py:395
msgid "Workspace's owner username"
msgstr "ワークスペースの所有者のユーザ名"
-#: core/plugins.py:355 workspace/models.py:47
-msgid "Description"
-msgstr "説明"
-
-#: core/plugins.py:356
-msgid "Short description of the workspace without formating"
-msgstr "書式設定なしのワークスペースの簡単な説明"
-
-#: core/plugins.py:359 workspace/models.py:48
+#: core/plugins.py:398 workspace/models.py:50
msgid "Long description"
msgstr "長い説明"
-#: core/plugins.py:360
+#: core/plugins.py:399
msgid ""
"Detailed workspace's description. This description can contain formatting."
msgstr ""
"詳細なワークスペースの説明。 この説明には書式設定を含めることができます。"
-#: core/plugins.py:375 markets/models.py:30
+#: core/plugins.py:408 markets/models.py:30
msgid "Public"
msgstr "パブリック"
-#: core/plugins.py:378
+#: core/plugins.py:411
msgid ""
"Allow any user to open this workspace (in read-only mode). (default: "
"disabled)"
@@ -205,31 +245,52 @@ msgstr ""
"任意のユーザーが読み取り専用モードでこのワークスペースを開くことを許可します "
"(デフォルト:無効)"
-#: core/plugins.py:383
+#: core/plugins.py:416
+msgid "Required registered user"
+msgstr ""
+
+#: core/plugins.py:419
+msgid ""
+"Require users to be logged in to access the workspace (This option has only "
+"effect if the workspace is public). (default: disabled)"
+msgstr ""
+
+#: core/plugins.py:424
msgid "Share list"
msgstr "共有リスト"
-#: core/plugins.py:386
+#: core/plugins.py:427
msgid "List of users with access to this workspace. (default: [])"
msgstr "このワークスペースにアクセスできるユーザーのリスト。(デフォルト: [])"
-#: core/plugins.py:391
+#: core/plugins.py:432
msgid "Default layout"
msgstr "デフォルト・レイアウト"
-#: core/plugins.py:394
+#: core/plugins.py:435
msgid "Base"
msgstr "ベース"
-#: core/plugins.py:395
+#: core/plugins.py:436
msgid "Free"
msgstr "フリー"
-#: core/plugins.py:397
+#: core/plugins.py:438
msgid "Default layout for the new widgets."
msgstr "新しいウィジェットのデフォルト・レイアウト。"
-#: core/plugins.py:409
+#: core/plugins.py:449
+msgid "Screen sizes"
+msgstr ""
+
+#: core/plugins.py:451
+msgid ""
+"List of screen sizes supported by the workspace. Each screen size is defined "
+"by a range of screen widths and different widget configurations are "
+"associated with it."
+msgstr ""
+
+#: core/plugins.py:463
msgid "Base layout"
msgstr "ベース・レイアウト"
@@ -237,11 +298,11 @@ msgstr "ベース・レイアウト"
msgid "Widget"
msgstr "ウィジェット"
-#: iwidget/models.py:39
+#: iwidget/models.py:30
msgid "Widget URI"
msgstr "ウィジェット URI"
-#: iwidget/models.py:32 workspace/utils.py:472 workspace/views.py:61
+#: iwidget/models.py:32 workspace/utils.py:422 workspace/views.py:62
msgid "Tab"
msgstr "タブ"
@@ -249,32 +310,44 @@ msgstr "タブ"
msgid "Layout"
msgstr "レイアウト"
-#: iwidget/models.py:35
+#: iwidget/models.py:36
msgid "Read Only"
msgstr "読み取り専用"
-#: iwidget/utils.py:70
+#: iwidget/utils.py:71
#, python-format
msgid "Field %(field)s must contain a boolean value"
msgstr "フィールド %(field)s にはブール値を含める必要があります"
-#: iwidget/utils.py:81 iwidget/utils.py:94
+#: iwidget/utils.py:80 iwidget/utils.py:93 iwidget/utils.py:106
#, python-format
msgid "Field %(field)s must contain a number value"
msgstr "フィールド %(field)s には数値を含める必要があります"
-#: iwidget/utils.py:84 iwidget/utils.py:97
+#: iwidget/utils.py:83 iwidget/utils.py:96 iwidget/utils.py:109
#, python-format
msgid "Invalid value for %(field)s"
msgstr "%(field)s の値が無効です"
-#: iwidget/utils.py:137
+#: iwidget/utils.py:119
+#, fuzzy
+#| msgid "Field %(field)s must contain a number value"
+msgid "anchor field must contain a string value"
+msgstr "フィールド %(field)s には数値を含める必要があります"
+
+#: iwidget/utils.py:122
+#, fuzzy
+#| msgid "Invalid value for %(field)s"
+msgid "Invalid value for anchor field"
+msgstr "%(field)s の値が無効です"
+
+#: iwidget/utils.py:225
#, python-format
msgid "%(uri)s is not a widget"
msgstr "%(uri)s はウィジェットではありません"
-#: iwidget/views.py:42 iwidget/views.py:214 iwidget/views.py:282
-#: wiring/views.py:404 workspace/views.py:187 workspace/views.py:304
+#: iwidget/views.py:42 iwidget/views.py:217 iwidget/views.py:283
+#: wiring/views.py:407 workspace/views.py:160 workspace/views.py:277
msgid "You don't have permission to access this workspace"
msgstr "このワークスペースにアクセスする権限がありません"
@@ -314,7 +387,7 @@ msgstr "ワークスペースからウィジェットを削除する権限があ
msgid "IWidget cannot be deleted"
msgstr "ウィジェットは削除できません"
-#: iwidget/views.py:182 iwidget/views.py:227
+#: iwidget/views.py:182 iwidget/views.py:230
msgid "Missing widget variables cannot be updated"
msgstr "欠落しているウィジェット変数は更新できません"
@@ -328,17 +401,17 @@ msgstr "無効な設定: \"%s\""
msgid "\"%s\" preference is read only."
msgstr "\"%s\" 設定は読み取り専用です。"
-#: iwidget/views.py:201
+#: iwidget/views.py:200 iwidget/views.py:204
msgid ""
"You have not enough permission for updating the preferences of the iwidget"
msgstr "ウィジェットの設定を更新する権限がありません"
-#: iwidget/views.py:257
+#: iwidget/views.py:260
#, python-format
msgid "Invalid persistent variable: \"%s\""
msgstr "無効な永続変数: \"%s\""
-#: iwidget/views.py:264 iwidget/views.py:269
+#: iwidget/views.py:266 iwidget/views.py:270
msgid ""
"You have not enough permission for updating the persistent variables of this "
"widget"
@@ -379,8 +452,10 @@ msgid "You are not allowed allow to install components to other users"
msgstr "他のユーザにコンポーネントをインストールすることを許可されていません"
#: localcatalogue/views.py:183
-msgid ""
-"You are not allowed allow to install components to non-owned organizations"
+#, fuzzy
+#| msgid ""
+#| "You are not allowed allow to install components to non-owned organizations"
+msgid "You are not allowed to install components to non-owned organizations"
msgstr ""
"コンポーネントを所有していない組織にインストールすることは許可されていません"
@@ -412,7 +487,7 @@ msgstr "リソースを削除することを許可されていません"
msgid "You don't have access to this workspace"
msgstr "このワークスペースにアクセスできません"
-#: markets/models.py:30 markets/models.py:45
+#: markets/models.py:28 markets/models.py:45
msgid "User"
msgstr "ユーザ"
@@ -424,20 +499,20 @@ msgstr "オプション"
msgid "Market"
msgstr "マーケット"
-#: markets/views.py:76
+#: markets/views.py:77
msgid "invalid user option"
msgstr "無効なユーザ・オプション"
-#: markets/views.py:79
+#: markets/views.py:80
msgid ""
"You don't have permissions for adding marketplaces in name of other user"
msgstr "他のユーザの名前でマーケットプレイスを追加する権限がありません"
-#: markets/views.py:101 markets/views.py:104 markets/views.py:131
+#: markets/views.py:102 markets/views.py:105 markets/views.py:132
msgid "You are not allowed to delete this market"
msgstr "このマーケットを削除することは許可されていません"
-#: markets/views.py:148 markets/views.py:150
+#: markets/views.py:149 markets/views.py:151
msgid "Something went wrong (see details for more info)"
msgstr "何かが間違っていました (詳細を参照)"
@@ -445,14 +520,32 @@ msgstr "何かが間違っていました (詳細を参照)"
msgid "Inherit"
msgstr "継承"
-#: preferences/views.py:220 preferences/views.py:273
+#: preferences/views.py:221 preferences/views.py:265 preferences/views.py:357
+msgid "Invalid payload: root type must be object"
+msgstr ""
+
+#: preferences/views.py:225 preferences/views.py:269 preferences/views.py:361
+msgid "Invalid type for pref value: {}"
+msgstr ""
+
+#: preferences/views.py:227 preferences/views.py:271 preferences/views.py:363
+msgid "Invalid structure for pref: {}"
+msgstr ""
+
+#: preferences/views.py:230 preferences/views.py:274 preferences/views.py:366
+#, fuzzy
+#| msgid "Invalid value for %(field)s"
+msgid "Invalid value for pref: {}"
+msgstr "%(field)s の値が無効です"
+
+#: preferences/views.py:247 preferences/views.py:339
msgid "You are not allowed to read this workspace"
msgstr "このワークスペースを読むことはできません"
-#: preferences/views.py:234 preferences/views.py:287 wiring/views.py:72
-#: wiring/views.py:102 wiring/views.py:129 wiring/views.py:293
-#: wiring/views.py:348 workspace/views.py:203 workspace/views.py:316
-#: workspace/views.py:320 workspace/views.py:398
+#: preferences/views.py:261 preferences/views.py:353 wiring/views.py:76
+#: wiring/views.py:106 wiring/views.py:133 wiring/views.py:297
+#: wiring/views.py:351 workspace/views.py:176 workspace/views.py:289
+#: workspace/views.py:367
msgid "You are not allowed to update this workspace"
msgstr "このワークスペースを更新することはできません"
@@ -505,53 +598,53 @@ msgstr ""
msgid "Error processing widget code"
msgstr "ウィジェット・コードの処理エラー"
-#: wiring/views.py:125 wiring/views.py:267
+#: wiring/views.py:129 wiring/views.py:271
msgid "Read only properties cannot be updated"
msgstr "読み取り専用のプロパティは更新できません"
-#: wiring/views.py:156 wiring/views.py:160
+#: wiring/views.py:160 wiring/views.py:164
msgid "You are not allowed to remove or update read only connections"
msgstr "読み取り専用接続を削除または更新することはできません"
-#: wiring/views.py:197
+#: wiring/views.py:201
msgid "Read only and hidden preferences cannot be created using this API"
msgstr ""
"この API を使用して、読み取り専用と非表示のプリファレンスを作成することはでき"
"ません"
-#: wiring/views.py:211
+#: wiring/views.py:215
msgid "Read only and hidden preferences cannot be removed"
msgstr "読み取り専用と非表示の設定は削除できません"
-#: wiring/views.py:224 wiring/views.py:264
+#: wiring/views.py:228 wiring/views.py:268
msgid "Read only and hidden status cannot be changed using this API"
msgstr ""
"この API を使用して、読み取り専用と非表示のステータスを変更することはできませ"
"ん"
-#: wiring/views.py:227
+#: wiring/views.py:231
msgid "Read only preferences cannot be updated"
msgstr "読み取り専用の設定は更新できません"
-#: wiring/views.py:239
+#: wiring/views.py:243
msgid "Read only and hidden properties cannot be created using this API"
msgstr ""
"この API を使用して、読み取り専用プロパティと非表示プロパティを作成することは"
"できません"
-#: wiring/views.py:248
+#: wiring/views.py:252
msgid "Read only and hidden properties cannot be removed"
msgstr "読み取り専用プロパティと隠しプロパティは削除できません"
-#: wiring/views.py:320 wiring/views.py:341
+#: wiring/views.py:320 wiring/views.py:344
msgid "Invalid JSON patch"
msgstr "無効な JSON パッチ"
-#: wiring/views.py:334
+#: wiring/views.py:337
msgid "Missing operators variables cannot be updated"
msgstr "不足している演算子変数は更新できません"
-#: wiring/views.py:339
+#: wiring/views.py:342
msgid "Failed to apply patch"
msgstr "パッチの適用に失敗しました"
@@ -559,164 +652,171 @@ msgstr "パッチの適用に失敗しました"
msgid "Missing dependencies"
msgstr "不足している依存関係"
-#: workspace/mashupTemplateParser.py:361
+#: workspace/mashupTemplateParser.py:363
msgid "Original wiring"
msgstr "オリジナルのワイヤーリング"
-#: workspace/mashupTemplateParser.py:361
+#: workspace/mashupTemplateParser.py:363
msgid "This is the wiring description of the original workspace"
msgstr "これは元のワークスペースのワイヤーリング記述です"
-#: workspace/mashupTemplateParser.py:364
+#: workspace/mashupTemplateParser.py:366
msgid "Merged wiring"
msgstr "統合されたワイヤーリング"
-#: workspace/mashupTemplateParser.py:364
+#: workspace/mashupTemplateParser.py:366
msgid "This is the wiring description of the merged mashup."
msgstr "これは、マージされたマッシュアップのワイヤーリング記述です。"
-#: workspace/models.py:35
+#: workspace/models.py:36
msgid "Creator"
msgstr "作成者"
-#: workspace/models.py:40
+#: workspace/models.py:41
msgid "Creation Date"
msgstr "作成日付"
-#: workspace/models.py:41
+#: workspace/models.py:42
msgid "Last Modification Date"
msgstr "最終更新日"
-#: workspace/models.py:43
+#: workspace/models.py:44
msgid "Searchable"
msgstr "検索可能"
-#: workspace/models.py:44
+#: workspace/models.py:45
msgid "Available to all users"
msgstr "すべてのユーザが利用可能"
-#: workspace/models.py:45
+#: workspace/models.py:46
+msgid ""
+"Require users to be logged in to access the workspace (This option has only "
+"effect if the workspace is public)"
+msgstr ""
+
+#: workspace/models.py:47
msgid "Users"
msgstr "ユーザ"
-#: workspace/models.py:46
+#: workspace/models.py:48
msgid "Groups"
msgstr "グループ"
-#: workspace/models.py:90
-msgid "Manager"
-msgstr "マネージャ"
-
-#: workspace/models.py:91
-msgid "Reason Ref"
-msgstr "理由の参照"
-
-#: workspace/models.py:91
-msgid ""
-"Reference to the reason why it was added. Used by Workspace Managers to sync "
-"workspaces"
+#: workspace/models.py:111
+msgid "Access Level"
msgstr ""
-"それが追加された理由を参照してください。 ワークスペースマネージャがワークス"
-"ペースを同期するために使用されます"
-#: workspace/models.py:106
+#: workspace/models.py:127
msgid "Visible"
msgstr "ビジブル"
-#: workspace/models.py:108
+#: workspace/models.py:129
msgid "Workspace"
msgstr "ワークスペース"
-#: workspace/utils.py:630 workspace/views.py:119 workspace/views.py:413
+#: workspace/utils.py:594 workspace/views.py:382
msgid "invalid mashup id"
msgstr "無効なマッシュアップ id"
-#: workspace/utils.py:638
+#: workspace/utils.py:602
#, python-format
msgid "Mashup not found: %(mashup)s"
msgstr "マッシュアップが見つかりませんでした: %(mashup)s"
-#: workspace/views.py:94
+#: workspace/views.py:95
msgid "Missing name or title parameter"
msgstr "名前またはタイトル・パラメータがありません"
-#: workspace/views.py:96 workspace/views.py:408
+#: workspace/views.py:97 workspace/views.py:377
msgid "Workspace and mashup parameters cannot be used at the same time"
msgstr "作業領域とマッシュアップ・パラメータを同時に使用することはできません"
-#: workspace/views.py:104
+#: workspace/views.py:105
msgid "invalid workspace name"
msgstr "無効なワークスペース名"
-#: workspace/views.py:112 workspace/views.py:164 workspace/views.py:224
+#: workspace/views.py:113 workspace/views.py:134 workspace/views.py:197
msgid "A workspace with the given name already exists"
msgstr "指定された名前のワークスペースがすでに存在します"
-#: workspace/views.py:127 workspace/views.py:421
-#, python-format
-msgid "Mashup not found: %(mashup_id)s"
-msgstr "マッシュアップが見つかりませんでした: %(mashup_id)s"
-
-#: workspace/views.py:137 workspace/views.py:431
+#: workspace/views.py:122 workspace/views.py:400
#, python-format
msgid "You are not allowed to read from workspace %s"
msgstr "ワークスペース %s から読み込むことができません"
-#: workspace/views.py:235
+#: workspace/views.py:208
msgid "You are not allowed to delete this workspace"
msgstr "このワークスペースを削除することはできません"
-#: workspace/views.py:257
+#: workspace/views.py:230
msgid "Malformed tab JSON: expecting tab name or title."
msgstr "不正なタブ JSON: タブの名前またはタイトルが必要です。"
-#: workspace/views.py:260 workspace/views.py:283
+#: workspace/views.py:233 workspace/views.py:256
msgid "You are not allowed to create new tabs for this workspace"
msgstr "このワークスペースの新しいタブを作成することはできません"
-#: workspace/views.py:268 workspace/views.py:349
+#: workspace/views.py:241 workspace/views.py:318
msgid "A tab with the given name already exists for the workspace"
msgstr "指定された名前のタブがすでにワークスペースに存在しています"
-#: workspace/views.py:329 workspace/views.py:332
+#: workspace/views.py:298 workspace/views.py:301
msgid "Invalid visible value"
msgstr "無効なビジブル値"
-#: workspace/views.py:361
+#: workspace/views.py:330
msgid "You are not allowed to remove this tab"
msgstr "このタブを削除することはできません"
-#: workspace/views.py:365
+#: workspace/views.py:334
msgid "Tab cannot be deleted as workspaces need at least one tab"
msgstr "タブには少なくとも1つのタブが必要なため、削除することはできません"
-#: workspace/views.py:369
+#: workspace/views.py:338
msgid "Tab cannot be deleted as it contains widgets that cannot be deleted"
msgstr ""
"タブには削除できないウィジェットが含まれているため、削除することはできません"
-#: workspace/views.py:406
+#: workspace/views.py:375
msgid "Missing workspace or mashup parameter"
msgstr "ワークスペースまたはマッシュアップ・パラメータがありません"
-#: workspace/views.py:490
+#: workspace/views.py:390
+#, python-format
+msgid "Mashup not found: %(mashup_id)s"
+msgstr "マッシュアップが見つかりませんでした: %(mashup_id)s"
+
+#: workspace/views.py:459
#, python-format
msgid "malformed json data: %s"
msgstr "不正な形式の json データ: %s"
-#: workspace/views.py:495
+#: workspace/views.py:464
#, python-format
msgid "Malformed JSON. The following field(s) are missing: %(fields)s."
msgstr "不正な形式のJSON。 次のフィールドはありません: %(fields)s。"
-#: workspace/views.py:498
+#: workspace/views.py:467
msgid "Invalid vendor"
msgstr "無効なベンダー"
-#: workspace/views.py:501
+#: workspace/views.py:470
msgid "Invalid name"
msgstr "無効な名前"
-#: workspace/views.py:504
+#: workspace/views.py:473
msgid "Invalid version number"
msgstr "無効なバージョン番号"
+
+#~ msgid "Manager"
+#~ msgstr "マネージャ"
+
+#~ msgid "Reason Ref"
+#~ msgstr "理由の参照"
+
+#~ msgid ""
+#~ "Reference to the reason why it was added. Used by Workspace Managers to "
+#~ "sync workspaces"
+#~ msgstr ""
+#~ "それが追加された理由を参照してください。 ワークスペースマネージャがワーク"
+#~ "スペースを同期するために使用されます"
diff --git a/src/wirecloud/platform/locale/ja/LC_MESSAGES/djangojs.po b/src/wirecloud/platform/locale/ja/LC_MESSAGES/djangojs.po
index df5e24ff08..06038ea83e 100644
--- a/src/wirecloud/platform/locale/ja/LC_MESSAGES/djangojs.po
+++ b/src/wirecloud/platform/locale/ja/LC_MESSAGES/djangojs.po
@@ -10,175 +10,89 @@ msgid ""
msgstr ""
"Project-Id-Version: WireCloud 1.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-03-15 00:00+0900\n"
+"POT-Creation-Date: 2024-05-27 11:24+0200\n"
"PO-Revision-Date: 2019-03-15 00:00+0900\n"
+"Last-Translator: Kazuhito Suda \n"
+"Language-Team: Kazuhito Suda \n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"Last-Translator: Kazuhito Suda \n"
-"Language-Team: Kazuhito Suda \n"
"X-Generator: Poedit 2.2.1\n"
-#: static/js/WirecloudAPI/DashboardManagementAPI.js:154
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:103
+#: static/js/WirecloudAPI/DashboardManagementAPI.js:148
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:104
msgid "Do you really want to remove the \"%(name)s\" workspace?"
msgstr "本当にワークスペース \"%(name)s\" を削除しますか?"
-#: static/js/WirecloudAPI/WirecloudAPICommon.js:226
+#: static/js/WirecloudAPI/WirecloudAPICommon.js:234
msgid ""
"- File:
- Line:
"
"ul>See the browser console for more details
"
+"how-to-open-the-javascript-console-in-different-browsers\" "
+"target=\"_blank\">browser console for more details"
msgstr ""
"- ファイル:
- ライン:
"
"ul>詳細については、ブラウザのコンソール を参照してください。
"
-#: static/js/catalogue/CatalogueSearchView.js:44
-msgid "Empty Marketplace!"
-msgstr "空のマーケットプレイス!"
-
-#: static/js/catalogue/CatalogueSearchView.js:45
-msgid ""
-"This marketplace is empty, that is, it does not provide any resource at this "
-"time."
-msgstr "このマーケットプレイスは空です。現時点ではリソースを提供していません。"
-
-#: static/js/catalogue/CatalogueSearchView.js:67
-msgid "Showing results for
"
-msgstr " の結果を表示します。
"
-
-#: static/js/catalogue/CatalogueSearchView.js:95
-msgid "Connection error: No resource retrieved."
-msgstr "接続エラー: リソースが取得されませんでした."
-
-#: static/js/catalogue/CatalogueSearchView.js:101
-msgid ""
-"We couldn't find anything for your search - %(keywords)s."
-"p>
Suggestions:
- Make sure all words are spelled correctly."
-"li>
- Try different keywords.
- Try more general keywords.
"
-msgstr ""
-"検索で何も見つかりませんでした - %(keywords)s.
対処:"
-"p>
- すべての単語のスペルが正しいことを確認してください
- 異なる"
-"キーワードを試してみてください
- より一般的なキーワードを試してください"
-"
"
-
-#: static/js/catalogue/CatalogueSearchView.js:109
-msgid "Keywords..."
-msgstr "キーワード..."
-
-#: static/js/catalogue/CatalogueSearchView.js:124
-#: static/js/catalogue/CatalogueSearchView.js:243
-msgid "Refresh"
-msgstr "リフレッシュ"
-
-#: static/js/catalogue/CatalogueSearchView.js:135
-msgid "Creation date"
-msgstr "作成日"
-
-#: static/js/catalogue/CatalogueSearchView.js:136
-#: static/js/wirecloud/Widget.js:253
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:291
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:718
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:148
-#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:100
-#: static/js/wirecloud/wiring/Operator.js:164
-msgid "Title"
-msgstr "タイトル"
-
-#: static/js/catalogue/CatalogueSearchView.js:137
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:43
-msgid "Vendor"
-msgstr "ベンダー"
-
-#: static/js/catalogue/CatalogueSearchView.js:149
-msgid "All"
-msgstr "全て"
-
-#: static/js/catalogue/CatalogueSearchView.js:150
-#: static/js/wirecloud/ui/ComponentSidebar.js:56
-#: static/js/wirecloud/ui/WiringEditor/ComponentShowcase.js:56
-msgid "Widgets"
-msgstr "ウィジェット"
-
-#: static/js/catalogue/CatalogueSearchView.js:151
-#: static/js/wirecloud/ui/ComponentSidebar.js:43
-msgid "Mashups"
-msgstr "マッシュアップ"
-
-#: static/js/catalogue/CatalogueSearchView.js:152
-#: static/js/wirecloud/ui/WiringEditor/ComponentShowcase.js:43
-msgid "Operators"
-msgstr "オペレータ"
-
-#: static/js/catalogue/CatalogueSearchView.js:241
-msgid "Clear filters"
-msgstr "フィルターをクリア"
-
-#: static/js/catalogue/CatalogueView.js:51
-msgid "Uninstall"
-msgstr "アンインストール"
-
-#: static/js/catalogue/CatalogueView.js:57
-msgid "Install"
-msgstr "インストール"
-
-#: static/js/wirecloud/LocalCatalogue.js:37
+#: static/js/wirecloud/LocalCatalogue.js:38
msgid "Unloading affected widgets"
msgstr "影響を受けるウィジェットをアンロード"
-#: static/js/wirecloud/LocalCatalogue.js:40
+#: static/js/wirecloud/LocalCatalogue.js:41
msgid "Unloading affected operators"
msgstr "影響を受けるオペレータをアンロード"
-#: static/js/wirecloud/LocalCatalogue.js:75
+#: static/js/wirecloud/LocalCatalogue.js:76
msgid "Purging %(componenttype)s info"
msgstr "%(componenttype)s の情報をパージ"
-#: static/js/wirecloud/LocalCatalogue.js:137
+#: static/js/wirecloud/LocalCatalogue.js:128
#: static/js/wirecloud/WorkspaceCatalogue.js:81
msgid "Error loading %(resource)s metadata"
msgstr "%(resource)s のメタデータの読み込み中にエラーが発生しました"
-#: static/js/wirecloud/LocalCatalogue.js:174
+#: static/js/wirecloud/LocalCatalogue.js:171
msgid "Deleting all versions of %(title)s (%(group_id)s)"
msgstr "%(title)s (%(group_id)s) のすべてのバージョンを削除"
-#: static/js/wirecloud/LocalCatalogue.js:176
+#: static/js/wirecloud/LocalCatalogue.js:173
msgid "Uninstalling all versions of %(title)s (%(group_id)s)"
msgstr "%(title)s (%(group_id)s) のすべてのバージョンをアンインストール"
-#: static/js/wirecloud/LocalCatalogue.js:185
+#: static/js/wirecloud/LocalCatalogue.js:182
msgid "Deleting %(title)s (%(uri)s)"
msgstr "%(title)s (%(uri)s) を削除"
-#: static/js/wirecloud/LocalCatalogue.js:187
+#: static/js/wirecloud/LocalCatalogue.js:184
msgid "Uninstalling %(title)s (%(uri)s)"
msgstr "%(title)s (%(uri)s) をアンインストール"
-#: static/js/wirecloud/LocalCatalogue.js:281
+#: static/js/wirecloud/LocalCatalogue.js:278
msgid "Invalid component type: %(type)s"
msgstr "無効なコンポーネントタイプ: %(type)s"
-#: static/js/wirecloud/LogManager.js:215
+#: static/js/wirecloud/LogManager.js:252
msgid "HTTP Error %(errorCode)s - %(errorDesc)s"
msgstr "HTTPエラー %(errorCode)s - %(errorDesc)s"
#: static/js/wirecloud/MarketManager.js:50
#: static/js/wirecloud/MarketManager.js:81
-#: static/js/wirecloud/MarketManager.js:111 static/js/wirecloud/Wiring.js:197
-#: static/js/wirecloud/Wiring.js:262 static/js/wirecloud/Workspace.js:305
-#: static/js/wirecloud/Workspace.js:441 static/js/wirecloud/Workspace.js:496
-#: static/js/wirecloud/WorkspaceTab.js:223
-#: static/js/wirecloud/WorkspaceTab.js:268 static/js/wirecloud/core.js:57
-#: static/js/wirecloud/core.js:468 static/js/wirecloud/core.js:537
-#: static/js/wirecloud/core.js:542
-#: static/js/wirecloud/ui/PublishResourceWindowMenu.js:99
-#: static/js/wirecloud/ui/WorkspaceTabViewDragboard.js:215
+#: static/js/wirecloud/MarketManager.js:111
+#: static/js/wirecloud/Preferences.js:130 static/js/wirecloud/Wiring.js:465
+#: static/js/wirecloud/Wiring.js:530 static/js/wirecloud/Workspace.js:468
+#: static/js/wirecloud/Workspace.js:604 static/js/wirecloud/Workspace.js:659
+#: static/js/wirecloud/WorkspaceTab.js:220
+#: static/js/wirecloud/WorkspaceTab.js:265 static/js/wirecloud/core.js:158
+#: static/js/wirecloud/core.js:420 static/js/wirecloud/core.js:585
+#: static/js/wirecloud/core.js:654 static/js/wirecloud/core.js:660
+#: static/js/wirecloud/core.js:708
+#: static/js/wirecloud/ui/PublishResourceWindowMenu.js:104
+#: static/js/wirecloud/ui/WorkspaceTabViewDragboard.js:270
+#: static/js/wirecloud/ui/WorkspaceTabViewDragboard.js:423
msgid "Unexpected response from server"
msgstr "サーバからの予期しない応答"
@@ -186,72 +100,56 @@ msgstr "サーバからの予期しない応答"
msgid "Adding marketplace"
msgstr "マーケットプレイスの追加"
-#: static/js/wirecloud/MashableApplicationComponent.js:34
-msgid "missing vendor"
-msgstr "ベンダーがありません"
-
-#: static/js/wirecloud/MashableApplicationComponent.js:40
-msgid "missing name"
-msgstr "名前がありません"
-
-#: static/js/wirecloud/MashableApplicationComponent.js:46
-msgid "missing version"
-msgstr "バージョンがありません"
-
-#: static/js/wirecloud/MashableApplicationComponent.js:52
-msgid "missing type"
-msgstr "タイプがありません"
-
-#: static/js/wirecloud/PlatformPreferences.js:38
+#: static/js/wirecloud/PlatformPreferences.js:39
msgid "Platform Preferences"
msgstr "プラットフォームの設定"
-#: static/js/wirecloud/PreferenceManager.js:41
+#: static/js/wirecloud/PreferenceManager.js:39
msgid "Language"
msgstr "言語"
-#: static/js/wirecloud/PreferenceManager.js:44
+#: static/js/wirecloud/PreferenceManager.js:42
msgid "Default setting"
msgstr "デフォルト設定"
-#: static/js/wirecloud/PreferenceManager.js:45
+#: static/js/wirecloud/PreferenceManager.js:43
msgid "Detect browser language"
msgstr "ブラウザ言語を検出"
-#: static/js/wirecloud/TabPreferences.js:43
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:100
+#: static/js/wirecloud/TabPreferences.js:45
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:98
#: static/js/wirecloud/Tutorials/BehaviourOrientedWiring.js:236
-#: static/js/wirecloud/Widget/PreferencesWindowMenu.js:30
-#: static/js/wirecloud/WorkspacePreferences.js:38
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:85
-#: static/js/wirecloud/ui/WirecloudHeader.js:101
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:86
-#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:73
-#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:70
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:94
+#: static/js/wirecloud/Widget/PreferencesWindowMenu.js:33
+#: static/js/wirecloud/WorkspacePreferences.js:40
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:78
+#: static/js/wirecloud/ui/WirecloudHeader.js:94
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:141
+#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:99
+#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:61
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:86
msgid "Settings"
msgstr "設定"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:66
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:64
msgid "Basic concepts"
msgstr "基本概念"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:68
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:71
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:76
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:85
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:92
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:98
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:116
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:120
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:121
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:162
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:66
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:69
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:74
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:83
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:90
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:96
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:114
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:118
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:119
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:160
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:165
#: static/js/wirecloud/Tutorials/BasicConcepts.js:167
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:169
msgid "WireCloud Basic Tutorial"
msgstr "WireCloud 基本チュートリアル"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:68
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:66
msgid ""
"Welcome to WireCloud!!
This tutorial will show you the basic "
"concepts behind WireCloud.
"
@@ -259,7 +157,7 @@ msgstr ""
" WireCloudへようこそ!!
このチュートリアルでは、WireCloudの基本概念"
"を紹介します。
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:71
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:69
msgid ""
"This is the Editor view. In this view, you can use and modify "
"your workspaces. Currently you are in a newly created workspace: Basic "
@@ -268,14 +166,14 @@ msgid ""
"some widgets, so we are going to install them for you. You can safely "
"uninstall these widgets after finishing the tutorial.
"
msgstr ""
-"
これはエディタ ビューです。このビューではワークスペースを使用お"
-"よび変更できます。 現在、あなたは新しく作成されたワークスペースにいます: "
-"基本概念のチュートリアル. このワークショップは空なので、最初にウィジェッ"
-"トを追加します。
次のステップではいくつ"
-"かのウィジェットが必要なので、それらをインストールします。 チュートリアルの終"
-"了後、これらのウィジェットを安全にアンインストールできます。
"
+"
これはエディタ ビューです。このビューではワークスペースを使用およ"
+"び変更できます。 現在、あなたは新しく作成されたワークスペースにいます: 基"
+"本概念のチュートリアル. このワークショップは空なので、最初にウィジェット"
+"を追加します。
次のステップではいくつか"
+"のウィジェットが必要なので、それらをインストールします。 チュートリアルの終了"
+"後、これらのウィジェットを安全にアンインストールできます。
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:76
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:74
msgid ""
"
Ok, widgets have been installed successfuly.
Next step is to add "
"the YouTube Browser widget to the workspace.
"
@@ -283,15 +181,15 @@ msgstr ""
"
ウィジェットは正常にインストールされました。
次のステップは、"
"YouTube Browserウィジェットをワークスペースに追加することです。
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:77
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:75
msgid "Click the
Edit button"
msgstr "
編集 ボタンをクリックします"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:79
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:77
msgid "Click the
Add components button"
msgstr "
コンポーネントを追加 ボタンをクリックします"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:81
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:79
msgid ""
"By typing \"browser\" we can filter widgets that contains in their name or "
"description these words"
@@ -299,7 +197,7 @@ msgstr ""
"\"browser\" と入力すると、名前や説明にこれらの単語を含むウィジェットをフィル"
"タリングできます"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:84
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:82
msgid ""
"Once you have the results, you can add the widget. So click
Add to "
"workspace"
@@ -307,27 +205,27 @@ msgstr ""
"結果が得られたら、ウィジェットを追加することができます。
ワークスペースに"
"追加をクリックします"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:85
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:83
msgid ""
"
Great! That was easy, wasn't "
"it?.
Let's continue adding the Input Box widget.
"
msgstr ""
-"
すばらしい! 簡単でした"
-"ね。
入力ボックス ウィジェットを追加しましょう
"
+"
すばらしい! 簡単でしたね。"
+"p>
入力ボックス ウィジェットを追加しましょう
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:86
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:84
msgid "Typing
input box..."
msgstr "
input boxと入力します..."
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:89
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:87
msgid "Click
Add to workspace"
msgstr "
ワークスペースを追加をクリックします"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:90
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:88
msgid "Close the component sidebar"
msgstr "コンポーネントのサイドバーを閉じる"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:92
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:90
msgid ""
"
One of the main features of WireCloud is that you can edit your "
"workspaces' layout not only by adding and removing widgets, but also moving, "
@@ -337,33 +235,33 @@ msgstr ""
"イズ変更、名前の変更など、ワークスペースのレイアウトを編集できることです。"
"p>"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:93
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:91
msgid "Drag & drop to resize the widget"
msgstr "ウィジェットのサイズを変更するためにドラック&ドロップ"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:94
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:92
msgid "Drag & drop to move the widget"
msgstr "ウィジェットを移動するためにドラック&ドロップ"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:95
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:99
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:93
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:97
msgid "Open Input Box menu"
msgstr "入力ボックス のメニューを開きます"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:96
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:94
msgid "Click Rename"
msgstr "リネームをクリックします"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:96
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:57
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:66
-#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:63
-#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:57
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:64
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:94
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:50
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:121
+#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:89
+#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:48
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:56
msgid "Rename"
msgstr "リネーム"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:97
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:95
msgid ""
"Enter a new name for the widget (e.g Search) and press Enter"
"kbd> or click outside the title"
@@ -371,7 +269,7 @@ msgstr ""
"ウィジェットの新しい名前を入力し (例 Search) Enter を押す"
"か、タイトルの外側をクリックします"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:98
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:96
msgid ""
"Also, some widgets can be parameterized through settings giving you the "
"chance to use them for very general purporses.
"
@@ -379,32 +277,32 @@ msgstr ""
"また、いくつかのウィジェットは、非常に一般的な目的のためにそれらを使用する"
"機会を与える設定を介してパラメータ化することができます。
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:100
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:98
#: static/js/wirecloud/Tutorials/BehaviourOrientedWiring.js:236
msgid "Click Settings"
msgstr "設定 をクリック"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:106
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:104
msgid "Write a label for the input, e.g. Multimedia."
msgstr "入力のラベルを書き込みます。例: Multimedia。"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:106
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:104
msgid "Write a better placeholder text for the input, e.g. Keywords"
msgstr "入力用のプレースホルダテキストを書き込みます。例: Keywords"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:106
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:104
msgid "Write a better label for the button, e.g Search."
msgstr "ボタンのより良いラベルを書き込みます。 例: Search。"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:108
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:106
msgid "Click here to submit"
msgstr "ここをクリックして設定してください"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:113
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:111
msgid "Click Wiring to continue"
msgstr "続行するには ワイヤーリング をクリックしてください"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:116
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:114
msgid ""
"This is the Wiring Editor view.
Here you can wire widgets "
"and operators together turning your workspace into and application "
@@ -414,15 +312,15 @@ msgstr ""
"レータを一緒にワイヤーリングして、ワークスペースとアプリケーション・マッ"
"シュアップを組み立てることができます。
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:117
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:115
msgid "Click Find components to open the sidebar"
msgstr "サイドバーを開くには、コンポーネントを検索をクリックします"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:119
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:117
msgid "Click Widgets"
msgstr "ウィジェット をクリックしてください"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:120
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:118
msgid ""
"In this sidebar you can find all the available widgets. In our example, "
"we are interested in the widgets added to the workspace: the YouTube "
@@ -438,7 +336,7 @@ msgstr ""
"ポーネントは、これらのビヘイビアの組み合わせと同様に、ソース、トランスフォー"
"マ、またはデータ・ターゲットとして機能します。
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:121
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:119
msgid ""
"In the next steps, we are going to connect the Input Box and "
"YouTube Browser widgets together. This will allow you to perform "
@@ -449,19 +347,19 @@ msgstr ""
"ジェットを一緒に接続します。 これにより、入力ボックス ウィジェットか"
"ら YouTube Browser で検索を実行できます。
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:127
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:125
msgid "Drag & drop the Input Box widget"
msgstr "入力ボックス ウィジェットをドラック&ドロップします"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:140
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:138
msgid "Drag & drop the YouTube Browser widget"
msgstr "YouTube Browser ウィジェットをドラック&ドロップします"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:148
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:146
msgid "Click Find components to close the sidebar"
msgstr "サイドバーを閉じるには コンポーネントを検索 をクリックします"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:152
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:150
msgid ""
"Drag & drop a new connection from Search Box's keyword "
"endpoint ..."
@@ -469,24 +367,24 @@ msgstr ""
"検索ボックスのキーワード エンドポイントから新しい接続をド"
"ロップ&ドロップする..."
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:158
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:156
msgid "... to YouTube Browser's keyword endpoint"
msgstr "YouTube Browser の キーワード エンドポイントに"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:162
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:160
msgid "Now it's time to test our creation."
msgstr "作成したアプリケーション・マッシュアップをテストしましょう"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:163
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:161
#: static/js/wirecloud/Tutorials/BehaviourOrientedWiring.js:246
msgid "Click Back"
msgstr "戻るをクリックします"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:165
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:163
msgid "Enter a search keyword and press Enter"
msgstr "検索キーワードを入力し、 Enter を押します"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:167
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:165
msgid ""
"Congratulations! you have "
"finished your first application mashup.
As you can see, the "
@@ -496,7 +394,7 @@ msgstr ""
"ケーション・マッシュアップが完了しました。
ご覧のとおり、"
"YouTube Browser ウィジェットが正常に更新されました。
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:169
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:167
msgid ""
"This is the end of this tutorial. Remember that you can always go to the "
"Tutorial menu for others.
"
@@ -504,7 +402,7 @@ msgstr ""
"これはこのチュートリアルの最後です。 いつでも他のチュートリアル・メニュー"
"に行くことができます。
"
-#: static/js/wirecloud/Tutorials/BasicConcepts.js:169
+#: static/js/wirecloud/Tutorials/BasicConcepts.js:167
msgid "Tutorials"
msgstr "チュートリアル"
@@ -738,9 +636,9 @@ msgid ""
"the affected components were added? That saved us some steps :)."
"p>Anyway, you can also directly add components in a similar way clicking "
"on theirs Add button (take into account that associated connections "
-"are no added automatically in that case)
The third and the fourth behaviour can be created the same way, so we are "
-"going to create them for you.
"
+"are no added automatically in that case)
The third and the fourth behaviour can be created the same way, so we "
+"are going to create them for you.
"
msgstr ""
"
すばらしい! 私たちは最初のビヘ"
"イビアを終えました。 接続を追加したときにも、影響を受けるコンポーネントが追加"
@@ -832,8 +730,8 @@ msgstr ""
"
すばらしい! 私たちはこのビヘイ"
"ビアを正常にクリーンアップしました。 影響を受けた接続も削除されていることに気"
"付きましたか? それは私たちをもう一度、いくつかのステップを救いました:)。"
-"p>
とにかく、削除 ボタンをクリックして同様の方法で直接接続を削除"
-"することもできます (その場合、関連コンポーネントは自動的に削除されません)
"
+"p>
とにかく、削除 ボタンをクリックして同様の方法で直接接続を削除す"
+"ることもできます (その場合、関連コンポーネントは自動的に削除されません)
"
#: static/js/wirecloud/Tutorials/BehaviourOrientedWiring.js:247
msgid "Try It Yourself"
@@ -851,143 +749,178 @@ msgstr ""
"の最後ですが、例のダッシュボードを試して、説明されているビヘイビアに従ってい"
"るかどうかを確認できます。"
-#: static/js/wirecloud/UserInterfaceManager.js:203
-msgid "Workspace loaded"
-msgstr "ワークスペースが読み込まれました"
-
-#: static/js/wirecloud/UserInterfaceManager.js:331
+#: static/js/wirecloud/UserInterfaceManager.js:95
msgid "%(task)s %(percentage)s%"
msgstr "%(task)s %(percentage)s%"
-#: static/js/wirecloud/UserInterfaceManager.js:345
+#: static/js/wirecloud/UserInterfaceManager.js:109
msgid "%(subTask)s: %(percentage)s%"
msgstr "%(subTask)s: %(percentage)s%"
-#: static/js/wirecloud/Widget.js:241 static/js/wirecloud/wiring/Operator.js:165
+#: static/js/wirecloud/UserInterfaceManager.js:274
+msgid "Workspace loaded"
+msgstr "ワークスペースが読み込まれました"
+
+#: static/js/wirecloud/Widget.js:366 static/js/wirecloud/Wiring.js:602
+msgid "Failed to load widget."
+msgstr "ウィジェットをロードできませんでした。"
+
+#: static/js/wirecloud/Widget.js:368
+msgid ""
+"
This widget is currently not available. You or an administrator probably "
+"uninstalled it.
Suggestions:
- Remove this widget from the "
+"dashboard
- Reinstall the appropiated version of the widget
- Or "
+"install another version of the widget and then use the Upgrade/"
+"Downgrade option
"
+msgstr ""
+"
このウィジェットは現在利用できません。 管理者または管理者がおそらくアンイ"
+"ンストールしました。
対処:
- このウィジェットをダッシュボー"
+"ドから削除します
- ウィジェットの適切なバージョンを再インストールしてく"
+"ださい
- または、別のバージョンのウィジェットをインストールしてから、"
+"アップグレード/ダウングレードオプションを使用してください
"
+
+#: static/js/wirecloud/Widget.js:371
+msgid "Widget loaded successfully."
+msgstr "ウィジェットが正常に読み込まれました。"
+
+#: static/js/wirecloud/Widget.js:408
+msgid "Widget unloaded successfully."
+msgstr "ウィジェットが正常にアンロードされました。"
+
+#: static/js/wirecloud/Widget.js:688
+#: static/js/wirecloud/ui/CatalogueSearchView.js:150
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:272
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:87
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:73
+#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:45
+#: static/js/wirecloud/wiring/Operator.js:408
+msgid "Title"
+msgstr "タイトル"
+
+#: static/js/wirecloud/Widget.js:689 static/js/wirecloud/wiring/Operator.js:409
msgid "Widget's title"
msgstr "ウィジェットのタイトル"
-#: static/js/wirecloud/Widget.js:248
+#: static/js/wirecloud/Widget.js:693
msgid "X-Position"
msgstr "X ポジション"
-#: static/js/wirecloud/Widget.js:259
+#: static/js/wirecloud/Widget.js:694
msgid "Specifies the x-coordinate at which the widget is placed"
msgstr "ウィジェットが配置される x 座標を指定します"
-#: static/js/wirecloud/Widget.js:263
+#: static/js/wirecloud/Widget.js:698
msgid "Y-Position"
msgstr "Y ポジション"
-#: static/js/wirecloud/Widget.js:264
+#: static/js/wirecloud/Widget.js:699
msgid "Specifies the y-coordinate at which the widget is placed"
msgstr "ウィジェットが配置される y 座標を指定します"
-#: static/js/wirecloud/Widget.js:268
+#: static/js/wirecloud/Widget.js:703
msgid "Z-Position"
msgstr "Z ポジション"
-#: static/js/wirecloud/Widget.js:269
+#: static/js/wirecloud/Widget.js:704
msgid "Specifies the z-coordinate at which the widget is placed"
msgstr "ウィジェットが配置される z 座標を指定します"
-#: static/js/wirecloud/Widget.js:273
+#: static/js/wirecloud/Widget.js:708
msgid "Height"
msgstr "高さ"
-#: static/js/wirecloud/Widget.js:274
+#: static/js/wirecloud/Widget.js:709
msgid "Widget's height in layout cells"
msgstr "レイアウト・セル内のウィジェットの高さ"
-#: static/js/wirecloud/Widget.js:278
+#: static/js/wirecloud/Widget.js:713
+msgid "Visible"
+msgstr ""
+
+#: static/js/wirecloud/Widget.js:714
+msgid ""
+"Specifies if the widget is being displayed, altough the user may have to do "
+"scroll to be able to see it"
+msgstr ""
+
+#: static/js/wirecloud/Widget.js:718
msgid "Width"
msgstr "幅"
-#: static/js/wirecloud/Widget.js:279
+#: static/js/wirecloud/Widget.js:719
msgid "Widget's width in layout cells"
msgstr "レイアウト・セル内のウィジェットの幅"
-#: static/js/wirecloud/Widget.js:283
+#: static/js/wirecloud/Widget.js:723
msgid "Height in pixels (deprecated)"
msgstr "高さ (ピクセル単位) (非推奨)"
-#: static/js/wirecloud/Widget.js:284
+#: static/js/wirecloud/Widget.js:724
msgid "Widget's height in pixels"
msgstr "ピクセル単位でのウィジェットの高さ"
-#: static/js/wirecloud/Widget.js:288
+#: static/js/wirecloud/Widget.js:728
msgid "Width in pixels"
msgstr "ピクセル単位の幅"
-#: static/js/wirecloud/Widget.js:289
+#: static/js/wirecloud/Widget.js:729
msgid "Widget's width in pixels"
msgstr "ピクセル単位のウィジェットの幅"
-#: static/js/wirecloud/Widget.js:296
+#: static/js/wirecloud/Widget.js:733
+#, fuzzy
+#| msgid "volatile"
+msgid "Volatile"
+msgstr "揮発性"
+
+#: static/js/wirecloud/Widget.js:734
+msgid "Volatile status of the widget"
+msgstr ""
+
+#: static/js/wirecloud/Widget.js:741
msgid "Widget created successfully."
msgstr "ウィジェットが正常に作成されました。"
-#: static/js/wirecloud/Widget.js:615 static/js/wirecloud/wiring/Operator.js:353
+#: static/js/wirecloud/Widget.js:1107
+#: static/js/wirecloud/ui/OperatorPreferencesWindowMenu.js:42
+msgid "Exception catched while processing preference changes"
+msgstr "環境設定の変更を処理中に例外がキャッチされました"
+
+#: static/js/wirecloud/Widget.js:1233
+#: static/js/wirecloud/wiring/Operator.js:603
msgid "The %(type)s was upgraded to v%(version)s successfully."
msgstr "%(type)s は v%(version)s に正常にアップグレードされました。"
-#: static/js/wirecloud/Widget.js:617 static/js/wirecloud/wiring/Operator.js:355
+#: static/js/wirecloud/Widget.js:1235
+#: static/js/wirecloud/wiring/Operator.js:605
msgid "The %(type)s was downgraded to v%(version)s successfully."
msgstr "%(type)s は v%(version)s に正常にダウングレードされました。"
-#: static/js/wirecloud/Widget.js:620 static/js/wirecloud/wiring/Operator.js:358
+#: static/js/wirecloud/Widget.js:1238
+#: static/js/wirecloud/wiring/Operator.js:608
msgid "The %(type)s was replaced using v%(version)s successfully."
msgstr "%(type)sは v%(version)s を使用して正常に置き換えられました。"
-#: static/js/wirecloud/Widget.js:829 static/js/wirecloud/Wiring.js:336
-msgid "Failed to load widget."
-msgstr "ウィジェットをロードできませんでした。"
-
-#: static/js/wirecloud/Widget.js:831
-msgid ""
-"
This widget is currently not available. You or an administrator probably "
-"uninstalled it.
Suggestions:
- Remove this widget from the "
-"dashboard
- Reinstall the appropiated version of the widget
- Or "
-"install another version of the widget and then use the Upgrade/"
-"Downgrade option
"
-msgstr ""
-"
このウィジェットは現在利用できません。 管理者または管理者がおそらくアンイ"
-"ンストールしました。
対処:
- このウィジェットをダッシュボー"
-"ドから削除します
- ウィジェットの適切なバージョンを再インストールしてく"
-"ださい
- または、別のバージョンのウィジェットをインストールしてから、"
-"アップグレード/ダウングレードオプションを使用してください
"
-
-#: static/js/wirecloud/Widget.js:834
-msgid "Widget loaded successfully."
-msgstr "ウィジェットが正常に読み込まれました。"
-
-#: static/js/wirecloud/Widget.js:865
-msgid "Widget unloaded successfully."
-msgstr "ウィジェットが正常にアンロードされました。"
-
-#: static/js/wirecloud/Widget/PreferencesWindowMenu.js:82
-#: static/js/wirecloud/ui/OperatorPreferencesWindowMenu.js:87
-msgid "Exception catched while processing preference changes"
-msgstr "環境設定の変更を処理中に例外がキャッチされました"
-
-#: static/js/wirecloud/WidgetMeta.js:77
+#: static/js/wirecloud/WidgetMeta.js:88
msgid "[Widget; Vendor: %(vendor)s, Name: %(name)s, Version: %(version)s]"
msgstr ""
"[ウィジェット; ベンダー: %(vendor)s, 名前: %(name)s, パージョン: %(version)s]"
-#: static/js/wirecloud/Wiring.js:331 static/js/wirecloud/wiring/Operator.js:496
+#: static/js/wirecloud/Wiring.js:597 static/js/wirecloud/wiring/Operator.js:220
msgid "Failed to load operator."
msgstr "オペレータを読み込めませんでした。"
-#: static/js/wirecloud/Workspace.js:579
+#: static/js/wirecloud/Workspace.js:75
msgid "Tab %(index)s"
msgstr "タブ %(index)s"
-#: static/js/wirecloud/Workspace.js:585
-msgid "%(base) (%(copy)s)"
+#: static/js/wirecloud/Workspace.js:82
+#, fuzzy
+#| msgid "%(base) (%(copy)s)"
+msgid "%(base)s (%(copy)s)"
msgstr "%(base) (%(copy)s)"
-#: static/js/wirecloud/WorkspaceTab.js:161
+#: static/js/wirecloud/WorkspaceTab.js:157
msgid "The destination tab (%(title)s) is readonly"
msgstr "宛先のタブ (%(title)s) は読み取り専用です"
@@ -1127,51 +1060,130 @@ msgstr "拡張されていない"
msgid "Unknown status code"
msgstr "不明なステータスコード"
-#: static/js/wirecloud/core.js:104
+#: static/js/wirecloud/core.js:53 static/js/wirecloud/core.js:466
+msgid "Switching active workspace"
+msgstr "アクティブなワークスペースの切り替え"
+
+#: static/js/wirecloud/core.js:206
msgid "Unloading WireCloud"
msgstr "WireCloud のアンロード"
-#: static/js/wirecloud/core.js:183
+#: static/js/wirecloud/core.js:293
msgid "Retrieving WireCloud code"
msgstr "WireCloud コードの取得"
-#: static/js/wirecloud/core.js:186
+#: static/js/wirecloud/core.js:296
msgid "Retrieving initial data"
msgstr "初期データの取得"
-#: static/js/wirecloud/core.js:211
+#: static/js/wirecloud/core.js:321
msgid "Error loading WireCloud"
msgstr "WireCloud の読み込みエラー"
-#: static/js/wirecloud/core.js:222
+#: static/js/wirecloud/core.js:332
msgid "Loading WireCloud Platform"
msgstr "WireCloud プラットフォームの読み込み"
-#: static/js/wirecloud/core.js:291
+#: static/js/wirecloud/core.js:418
msgid "Requesting workspace data"
msgstr "ワークスペース・データの要求"
-#: static/js/wirecloud/core.js:351 static/js/wirecloud/core.js:576
-msgid "Switching active workspace"
-msgstr "アクティブなワークスペースの切り替え"
-
-#: static/js/wirecloud/core.js:395
+#: static/js/wirecloud/core.js:512
msgid "Missing name or title parameter"
msgstr "名前またはタイトル・パラメータがありません"
-#: static/js/wirecloud/core.js:397
+#: static/js/wirecloud/core.js:514
msgid "Workspace and mashup options cannot be used at the same time"
msgstr "ワークスペースとマッシュアップ・オプションは同時に使用できません"
-#: static/js/wirecloud/ui/ComponentSidebar.js:70
+#: static/js/wirecloud/ui/CatalogueSearchView.js:43
+msgid "Clear filters"
+msgstr "フィルターをクリア"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:45
+#: static/js/wirecloud/ui/CatalogueSearchView.js:138
+msgid "Refresh"
+msgstr "リフレッシュ"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:64
+msgid "Empty Marketplace!"
+msgstr "空のマーケットプレイス!"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:65
+msgid ""
+"This marketplace is empty, that is, it does not provide any resource at this "
+"time."
+msgstr "このマーケットプレイスは空です。現時点ではリソースを提供していません。"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:86
+msgid "
Showing results for
"
+msgstr "
の結果を表示します。
"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:112
+msgid "Connection error: No resource retrieved."
+msgstr "接続エラー: リソースが取得されませんでした."
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:118
+msgid ""
+"
We couldn't find anything for your search - %(keywords)s."
+"p>
Suggestions:
- Make sure all words are spelled correctly."
+"li>
- Try different keywords.
- Try more general keywords.
"
+msgstr ""
+"
検索で何も見つかりませんでした - %(keywords)s.
対処:"
+"p>
- すべての単語のスペルが正しいことを確認してください
- 異なる"
+"キーワードを試してみてください
- より一般的なキーワードを試してください"
+"
"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:126
+msgid "Keywords..."
+msgstr "キーワード..."
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:149
+msgid "Creation date"
+msgstr "作成日"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:151
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:46
+msgid "Vendor"
+msgstr "ベンダー"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:163
+msgid "All"
+msgstr "全て"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:164
+#: static/js/wirecloud/ui/ComponentSidebar.js:54
+#: static/js/wirecloud/ui/WiringEditor/ComponentShowcase.js:58
+msgid "Widgets"
+msgstr "ウィジェット"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:165
+#: static/js/wirecloud/ui/ComponentSidebar.js:41
+msgid "Mashups"
+msgstr "マッシュアップ"
+
+#: static/js/wirecloud/ui/CatalogueSearchView.js:166
+#: static/js/wirecloud/ui/WiringEditor/ComponentShowcase.js:45
+msgid "Operators"
+msgstr "オペレータ"
+
+#: static/js/wirecloud/ui/CatalogueView.js:61
+msgid "Uninstall"
+msgstr "アンインストール"
+
+#: static/js/wirecloud/ui/CatalogueView.js:67
+msgid "Install"
+msgstr "インストール"
+
+#: static/js/wirecloud/ui/ComponentSidebar.js:68
msgid "Add to workspace"
msgstr "ワークスペースに追加"
-#: static/js/wirecloud/ui/ComponentSidebar.js:70
+#: static/js/wirecloud/ui/ComponentSidebar.js:68
msgid "Merge"
msgstr "マージ"
-#: static/js/wirecloud/ui/DragboardLayout.js:236
+#: static/js/wirecloud/ui/DragboardLayout.js:246
msgid ""
"the widget could not be associated with this layout as it already has an "
"associated layout."
@@ -1179,15 +1191,19 @@ msgstr ""
"ウィジェットは既に関連付けられたレイアウトを持っているため、このレイアウトに"
"関連付けることはできませんでした。"
-#: static/js/wirecloud/ui/EmbedCodeWindowMenu.js:51
+#: static/js/wirecloud/ui/EmbedCodeWindowMenu.js:53
+msgid "Auto"
+msgstr ""
+
+#: static/js/wirecloud/ui/EmbedCodeWindowMenu.js:69
msgid "Accept"
msgstr "設定"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:34
+#: static/js/wirecloud/ui/LayoutInputInterface.js:35
msgid "Smart"
msgstr "スマート"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:36
+#: static/js/wirecloud/ui/LayoutInputInterface.js:37
msgid ""
"Widgets will tend to be placed on the topmost position available if this "
"option is enabled. (default: enabled)"
@@ -1195,33 +1211,33 @@ msgstr ""
"このオプションが有効になっている場合、ウィジェットは利用可能な一番上の位置に"
"配置される傾向があります。(デフォルト: 有効)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:43
-#: static/js/wirecloud/ui/LayoutInputInterface.js:79
-#: static/js/wirecloud/ui/LayoutInputInterface.js:143
+#: static/js/wirecloud/ui/LayoutInputInterface.js:44
+#: static/js/wirecloud/ui/LayoutInputInterface.js:80
+#: static/js/wirecloud/ui/LayoutInputInterface.js:147
msgid "Columns"
msgstr "列"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:45
-#: static/js/wirecloud/ui/LayoutInputInterface.js:81
+#: static/js/wirecloud/ui/LayoutInputInterface.js:46
+#: static/js/wirecloud/ui/LayoutInputInterface.js:82
msgid "Grid columns. (default: 20 columns)"
msgstr "グリッド列 (デフォルト: 20桁)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:52
+#: static/js/wirecloud/ui/LayoutInputInterface.js:53
msgid "Row Height (in pixels)"
msgstr "行の高さ (ピクセル単位)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:54
+#: static/js/wirecloud/ui/LayoutInputInterface.js:55
msgid "Row/cell height. Must be specified in pixel units. (default: 13px)"
msgstr ""
"行/セルの高さ。 ピクセル単位で指定する必要があります (デフォルト: 13px)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:60
-#: static/js/wirecloud/ui/LayoutInputInterface.js:96
+#: static/js/wirecloud/ui/LayoutInputInterface.js:61
+#: static/js/wirecloud/ui/LayoutInputInterface.js:97
msgid "Horizontal Margin between widgets (in pixels)"
msgstr "ウィジェット間の水平マージン (ピクセル単位)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:62
-#: static/js/wirecloud/ui/LayoutInputInterface.js:98
+#: static/js/wirecloud/ui/LayoutInputInterface.js:63
+#: static/js/wirecloud/ui/LayoutInputInterface.js:99
msgid ""
"Horizontal Margin between widgets. Must be specified in pixel units. "
"(default: 4px)"
@@ -1229,13 +1245,13 @@ msgstr ""
"ウィジェット間の水平マージン。ピクセル単位で指定する必要があります (デフォル"
"ト: 4px)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:68
-#: static/js/wirecloud/ui/LayoutInputInterface.js:104
+#: static/js/wirecloud/ui/LayoutInputInterface.js:69
+#: static/js/wirecloud/ui/LayoutInputInterface.js:105
msgid "Vertical Margin between widgets (in pixels)"
msgstr "ウィジェット間の垂直マージン (ピクセル単位)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:70
-#: static/js/wirecloud/ui/LayoutInputInterface.js:106
+#: static/js/wirecloud/ui/LayoutInputInterface.js:71
+#: static/js/wirecloud/ui/LayoutInputInterface.js:107
msgid ""
"Vertical Margin between widgets. Must be specified in pixel units. (default: "
"3px)"
@@ -1243,51 +1259,51 @@ msgstr ""
"ウィジェット間の垂直マージン。ピクセル単位で指定する必要があります (デフォル"
"ト: 3px)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:88
+#: static/js/wirecloud/ui/LayoutInputInterface.js:89
msgid "Rows"
msgstr "行"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:90
+#: static/js/wirecloud/ui/LayoutInputInterface.js:91
msgid "Grid rows. (default: 12 rows)"
msgstr "グリッドの行。(デフォルト: 12行)"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:117
+#: static/js/wirecloud/ui/LayoutInputInterface.js:119
msgid " smart"
msgstr " スマート"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:121
+#: static/js/wirecloud/ui/LayoutInputInterface.js:123
msgid "%(columns)s%(smart)s columns"
msgstr "%(columns)s%(smart)s 列"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:124
+#: static/js/wirecloud/ui/LayoutInputInterface.js:126
msgid "%(columns)s columns x %(rows)s rows"
msgstr "%(columns)s columns x %(rows)s 行"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:144
+#: static/js/wirecloud/ui/LayoutInputInterface.js:148
msgid "Grid"
msgstr "グリッド"
-#: static/js/wirecloud/ui/LayoutInputInterface.js:169
+#: static/js/wirecloud/ui/LayoutInputInterface.js:173
msgid "Layout configuration"
msgstr "レイアウト設定"
-#: static/js/wirecloud/ui/LogWindowMenu.js:41
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:79
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:83
-#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:70
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:58
+#: static/js/wirecloud/ui/LogWindowMenu.js:34
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:72
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:138
+#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:96
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:310
msgid "Logs"
msgstr "ログ"
-#: static/js/wirecloud/ui/LogWindowMenu.js:56
+#: static/js/wirecloud/ui/LogWindowMenu.js:54
msgid "Close"
msgstr "クローズ"
-#: static/js/wirecloud/ui/LogWindowMenu.js:129
+#: static/js/wirecloud/ui/LogWindowMenu.js:121
msgid "Details"
msgstr "詳細"
-#: static/js/wirecloud/ui/MarketplaceView.js:55
+#: static/js/wirecloud/ui/MarketplaceView.js:52
msgid ""
"
WireCloud is not connected with any marketplace.
Suggestions:"
"p>
- Connect WireCloud with a new marketplace.
- Go to the my "
@@ -1297,31 +1313,31 @@ msgstr ""
"p>
- WireCloudを新しいマーケットプレイスに接続します。
- 代わりに"
"自分のリソースビューに移動する
"
-#: static/js/wirecloud/ui/MarketplaceView.js:158
-#: static/js/wirecloud/ui/MyResourcesView.js:138
-#: static/js/wirecloud/ui/MyResourcesView.js:156
-#: static/js/wirecloud/ui/WorkspaceView.js:73
+#: static/js/wirecloud/ui/MarketplaceView.js:179
+#: static/js/wirecloud/ui/MyResourcesView.js:147
+#: static/js/wirecloud/ui/MyResourcesView.js:165
+#: static/js/wirecloud/ui/WorkspaceView.js:175
msgid "My Resources"
msgstr "マイ・リソース"
-#: static/js/wirecloud/ui/MarketplaceView.js:226
+#: static/js/wirecloud/ui/MarketplaceView.js:240
msgid "loading marketplace view..."
msgstr "マーケットプレイス・ビューを読み込む..."
-#: static/js/wirecloud/ui/MarketplaceView.js:228
+#: static/js/wirecloud/ui/MarketplaceView.js:242
msgid "marketplace list not available"
msgstr "マーケットプレイス・リストは利用できません"
-#: static/js/wirecloud/ui/MarketplaceView.js:252
+#: static/js/wirecloud/ui/MarketplaceView.js:264
msgid "Marketplace"
msgstr "マーケットプレイス"
-#: static/js/wirecloud/ui/MarketplaceView.js:255
+#: static/js/wirecloud/ui/MarketplaceView.js:267
msgid "Marketplace - %(marketname)s"
msgstr "マーケットプレイス - %(marketname)s"
#: static/js/wirecloud/ui/MarketplaceViewMenuItems.js:62
-#: static/js/wirecloud/ui/MyResourcesView.js:56
+#: static/js/wirecloud/ui/MyResourcesView.js:70
msgid "Upload"
msgstr "アップロード"
@@ -1330,7 +1346,7 @@ msgid "Add new marketplace"
msgstr "新しいマーケットプレイスを追加"
#: static/js/wirecloud/ui/MarketplaceViewMenuItems.js:75
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:49
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:52
msgid "Name"
msgstr "名前"
@@ -1343,7 +1359,7 @@ msgid "Type"
msgstr "タイプ"
#: static/js/wirecloud/ui/MarketplaceViewMenuItems.js:94
-#: static/js/wirecloud/ui/SharingWindowMenu.js:46
+#: static/js/wirecloud/ui/SharingWindowMenu.js:159
msgid "Public"
msgstr "パブリック"
@@ -1359,38 +1375,38 @@ msgstr "マーケットプレイスを削除"
msgid "Do you really want to remove the marketplace \"%(marketName)s\"?"
msgstr "本当にマーケットプレイス \"%(marketName)s\" を削除したいですか?"
-#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:38
+#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:36
msgid "Missing dependencies"
msgstr "不足している依存関係"
-#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:42
+#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:40
msgid "The following dependencies are missing:"
msgstr "以下の依存関係はありません:"
-#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:54
+#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:52
msgid ""
"You will be able to continue after installing all the required dependencies."
msgstr "必要なすべての依存関係をインストールした後に続行することができます。"
-#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:59
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:376
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:736
+#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:57
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:364
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:103
msgid "Continue"
msgstr "続ける"
-#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:68
-#: static/js/wirecloud/ui/PreferencesWindowMenu.js:222
-#: static/js/wirecloud/ui/SharingWindowMenu.js:85
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:137
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:737
+#: static/js/wirecloud/ui/MissingDependenciesWindowMenu.js:66
+#: static/js/wirecloud/ui/PreferencesWindowMenu.js:235
+#: static/js/wirecloud/ui/SharingWindowMenu.js:214
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:140
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:104
msgid "Cancel"
msgstr "キャンセル"
-#: static/js/wirecloud/ui/MyResourcesView.js:44
+#: static/js/wirecloud/ui/MyResourcesView.js:58
msgid "Empty resource list"
msgstr "空のリソース・リスト"
-#: static/js/wirecloud/ui/MyResourcesView.js:45
+#: static/js/wirecloud/ui/MyResourcesView.js:59
msgid ""
"Currently, you do not have access to any component. You can get components "
"using the Marketplace view or by uploading components manually using the "
@@ -1400,16 +1416,16 @@ msgstr ""
"ス・ビューを使用するか、\"アップロード\" ボタンを使用してコンポーネントを手動"
"でアップロードしてコンポーネントを取得できます。"
-#: static/js/wirecloud/ui/MyResourcesView.js:66
-#: static/js/wirecloud/ui/WorkspaceView.js:82
+#: static/js/wirecloud/ui/MyResourcesView.js:80
+#: static/js/wirecloud/ui/WorkspaceView.js:184
msgid "Get more components"
msgstr "より多くのコンポーネントを入手"
-#: static/js/wirecloud/ui/MyResourcesView.js:153
+#: static/js/wirecloud/ui/MyResourcesView.js:162
msgid "My Resources - %(resource)s"
msgstr "マイ・リソース - %(resource)s"
-#: static/js/wirecloud/ui/MyResourcesView.js:266
+#: static/js/wirecloud/ui/MyResourcesView.js:287
msgid ""
"You have not configured any marketplace to upload this resource. Please, "
"configure one on the Marketplace view."
@@ -1417,7 +1433,7 @@ msgstr ""
"このリソースをアップロードするマーケットプレイスを設定していません。マーケッ"
"トプレイス・ビューで設定してください。"
-#: static/js/wirecloud/ui/MyResourcesView.js:352
+#: static/js/wirecloud/ui/MyResourcesView.js:371
msgid ""
"Do you really want to remove the \"%(name)s\" (vendor: \"%(vendor)s\", "
"version: \"%(version)s\") resource?"
@@ -1425,7 +1441,7 @@ msgstr ""
"本当に \"%(name)s\" (ベンダー: \"%(vendor)s\", バージョン \"%(version)s\") リ"
"ソースを削除しますか?"
-#: static/js/wirecloud/ui/MyResourcesView.js:378
+#: static/js/wirecloud/ui/MyResourcesView.js:395
msgid ""
"Do you really want to remove all versions of the (vendor: \"%(vendor)s\", "
"name: \"%(name)s\") resource?"
@@ -1433,98 +1449,108 @@ msgstr ""
"本当に (ベンダー: \"%(vendor)s\", 名前: \"%(name)s\") リソースのすべてのバー"
"ジョンを削除しますか?"
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:53
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:57
+msgid "Create Workspace"
+msgstr "ワークスペースの作成"
+
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:57
+#, fuzzy
+#| msgid "Create Workspace"
+msgid "Copy Workspace"
+msgstr "ワークスペースの作成"
+
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:60
msgid "Template"
msgstr "テンプレート"
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:56
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:63
msgid "Select a mashup template"
msgstr "マッシュアップ・テンプレートを選択"
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:61
-msgid "Create Workspace"
-msgstr "ワークスペースの作成"
-
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:70
-msgid "Creating a %(owner)s/%(name)s workspace using %(mashup)s as template"
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:81
+#, fuzzy
+#| msgid "Creating a %(owner)s/%(name)s workspace using %(mashup)s as template"
+msgid "Creating a %(owner)s/%(title)s workspace using %(mashup)s as template"
msgstr ""
"%(mashup)s をテンプレートとして使用して %(owner)s/%(name)s のワークスペースを"
"作成します"
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:72
-msgid "Creating a %(owner)s/%(name)s workspace"
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:83
+#, fuzzy
+#| msgid "Creating a %(owner)s/%(name)s workspace"
+msgid "Creating a %(owner)s/%(title)s workspace"
msgstr "%(owner)s/%(name)s のワークスペースの作成します"
-#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:75
+#: static/js/wirecloud/ui/NewWorkspaceWindowMenu.js:86
msgid "Creating a new workspace using %(mashup)s as template"
msgstr ""
"%(mashup)s をテンプレートとして使用して新しいワークスペースを作成します"
-#: static/js/wirecloud/ui/OperatorPreferencesWindowMenu.js:30
+#: static/js/wirecloud/ui/OperatorPreferencesWindowMenu.js:50
msgid "Operator Settings"
msgstr "オペレーターの設定"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:47
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:48
msgid "Parametrize"
msgstr "パラメータ設定"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:49
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:50
msgid "Modify"
msgstr "変更"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:54
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:55
msgid "This value won't be editable by the user"
msgstr "この値はユーザが編集できません"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:57
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:58
msgid "This value will be editable by the user"
msgstr "この値はユーザが編集可能です"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:62
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:63
msgid "This value will be visible to the user"
msgstr "この値はユーザに表示されます"
-#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:65
+#: static/js/wirecloud/ui/ParametrizableValueInputInterface.js:66
msgid "This value won't be visible to the user"
msgstr "この値はユーザに表示されません"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:33
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:36
msgid "Normal"
msgstr "ノーマル"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:34
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:37
msgid "Read Only"
msgstr "読み取り専用"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:38
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:41
msgid "Hidden"
msgstr "隠された"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:42
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:45
msgid "Current value"
msgstr "現在の値"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:43
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:46
msgid "Default value"
msgstr "デフォルト値"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:44
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:47
msgid "Parametrized value"
msgstr "パラメータ化された値"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:48
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:51
msgid "Status"
msgstr "ステータス"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:49
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:52
msgid "Value source"
msgstr "値のソース"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:51
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:54
msgid "Value"
msgstr "値"
-#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:53
+#: static/js/wirecloud/ui/ParametrizeWindowMenu.js:56
msgid "Parametrization"
msgstr "パラメータ化"
@@ -1533,124 +1559,128 @@ msgid "Use current value"
msgstr "現在の値を使用"
#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:75
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:276
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:254
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:482
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:495
msgid "Add"
msgstr "追加"
-#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:146
-#: static/js/wirecloud/ui/WirecloudHeader.js:118
+#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:131
+#: static/js/wirecloud/ui/WirecloudHeader.js:116
msgid "User"
msgstr "ユーザ"
-#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:150
+#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:135
msgid "User Name"
msgstr "ユーザ名"
-#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:155
+#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:140
msgid "First Name"
msgstr "名"
-#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:160
+#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:145
msgid "Last Name"
msgstr "姓"
-#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:167
+#: static/js/wirecloud/ui/ParametrizedTextInputInterface.js:152
msgid "Context"
msgstr "コンテキスト"
-#: static/js/wirecloud/ui/PreferencesWindowMenu.js:105
+#: static/js/wirecloud/ui/PreferencesWindowMenu.js:106
msgid "Inherit"
msgstr "継承"
-#: static/js/wirecloud/ui/PreferencesWindowMenu.js:195
+#: static/js/wirecloud/ui/PreferencesWindowMenu.js:203
msgid "Set Defaults"
msgstr "デフォルトを設定"
-#: static/js/wirecloud/ui/PreferencesWindowMenu.js:215
-#: static/js/wirecloud/ui/SharingWindowMenu.js:81
+#: static/js/wirecloud/ui/PreferencesWindowMenu.js:220
+msgid "Error"
+msgstr ""
+
+#: static/js/wirecloud/ui/PreferencesWindowMenu.js:227
+#: static/js/wirecloud/ui/SharingWindowMenu.js:210
msgid "Save"
msgstr "保存"
-#: static/js/wirecloud/ui/PublishResourceWindowMenu.js:37
-msgid "Upload resource"
-msgstr "リソースをアップロード"
-
-#: static/js/wirecloud/ui/PublishResourceWindowMenu.js:62
+#: static/js/wirecloud/ui/PublishResourceWindowMenu.js:51
msgid "Upload to"
msgstr "アップロード先"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:40
+#: static/js/wirecloud/ui/PublishResourceWindowMenu.js:69
+msgid "Upload resource"
+msgstr "リソースをアップロード"
+
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:43
msgid "General info"
msgstr "一般的な情報"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:42
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:45
msgid "Mashup Title"
msgstr "マッシュアップのタイトル"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:42
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:45
msgid "Title to display on the catalogue"
msgstr "カタログに表示するタイトル"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:43
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:46
msgid "Id of the vendor/distributor of the mashable application component"
msgstr ""
"マッシュアップ・アプリケーション・コンポーネントのベンダー/ディストリビュータ"
"の Id"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:44
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:47
msgid "Version"
msgstr "バージョン"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:45
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:48
msgid "Email"
msgstr "Eメール"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:46
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:49
msgid "Short Description (plain text)"
msgstr "簡単な説明 (テキスト)"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:47
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:50
msgid "Detailed description (Markdown)"
msgstr "詳細な説明 (Markdown)"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:48
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:51
msgid "Home page"
msgstr "ホームページ"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:49
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:52
msgid "Authors"
msgstr "著者"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:54
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:57
msgid "Media"
msgstr "メディア"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:58
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:61
msgid "Image shown in catalogue (170x80 px)"
msgstr "カタログに表示される画像 (170x80 px)"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:65
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:68
msgid "Advanced"
msgstr "アドバンスド"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:67
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:70
msgid "Block widgets"
msgstr "ウィジェットをブロック"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:68
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:71
msgid "Block connections"
msgstr "接続をブロック"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:69
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:72
msgid "Embed used widgets/operators"
msgstr "使用されたウィジェット/オペレータを埋め込む"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:76
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:79
msgid "Upload workspace to my resources"
msgstr "マイ・リソースにワークスペースをアップロード"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:82
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:85
msgid ""
"Warning! Configured and stored data in your workspace "
"(properties and preferences except passwords) will be shared by default!"
@@ -1658,86 +1688,117 @@ msgstr ""
"警告! あなたのワークスペースに設定され、保存されたデータ (パ"
"スワード以外のプロパティと設定) は、デフォルトで共有されます!"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:132
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:58
-#: static/js/wirecloud/ui/WiringEditor/Component.js:48
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:50
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:78
-#: static/js/wirecloud/ui/WorkspaceTabView.js:127
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:134
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:48
+#: static/js/wirecloud/ui/WiringEditor/Component.js:90
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:269
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:330
+#: static/js/wirecloud/ui/WorkspaceTabView.js:220
msgid "Preferences"
msgstr "設定"
-#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:139
+#: static/js/wirecloud/ui/PublishWorkspaceWindowMenu.js:141
msgid "Persistent variables"
msgstr "永続変数"
-#: static/js/wirecloud/ui/RenameWindowMenu.js:32
+#: static/js/wirecloud/ui/RenameWindowMenu.js:34
msgid "New Name"
msgstr "新しい名前"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:37
+#: static/js/wirecloud/ui/ScreenSizesInputInterface.js:170
+msgid "From (px):"
+msgstr ""
+
+#: static/js/wirecloud/ui/ScreenSizesInputInterface.js:171
+msgid "The left limit of the screen size range (in pixels)."
+msgstr ""
+
+#: static/js/wirecloud/ui/ScreenSizesInputInterface.js:197
+msgid "To (px):"
+msgstr ""
+
+#: static/js/wirecloud/ui/ScreenSizesInputInterface.js:198
+msgid ""
+"The right limit of the screen size range (in pixels). Use -1 for no limit."
+msgstr ""
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:105
+msgid "%(fullname)s (You)"
+msgstr "%(fullname)s (あなた)"
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:122
+msgid "Owner"
+msgstr "オーナー"
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:122
+msgid "Can view"
+msgstr "見ることができる"
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:126
+#: static/js/wirecloud/ui/WidgetView.js:309
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:53
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:275
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:493
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:504
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:320
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:507
+#: static/js/wirecloud/ui/WiringEditor/Connection.js:519
+#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:67
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:102
+msgid "Remove"
+msgstr "削除"
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:150
msgid "Sharing settings"
msgstr "共有設定"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:42
+#: static/js/wirecloud/ui/SharingWindowMenu.js:155
msgid "Visibility options"
msgstr "可視性オプション"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:46
+#: static/js/wirecloud/ui/SharingWindowMenu.js:159
msgid "Anyone on the Internet can find and access this dashboard."
msgstr "インターネット上の誰でもこのダッシュボードを見つけてアクセスできます。"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:47
+#: static/js/wirecloud/ui/SharingWindowMenu.js:160
+msgid "Registered User"
+msgstr ""
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:160
+#, fuzzy
+#| msgid "Anyone on the Internet can find and access this dashboard."
+msgid ""
+"Anyone on the Internet can find this dashboard. Only registered users can "
+"access it."
+msgstr "インターネット上の誰でもこのダッシュボードを見つけてアクセスできます。"
+
+#: static/js/wirecloud/ui/SharingWindowMenu.js:161
msgid "Private"
msgstr "プライベート"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:47
+#: static/js/wirecloud/ui/SharingWindowMenu.js:161
msgid "Shared with specific people and organizations."
msgstr "特定の人や組織と共有します。"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:57
+#: static/js/wirecloud/ui/SharingWindowMenu.js:171
msgid "Users and groups with access"
msgstr "アクセス権のあるユーザーとグループ"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:60
-msgid "Add a person or an organization"
+#: static/js/wirecloud/ui/SharingWindowMenu.js:174
+#, fuzzy
+#| msgid "Add a person or an organization"
+msgid "Add a person, a group or an organization"
msgstr "人や組織を追加"
-#: static/js/wirecloud/ui/SharingWindowMenu.js:167
-msgid "%(fullname)s (You)"
-msgstr "%(fullname)s (あなた)"
-
-#: static/js/wirecloud/ui/SharingWindowMenu.js:183
-msgid "Owner"
-msgstr "オーナー"
-
-#: static/js/wirecloud/ui/SharingWindowMenu.js:185
-msgid "Can view"
-msgstr "見ることができる"
-
-#: static/js/wirecloud/ui/SharingWindowMenu.js:191
-#: static/js/wirecloud/ui/WidgetView.js:111
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:65
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:57
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:287
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:298
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:68
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:266
-#: static/js/wirecloud/ui/WiringEditor/Connection.js:278
-#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:76
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:101
-msgid "Remove"
-msgstr "削除"
-
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:44
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:45
msgid "Upgrade"
msgstr "アップグレード"
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:50
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:51
msgid "Downgrade"
msgstr "ダウングレード"
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:70
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:71
msgid ""
"There is not change information between versions %(from_version)s and "
"%(to_version)s"
@@ -1745,103 +1806,193 @@ msgstr ""
"バージョン %(from_version)s と %(to_version)s の間で情報を変更することはあり"
"ません"
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:75
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:76
msgid "Unable to retrieve change log information"
msgstr "変更ログ情報を取得できません"
-#: static/js/wirecloud/ui/UpgradeWindowMenu.js:91
+#: static/js/wirecloud/ui/UpgradeWindowMenu.js:92
msgid "Available versions"
msgstr "使用可能なバージョン"
-#: static/js/wirecloud/ui/WidgetView.js:151
-msgid "Menu"
-msgstr "メニュー"
-
-#: static/js/wirecloud/ui/WidgetView.js:162
-#: static/js/wirecloud/ui/WidgetView.js:329
-msgid "Minimize"
-msgstr "最小化"
+#: static/js/wirecloud/ui/WidgetView.js:42
+#, fuzzy
+#| msgid "Drag & drop to move the widget"
+msgid "Disallow to move this widget"
+msgstr "ウィジェットを移動するためにドラック&ドロップ"
-#: static/js/wirecloud/ui/WidgetView.js:319
-msgid "Maximize"
-msgstr "最大化"
+#: static/js/wirecloud/ui/WidgetView.js:42
+#, fuzzy
+#| msgid "Drag & drop to move the widget"
+msgid "Allow to move this widget"
+msgstr "ウィジェットを移動するためにドラック&ドロップ"
-#: static/js/wirecloud/ui/WidgetView.js:368
+#: static/js/wirecloud/ui/WidgetView.js:48
msgid "Hide title"
msgstr "タイトルを隠す"
-#: static/js/wirecloud/ui/WidgetView.js:368
+#: static/js/wirecloud/ui/WidgetView.js:48
msgid "Show title"
msgstr "タイトルを表示"
-#: static/js/wirecloud/ui/WidgetView.js:725
+#: static/js/wirecloud/ui/WidgetView.js:207
msgid "%(errorCount)s error"
msgid_plural "%(errorCount)s errors"
msgstr[0] "%(errorCount)s エラー"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:64
+#: static/js/wirecloud/ui/WidgetView.js:351
+msgid "Menu"
+msgstr "メニュー"
+
+#: static/js/wirecloud/ui/WidgetView.js:362
+#: static/js/wirecloud/ui/WidgetView.js:560
+msgid "Minimize"
+msgstr "最小化"
+
+#: static/js/wirecloud/ui/WidgetView.js:545
+msgid "Maximize"
+msgstr "最大化"
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:57
msgid "Reload"
msgstr "リロード"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:71
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:79
-#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:66
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:64
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:134
+#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:92
msgid "Upgrade/Downgrade"
msgstr "アップグレード/ダウングレード"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:92
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:85
msgid "User's Manual"
msgstr "ユーザーズ・マニュアル"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:96
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:89
msgid "Documentation"
msgstr "ドキュメンテーション"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:105
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:104
+msgid "Left"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:116
+msgid "Center"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:128
+#, fuzzy
+#| msgid "Height"
+msgid "Right"
+msgstr "高さ"
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:143
+msgid "Top"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:155
+msgid "Bottom"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:168
+msgid "Fixed x"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:168
+msgid "Relative x"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:183
+msgid "Fixed y"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:183
+msgid "Relative y"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:198
+msgid "Fixed width"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:198
+msgid "Relative width"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:212
+msgid "Fixed height"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:212
+msgid "Relative height"
+msgstr ""
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:229
msgid "Exit Full Dragboard"
msgstr "フル・ドラッグボードを終了"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:108
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:232
msgid "Full Dragboard"
msgstr "フル・ドラッグボード"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:122
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:249
+msgid "Extract from grid"
+msgstr "グリッドからの抽出"
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:258
msgid "Snap to grid"
msgstr "グリッドにスナップ"
-#: static/js/wirecloud/ui/WidgetViewMenuItems.js:125
-msgid "Extract from grid"
-msgstr "グリッドからの抽出"
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:267
+#, fuzzy
+#| msgid "Close the component sidebar"
+msgid "Move to the top sidebar"
+msgstr "コンポーネントのサイドバーを閉じる"
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:276
+#, fuzzy
+#| msgid "Close the component sidebar"
+msgid "Move to the right sidebar"
+msgstr "コンポーネントのサイドバーを閉じる"
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:285
+#, fuzzy
+#| msgid "Close the component sidebar"
+msgid "Move to the bottom sidebar"
+msgstr "コンポーネントのサイドバーを閉じる"
+
+#: static/js/wirecloud/ui/WidgetViewMenuItems.js:294
+#, fuzzy
+#| msgid "Close the component sidebar"
+msgid "Move to the left sidebar"
+msgstr "コンポーネントのサイドバーを閉じる"
-#: static/js/wirecloud/ui/WirecloudHeader.js:109
+#: static/js/wirecloud/ui/WirecloudHeader.js:102
msgid "Django Admin panel"
msgstr "Django 管理パネル"
-#: static/js/wirecloud/ui/WirecloudHeader.js:117
-#: static/js/wirecloud/ui/WirecloudHeader.js:118
+#: static/js/wirecloud/ui/WirecloudHeader.js:115
+#: static/js/wirecloud/ui/WirecloudHeader.js:116
msgid "Switch User"
msgstr "ユーザの切り替え"
-#: static/js/wirecloud/ui/WirecloudHeader.js:142
+#: static/js/wirecloud/ui/WirecloudHeader.js:133
+msgid "Back to %(user)s"
+msgstr ""
+
+#: static/js/wirecloud/ui/WirecloudHeader.js:139
msgid "Sign out"
msgstr "サインアウト"
-#: static/js/wirecloud/ui/WiringEditor.js:169
-msgid "%(workspace_title)s - Wiring"
-msgstr "%(workspace_title)s - ワイヤーリング"
-
-#: static/js/wirecloud/ui/WiringEditor.js:390
+#: static/js/wirecloud/ui/WiringEditor.js:171
msgid "Hello, welcome to the Wiring Editor view!"
msgstr "ワイヤーリング・エディタ・ビューへようこそ!"
-#: static/js/wirecloud/ui/WiringEditor.js:391
+#: static/js/wirecloud/ui/WiringEditor.js:172
msgid ""
"In this view you can connect all the components of your dashboard in a "
"visual way."
msgstr ""
"このビューではダッシュボードのすべてのコンポーネントを視覚的に接続できます"
-#: static/js/wirecloud/ui/WiringEditor.js:397
+#: static/js/wirecloud/ui/WiringEditor.js:178
msgid ""
"Open the sidebar using the Find components button and drag & "
"drop components (operators/widgets) from the sidebar for being able to "
@@ -1851,95 +2002,58 @@ msgstr ""
"らコンポーネント (オペレータ/ウィジェット) をドラッグ&ドロップして、希望どお"
"りに接続することができます。"
-#: static/js/wirecloud/ui/WiringEditor.js:404
+#: static/js/wirecloud/ui/WiringEditor.js:185
msgid "Find components"
msgstr "コンポーネントの検索"
-#: static/js/wirecloud/ui/WiringEditor.js:417
+#: static/js/wirecloud/ui/WiringEditor.js:198
msgid "List behaviours"
msgstr "ビヘイビアの一覧"
-#: static/js/wirecloud/ui/WiringEditor.js:653
+#: static/js/wirecloud/ui/WiringEditor.js:429
msgid ""
"The connection will also be modified for the rest of behaviours, would you "
"like to continue?"
msgstr "残りのビヘイビアのために接続も変更されますが、続行しますか?"
-#: static/js/wirecloud/ui/WiringEditor.js:729
+#: static/js/wirecloud/ui/WiringEditor.js:505
msgid "Behaviour"
msgstr "ビヘイビア"
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:120
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:721
-msgid "New behaviour"
-msgstr "新しいビヘイビア"
-
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:121
-#: static/js/wirecloud/ui/WiringEditor/Endpoint.js:125
-msgid "No description provided."
-msgstr "説明はありません。"
+#: static/js/wirecloud/ui/WiringEditor.js:786
+msgid "%(workspace_title)s - Wiring"
+msgstr "%(workspace_title)s - ワイヤーリング"
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:272
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:254
msgid "%(behaviour_title)s's logs"
msgstr "%(behaviour_title)s のログ"
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:292
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:719
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:273
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:88
msgid "Description"
msgstr "説明"
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:294
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:275
msgid "Behaviour settings"
msgstr ""
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:372
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:360
msgid ""
"The following operation is irreversible and removes the behaviour "
"completely. Would you like to continue?"
msgstr ""
"次の操作は取り消しができず、ビヘイビアを完全に削除します。 続行しますか?"
-#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:377
+#: static/js/wirecloud/ui/WiringEditor/Behaviour.js:365
msgid "No, thank you"
msgstr "いいえ、結構です"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:46
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:128
-msgid "Enable"
-msgstr "有効化"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:53
-msgid "Create behaviour"
-msgstr "ビヘイビアを作成"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:60
-msgid "Order behaviours"
-msgstr "ビヘイビアを順序付ける"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:84
-msgid "New feature"
-msgstr "新機能"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:85
-msgid "Enable the behaviours to enjoy with a new way to handle connections."
-msgstr "ビヘイビアが新しい方法で接続を処理できるようにします。"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:88
-msgid ""
-"Click here for a quick guide/tutorial on how to use this new feature."
-msgstr ""
-"ここをクリックして、この新機能の使用方法に関するクイックガイド/チュー"
-"トリアルをご覧ください。"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:114
-msgid "Disable"
-msgstr "無効化"
-
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:402
-msgid "The behaviour (%(title)s) was loaded."
-msgstr "ビヘイビア (%(title)s) が読み込まれました。"
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:87
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:90
+msgid "New behaviour"
+msgstr "新しいビヘイビア"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:733
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:100
msgid ""
"The behaviours will be removed but the components and connections will still "
"exist, would you like to continue?"
@@ -1947,17 +2061,23 @@ msgstr ""
"ビヘイビアは削除されますが、コンポーネントと接続はまだ存在します。続行します"
"か?"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:801
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:111
+#, fuzzy
+#| msgid "List behaviours"
+msgid "Initial behaviour"
+msgstr "ビヘイビアの一覧"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:166
msgid ""
"The will be removed, would you like to "
"continue?"
msgstr " は削除されます。続行しますか?"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:821
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:184
msgid " - The .
"
msgstr "- .
"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:827
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:190
msgid ""
"These components only exist within the current behaviour :
Would you like to continue?
"
@@ -1965,7 +2085,7 @@ msgstr ""
"これらのコンポーネントは、現在のビヘイビア :"
"p>
内にのみ存在します 続行しますか?
"
-#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:848
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:207
msgid ""
"The will be definitely"
"strong> removed, would you like to continue?"
@@ -1973,188 +2093,231 @@ msgstr ""
" は、間違いなく削除され"
"ますが、続行しますか?"
-#: static/js/wirecloud/ui/WiringEditor/Component.js:135
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:339
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:415
+msgid "Enable"
+msgstr "有効化"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:346
+msgid "Create behaviour"
+msgstr "ビヘイビアを作成"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:353
+msgid "Order behaviours"
+msgstr "ビヘイビアを順序付ける"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:377
+msgid "New feature"
+msgstr "新機能"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:378
+msgid "Enable the behaviours to enjoy with a new way to handle connections."
+msgstr "ビヘイビアが新しい方法で接続を処理できるようにします。"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:381
+msgid ""
+"Click here for a quick guide/tutorial on how to use this new feature."
+msgstr ""
+"ここをクリックして、この新機能の使用方法に関するクイックガイド/チュー"
+"トリアルをご覧ください。"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:401
+msgid "Disable"
+msgstr "無効化"
+
+#: static/js/wirecloud/ui/WiringEditor/BehaviourEngine.js:691
+msgid "The behaviour (%(title)s) was loaded."
+msgstr "ビヘイビア (%(title)s) が読み込まれました。"
+
+#: static/js/wirecloud/ui/WiringEditor/Component.js:32
msgid "volatile"
msgstr "揮発性"
-#: static/js/wirecloud/ui/WiringEditor/Component.js:138
+#: static/js/wirecloud/ui/WiringEditor/Component.js:35
msgid "missing"
msgstr "ミッシング"
-#: static/js/wirecloud/ui/WiringEditor/Component.js:141
+#: static/js/wirecloud/ui/WiringEditor/Component.js:38
msgid "in use"
msgstr "使用中"
-#: static/js/wirecloud/ui/WiringEditor/Component.js:144
+#: static/js/wirecloud/ui/WiringEditor/Component.js:41
msgid "no endpoints"
msgstr "エンドポイントなし"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:703
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:179
msgid "Missing"
msgstr "ミッシング"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:705
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggable.js:181
msgid "%(count)s error"
msgid_plural "%(count)s errors"
msgstr[0] "%(count)s エラー"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:92
-msgid "Delete cascade"
-msgstr "カスケードを削除"
-
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:132
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:56
msgid "Expand"
msgstr "展開"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:134
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:58
msgid "Collapse"
msgstr "折り畳む"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:140
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:64
msgid "Stop ordering"
msgstr "並び替えを中止"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:142
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:66
msgid "Order endpoints"
msgstr "エンドポイントを並び替え"
-#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:150
-#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:102
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:75
+#: static/js/wirecloud/ui/WiringEditor/ComponentPrefs.js:47
msgid "Rename %(type)s"
msgstr "%(type)s の名前を変更"
-#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:36
-msgid "Create"
-msgstr "作成"
+#: static/js/wirecloud/ui/WiringEditor/ComponentDraggablePrefs.js:147
+msgid "Delete cascade"
+msgstr "カスケードを削除"
-#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:106
+#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:39
msgid "No description provided"
msgstr "説明はありません"
-#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:128
+#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:61
msgid "No image available"
-msgstr ""
-"使用可能なイメージはありません"
+msgstr "使用可能なイメージはありません"
-#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:137
+#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:70
msgid "%(version)s (latest)"
msgstr "%(version)s (最新)"
-#: static/js/wirecloud/ui/WiringEditor/ConnectionHandle.js:72
+#: static/js/wirecloud/ui/WiringEditor/ComponentGroup.js:84
+msgid "Create"
+msgstr "作成"
+
+#: static/js/wirecloud/ui/WiringEditor/ConnectionHandle.js:70
msgid "Drag & Drop"
msgstr "ドラッグ&ドロップ"
-#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:83
-msgid "Restore defaults"
-msgstr "デフォルトに戻す"
-
-#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:104
+#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:39
msgid "Stop customizing"
msgstr "カスタマイズの停止"
-#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:104
+#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:39
msgid "Customize"
msgstr "カスタマイズ"
+#: static/js/wirecloud/ui/WiringEditor/ConnectionPrefs.js:91
+msgid "Restore defaults"
+msgstr "デフォルトに戻す"
+
+#: static/js/wirecloud/ui/WiringEditor/Endpoint.js:171
+msgid "No description provided."
+msgstr "説明はありません。"
+
#: static/js/wirecloud/ui/WorkspaceListItems.js:46
msgid "Empty workspace list"
msgstr "空のワークスペース・リスト"
-#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:58
+#: static/js/wirecloud/ui/WorkspaceTabView.js:354
+msgid "Currently editing for screen sizes %(interval)s"
+msgstr ""
+
+#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:49
msgid "Rename Workspace Tab"
msgstr "ワークスペース・タブの名前を変更"
-#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:63
+#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:54
msgid "Set as initial"
msgstr "初期としてセット"
-#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:78
+#: static/js/wirecloud/ui/WorkspaceTabViewMenuItems.js:69
msgid "The tab's widgets will also be removed. Would you like to continue?"
msgstr "タブのウィジェットも削除されます。 続行しますか?"
-#: static/js/wirecloud/ui/WorkspaceView.js:64
+#: static/js/wirecloud/ui/WorkspaceView.js:166
msgid "Wiring"
msgstr "ワイヤーリング"
-#: static/js/wirecloud/ui/WorkspaceView.js:271
+#: static/js/wirecloud/ui/WorkspaceView.js:370
msgid "New tab"
msgstr "新しいタブ"
-#: static/js/wirecloud/ui/WorkspaceView.js:286
-#: static/js/wirecloud/ui/WorkspaceView.js:297
+#: static/js/wirecloud/ui/WorkspaceView.js:385
+#: static/js/wirecloud/ui/WorkspaceView.js:396
msgid "Full screen"
msgstr "全画面"
-#: static/js/wirecloud/ui/WorkspaceView.js:293
+#: static/js/wirecloud/ui/WorkspaceView.js:392
msgid "Exit full screen"
msgstr "全画面を終了"
-#: static/js/wirecloud/ui/WorkspaceView.js:333
+#: static/js/wirecloud/ui/WorkspaceView.js:432
msgid "Add components"
msgstr "コンポーネントを追加"
-#: static/js/wirecloud/ui/WorkspaceView.js:392
-#: static/js/wirecloud/ui/WorkspaceView.js:406
+#: static/js/wirecloud/ui/WorkspaceView.js:490
+#: static/js/wirecloud/ui/WorkspaceView.js:504
msgid "loading..."
msgstr "読み込んでいます..."
-#: static/js/wirecloud/ui/WorkspaceView.js:445
+#: static/js/wirecloud/ui/WorkspaceView.js:542
msgid "The requested workspace is no longer available (it was deleted)."
msgstr "要求されたワークスペースは使用できなくなりました (削除されました)。"
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:58
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:50
msgid "New workspace"
msgstr "新しいワークスペース"
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:65
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:57
msgid "Rename Workspace"
msgstr "ワークスペースの名前を変更"
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:71
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:63
msgid "Share"
msgstr "共有"
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:77
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:69
msgid "Upload to my resources"
msgstr "自分のリソースにアップロード"
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:88
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:80
msgid "Embed"
msgstr "埋め込み"
-#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:89
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:81
msgid "Embed Code"
msgstr "埋め込みコード"
-#: static/js/wirecloud/wiring/Connection.js:101
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:93
+msgid "Duplicate"
+msgstr ""
+
+#: static/js/wirecloud/ui/WorkspaceViewMenuItems.js:95
+msgid "Copy of %(title)s"
+msgstr ""
+
+#: static/js/wirecloud/wiring/Connection.js:80
msgid "The connection ('%(source)s'-'%(target)s') was established."
msgstr "接続 ('%(source)s'-'%(target)s') が確立されました。"
-#: static/js/wirecloud/wiring/Connection.js:110
+#: static/js/wirecloud/wiring/Connection.js:89
msgid "The connection ('%(source)s'-'%(target)s') was detached."
msgstr "接続 ('%(source)s'-'%(target)s') が切り離されました。"
-#: static/js/wirecloud/wiring/Connection.js:137
+#: static/js/wirecloud/wiring/Connection.js:116
msgid "The connection ('%(source)s'-'%(target)s') has a missing endpoint."
msgstr "接続 ('%(source)s'-'%(target)s') には、エンドポイントがありません。"
-#: static/js/wirecloud/wiring/Connection.js:177
+#: static/js/wirecloud/wiring/Connection.js:156
msgid "Connection's logs"
msgstr "接続のログ"
-#: static/js/wirecloud/wiring/Endpoint.js:66
+#: static/js/wirecloud/wiring/Endpoint.js:61
msgid "Unimplemented function: %(funcName)s"
msgstr "実装されていない関数: %(funcName)s"
-#: static/js/wirecloud/wiring/Operator.js:179
-msgid "Operator created successfully."
-msgstr "オペレータが正常に作成されました。"
-
-#: static/js/wirecloud/wiring/Operator.js:286
-msgid "%(operator_title)s's logs"
-msgstr "%(operator_title)s のログ"
-
-#: static/js/wirecloud/wiring/Operator.js:498
+#: static/js/wirecloud/wiring/Operator.js:222
msgid ""
"This operator is currently not available. You or an administrator "
"probably uninstalled it.
Suggestions:
- Remove the operator."
@@ -2168,23 +2331,31 @@ msgstr ""
"ペレーターの別のバージョンをインストールし、アップグレード/ダウングレード"
"オプションを使用してください。
"
-#: static/js/wirecloud/wiring/Operator.js:501
+#: static/js/wirecloud/wiring/Operator.js:225
msgid "Operator loaded successfully."
msgstr "オペレータが正常にロードされました。"
-#: static/js/wirecloud/wiring/Operator.js:525
+#: static/js/wirecloud/wiring/Operator.js:261
msgid "Operator unloaded successfully."
msgstr "オペレータが正常にアンロードされました。"
-#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:67
-#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:69
+#: static/js/wirecloud/wiring/Operator.js:426
+msgid "Operator created successfully."
+msgstr "オペレータが正常に作成されました。"
+
+#: static/js/wirecloud/wiring/Operator.js:536
+msgid "%(operator_title)s's logs"
+msgstr "%(operator_title)s のログ"
+
+#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:75
+#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:77
msgid "Use in %(endpointName)s"
msgstr "%(endpointName)s で使用"
-#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:83
-#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:95
-#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:86
-#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:98
+#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:90
+#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:105
+#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:94
+#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:106
msgid ""
"Exception catched while processing an event that reached the "
"\"%(inputendpoint)s\" input endpoint"
@@ -2192,11 +2363,23 @@ msgstr ""
"\"%(inputendpoint)s\" 入力エンドポイントに達したイベントを処理中に例外が"
"キャッチされました"
-#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:85
+#: static/js/wirecloud/wiring/OperatorTargetEndpoint.js:94
msgid "Operator has not registered a callback for this input endpoint"
msgstr ""
"オペレータはこの入力エンドポイントに対してコールバックを登録していません"
-#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:88
+#: static/js/wirecloud/wiring/WidgetTargetEndpoint.js:96
msgid "Widget has not registered a callback for this input endpoint"
msgstr "ウィジェットがこの入力エンドポイントのコールバックを登録していません"
+
+#~ msgid "missing vendor"
+#~ msgstr "ベンダーがありません"
+
+#~ msgid "missing name"
+#~ msgstr "名前がありません"
+
+#~ msgid "missing version"
+#~ msgstr "バージョンがありません"
+
+#~ msgid "missing type"
+#~ msgstr "タイプがありません"
diff --git a/src/wirecloud/platform/migrations/0020_change_json_format_for_screen_sizes.py b/src/wirecloud/platform/migrations/0020_change_json_format_for_screen_sizes.py
new file mode 100644
index 0000000000..e73f32819b
--- /dev/null
+++ b/src/wirecloud/platform/migrations/0020_change_json_format_for_screen_sizes.py
@@ -0,0 +1,31 @@
+# Generated by Django 2.2.28 on 2024-06-18 12:04
+
+from django.db import migrations
+
+def change_json_format_for_screen_sizes(apps, schema_editor):
+ # Changes all iwidget.position fields to use the new JSON format
+
+ IWidget = apps.get_model('platform', 'IWidget')
+ for iwidget in IWidget.objects.all():
+ if not 'configurations' in iwidget.positions and 'widget' in iwidget.positions:
+ iwidget.positions = {
+ "configurations": [
+ {
+ "id": 0,
+ "moreOrEqual": 0,
+ "lessOrEqual": -1,
+ "widget": iwidget.positions["widget"]
+ }
+ ]
+ }
+ iwidget.save()
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('platform', '0019_auto_20201130_1824'),
+ ]
+
+ operations = [
+ migrations.RunPython(change_json_format_for_screen_sizes),
+ ]
diff --git a/src/wirecloud/platform/static/js/wirecloud/UserInterfaceManager.js b/src/wirecloud/platform/static/js/wirecloud/UserInterfaceManager.js
index b9b9ab58e2..b2e6231664 100644
--- a/src/wirecloud/platform/static/js/wirecloud/UserInterfaceManager.js
+++ b/src/wirecloud/platform/static/js/wirecloud/UserInterfaceManager.js
@@ -360,9 +360,9 @@
};
/**
- * @private
- *
* Only meant to be used by {Wirecloud.ui.WindowMenu}
+ *
+ * @private
*/
UserInterfaceManager._unregisterRootWindowMenu = function _unregisterRootWindowMenu(window_menu) {
if (currentWindowMenu === window_menu) {
@@ -375,9 +375,9 @@
};
/**
- * @private
- *
* Only meant to be used by {Wirecloud.ui.WindowMenu}
+ *
+ * @private
*/
UserInterfaceManager._registerRootWindowMenu = function _registerRootWindowMenu(window_menu) {
if (!(window_menu instanceof Wirecloud.ui.WindowMenu)) {
diff --git a/src/wirecloud/platform/static/js/wirecloud/Widget.js b/src/wirecloud/platform/static/js/wirecloud/Widget.js
index 2c3f59274d..1612f7074d 100644
--- a/src/wirecloud/platform/static/js/wirecloud/Widget.js
+++ b/src/wirecloud/platform/static/js/wirecloud/Widget.js
@@ -185,6 +185,7 @@
const _setTitleVisibility = function _setTitleVisibility(widget, visibility) {
privates.get(widget).titlevisible = visibility;
+ privates.get(widget).currentLayoutConfiguration.titlevisible = visibility;
widget.dispatchEvent('change', ['titlevisible']);
return Promise.resolve(widget);
};
@@ -246,6 +247,23 @@
this.loaded_scripts = [];
};
+ // It is assumed that the layoutConfigurations cover every screen size from 0 to infinity without gaps or overlaps
+ // (this is guaranteed by checks in the server side code)
+ const _getCurrentLayoutConfiguration = function _getCurrentLayoutConfiguration(layoutConfigurations, windowSize) {
+ let currentLayoutConfiguration;
+ for (const i in layoutConfigurations) {
+ const isValid = (layoutConfigurations[i].moreOrEqual !== -1 && layoutConfigurations[i].lessOrEqual === -1 && layoutConfigurations[i].moreOrEqual <= windowSize) ||
+ (layoutConfigurations[i].moreOrEqual === -1 && layoutConfigurations[i].lessOrEqual !== -1 && layoutConfigurations[i].lessOrEqual >= windowSize) ||
+ (layoutConfigurations[i].moreOrEqual !== -1 && layoutConfigurations[i].lessOrEqual !== -1 && layoutConfigurations[i].moreOrEqual <= windowSize && layoutConfigurations[i].lessOrEqual >= windowSize);
+
+ if (isValid) {
+ currentLayoutConfiguration = layoutConfigurations[i];
+ break;
+ }
+ }
+ return currentLayoutConfiguration;
+ };
+
const clean_title = function clean_title(title) {
if (typeof title !== 'string' || !title.trim().length) {
throw new TypeError("invalid title parameter");
@@ -428,7 +446,24 @@
title: meta.title,
preferences: {},
properties: {},
- titlevisible: true
+ layoutConfigurations: [{
+ id: 0,
+ moreOrEqual: 0,
+ lessOrEqual: -1,
+ anchor: 'top-left',
+ relx: true,
+ rely: true,
+ left: 0,
+ top: 0,
+ zIndex: 0,
+ relheight: true,
+ relwidth: true,
+ height: 1,
+ width: 1,
+ minimized: false,
+ fulldragboard: false,
+ titlevisible: true
+ }]
}, data);
this.pending_events = [];
@@ -469,26 +504,29 @@
permissions.viewer.upgrade = false;
}
+ const currentLayoutConfiguration = _getCurrentLayoutConfiguration(data.layoutConfigurations, window.innerWidth);
privates.set(this, {
permissions: permissions,
position: {
- anchor: data.anchor,
- relx: data.relx,
- rely: data.rely,
- x: data.left,
- y: data.top,
- z: data.zIndex
+ anchor: currentLayoutConfiguration.anchor,
+ relx: currentLayoutConfiguration.relx,
+ rely: currentLayoutConfiguration.rely,
+ x: currentLayoutConfiguration.left,
+ y: currentLayoutConfiguration.top,
+ z: currentLayoutConfiguration.zIndex
},
meta: meta,
shape: {
- relheight: data.relheight,
- relwidth: data.relwidth,
- width: data.width,
- height: data.height
+ relheight: currentLayoutConfiguration.relheight,
+ relwidth: currentLayoutConfiguration.relwidth,
+ width: currentLayoutConfiguration.width,
+ height: currentLayoutConfiguration.height
},
+ layoutConfigurations: data.layoutConfigurations,
+ currentLayoutConfiguration: currentLayoutConfiguration,
status: STATUS.CREATED,
tab: tab,
- titlevisible: !!data.titlevisible,
+ titlevisible: !!currentLayoutConfiguration.titlevisible,
on_preremovetab: on_preremovetab.bind(this)
});
@@ -574,9 +612,27 @@
*/
volatile: {
value: !!data.volatile
+ },
+ /**
+ * @memberOf Wirecloud.Widget#
+ * @type {Object}
+ */
+ currentLayoutConfig: {
+ get: function () {
+ return privates.get(this).currentLayoutConfiguration;
+ }
+ },
+ /**
+ * @memberOf Wirecloud.Widget#
+ * @type {Object}
+ */
+ layoutConfigurations: {
+ get: function () {
+ return privates.get(this).layoutConfigurations;
+ }
}
});
- this.fulldragboard = data.fulldragboard;
+ this.fulldragboard = currentLayoutConfiguration.fulldragboard;
_createWrapper.call(this);
@@ -598,8 +654,12 @@
* @type {Boolean}
*/
minimized: {
- writable: true,
- value: data.minimized
+ get: function () {
+ return privates.get(this).currentLayoutConfiguration.minimized;
+ },
+ set: function (value) {
+ privates.get(this).currentLayoutConfiguration.minimized = value;
+ }
},
/**
* @memberOf Wirecloud.Widget#
@@ -969,6 +1029,58 @@
return this;
}
+ setLayoutPosition(layoutPosition) {
+ Wirecloud.Utils.merge(privates.get(this).currentLayoutConfiguration, {
+ anchor: layoutPosition.anchor,
+ relx: layoutPosition.relx,
+ rely: layoutPosition.rely,
+ left: layoutPosition.x,
+ top: layoutPosition.y,
+ zIndex: layoutPosition.z
+ });
+ return this;
+ }
+
+ setLayoutIndex(index) {
+ this.layout = index;
+ return this;
+ }
+
+ updateWindowSize(windowSize) {
+ const currentLayoutConfiguration = _getCurrentLayoutConfiguration(privates.get(this).layoutConfigurations, windowSize);
+ if (currentLayoutConfiguration === privates.get(this).currentLayoutConfiguration) {
+ return false;
+ }
+
+ privates.get(this).currentLayoutConfiguration = currentLayoutConfiguration;
+
+ // Update shape, position, titlevisible and fulldragboard
+ privates.get(this).shape = {
+ relheight: currentLayoutConfiguration.relheight,
+ relwidth: currentLayoutConfiguration.relwidth,
+ height: currentLayoutConfiguration.height,
+ width: currentLayoutConfiguration.width
+ };
+
+ privates.get(this).position = {
+ anchor: currentLayoutConfiguration.anchor,
+ relx: currentLayoutConfiguration.relx,
+ rely: currentLayoutConfiguration.rely,
+ x: currentLayoutConfiguration.left,
+ y: currentLayoutConfiguration.top,
+ z: currentLayoutConfiguration.zIndex
+ };
+
+ privates.get(this).titlevisible = !!currentLayoutConfiguration.titlevisible;
+ this.fulldragboard = currentLayoutConfiguration.fulldragboard;
+
+ return true;
+ }
+
+ getLayoutConfigBySize(size) {
+ return _getCurrentLayoutConfiguration(privates.get(this).layoutConfigurations, size);
+ }
+
setPreferences(newValues) {
// We are going to modify the object, let's create a copy
newValues = Object.assign({}, newValues);
@@ -1031,6 +1143,21 @@
return this;
}
+ setLayoutShape(layoutShape) {
+ Wirecloud.Utils.merge(privates.get(this).currentLayoutConfiguration, layoutShape);
+ return this;
+ }
+
+ setLayoutFulldragboard(fulldragboard) {
+ privates.get(this).currentLayoutConfiguration.fulldragboard = fulldragboard;
+ return this;
+ }
+
+ setLayoutMinimizedStatus(minimized) {
+ privates.get(this).currentLayoutConfiguration.minimized = minimized;
+ return this;
+ }
+
/**
* Set title visibility on persistence
*
@@ -1039,9 +1166,7 @@
setTitleVisibility(visibility, persistence) {
visibility = !!visibility;
- if (this.volatile) {
- return _setTitleVisibility(this, visibility);
- } else if (persistence) {
+ if (persistence && !this.volatile) {
const url = Wirecloud.URLs.IWIDGET_ENTRY.evaluate({
workspace_id: this.tab.workspace.id,
tab_id: this.tab.id,
@@ -1049,7 +1174,11 @@
});
const payload = {
- titlevisible: visibility
+ layoutConfigurations: [{
+ id: privates.get(this).currentLayoutConfiguration.id,
+ titlevisible: visibility,
+ action: 'update'
+ }]
};
return Wirecloud.io.makeRequest(url, {
@@ -1065,9 +1194,7 @@
}
});
} else {
- privates.get(this).titlevisible = visibility;
- this.dispatchEvent('change', ['titlevisible']);
- return Promise.resolve(this);
+ return _setTitleVisibility(this, visibility);
}
}
diff --git a/src/wirecloud/platform/static/js/wirecloud/Wiring.js b/src/wirecloud/platform/static/js/wirecloud/Wiring.js
index 6ef92e492a..b011b424b5 100644
--- a/src/wirecloud/platform/static/js/wirecloud/Wiring.js
+++ b/src/wirecloud/platform/static/js/wirecloud/Wiring.js
@@ -605,7 +605,7 @@
// Init operatorId counter
if (priv.operators.length > 0) {
- priv.operatorId = priv.operators[priv.operators.length - 1].id + 1;
+ priv.operatorId = parseInt(priv.operators[priv.operators.length - 1].id) + 1;
} else {
priv.operatorId = 1;
}
diff --git a/src/wirecloud/platform/static/js/wirecloud/WorkspaceTab.js b/src/wirecloud/platform/static/js/wirecloud/WorkspaceTab.js
index 108890fff4..4723ddebeb 100644
--- a/src/wirecloud/platform/static/js/wirecloud/WorkspaceTab.js
+++ b/src/wirecloud/platform/static/js/wirecloud/WorkspaceTab.js
@@ -159,6 +159,11 @@
}));
}
+ // Add action to all layout configurations
+ for (let i = 0; i < options.layoutConfigurations.length; i++) {
+ options.layoutConfigurations[i].action = 'update';
+ }
+
var content = utils.merge(options, {
widget: resource.uri,
settings: options.preferences
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/ColumnLayout.js b/src/wirecloud/platform/static/js/wirecloud/ui/ColumnLayout.js
index 562b4023ac..c4e9a0b2a7 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/ColumnLayout.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/ColumnLayout.js
@@ -100,32 +100,32 @@
return (cells * this.cellHeight);
}
- getWidthInPixels(cells) {
- return this.fromHCellsToPixels(cells) - this.leftMargin - this.rightMargin;
+ getWidthInPixels(cells, width) {
+ return this.fromHCellsToPixels(cells, width) - this.leftMargin - this.rightMargin;
}
getHeightInPixels(cells) {
return this.fromVCellsToPixels(cells) - this.topMargin - this.bottomMargin;
}
- fromPixelsToHCells(pixels) {
+ fromPixelsToHCells(pixels, width) {
if (pixels <= 0) {
return 0;
}
- const cells = pixels / this.fromHCellsToPixels(1);
+ const cells = pixels / this.fromHCellsToPixels(1, width);
return Math.round(cells);
}
- fromHCellsToPixels(cells) {
- return (this.getWidth() * this.fromHCellsToPercentage(cells)) / 100;
+ fromHCellsToPixels(cells, width) {
+ return ((width || this.getWidth()) * this.fromHCellsToPercentage(cells)) / 100;
}
fromHCellsToPercentage(cells) {
return cells * (100 / this.columns);
}
- adaptColumnOffset(size) {
+ adaptColumnOffset(size, width) {
let offsetInLU, pixels;
const parsedSize = this.parseSize(size);
@@ -133,13 +133,13 @@
offsetInLU = Math.round(parsedSize[0]);
} else {
if (parsedSize[1] === '%') {
- pixels = Math.round((parsedSize[0] * this.getWidth()) / 100);
+ pixels = Math.round((parsedSize[0] * (width || this.getWidth())) / 100);
} else {
pixels = parsedSize[0] < this.dragboard.leftMargin ? 0 : parsedSize[0] - this.dragboard.leftMargin;
}
- offsetInLU = this.fromPixelsToHCells(pixels);
+ offsetInLU = this.fromPixelsToHCells(pixels, width);
}
- return new Wirecloud.ui.MultiValuedSize(this.getColumnOffset({x: offsetInLU}), offsetInLU);
+ return new Wirecloud.ui.MultiValuedSize(this.getColumnOffset({x: offsetInLU}, width), offsetInLU);
}
adaptRowOffset(size) {
@@ -167,8 +167,8 @@
return height + this.topMargin + this.bottomMargin;
}
- getColumnOffset(position, css) {
- let tmp = Math.floor((this.getWidth() * this.fromHCellsToPercentage(position.x)) / 100);
+ getColumnOffset(position, width, css) {
+ let tmp = Math.floor(((width || this.getWidth()) * this.fromHCellsToPercentage(position.x)) / 100);
tmp += this.leftMargin + this.dragboard.leftMargin;
return css ? tmp + 'px' : tmp;
}
@@ -498,12 +498,16 @@
}
_searchFreeSpace(width, height) {
+ return this._searchFreeSpace2(width, height, this.matrix);
+ }
+
+ _searchFreeSpace2(width, height, matrix) {
let positionX = 0, positionY = 0;
const maxX = this.columns - width;
for (positionY = 0; true ; positionY++) {
for (positionX = 0; positionX <= maxX; positionX++) {
- if (this._hasSpaceFor(this.matrix, positionX, positionY, width, height)) {
+ if (this._hasSpaceFor(matrix, positionX, positionY, width, height)) {
return {relx: true, x: positionX, rely: true, y: positionY};
}
}
@@ -532,7 +536,7 @@
} else {
iWidgetsToReinsert.push(widget);
}
- })
+ });
const modified = iWidgetsToReinsert.length > 0;
// Reinsert the iwidgets that didn't fit in their positions
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/DragboardLayout.js b/src/wirecloud/platform/static/js/wirecloud/ui/DragboardLayout.js
index 2080fb9193..ac086da820 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/DragboardLayout.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/DragboardLayout.js
@@ -35,10 +35,10 @@
};
/**
- * @private
- *
* Checks that the given widget has a minimal size. This check is performed using
* widget content size.
+ *
+ * @private
*/
const ensureMinimalSize = function ensureMinimalSize(widget, persist) {
const minWidth = Math.ceil(this.fromPixelsToHCells(80));
@@ -126,7 +126,7 @@
}
}
- adaptColumnOffset(pixels) {
+ adaptColumnOffset(pixels, width) {
const msg = utils.interpolate(
"method \"%(method)s\" must be implemented.",
{method: "adaptColumnOffset"},
@@ -162,7 +162,7 @@
return new Wirecloud.ui.MultiValuedSize(this.getHeightInPixels(sizeInLU), sizeInLU);
}
- adaptWidth(size) {
+ adaptWidth(size, width) {
let pixels, sizeInLU;
const parsedSize = this.parseSize(size);
@@ -170,14 +170,14 @@
sizeInLU = Math.round(parsedSize[0]);
} else {
if (parsedSize[1] === '%') {
- pixels = Math.round((parsedSize[0] * this.getWidth()) / 100);
+ pixels = Math.round((parsedSize[0] * (width || this.getWidth())) / 100);
} else {
pixels = this.padWidth(parsedSize[0]);
}
- sizeInLU = Math.round(this.fromPixelsToHCells(pixels));
+ sizeInLU = Math.round(this.fromPixelsToHCells(pixels, width));
}
sizeInLU = Math.max(1, sizeInLU);
- return new Wirecloud.ui.MultiValuedSize(this.getWidthInPixels(sizeInLU), sizeInLU);
+ return new Wirecloud.ui.MultiValuedSize(this.getWidthInPixels(sizeInLU, width), sizeInLU);
}
updatePosition(widget, element) {
@@ -260,10 +260,10 @@
}
/**
- * @private
- *
* This function should be called at the end of the implementation of addWidget.
- */
+ *
+ * @private
+ */
_adaptIWidget(widget) {
if (widget.element != null) {
ensureMinimalSize.call(this, widget, false);
@@ -288,6 +288,15 @@
return new Set();
}
+ /**
+ * Removes all event listeners associated with the widget
+ *
+ * @param {WidgetView} widget
+ */
+ removeWidgetEventListeners(widget) {
+ widget.removeEventListener('remove', this._on_remove_widget_bound);
+ }
+
/**
* Moves all widget in this layout to another layout.
*
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/FreeLayout.js b/src/wirecloud/platform/static/js/wirecloud/ui/FreeLayout.js
index 62e7f88e21..65674669d7 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/FreeLayout.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/FreeLayout.js
@@ -27,7 +27,7 @@
"use strict";
- const setPosition = function setPosition(position, options, offset) {
+ const setPosition = function setPosition(position, layoutConfig, offset, screenWidth, options) {
delete options.left;
delete options.top;
delete options.right;
@@ -35,26 +35,26 @@
switch (position) {
case "top-right":
- options.left = offset.x + options.refposition.left - this.dragboard.leftMargin;
- options.top = offset.y + options.refposition.top - this.dragboard.topMargin - options.height;
+ layoutConfig.left = offset.x + options.refposition.left - this.dragboard.leftMargin;
+ layoutConfig.top = offset.y + options.refposition.top - this.dragboard.topMargin - layoutConfig.height;
break;
case "top-left":
- options.left = offset.x + options.refposition.right - this.dragboard.leftMargin - this.getWidthInPixels(options.width);
- options.top = offset.y + options.refposition.top - this.dragboard.topMargin - options.height;
+ layoutConfig.left = offset.x + options.refposition.right - this.dragboard.leftMargin - this.getWidthInPixels(layoutConfig.width, screenWidth);
+ layoutConfig.top = offset.y + options.refposition.top - this.dragboard.topMargin - layoutConfig.height;
break;
case "bottom-right":
- options.left = offset.x + options.refposition.left - this.dragboard.leftMargin;
- options.top = offset.y + options.refposition.bottom - this.dragboard.topMargin;
+ layoutConfig.left = offset.x + options.refposition.left - this.dragboard.leftMargin;
+ layoutConfig.top = offset.y + options.refposition.bottom - this.dragboard.topMargin;
break;
case "bottom-left":
- options.left = offset.x + options.refposition.right - this.dragboard.leftMargin - this.getWidthInPixels(options.width);
- options.top = offset.y + options.refposition.bottom - this.dragboard.topMargin;
+ layoutConfig.left = offset.x + options.refposition.right - this.dragboard.leftMargin - this.getWidthInPixels(layoutConfig.width, screenWidth);
+ layoutConfig.top = offset.y + options.refposition.bottom - this.dragboard.topMargin;
break;
}
};
- const standsOut = function standsOut(options) {
- const width_in_pixels = this.getWidthInPixels(options.width);
+ const standsOut = function standsOut(options, screenWidth) {
+ const width_in_pixels = this.getWidthInPixels(options.width, screenWidth);
const height_in_pixels = options.height;
const visible_width = width_in_pixels - Math.max(options.left + width_in_pixels - this.getWidth(), 0) - Math.max(-options.left, 0);
@@ -87,23 +87,23 @@
return Math.round((this.getHeight() * cells) / this.MAX_HLU);
}
- getWidthInPixels(cells) {
- return this.fromHCellsToPixels(cells);
+ getWidthInPixels(cells, width) {
+ return this.fromHCellsToPixels(cells, width);
}
getHeightInPixels(cells) {
return this.fromVCellsToPixels(cells);
}
- fromPixelsToHCells(pixels) {
- return (pixels * this.MAX_HLU / this.getWidth());
+ fromPixelsToHCells(pixels, width) {
+ return (pixels * this.MAX_HLU / (width || this.getWidth()));
}
- fromHCellsToPixels(cells) {
- return Math.round((this.getWidth() * cells) / this.MAX_HLU);
+ fromHCellsToPixels(cells, width) {
+ return Math.round(((width || this.getWidth()) * cells) / this.MAX_HLU);
}
- getColumnOffset(position, css) {
+ getColumnOffset(position, width, css) {
const margin = position.anchor.endsWith("left") ? this.dragboard.leftMargin : this.dragboard.rightMargin;
if (css) {
if (position.relx) {
@@ -113,7 +113,7 @@
return (margin + position.x) + "px";
}
} else {
- return margin + (position.relx ? this.fromHCellsToPixels(position.x) : position.x);
+ return margin + (position.relx ? this.fromHCellsToPixels(position.x, width) : position.x);
}
}
@@ -131,7 +131,7 @@
}
}
- adaptColumnOffset(size) {
+ adaptColumnOffset(size, width) {
let offsetInLU, pixels;
const parsedSize = this.parseSize(size);
@@ -139,13 +139,13 @@
offsetInLU = Math.round(parsedSize[0]);
} else {
if (parsedSize[1] === '%') {
- pixels = Math.round((parsedSize[0] * this.getWidth()) / 100);
+ pixels = Math.round((parsedSize[0] * (width || this.getWidth())) / 100);
} else {
pixels = parsedSize[0] < this.dragboard.leftMargin ? 0 : parsedSize[0] - this.dragboard.leftMargin;
}
- offsetInLU = Math.round(this.fromPixelsToHCells(pixels));
+ offsetInLU = Math.round(this.fromPixelsToHCells(pixels, width));
}
- const offsetInPixels = this.fromHCellsToPixels(offsetInLU);
+ const offsetInPixels = this.fromHCellsToPixels(offsetInLU, width);
return new Wirecloud.ui.MultiValuedSize(offsetInPixels, offsetInLU);
}
@@ -351,18 +351,18 @@
case "top-right":
case "bottom-right":
element.style.left = "";
- element.style.right = this.getColumnOffset(widget.position, true);
+ element.style.right = this.getColumnOffset(widget.position, null, true);
element.style.marginLeft = "";
break;
case "top-left":
case "bottom-left":
- element.style.left = this.getColumnOffset(widget.position, true);
+ element.style.left = this.getColumnOffset(widget.position, null, true);
element.style.right = "";
element.style.marginLeft = "";
break;
case "top-center":
case "bottom-center":
- element.style.left = this.getColumnOffset(widget.position, true);
+ element.style.left = this.getColumnOffset(widget.position, null, true);
element.style.right = "";
if (widget.shape.relwidth) {
const percentage = widget.shape.width / 2 / this.MAX_HLU_PERCENTAGE;
@@ -410,7 +410,7 @@
this.newPosition = null;
}
- searchBestPosition(options) {
+ searchBestPosition(options, layoutConfig, screenWidth) {
let offset = {x: 0, y: 0};
if (options.refiframe != null) {
offset = Wirecloud.Utils.getRelativePosition(options.refiframe, this.dragboard.tab.wrapperElement);
@@ -421,8 +421,8 @@
const placements = ["bottom-right", "bottom-left", "top-right", "top-left"];
let i = 0;
do {
- setPosition.call(this, placements[i], options, offset);
- weights.push(standsOut.call(this, options));
+ setPosition.call(this, placements[i], layoutConfig, offset, screenWidth, options);
+ weights.push(standsOut.call(this, layoutConfig, screenWidth));
i += 1;
} while (weights[i - 1] > 0 && i < placements.length);
@@ -430,17 +430,17 @@
const best_weight = Math.min.apply(Math, weights);
const index = weights.indexOf(best_weight);
const placement = placements[index];
- setPosition.call(this, placement, options, offset);
+ setPosition.call(this, placement, layoutConfig, offset, screenWidth, options);
- options.top = this.adaptRowOffset(options.top + "px").inPixels;
- options.left = this.adaptColumnOffset(options.left + "px").inLU;
+ layoutConfig.top = this.adaptRowOffset(layoutConfig.top + "px").inPixels;
+ layoutConfig.left = this.adaptColumnOffset(layoutConfig.left + "px", screenWidth).inLU;
- if (options.left + options.width >= this.MAX_HLU) {
- options.width -= options.left + options.width - this.MAX_HLU;
+ if (layoutConfig.left + layoutConfig.width >= this.MAX_HLU) {
+ layoutConfig.width -= layoutConfig.left + layoutConfig.width - this.MAX_HLU;
}
} else {
- options.top = this.adaptRowOffset(options.top + "px").inPixels;
- options.left = this.adaptColumnOffset(options.left + "px").inLU;
+ layoutConfig.top = this.adaptRowOffset(layoutConfig.top + "px").inPixels;
+ layoutConfig.left = this.adaptColumnOffset(layoutConfig.left + "px", screenWidth).inLU;
}
}
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/FullDragboardLayout.js b/src/wirecloud/platform/static/js/wirecloud/ui/FullDragboardLayout.js
index 29212c964a..f015e16659 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/FullDragboardLayout.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/FullDragboardLayout.js
@@ -63,7 +63,7 @@
return this.getWidth();
}
- getColumnOffset(position) {
+ getColumnOffset(position, width) {
return 0;
}
@@ -83,8 +83,8 @@
return new Wirecloud.ui.MultiValuedSize(this.getHeight(), 1);
}
- adaptWidth(size) {
- return new Wirecloud.ui.MultiValuedSize(this.getWidth(), 1);
+ adaptWidth(size, width) {
+ return new Wirecloud.ui.MultiValuedSize(width || this.getWidth(), 1);
}
initialize() {
@@ -115,7 +115,7 @@
return new Set();
}
- iWidget.setPosition(new Wirecloud.DragboardPosition(0, 0));
+ iWidget.setPosition(new Wirecloud.DragboardPosition(0, 0), false);
return new Set();
}
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/GridLayout.js b/src/wirecloud/platform/static/js/wirecloud/ui/GridLayout.js
index 4de065a4fe..c96949637b 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/GridLayout.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/GridLayout.js
@@ -95,32 +95,32 @@
return rows * (100 / this.rows);
}
- getWidthInPixels(cells) {
- return this.fromHCellsToPixels(cells) - this.leftMargin - this.rightMargin;
+ getWidthInPixels(cells, width) {
+ return this.fromHCellsToPixels(cells, width) - this.leftMargin - this.rightMargin;
}
getHeightInPixels(cells) {
return this.fromVCellsToPixels(cells) - this.topMargin - this.bottomMargin;
}
- fromPixelsToHCells(pixels) {
+ fromPixelsToHCells(pixels, width) {
if (pixels <= 0) {
return 0;
}
- const cells = pixels / this.fromHCellsToPixels(1);
+ const cells = pixels / this.fromHCellsToPixels(1, width);
return Math.round(cells);
}
- fromHCellsToPixels(columns) {
- return (this.getWidth() * this.fromHCellsToPercentage(columns)) / 100;
+ fromHCellsToPixels(columns, width) {
+ return ((width || this.getWidth()) * this.fromHCellsToPercentage(columns)) / 100;
}
fromHCellsToPercentage(columns) {
return columns * (100 / this.columns);
}
- adaptColumnOffset(size) {
+ adaptColumnOffset(size, width) {
let offsetInLU;
const parsedSize = this.parseSize(size);
@@ -129,13 +129,13 @@
} else {
let pixels;
if (parsedSize[1] === '%') {
- pixels = Math.round((parsedSize[0] * this.getWidth()) / 100);
+ pixels = Math.round((parsedSize[0] * (width || this.getWidth())) / 100);
} else {
pixels = parsedSize[0];
}
- offsetInLU = Math.round(this.fromPixelsToHCells(pixels - this.leftMargin));
+ offsetInLU = Math.round(this.fromPixelsToHCells(pixels - this.leftMargin, width));
}
- return new Wirecloud.ui.MultiValuedSize(this.getColumnOffset(offsetInLU), offsetInLU);
+ return new Wirecloud.ui.MultiValuedSize(this.getColumnOffset(offsetInLU, width), offsetInLU);
}
adaptRowOffset(size) {
@@ -164,8 +164,8 @@
return height + this.topMargin + this.bottomMargin;
}
- getColumnOffset(position) {
- let tmp = Math.floor((this.getWidth() * this.fromHCellsToPercentage(position.x)) / 100);
+ getColumnOffset(position, width) {
+ let tmp = Math.floor(((width || this.getWidth()) * this.fromHCellsToPercentage(position.x)) / 100);
tmp += this.leftMargin + this.dragboard.leftMargin;
return tmp;
}
@@ -334,12 +334,16 @@
}
_searchFreeSpace(width, height) {
+ return this._searchFreeSpace2(width, height, this.matrix);
+ }
+
+ _searchFreeSpace2(width, height, matrix) {
let positionX = 0, positionY = 0;
const maxX = this.columns - width;
for (positionY = 0; true ; positionY++) {
for (positionX = 0; positionX <= maxX; positionX++) {
- if (this._hasSpaceFor(this.matrix, positionX, positionY, width, height)) {
+ if (this._hasSpaceFor(matrix, positionX, positionY, width, height)) {
return {relx: true, x: positionX, rely: true, y: positionY};
}
}
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/LayoutInputInterface.js b/src/wirecloud/platform/static/js/wirecloud/ui/LayoutInputInterface.js
index 8399eac8e2..6e0d9984c4 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/LayoutInputInterface.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/LayoutInputInterface.js
@@ -207,7 +207,7 @@
this.buttonElement.setDisabled(disabled);
}
- epaint() {
+ repaint() {
this.wrapperElement.repaint();
}
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/PreferencesWindowMenu.js b/src/wirecloud/platform/static/js/wirecloud/ui/PreferencesWindowMenu.js
index 6407a531f7..0746dc23d9 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/PreferencesWindowMenu.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/PreferencesWindowMenu.js
@@ -118,7 +118,7 @@
this.windowContent.insertBefore(table, this.msgElement);
};
- const save_preferences = function save_preferences() {
+ const save_preferences = function save_preferences(callback) {
const modifiedValues = {};
let newInheritanceSetting;
@@ -156,10 +156,14 @@
modifiedValues[pref_name] = changes;
}
- this.manager.set(modifiedValues);
+ this.manager.set(modifiedValues).then(() => {
+ if (typeof callback === 'function') {
+ callback();
+ }
+ });
};
- const _executeOperation = function _executeOperation() {
+ const _executeOperation = function _executeOperation(callback) {
// Validate input fields
const validationManager = new StyledElements.ValidationErrorManager();
for (let pref_name in this.interfaces) {
@@ -171,11 +175,12 @@
// Show error message if needed
if (errorMsg.length !== 0) {
- // FIXME
- this.setMsg(errorMsg[0]);
+ this.alertMsg.setMessage(errorMsg[0]);
+ this.alertMsg.show();
} else {
- save_preferences.call(this);
+ save_preferences.call(this, callback);
this.hide();
+ this.alertMsg.hide();
}
};
@@ -212,6 +217,10 @@
}.bind(this));
this.resetButton.insertInto(this.windowBottom);
+ this.alertMsg = new se.Alert({state: 'error', title: utils.gettext('Error')});
+ this.alertMsg.insertInto(this.windowContent);
+ this.alertMsg.hide();
+
// Accept button
this.acceptButton = new se.Button({
class: 'btn-accept btn-primary',
@@ -252,6 +261,7 @@
this.interfaces[pref_name].inherit.setValue(this.manager.preferences[pref_name].inherit);
this.interfaces[pref_name].base.setDisabled(this.manager.preferences[pref_name].inherit);
}
+ this.interfaces[pref_name].base.addEventListener('requestSave', _executeOperation.bind(this));
}
Wirecloud.ui.WindowMenu.prototype.show.call(this, parentWindow);
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/ScreenSizesInputInterface.js b/src/wirecloud/platform/static/js/wirecloud/ui/ScreenSizesInputInterface.js
new file mode 100644
index 0000000000..8ebd3ad2bd
--- /dev/null
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/ScreenSizesInputInterface.js
@@ -0,0 +1,315 @@
+/*
+ * Copyright (c) 2024 Future Internet Consulting and Development Solutions S.L.
+ *
+ * This file is part of Wirecloud Platform.
+ *
+ * Wirecloud Platform 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
+ * License, or (at your option) any later version.
+ *
+ * Wirecloud is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Wirecloud Platform. If not, see
+ * .
+ *
+ */
+
+/* globals StyledElements, Wirecloud */
+
+(function (ns, se, utils) {
+
+ 'use strict';
+
+ ns.ScreenSizesInputInterface = class ScreenSizesInputInterface extends se.InputInterface {
+
+ constructor(fieldId, options) {
+ super(fieldId, options);
+
+ this.value = options.defaultValue || [];
+ this.enabledStatus = true;
+
+ this.wrapperElement = new StyledElements.Container({class: 'se-screen-size-field'});
+ this.addButton = new StyledElements.Button({
+ iconClass: 'fas fa-plus'
+ });
+
+ this.addButton.addEventListener('click', this.on_addScreenSize.bind(this));
+
+ this.screenSizesInputs = {};
+
+ this.wrapperElement.appendChild(this.addButton);
+
+ this._update(this.value);
+ this.addButton.setDisabled(!this.enabledStatus);
+
+ this.highestIdUsed = 0;
+ }
+
+ on_addScreenSize() {
+ const screenSizes = utils.clone(this.value, true);
+
+ // Get max id
+ let maxId = 0;
+ screenSizes.forEach((screenSize) => {
+ if (screenSize.id > maxId) {
+ maxId = screenSize.id;
+ }
+ });
+
+ maxId = Math.max(maxId, this.highestIdUsed);
+
+ const newScreenSize = {
+ id: maxId + 1,
+ name: "Default-" + (maxId + 1),
+ moreOrEqual: (screenSizes.length > 0) ? screenSizes[screenSizes.length - 1].lessOrEqual + 1 : 0,
+ lessOrEqual: -1
+ };
+
+ this.highestIdUsed = newScreenSize.id;
+
+ screenSizes.push(newScreenSize);
+
+ this._update(screenSizes, false);
+ }
+
+ on_deleteScreenSize(screenSizeId) {
+ const screenSizes = utils.clone(this.value, true);
+
+ const index = screenSizes.findIndex((screenSize) => screenSize.id === screenSizeId);
+ screenSizes.splice(index, 1);
+
+ this._update(screenSizes, false);
+ }
+
+ on_valueChange(screenSizeId, from, value) {
+ const screenSizes = utils.clone(this.value, true);
+
+ const screenSizeIdx = screenSizes.findIndex((screenSize) => screenSize.id === screenSizeId);
+ screenSizes[screenSizeIdx][from] = value;
+
+ if (from === 'moreOrEqual' && screenSizeIdx > 0) {
+ screenSizes[screenSizeIdx - 1].lessOrEqual = value - 1;
+ this.screenSizesInputs[screenSizes[screenSizeIdx - 1].id].children[2].children[1].inputElement.value = value - 1;
+ } else if (from === 'lessOrEqual' && screenSizeIdx < screenSizes.length - 1) {
+ screenSizes[screenSizeIdx + 1].moreOrEqual = value + 1;
+ this.screenSizesInputs[screenSizes[screenSizeIdx + 1].id].children[1].children[1].inputElement.value = value + 1;
+ }
+
+ this.value = screenSizes;
+ }
+
+ static parse(value) {
+ return JSON.parse(value);
+ }
+
+ static stringify(value) {
+ return JSON.stringify(value);
+ }
+
+ _normalize(value) {
+ return value;
+ }
+
+ _checkValue(newValue) {
+ // Check that the newValue covers all integers from [0, +inf) without gaps or overlaps
+ const screenSizes = utils.clone(newValue, true);
+
+ if (!Array.isArray(screenSizes) || screenSizes.length === 0) {
+ return se.InputValidationError.SCREEN_SIZES_ERROR;
+ }
+
+ screenSizes.sort((a, b) => a.moreOrEqual - b.moreOrEqual);
+
+ let lastLessOrEqual = -1;
+ for (let i = 0; i < screenSizes.length; i++) {
+ if (screenSizes[i].moreOrEqual !== lastLessOrEqual + 1 || (i !== screenSizes.length - 1 && screenSizes[i].lessOrEqual <= screenSizes[i].moreOrEqual)) {
+ return se.InputValidationError.SCREEN_SIZES_ERROR;
+ }
+
+ lastLessOrEqual = screenSizes[i].lessOrEqual;
+ }
+
+ if (lastLessOrEqual !== -1) {
+ return se.InputValidationError.SCREEN_SIZES_ERROR;
+ }
+
+ return se.InputValidationError.NO_ERROR;
+ }
+
+ getValue() {
+ return this.value;
+ }
+
+ setDisabled(disabled) {
+ this.enabledStatus = !disabled;
+
+ this.addButton.setDisabled(!this.enabledStatus);
+ this._update();
+ }
+
+ repaint() {
+ this.wrapperElement.repaint();
+ }
+
+ _setValue(newValue) {
+ this._update(newValue);
+ newValue.forEach((screenSize) => {
+ if (screenSize.id > this.highestIdUsed) {
+ this.highestIdUsed = screenSize.id;
+ }
+ });
+ }
+
+ _update(newValue, sort = true) {
+ if (newValue) {
+ this.value = newValue;
+ } else {
+ newValue = this.value;
+ }
+
+ Object.entries(this.screenSizesInputs).forEach((screenSizeContainer) => {
+ this.wrapperElement.removeChild(screenSizeContainer[1]);
+ });
+
+ if (sort) {
+ // Sort by moreOrEqual
+ newValue.sort((a, b) => a.moreOrEqual - b.moreOrEqual);
+ }
+
+ const newContainers = [];
+
+ this.screenSizesInputs = {};
+ newValue.forEach((screenSize, i) => {
+ const screenSizeContainer = new StyledElements.Container();
+
+ const nameAddon = new se.Addon({
+ text: utils.gettext('Name:'),
+ title: utils.gettext('Name of the screen size range.')
+ });
+ nameAddon.setDisabled(!this.enabledStatus);
+
+ const nameInput = new se.TextField({
+ name: 'name',
+ initialValue: ('name' in screenSize) ? screenSize.name : 'Default-' + screenSize.id
+ });
+ nameInput.setDisabled(!this.enabledStatus);
+
+ nameInput.addEventListener('change', () => {
+ this.on_valueChange(screenSize.id, 'name', nameInput.getValue());
+ });
+
+ const nameContainer = new se.Container({class: 'se-input-group se-screen-size-name'});
+ nameContainer.appendChild(nameAddon);
+ nameContainer.appendChild(nameInput);
+
+ const fromAddon = new se.Addon({
+ text: utils.gettext('From (px):'),
+ title: utils.gettext('The left limit of the screen size range (in pixels).')
+ });
+ fromAddon.setDisabled(i === 0 || !this.enabledStatus);
+
+ const moreOrEqualVal = (i === 0) ? 0 : screenSize.moreOrEqual;
+ const moreOrEqualInput = new se.NumericField({
+ name: 'moreOrEqual',
+ initialValue: moreOrEqualVal,
+ min: 0,
+ inc: 10
+ });
+
+ if (moreOrEqualVal !== screenSize.moreOrEqual) {
+ this.on_valueChange(screenSize.id, 'moreOrEqual', moreOrEqualVal);
+ screenSize.moreOrEqual = moreOrEqualVal;
+ }
+
+ moreOrEqualInput.setDisabled(i === 0 || !this.enabledStatus);
+ moreOrEqualInput.addEventListener('change', () => {
+ this.on_valueChange(screenSize.id, 'moreOrEqual', moreOrEqualInput.getValue());
+ });
+
+ const fromContainer = new se.Container({class: 'se-input-group se-screen-size-from'});
+ fromContainer.appendChild(fromAddon);
+ fromContainer.appendChild(moreOrEqualInput);
+
+ const toAddon = new se.Addon({
+ text: utils.gettext('To (px):'),
+ title: utils.gettext('The right limit of the screen size range (in pixels). Use -1 for no limit.')
+ });
+ toAddon.setDisabled(i === newValue.length - 1 || !this.enabledStatus);
+
+ const lessOrEqualVal = (i === newValue.length - 1) ? -1 : screenSize.lessOrEqual;
+ const lessOrEqualInput = new se.NumericField({
+ name: 'lessOrEqual',
+ initialValue: lessOrEqualVal,
+ min: -1,
+ inc: 10
+ });
+
+ if (lessOrEqualVal !== screenSize.lessOrEqual) {
+ this.on_valueChange(screenSize.id, 'lessOrEqual', lessOrEqualVal);
+ screenSize.lessOrEqual = lessOrEqualVal;
+ }
+
+ lessOrEqualInput.setDisabled(i === newValue.length - 1 || !this.enabledStatus);
+ lessOrEqualInput.addEventListener('change', () => {
+ this.on_valueChange(screenSize.id, 'lessOrEqual', lessOrEqualInput.getValue());
+ });
+
+ const toContainer = new se.Container({class: 'se-input-group se-screen-size-to'});
+ toContainer.appendChild(toAddon);
+ toContainer.appendChild(lessOrEqualInput);
+
+ const deleteButton = new se.Button({
+ class: 'btn-danger',
+ iconClass: 'fas fa-trash'
+ });
+ const editScreenSizeButton = new se.Button({
+ iconClass: 'fas fa-edit'
+ });
+
+ editScreenSizeButton.addEventListener('click', () => {
+ const err = !(this._checkValue(this.value) === se.InputValidationError.NO_ERROR);
+ this._callEvent('requestSave', () => {
+ if (!err) {
+ Wirecloud.activeWorkspace.view.activeTab.quitEditingInterval();
+ Wirecloud.activeWorkspace.view.activeTab.setEditingInterval(screenSize.moreOrEqual, screenSize.lessOrEqual, screenSize.name);
+ }
+ });
+ });
+
+ deleteButton.setDisabled(newValue.length === 1 || !this.enabledStatus);
+ deleteButton.addEventListener('click', this.on_deleteScreenSize.bind(this, screenSize.id));
+
+ const buttonContainer = new se.Container({class: 'se-input-group se-screen-size-buttons'});
+ buttonContainer.appendChild(editScreenSizeButton);
+ buttonContainer.appendChild(deleteButton);
+
+ screenSizeContainer.appendChild(nameContainer);
+ screenSizeContainer.appendChild(fromContainer);
+ screenSizeContainer.appendChild(toContainer);
+ screenSizeContainer.appendChild(buttonContainer);
+
+ this.screenSizesInputs[screenSize.id] = screenSizeContainer;
+ newContainers.push(screenSizeContainer);
+ });
+
+ for (let i = newContainers.length - 1; i >= 0; i--) {
+ this.wrapperElement.prependChild(newContainers[i]);
+ }
+ }
+
+ _setError(error) {
+
+ }
+
+ insertInto(element) {
+ this.wrapperElement.insertInto(element);
+ }
+
+ };
+
+})(Wirecloud.ui, StyledElements, Wirecloud.Utils);
\ No newline at end of file
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/SidebarLayout.js b/src/wirecloud/platform/static/js/wirecloud/ui/SidebarLayout.js
index b4a4d4c902..3e1284bb3c 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/SidebarLayout.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/SidebarLayout.js
@@ -79,7 +79,8 @@
constructor(dragboard, options) {
options = utils.merge({
- position: "left"
+ position: "left",
+ active: false
}, options);
if (POSITIONS.indexOf(options.position) === -1) {
@@ -97,7 +98,7 @@
);
privates.set(this, {
- active: false
+ active: options.active
});
Object.defineProperties(this, {
@@ -115,7 +116,7 @@
this.handle = document.createElement("div");
this.handleicon = document.createElement("i");
- this.handleicon.className = "fas fa-caret-" + OPPOSITE[this.position];
+ this.handleicon.className = "fas fa-caret-" + (this.active ? ICON[this.position] : OPPOSITE[this.position]);
this.handle.appendChild(this.handleicon);
this.handle.addEventListener("click", () => {
this.active = !this.active;
@@ -136,6 +137,10 @@
return result;
}
+ removeHandle() {
+ this.handle.remove();
+ }
+
removeWidget(widget, affectsDragboard) {
const result = super.removeWidget(widget, affectsDragboard);
@@ -148,11 +153,11 @@
return result;
}
- adaptColumnOffset(size) {
+ adaptColumnOffset(size, width) {
if (this.vertical) {
return new Wirecloud.ui.MultiValuedSize(0, 0);
} else {
- return super.adaptColumnOffset(size);
+ return super.adaptColumnOffset(size, width);
}
}
@@ -172,11 +177,11 @@
}
}
- adaptWidth(size) {
+ adaptWidth(size, width) {
if (this.vertical) {
- return new Wirecloud.ui.MultiValuedSize(this.getWidth(), 1);
+ return new Wirecloud.ui.MultiValuedSize(width || this.getWidth(), 1);
} else {
- return super.adaptWidth(size);
+ return super.adaptWidth(size, width);
}
}
@@ -205,7 +210,7 @@
} else {
offset = 0;
}
- element.style.left = this.getColumnOffset(widget.position, true);
+ element.style.left = this.getColumnOffset(widget.position, null, true);
element.style.right = "";
if (this.position === "top") {
element.style.top = offset + "px";
@@ -241,6 +246,10 @@
}
}
+ isActive() {
+ return this.active;
+ }
+
}
})(Wirecloud.ui, Wirecloud.Utils);
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/SmartColumnLayout.js b/src/wirecloud/platform/static/js/wirecloud/ui/SmartColumnLayout.js
index e433475b56..e37cba0605 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/SmartColumnLayout.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/SmartColumnLayout.js
@@ -48,7 +48,7 @@
for (const key in this.widgets) {
keys.push(key);
const widget = this.widgets[key];
- modified = modified || this.moveSpaceUp(this._buffers.base, widget);
+ modified = modified || (this.moveSpaceUp(this._buffers.base, widget).size > 0);
}
if (modified) {
// save these changes in the server side
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/WidgetView.js b/src/wirecloud/platform/static/js/wirecloud/ui/WidgetView.js
index 729cd62f30..3fcd1d9496 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/WidgetView.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/WidgetView.js
@@ -104,6 +104,89 @@
});
};
+ const getUpdatedLayoutConfigurations = function getUpdatedLayoutConfigurations(newLayout) {
+ const layoutConfigurations = this.model.layoutConfigurations;
+
+ const priv = privates.get(this);
+ const tabChange = priv.tab !== newLayout.dragboard.tab;
+ const dragboardChange = this.layout.dragboard !== newLayout.dragboard || tabChange;
+
+ layoutConfigurations.forEach((layoutConfiguration) => {
+ if (this.layout instanceof Wirecloud.ui.FullDragboardLayout || newLayout instanceof Wirecloud.ui.FullDragboardLayout) {
+ // Skip if coming from or going to a FullDragboardLayout
+ return;
+ }
+
+ const newLayoutConfiguration = layoutConfiguration;
+
+ let avgScreenSize = layoutConfiguration.lessOrEqual + (layoutConfiguration.moreOrEqual - layoutConfiguration.lessOrEqual) / 2;
+ if (layoutConfiguration.lessOrEqual === -1) {
+ avgScreenSize = layoutConfiguration.moreOrEqual;
+ }
+
+ const layout = (this.layout instanceof Wirecloud.ui.FullDragboardLayout) ? this.previousLayout : this.layout;
+ const previousWidth = (layoutConfiguration.relwidth) ? layout.fromHCellsToPixels(layoutConfiguration.width, avgScreenSize) : layoutConfiguration.width;
+ const previousHeight = (layoutConfiguration.relheight) ? layout.fromVCellsToPixels(layoutConfiguration.height) : layoutConfiguration.height;
+
+ if (newLayout instanceof Wirecloud.ui.FreeLayout) {
+ Wirecloud.Utils.merge(newLayoutConfiguration, {
+ relwidth: true,
+ width: newLayout.adaptWidth(previousWidth + 'px', avgScreenSize).inLU,
+ relheight: false,
+ height: newLayout.adaptHeight(previousHeight + 'px').inPixels
+ });
+ } else {
+ Wirecloud.Utils.merge(newLayoutConfiguration, {
+ relwidth: true,
+ width: newLayout.adaptWidth(previousWidth + 'px', avgScreenSize).inLU,
+ relheight: true,
+ height: newLayout.adaptHeight(previousHeight + 'px').inLU
+ });
+ }
+
+ if (dragboardChange && !(newLayout instanceof Wirecloud.ui.FreeLayout)) {
+ const matrix = Wirecloud.Utils.getLayoutMatrix(newLayout, newLayout.dragboard.widgets, avgScreenSize);
+ const newposition = newLayout._searchFreeSpace2(newLayoutConfiguration.width, newLayoutConfiguration.height, matrix);
+ newposition.relx = true;
+ newposition.rely = true;
+ newposition.anchor = "top-left";
+ Wirecloud.Utils.merge(newLayoutConfiguration, newposition);
+ } else {
+ const position = {
+ x: layoutConfiguration.left,
+ y: layoutConfiguration.top,
+ z: layoutConfiguration.zIndex,
+ relx: layoutConfiguration.relx,
+ rely: layoutConfiguration.rely,
+ anchor: layoutConfiguration.anchor
+ };
+
+ const oldPositionPixels = {
+ x: layout.getColumnOffset(position, avgScreenSize),
+ y: layout.getRowOffset(position)
+ };
+
+ if (newLayout instanceof Wirecloud.ui.FreeLayout) {
+ Wirecloud.Utils.merge(newLayoutConfiguration, {
+ left: newLayout.adaptColumnOffset(oldPositionPixels.x + 'px', avgScreenSize).inLU,
+ top: newLayout.adaptRowOffset(oldPositionPixels.y + 'px').inPixels,
+ relx: true,
+ rely: false,
+ anchor: "top-left"
+ });
+ } else {
+ Wirecloud.Utils.merge(newLayoutConfiguration, {
+ left: newLayout.adaptColumnOffset(oldPositionPixels.x + 'px', avgScreenSize).inLU,
+ top: newLayout.adaptRowOffset(oldPositionPixels.y + 'px').inLU,
+ relx: true,
+ rely: true,
+ anchor: "top-left"
+ });
+ }
+ }
+ });
+ };
+
// =========================================================================
// EVENT HANDLERS
// =========================================================================
@@ -166,6 +249,11 @@
},
set: function (new_layout) {
privates.get(this).layout = new_layout;
+ const fulldragboard = new_layout instanceof Wirecloud.ui.FullDragboardLayout;
+ this.model.setLayoutFulldragboard(fulldragboard);
+ if (!fulldragboard && new_layout != null) {
+ this.model.setLayoutIndex(new_layout.dragboard.layouts.indexOf(new_layout));
+ }
update.call(this);
}
},
@@ -362,10 +450,14 @@
} else {
layout = tab.dragboard.layouts[model.layout];
}
- layout.addWidget(this, true);
// Init minimized and title visibility options
- this.setMinimizeStatus(model.minimized, false, true);
+ let wrapperHeight = this.wrapperElement.offsetHeight;
+ // On first load, the height is 0. This is a workaround to avoid this issue and set the correct height to the widget
+ wrapperHeight = (wrapperHeight === 0) ? 42 : wrapperHeight;
+ this._setMinimizeStatusStyle(model.minimized, layout, wrapperHeight);
+
+ layout.addWidget(this, true);
this.model.logManager.addEventListener('newentry', on_add_log.bind(this));
@@ -413,6 +505,23 @@
* @param newStatus new minimize status of the iwidget
*/
setMinimizeStatus(newStatus, persistence, reserveSpace) {
+ const oldHeight = this.shape.height;
+
+ this._setMinimizeStatusStyle(newStatus, this.layout);
+ this.model.setLayoutMinimizedStatus(this.minimized);
+
+ // Notify resize event
+ reserveSpace = reserveSpace != null ? reserveSpace : true;
+ if (reserveSpace) {
+ const persist = persistence != null ? persistence : true;
+ this.layout._notifyResizeEvent(this, this.shape.width, oldHeight, this.shape.width, this.shape.height, false, false, persist, reserveSpace);
+ }
+
+ update.call(this);
+ return this;
+ }
+
+ _setMinimizeStatusStyle(newStatus, layout, height = undefined) {
const priv = privates.get(this);
// Sanitize newStatus value
@@ -422,7 +531,6 @@
return this;
}
- const oldHeight = this.shape.height;
priv.minimized = newStatus;
if (this.minimized) {
@@ -430,9 +538,12 @@
this.minimizebutton.replaceIconClassName("fa-minus", "fa-plus");
this.wrapperElement.classList.add('wc-minimized-widget');
this.wrapperElement.style.height = "";
+
+ const wrapperHeight = (height) ? height : this.wrapperElement.offsetHeight;
+
priv.minimized_shape = {
relheight: true,
- height: this.layout.adaptHeight(this.wrapperElement.offsetHeight + 'px').inLU,
+ height: layout.adaptHeight(wrapperHeight + 'px').inLU,
relwidth: priv.shape.relwidth,
width: priv.shape.width
};
@@ -441,7 +552,7 @@
this.minimizebutton.setTitle(utils.gettext("Minimize"));
this.minimizebutton.replaceIconClassName("fa-plus", "fa-minus");
this.wrapperElement.classList.remove('wc-minimized-widget');
- this.wrapperElement.style.height = this.layout.getHeightInPixels(priv.shape.height) + 'px';
+ this.wrapperElement.style.height = layout.getHeightInPixels(priv.shape.height) + 'px';
priv.minimized_shape = null;
}
@@ -450,16 +561,6 @@
heightInPixels: this.model.wrapperElement.offsetHeight,
visible: !priv.minimized && !this.tab.hidden && !this.tab.workspace.hidden
});
-
- // Notify resize event
- reserveSpace = reserveSpace != null ? reserveSpace : true;
- if (reserveSpace) {
- const persist = persistence != null ? persistence : true;
- this.layout._notifyResizeEvent(this, this.shape.width, oldHeight, this.shape.width, this.shape.height, false, false, persist, reserveSpace);
- }
-
- update.call(this);
- return this;
}
/**
@@ -489,8 +590,14 @@
return this.model.setPermissions(changes, persistence);
}
- setPosition(position) {
+ setPosition(position, updateModel = true) {
utils.update(privates.get(this).position, position);
+
+ if (updateModel) {
+ this.model.setPosition(this.position);
+ this.model.setLayoutPosition(this.position);
+ }
+
if (this.layout != null) {
update_position.call(this);
notify_position.call(this);
@@ -498,12 +605,17 @@
return this;
}
- setShape(shape, resizeLeftSide, resizeTopSide, persist) {
+ setShape(shape, resizeLeftSide, resizeTopSide, persist, updateModel = true) {
const oldWidth = this.shape.width;
const oldHeight = this.shape.height;
utils.update(privates.get(this).shape, shape);
+ if (updateModel) {
+ this.model.setShape(privates.get(this).shape);
+ this.model.setLayoutShape(privates.get(this).shape);
+ }
+
if (this.layout == null) {
return;
}
@@ -600,9 +712,12 @@
const tabChange = priv.tab !== newLayout.dragboard.tab;
const dragboardChange = this.layout.dragboard !== newLayout.dragboard || tabChange;
const oldLayout = this.layout;
+ getUpdatedLayoutConfigurations.call(this, newLayout);
const affectedWidgetsRemoving = oldLayout.removeWidget(this, dragboardChange);
+ const updateModel = !(newLayout instanceof Wirecloud.ui.FullDragboardLayout);
+
if (oldLayout instanceof Wirecloud.ui.FullDragboardLayout) {
this.setShape(this.previousShape);
} else if (newLayout instanceof Wirecloud.ui.FreeLayout) {
@@ -618,7 +733,7 @@
width: newLayout.adaptWidth(previousWidth + 'px').inLU,
relheight: true,
height: newLayout.adaptHeight(previousHeight + 'px').inLU
- });
+ }, false, false, false, updateModel);
}
if (dragboardChange && !(newLayout instanceof Wirecloud.ui.FreeLayout)) {
@@ -649,7 +764,7 @@
relx: true,
rely: true,
anchor: "top-left"
- });
+ }, updateModel);
}
}
@@ -664,10 +779,10 @@
this.model.changeTab(newLayout.dragboard.tab.model).then(() => {
affectedWidgetsAdding.add(this.id);
if (dragboardChange) {
- oldLayout.dragboard.update([...affectedWidgetsRemoving]);
- newLayout.dragboard.update([...affectedWidgetsAdding]);
+ oldLayout.dragboard.update([...affectedWidgetsRemoving], true);
+ newLayout.dragboard.update([...affectedWidgetsAdding], true);
} else {
- newLayout.dragboard.update([...utils.setupdate(affectedWidgetsAdding, affectedWidgetsRemoving)]);
+ newLayout.dragboard.update([...utils.setupdate(affectedWidgetsAdding, affectedWidgetsRemoving)], true);
}
});
}
@@ -699,29 +814,68 @@
return this;
}
- toJSON() {
+ updateWindowSize(windowSize) {
+ this.model.updateWindowSize(windowSize);
+
+ const newPos = {
+ x: this.model.position.x,
+ y: this.model.position.y,
+ z: this.model.position.z,
+ relx: this.model.position.relx,
+ rely: this.model.position.rely,
+ anchor: this.model.position.anchor
+ };
+
+ const newShape = {
+ relwidth: this.model.shape.relwidth,
+ width: this.model.shape.width,
+ relheight: this.model.shape.relheight,
+ height: this.model.shape.height
+ };
+
+ this.layout.removeWidgetEventListeners(this);
+ if ('removeHandle' in this.layout) {
+ this.layout.removeHandle();
+ }
+ this.layout = null;
+
+ this.setPosition(newPos, false);
+ this.setShape(newShape, false, false, false, false);
+
+ if (this.model.fulldragboard) {
+ this.previousPosition = this.position;
+ this.previousShape = this.shape;
+ this.previousLayout = this.tab.dragboard.layouts[this.model.layout];
+
+ this._setMinimizeStatusStyle(this.model.minimized, this.tab.dragboard.fulldragboardLayout);
+ this.tab.dragboard.fulldragboardLayout.addWidget(this, false);
+ } else {
+ // Remove wc-widget-fulldragboard class
+ this.wrapperElement.classList.remove('wc-widget-fulldragboard');
+ this._setMinimizeStatusStyle(this.model.minimized, this.tab.dragboard.layouts[this.model.layout]);
+ this.tab.dragboard.layouts[this.model.layout].addWidget(this, false);
+ }
+ }
+
+ toJSON(action = 'update', allLayoutConfigurations = false) {
const fulldragboard = this.layout === this.tab.dragboard.fulldragboardLayout;
- const shape = fulldragboard ? this.previousShape : this.shape;
- const position = fulldragboard ? this.previousPosition : this.position;
+
+ // We keep all or only the current layout configuration and then we clone it to add the action
+ const configs = this.model.layoutConfigurations.reduce((result, layoutConfig) => {
+ if (allLayoutConfigurations || layoutConfig.id === this.model.currentLayoutConfig.id) {
+ const config = StyledElements.Utils.clone(layoutConfig, true);
+ config.action = action;
+ result.push(config);
+ }
+
+ return result;
+ }, []);
+
return {
id: this.id,
tab: this.tab.id,
layout: this.tab.dragboard.layouts.indexOf(fulldragboard ? this.previousLayout : this.layout),
- // position
- anchor: position.anchor,
- relx: position.relx,
- rely: position.rely,
- top: position.y,
- left: position.x,
- zIndex: position.z,
- // shape
- minimized: this.minimized,
- relwidth: shape.relwidth,
- width: shape.width,
- relheight: shape.relheight,
- height: privates.get(this).shape.height,
- fulldragboard: fulldragboard,
- titlevisible: this.titlevisible
+ layoutConfigurations: configs
};
}
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceTabView.js b/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceTabView.js
index 2e7f4233e2..c60d61c070 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceTabView.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceTabView.js
@@ -61,6 +61,10 @@
// =========================================================================
const on_change_preferences = function on_change_preferences(preferences, modifiedValues) {
+ if ('screenSizes' in modifiedValues) {
+ this.dragboard._updateScreenSizes();
+ }
+
if ('baselayout' in modifiedValues) {
this.dragboard._updateBaseLayout();
}
@@ -110,6 +114,30 @@
this.prefbutton.enabled = this.workspace.editing;
};
+ const get_editing_interval_name = function get_editing_interval_name(width) {
+ const screenSizes = this.model.preferences.get('screenSizes');
+ let editingIntervalName = null;
+ for (let i = 0; i < screenSizes.length; i++) {
+ if (screenSizes[i].moreOrEqual <= width && (screenSizes[i].lessOrEqual === -1 || screenSizes[i].lessOrEqual >= width)) {
+ editingIntervalName = screenSizes[i].name;
+ break;
+ }
+ }
+
+ return editingIntervalName;
+ }
+
+ const on_windowresize = function on_windowresize() {
+ if (this.dragboard.customWidth === -1) {
+ this.dragboard.updateWidgetScreenSize(window.innerWidth);
+
+ if (this.workspace.activeTab === this) {
+ this.editingIntervalName = get_editing_interval_name.call(this, window.innerWidth);
+ this.workspace.updateEditingInterval(this.getEditingIntervalElement());
+ }
+ }
+ };
+
ns.WorkspaceTabView = class WorkspaceTabView extends se.Tab {
constructor(id, notebook, options) {
@@ -126,7 +154,8 @@
on_changetab: on_changetab.bind(this),
on_addwidget: on_addwidget.bind(this),
on_removetab: on_removetab.bind(this),
- on_removewidget: on_removewidget.bind(this)
+ on_removewidget: on_removewidget.bind(this),
+ on_windowresize: on_windowresize.bind(this)
};
privates.set(this, priv);
@@ -221,6 +250,7 @@
}
this.dragboard = new ns.WorkspaceTabViewDragboard(this);
+ this.updateEditingIntervalName();
this.initialMessage = (new se.GUIBuilder()).parse(Wirecloud.currentTheme.templates['wirecloud/workspace/empty_tab_message'], {
button: this.workspace.buildAddWidgetButton.bind(this.workspace),
@@ -236,6 +266,7 @@
this.model.addEventListener('addwidget', priv.on_addwidget);
this.model.addEventListener('remove', priv.on_removetab);
this.model.addEventListener('removewidget', priv.on_removewidget);
+ window.addEventListener('resize', priv.on_windowresize.bind(this));
}
/**
@@ -246,63 +277,87 @@
* resolved, or an Error if rejected.
*/
createWidget(resource, options) {
+ const layoutConfigs = utils.clone(this.model.preferences.get('screenSizes'), true);
+
options = utils.merge({
commit: true,
- height: resource.default_height,
- layout: this.model.preferences.get('initiallayout') === "Free" ? 1 : 0,
- width: resource.default_width,
- anchor: 'top-left',
- relx: true,
- rely: false,
- relwidth: true,
- relheight: false
+ layout: this.model.preferences.get('initiallayout') === "Free" ? 1 : 0
}, options);
- const layouts = [
- this.dragboard.baseLayout,
- this.dragboard.freeLayout,
- this.dragboard.leftLayout,
- this.dragboard.rightLayout
- ];
- const layout = layouts[options.layout];
-
- if (options.left != null) {
- if (layout !== this.dragboard.freeLayout || options.relx) {
- options.left = layout.adaptColumnOffset(options.left).inLU;
+ layoutConfigs.forEach((layoutConfig) => {
+ Wirecloud.Utils.merge(layoutConfig, {
+ width: resource.default_width,
+ anchor: 'top-left',
+ relx: true,
+ rely: false,
+ relwidth: true,
+ relheight: false,
+ titlevisible: true,
+ height: resource.default_height
+ });
+
+ let avgScreenSize = layoutConfig.lessOrEqual + (layoutConfig.moreOrEqual - layoutConfig.lessOrEqual) / 2;
+ if (layoutConfig.lessOrEqual === -1) {
+ avgScreenSize = layoutConfig.moreOrEqual;
+ }
+
+ if (layoutConfig.length === 0) {
+ avgScreenSize = window.innerWidth;
+ }
+
+ if (window.innerWidth >= layoutConfig.moreOrEqual && (layoutConfig.lessOrEqual === -1 || window.innerWidth <= layoutConfig.lessOrEqual)) {
+ avgScreenSize = window.innerWidth;
+ }
+
+ const layouts = [
+ this.dragboard.baseLayout,
+ this.dragboard.freeLayout,
+ this.dragboard.leftLayout,
+ this.dragboard.rightLayout
+ ];
+ const layout = layouts[options.layout];
+
+ if (layoutConfig.left != null) {
+ if (layout !== this.dragboard.freeLayout || layoutConfig.relx) {
+ layoutConfig.left = layout.adaptColumnOffset(layoutConfig.left, avgScreenSize).inLU;
+ } else {
+ layoutConfig.left = layout.adaptColumnOffset(layoutConfig.left, avgScreenSize).inPixels;
+ }
+ }
+ if (layoutConfig.top != null) {
+ if (layout !== this.dragboard.freeLayout || layoutConfig.rely) {
+ layoutConfig.top = layout.adaptRowOffset(layoutConfig.top).inLU;
+ } else {
+ layoutConfig.top = layout.adaptRowOffset(layoutConfig.top).inPixels;
+ }
+ }
+ if (layout !== this.dragboard.freeLayout || layoutConfig.relheight) {
+ layoutConfig.height = clean_number(layout.adaptHeight(layoutConfig.height).inLU, 1);
} else {
- options.left = layout.adaptColumnOffset(options.left).inPixels;
+ layoutConfig.height = clean_number(layout.adaptHeight(layoutConfig.height).inPixels, 1);
}
- }
- if (options.top != null) {
- if (layout !== this.dragboard.freeLayout || options.rely) {
- options.top = layout.adaptRowOffset(options.top).inLU;
+ if (layout !== this.dragboard.freeLayout || layoutConfig.relwidth) {
+ layoutConfig.width = clean_number(layout.adaptWidth(layoutConfig.width, avgScreenSize).inLU, 1, layout.columns);
} else {
- options.top = layout.adaptRowOffset(options.top).inPixels;
+ layoutConfig.width = clean_number(layout.adaptWidth(layoutConfig.width, avgScreenSize).inPixels, 1);
}
- }
- if (layout !== this.dragboard.freeLayout || options.relheight) {
- options.height = clean_number(layout.adaptHeight(options.height).inLU, 1);
- } else {
- options.height = clean_number(layout.adaptHeight(options.height).inPixels, 1);
- }
- if (layout !== this.dragboard.freeLayout || options.relwidth) {
- options.width = clean_number(layout.adaptWidth(options.width).inLU, 1, layout.columns);
- } else {
- options.width = clean_number(layout.adaptWidth(options.width).inPixels, 1);
- }
- if (options.left == null || options.top == null) {
- if (options.refposition && "searchBestPosition" in layout) {
- layout.searchBestPosition(options);
- } else if ("_searchFreeSpace" in layout) {
- const position = layout._searchFreeSpace(options.width, options.height);
- options.left = position.x;
- options.top = position.y;
- } else {
- options.left = 0;
- options.top = 0;
+ if (layoutConfig.left == null || layoutConfig.top == null) {
+ if (options.refposition && "searchBestPosition" in layout) {
+ layout.searchBestPosition(options, layoutConfig, avgScreenSize);
+ } else if ("_searchFreeSpace2" in layout) {
+ const matrix = Wirecloud.Utils.getLayoutMatrix(layout, layout.dragboard.widgets, avgScreenSize);
+ const position = layout._searchFreeSpace2(layoutConfig.width, layoutConfig.height, matrix);
+ layoutConfig.left = position.x;
+ layoutConfig.top = position.y;
+ } else {
+ layoutConfig.left = 0;
+ layoutConfig.top = 0;
+ }
}
- }
+ });
+
+ options.layoutConfigurations = layoutConfigs;
if (!options.commit) {
return this.findWidget(this.model.createWidget(resource, options).id);
@@ -315,6 +370,53 @@
);
}
+ getEditingIntervalElement() {
+ let text = "";
+ if (this.dragboard.customWidth !== -1) {
+ text = utils.interpolate(utils.gettext("(Overriden) Editing for screen size %(name)s"), {name: this.editingIntervalName});
+ } else {
+ text = utils.interpolate(utils.gettext("Editing for screen size %(name)s"), {name: this.editingIntervalName});
+ }
+
+ const div = document.createElement('div');
+ const span = document.createElement('span');
+ span.textContent = text;
+ div.appendChild(span);
+
+ if (this.dragboard.customWidth !== -1) {
+ const a = document.createElement('a');
+ a.className = 'far fa-times-circle wc-editing-interval-close';
+ a.href = '#';
+ a.addEventListener('click', (e) => {
+ e.preventDefault();
+ this.quitEditingInterval();
+ });
+ div.appendChild(a);
+ }
+
+ return div;
+ }
+
+ setEditingInterval(moreOrEqual, lessOrEqual, name) {
+ let avgScreenSize = Math.floor((moreOrEqual + lessOrEqual) / 2);
+ if (lessOrEqual === -1) {
+ avgScreenSize = moreOrEqual;
+ }
+ this.dragboard.setCustomDragboardWidth(avgScreenSize);
+ this.editingIntervalName = name;
+ this.workspace.updateEditingInterval(this.getEditingIntervalElement());
+ }
+
+ quitEditingInterval() {
+ this.dragboard.restoreDragboardWidth();
+ this.editingIntervalName = get_editing_interval_name.call(this, window.innerWidth);
+ this.workspace.updateEditingInterval(this.getEditingIntervalElement());
+ }
+
+ updateEditingIntervalName() {
+ this.editingIntervalName = get_editing_interval_name.call(this, (this.dragboard.customWidth === -1) ? window.innerWidth : this.dragboard.customWidth);
+ }
+
/**
* Highlights this tab
*/
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceTabViewDragboard.js b/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceTabViewDragboard.js
index f4aef2ce95..a257eb86da 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceTabViewDragboard.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceTabViewDragboard.js
@@ -20,7 +20,7 @@
*
*/
-/* globals CSSPrimitiveValue, Wirecloud */
+/* globals Wirecloud */
(function (ns, utils) {
@@ -37,7 +37,7 @@
this.widgets.forEach((widget, index) => {
widget.setPosition({
z: index
- });
+ }, false);
});
};
@@ -57,15 +57,9 @@
// TODO or initialized with the scroll bar's real with?
this.dragboardWidth = 800;
this.dragboardHeight = 600;
+ this.customWidth = -1;
this.widgetToMove = null;
- this.painted = false;
- this.fulldragboardLayout = new Wirecloud.ui.FullDragboardLayout(this);
- this.baseLayout = this._buildLayoutFromPreferences();
- this.freeLayout = new Wirecloud.ui.FreeLayout(this);
- this.leftLayout = new Wirecloud.ui.SidebarLayout(this);
- this.rightLayout = new Wirecloud.ui.SidebarLayout(this, {position: "right"});
- this.bottomLayout = new Wirecloud.ui.SidebarLayout(this, {position: "bottom"});
- this.topLayout = new Wirecloud.ui.SidebarLayout(this, {position: "top"});
+ this.resetLayouts();
Object.defineProperties(this, {
layouts: {
get: () => {
@@ -189,6 +183,14 @@
return this;
}
+ refreshPositionBasedOnZIndex() {
+ // Reorder widgets based on their z-index. This is used when the screen size changes
+ // and the widgets are not in the correct order.
+ this.widgets.sort((a, b) => {
+ return a.position.z - b.position.z;
+ });
+ }
+
paint() {
if (this.painted) {
@@ -210,10 +212,41 @@
this.painted = true;
}
+ resetLayouts() {
+ this.painted = false;
+ this.fulldragboardLayout = new Wirecloud.ui.FullDragboardLayout(this);
+ this.baseLayout = this._buildLayoutFromPreferences();
+ this.freeLayout = new Wirecloud.ui.FreeLayout(this);
+ this.leftLayout = new Wirecloud.ui.SidebarLayout(this, {active: (this.leftLayout) ? this.leftLayout.isActive() : false});
+ this.rightLayout = new Wirecloud.ui.SidebarLayout(this, {position: "right", active: (this.rightLayout) ? this.rightLayout.isActive() : false});
+ this.bottomLayout = new Wirecloud.ui.SidebarLayout(this, {position: "bottom", active: (this.bottomLayout) ? this.bottomLayout.isActive() : false});
+ this.topLayout = new Wirecloud.ui.SidebarLayout(this, {position: "top", active: (this.topLayout) ? this.topLayout.isActive() : false});
+ }
+
+ updateWidgetScreenSize(screenSize) {
+ this.resetLayouts();
+ this.widgets.forEach((widget) => {
+ widget.updateWindowSize(screenSize);
+ });
+ this.refreshPositionBasedOnZIndex();
+ this.paint();
+ }
+
+ updateWidgetScreenSizeWithId(id) {
+ const screenSize = this.tab.model.preferences.get('screenSizes').find((screenSize) => screenSize.id === id);
+ if (screenSize != null) {
+ let size = screenSize.moreOrEqual + (screenSize.lessOrEqual - screenSize.moreOrEqual) / 2;
+ if (screenSize.lessOrEqual === -1) {
+ size = screenSize.moreOrEqual;
+ }
+ this.updateWidgetScreenSize(size);
+ }
+ }
+
/**
*
*/
- update(ids) {
+ update(ids, allLayoutConfigurations) {
if (this.tab.workspace.editing === false) {
return Promise.resolve(this);
}
@@ -233,11 +266,16 @@
return Promise.resolve(this);
}
+ // We convert the content to JSON
+ const JSONcontent = content.map((widget) => {
+ return widget.toJSON('update', allLayoutConfigurations);
+ });
+
return Wirecloud.io.makeRequest(url, {
method: 'PUT',
requestHeaders: {'Accept': 'application/json'},
contentType: 'application/json',
- postBody: JSON.stringify(content)
+ postBody: JSON.stringify(JSONcontent)
}).then((response) => {
if ([204, 401, 403, 404, 500].indexOf(response.status) === -1) {
return Promise.reject(utils.gettext("Unexpected response from server"));
@@ -268,7 +306,7 @@
}
/**
- * TODO, used by WorkspaceTabView to when the user changes the preferences
+ * Used by WorkspaceTabView to when the user changes the preferences
* for the base layout.
*/
_updateBaseLayout() {
@@ -277,8 +315,147 @@
newBaseLayout.initialize();
// Change our base layout
- this.baseLayout.moveTo(newBaseLayout);
+ const oldBaseLayout = this.baseLayout;
this.baseLayout = newBaseLayout;
+ oldBaseLayout.moveTo(newBaseLayout);
+ }
+
+ /**
+ * Used by WorkspaceTabView to when the user changes the preferences
+ * for the screen sizes.
+ */
+ _updateScreenSizes() {
+ if (this.customWidth !== -1) {
+ this.tab.quitEditingInterval();
+ }
+
+ const updatedScreenSizes = this.tab.model.preferences.get('screenSizes');
+ const reqData = [];
+
+ this.resetLayouts();
+ this.widgets.forEach((widget) => {
+ const currentConfigs = widget.model.layoutConfigurations;
+
+ const widgetReqData = {
+ id: widget.model.id,
+ layoutConfigurations: []
+ };
+
+ let indexesToDelete = [];
+ currentConfigs.forEach((config, i) => {
+ if (updatedScreenSizes.findIndex((screenSize) => screenSize.id === config.id) === -1) {
+ widgetReqData.layoutConfigurations.push({
+ id: config.id,
+ action: 'delete'
+ });
+ indexesToDelete.push(i);
+ }
+ });
+
+ indexesToDelete.sort((a, b) => b - a);
+
+ if (indexesToDelete.length !== currentConfigs.length) {
+ indexesToDelete.forEach((index) => {
+ currentConfigs.splice(index, 1);
+ });
+ indexesToDelete = [];
+ }
+
+ const lastExistingScreenSize = currentConfigs[currentConfigs.length - 1];
+ updatedScreenSizes.forEach((screenSize) => {
+ const currentConfig = currentConfigs.find((config) => config.id === screenSize.id);
+ if (!currentConfig) {
+ const newConfig = {
+ id: screenSize.id,
+ anchor: lastExistingScreenSize.anchor,
+ width: lastExistingScreenSize.width,
+ height: lastExistingScreenSize.height,
+ relwidth: lastExistingScreenSize.relwidth,
+ relheight: lastExistingScreenSize.relheight,
+ left: lastExistingScreenSize.left,
+ top: lastExistingScreenSize.top,
+ zIndex: lastExistingScreenSize.zIndex,
+ relx: lastExistingScreenSize.relx,
+ rely: lastExistingScreenSize.rely,
+ titlevisible: lastExistingScreenSize.titlevisible,
+ fulldragboard: lastExistingScreenSize.fulldragboard,
+ minimized: lastExistingScreenSize.minimized,
+ moreOrEqual: screenSize.moreOrEqual,
+ lessOrEqual: screenSize.lessOrEqual
+ };
+
+ currentConfigs.push(newConfig);
+
+ const reqNewConfig = utils.clone(newConfig);
+ reqNewConfig.action = 'update';
+
+ widgetReqData.layoutConfigurations.push(reqNewConfig);
+ } else {
+ let requiresUpdate = false;
+ const updatedConfig = {
+ id: screenSize.id,
+ };
+
+ if (currentConfig.moreOrEqual !== screenSize.moreOrEqual) {
+ updatedConfig.moreOrEqual = currentConfig.moreOrEqual = screenSize.moreOrEqual;
+ requiresUpdate = true;
+ }
+
+ if (currentConfig.lessOrEqual !== screenSize.lessOrEqual) {
+ updatedConfig.lessOrEqual = currentConfig.lessOrEqual = screenSize.lessOrEqual;
+ requiresUpdate = true;
+ }
+
+ if (requiresUpdate) {
+ updatedConfig.action = 'update';
+ widgetReqData.layoutConfigurations.push(updatedConfig);
+ }
+ }
+ });
+
+ indexesToDelete.forEach((index) => {
+ currentConfigs.splice(index, 1);
+ });
+
+ // After modifying all the layoutConfigurations, we need to sort them by moreOrEqual and call the updateWindowSize method
+ // to refresh the current layout
+ currentConfigs.sort((a, b) => a.moreOrEqual - b.moreOrEqual);
+ widget.updateWindowSize(window.innerWidth);
+
+ reqData.push(widgetReqData);
+ });
+ this.refreshPositionBasedOnZIndex();
+ this.paint();
+
+ const url = Wirecloud.URLs.IWIDGET_COLLECTION.evaluate({
+ workspace_id: this.tab.workspace.model.id,
+ tab_id: this.tab.model.id
+ });
+
+ return Wirecloud.io.makeRequest(url, {
+ method: 'PUT',
+ requestHeaders: {'Accept': 'application/json'},
+ contentType: 'application/json',
+ postBody: JSON.stringify(reqData)
+ }).then((response) => {
+ if ([204, 401, 403, 404, 500].indexOf(response.status) === -1) {
+ return Promise.reject(utils.gettext("Unexpected response from server"));
+ } else if ([401, 403, 404, 500].indexOf(response.status) !== -1) {
+ return Promise.reject(Wirecloud.GlobalLogManager.parseErrorResponse(response));
+ }
+
+ return Promise.resolve(this);
+ });
+ }
+
+ setCustomDragboardWidth(width) {
+ this.customWidth = width;
+ this.updateWidgetScreenSize(width);
+ }
+
+ restoreDragboardWidth() {
+ this.customWidth = -1;
+ this.updateWidgetScreenSize(window.innerWidth);
}
_addWidget(widget) {
@@ -334,11 +511,11 @@
}
/**
- * @private
- *
* This function is slow. Please, only call it when really necessary.
*
* Updates the width and height info for this dragboard.
+ *
+ * @private
*/
_recomputeSize() {
const cssStyle = document.defaultView.getComputedStyle(this.tab.wrapperElement, null);
@@ -347,23 +524,23 @@
}
// Read padding values
- this.topMargin = cssStyle.getPropertyCSSValue("padding-top").getFloatValue(CSSPrimitiveValue.CSS_PX);
- this.bottomMargin = cssStyle.getPropertyCSSValue("padding-bottom").getFloatValue(CSSPrimitiveValue.CSS_PX);
- this.leftMargin = cssStyle.getPropertyCSSValue("padding-left").getFloatValue(CSSPrimitiveValue.CSS_PX);
- this.rightMargin = cssStyle.getPropertyCSSValue("padding-right").getFloatValue(CSSPrimitiveValue.CSS_PX);
+ this.topMargin = parseFloat(cssStyle.getPropertyValue("padding-top"));
+ this.bottomMargin = parseFloat(cssStyle.getPropertyValue("padding-bottom"));
+ this.leftMargin = parseFloat(cssStyle.getPropertyValue("padding-left"));
+ this.rightMargin = parseFloat(cssStyle.getPropertyValue("padding-right"));
this.dragboardWidth = parseInt(this.tab.wrapperElement.offsetWidth, 10) - this.leftMargin - this.rightMargin;
this.dragboardHeight = parseInt(this.tab.wrapperElement.parentNode.clientHeight, 10) - this.topMargin - this.bottomMargin;
}
/**
- * @private
- *
* This method forces recomputing of the iWidgets' sizes.
*
* @param {boolean} widthChanged
* @param {boolean} heightChanged
- */
+ *
+ * @private
+ */
_updateIWidgetSizes(widthChanged, heightChanged) {
this.baseLayout._notifyWindowResizeEvent(widthChanged, heightChanged);
this.freeLayout._notifyWindowResizeEvent(widthChanged, heightChanged);
diff --git a/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceView.js b/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceView.js
index 374786adba..e83baa3c1a 100644
--- a/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceView.js
+++ b/src/wirecloud/platform/static/js/wirecloud/ui/WorkspaceView.js
@@ -46,6 +46,10 @@
if (this.addTabButton) {
this.addTabButton.toggleClassName("hidden", !editing);
}
+
+ if (this.editingIntervalAddon) {
+ this.editingIntervalAddon.toggleClassName("hidden", !editing);
+ }
};
const on_workspace_createoperator = function on_workspace_createoperator(workspace_model, operator) {
@@ -139,6 +143,11 @@
if (!button.active) {
this.walletButton.active = false;
this.layout.slideOut();
+ this.tabs.forEach((tab) => {
+ if (tab.quitEditingInterval) {
+ tab.quitEditingInterval();
+ }
+ });
}
this.activeTab.dragboard._updateIWidgetSizes(true, true);
});
@@ -363,12 +372,24 @@
this.notebook.removeTab(loadingTab);
if (this.model.isAllowed('edit')) {
+ this.editingIntervalAddon = new StyledElements.Addon({
+ class: 'wc-editing-interval',
+ listeners: false
+ });
+ this.notebook.addToEastSection(this.editingIntervalAddon);
+ this.updateEditingInterval(this.activeTab.getEditingIntervalElement());
+
+ this.notebook.addEventListener('changed', (nt, oldTab, newTab) => {
+ newTab.updateEditingIntervalName();
+ this.updateEditingInterval(newTab.getEditingIntervalElement());
+ });
+
this.addTabButton = new StyledElements.Button({
title: utils.gettext("New tab"),
iconClass: "fas fa-plus",
class: "wc-create-workspace-tab"
});
- this.notebook.addButton(this.addTabButton);
+ this.notebook.addToEastSection(this.addTabButton);
this.addTabButton.addEventListener('click', on_click_createtab.bind(this));
} else {
this.addTabButton = null;
@@ -381,7 +402,7 @@
iconClass: 'fas fa-expand',
title: utils.gettext('Full screen')
});
- this.notebook.addButton(this.fullscreenButton);
+ this.notebook.addToEastSection(this.fullscreenButton);
Wirecloud.Utils.onFullscreenChange(this.notebook, () => {
this.fullscreenButton.removeIconClassName(['fa-expand', 'fa-compress']);
if (this.notebook.fullscreen) {
@@ -407,7 +428,7 @@
this.seeOnWirecloudButton = new StyledElements.Button({
'class': 'powered-by-wirecloud'
});
- this.notebook.addButton(this.seeOnWirecloudButton);
+ this.notebook.addToEastSection(this.seeOnWirecloudButton);
this.seeOnWirecloudButton.addEventListener('click', () => {
const url = Wirecloud.URLs.WORKSPACE_VIEW.evaluate({owner: encodeURIComponent(this.model.owner), name: encodeURIComponent(this.model.name)});
window.open(url, '_blank');
@@ -416,9 +437,9 @@
this.poweredByWirecloudButton = new StyledElements.Button({
'class': 'powered-by-wirecloud'
});
- this.notebook.addButton(this.poweredByWirecloudButton);
+ this.notebook.addToEastSection(this.poweredByWirecloudButton);
this.poweredByWirecloudButton.addEventListener('click', () => {
- window.open('http://conwet.fi.upm.es/wirecloud/', '_blank');
+ window.open('https://github.com/Wirecloud/wirecloud', '_blank');
});
}
showHideTabBar.call(this, false);
@@ -571,6 +592,16 @@
return this;
}
+ /**
+ * Update the editing interval addon's content with the given element.
+ */
+ updateEditingInterval(element) {
+ if (this.editingIntervalAddon) {
+ this.editingIntervalAddon.wrapperElement.innerHTML = "";
+ this.editingIntervalAddon.wrapperElement.appendChild(element);
+ }
+ }
+
}
ns.WorkspaceView.prototype.view_name = 'workspace';
diff --git a/src/wirecloud/platform/tests/rest_api.py b/src/wirecloud/platform/tests/rest_api.py
index 67edf07efe..4feda1dee7 100644
--- a/src/wirecloud/platform/tests/rest_api.py
+++ b/src/wirecloud/platform/tests/rest_api.py
@@ -1951,7 +1951,11 @@ def test_iwidget_collection_post_invalid_value(self):
# Make the request
data = {
'widget': 'Wirecloud/Test/1.0',
- 'height': False,
+ 'layoutConfigurations': [{
+ 'id': 0,
+ 'height': False,
+ 'action': 'update'
+ }]
}
response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
self.assertEqual(response.status_code, 400)
@@ -1978,8 +1982,8 @@ def test_iwidget_collection_put(self):
# Make the request
def place_iwidgets():
data = [
- {'id': 1, 'left': 0, 'top': 0, 'width': 10, 'height': 10},
- {'id': 2, 'left': 9.5, 'top': 10.5, 'width': 10.5, 'height': 10.5}
+ {'id': 1, 'layoutConfigurations': [{'moreOrEqual': 0, 'lessOrEqual': -1, 'id': 0, 'action': 'update', 'left': 0, 'top': 0, 'width': 10, 'height': 10}]},
+ {'id': 2, 'layoutConfigurations': [{'moreOrEqual': 0, 'lessOrEqual': -1, 'id': 0, 'action': 'update', 'left': 9.5, 'top': 10.5, 'width': 10.5, 'height': 10.5}]}
]
real_method = Workspace.save
with patch('wirecloud.platform.workspace.models.Workspace.save', autospec=True, side_effect=real_method) as save_mock:
@@ -1994,7 +1998,7 @@ def test_iwidget_collection_put_workspace_not_found(self):
# Authenticate
self.client.login(username='user_with_workspaces', password='admin')
- data = [{'id': 1, 'left': 0, 'top': 0, 'width': 10, 'height': 10}]
+ data = [{'id': 1, 'layoutConfigurations': [{'moreOrEqual': 0, 'lessOrEqual': -1, 'id': 0, 'action': 'update', 'left': 0, 'top': 0, 'width': 10, 'height': 10}]}]
check_not_found_response(self, 'put', url, json.dumps(data))
def test_iwidget_collection_put_tab_not_found(self):
@@ -2003,14 +2007,14 @@ def test_iwidget_collection_put_tab_not_found(self):
# Authenticate
self.client.login(username='user_with_workspaces', password='admin')
- data = [{'id': 1, 'left': 0, 'top': 0, 'width': 10, 'height': 10}]
+ data = [{'id': 1, 'layoutConfigurations': [{'moreOrEqual': 0, 'lessOrEqual': -1, 'id': 0, 'action': 'update', 'left': 0, 'top': 0, 'width': 10, 'height': 10}]}]
check_not_found_response(self, 'put', url, json.dumps(data))
def test_iwidget_collection_put_requires_permission(self):
url = reverse('wirecloud.iwidget_collection', kwargs={'workspace_id': 1, 'tab_id': 1})
data = [
- {'id': 1, 'left': 0}
+ {'id': 1, 'layoutConfigurations': [{'moreOrEqual': 0, 'lessOrEqual': -1, 'id': 0, 'action': 'update', 'left': 0}]}
]
check_put_requires_permission(self, url, json.dumps(data))
@@ -2023,7 +2027,7 @@ def test_iwidget_collection_put_invalid_value(self):
# Make the request
data = [
- {'id': 1, 'left': -1}
+ {'id': 1, 'layoutConfigurations': [{'moreOrEqual': 0, 'lessOrEqual': -1, 'id': 0, 'action': 'update', 'left': -1}]}
]
response = self.client.put(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
self.assertEqual(response.status_code, 422)
@@ -2039,7 +2043,7 @@ def test_iwidget_collection_put_nonexistent_iwidget(self):
# Make the request
data = [
- {'id': 1234, 'left': 0}
+ {'id': 1234, 'layoutConfigurations': [{'moreOrEqual': 0, 'lessOrEqual': -1, 'id': 0, 'action': 'update', 'left': 0}]}
]
response = self.client.put(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
self.assertEqual(response.status_code, 422)
@@ -2399,6 +2403,89 @@ def test_iwidget_entry_post_upgrade_operator(self):
response_data = json.loads(response.content.decode('utf-8'))
self.assertTrue(isinstance(response_data, dict))
+ def test_iwidget_entry_post_invalid_screen_size(self):
+ url = reverse('wirecloud.iwidget_entry', kwargs={'workspace_id': 2, 'tab_id': 101, 'iwidget_id': 2})
+
+ # Authenticate
+ self.client.login(username='user_with_workspaces', password='admin')
+
+ # Make the requests
+ data = {'layoutConfigurations': [{'id': 0, 'action': 'update', 'moreOrEqual': -3}]}
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 422)
+
+ data = {'layoutConfigurations': [{'id': 0, 'action': 'update', 'moreOrEqual': 'notavalidvalue'}]}
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 400)
+
+ data = {'layoutConfigurations': [{'id': 0, 'action': 'update', 'moreOrEqual': 1}]}
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 422)
+
+ data = {'layoutConfigurations': [{'id': 0, 'action': 'update', 'lessOrEqual': 1}]}
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 422)
+
+ data = {'layoutConfigurations': [{'action': 'update'}]}
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 422)
+
+ data = {'layoutConfigurations': [{'id': 0, 'lessOrEqual': 1}]}
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 422)
+
+ data = {'layoutConfigurations': [{'id': 0, 'action': 'add', 'lessOrEqual': 1}]}
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 422)
+
+ data = {'layoutConfigurations': [{'id': 0, 'action': 'update'}, {'id': 0, 'action': 'update'}]}
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 422)
+
+ def test_iwidget_entry_post_delete_screen_size(self):
+ url = reverse('wirecloud.iwidget_entry', kwargs={'workspace_id': 2, 'tab_id': 101, 'iwidget_id': 2})
+ data = {'layoutConfigurations': [
+ {'id': 0, 'action': 'update', 'moreOrEqual': 0, 'lessOrEqual': 800},
+ {'id': 1, 'action': 'update', 'moreOrEqual': 801, 'lessOrEqual': -1}
+ ]}
+
+ # Authenticate
+ self.client.login(username='user_with_workspaces', password='admin')
+
+ # Make the requests
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 204)
+
+ data = {'layoutConfigurations': [{'id': 0, 'action': 'update', 'lessOrEqual': -1}, {'id': 1, 'action': 'delete'}]}
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 204)
+
+
+ def test_iwidget_entry_post_invalid_layout(self):
+ url = reverse('wirecloud.iwidget_entry', kwargs={'workspace_id': 2, 'tab_id': 101, 'iwidget_id': 2})
+
+ # Authenticate
+ self.client.login(username='user_with_workspaces', password='admin')
+
+ # Make the requests
+ data = {'layout': -3}
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 422)
+
+ def test_iwidget_entry_post_valid_layout(self):
+ url = reverse('wirecloud.iwidget_entry', kwargs={'workspace_id': 2, 'tab_id': 101, 'iwidget_id': 2})
+
+ # Authenticate
+ self.client.login(username='user_with_workspaces', password='admin')
+
+ # Make the requests
+ data = {'layout': 0}
+ response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
+ self.assertEqual(response.status_code, 204)
+
+ iwidget = IWidget.objects.get(pk=2)
+ self.assertEqual(iwidget.layout, 0)
+
def check_iwidget_entry_post_invalid_position_value(self, field, value, error_code):
url = reverse('wirecloud.iwidget_entry', kwargs={'workspace_id': 2, 'tab_id': 101, 'iwidget_id': 2})
@@ -2406,8 +2493,8 @@ def check_iwidget_entry_post_invalid_position_value(self, field, value, error_co
self.client.login(username='user_with_workspaces', password='admin')
# Make the requests
- data = {}
- data[field] = value
+ data = {'layoutConfigurations': [{'id': 0, 'action': 'update'}]}
+ data['layoutConfigurations'][0][field] = value
response = self.client.post(url, json.dumps(data), content_type='application/json; charset=UTF-8', HTTP_ACCEPT='application/json')
self.assertEqual(response.status_code, error_code)
diff --git a/src/wirecloud/platform/tests/selenium.py b/src/wirecloud/platform/tests/selenium.py
index 582092c042..2faf612d06 100644
--- a/src/wirecloud/platform/tests/selenium.py
+++ b/src/wirecloud/platform/tests/selenium.py
@@ -94,6 +94,66 @@ def test_basic_workspace_operations(self):
# wirecloud org first)
self.open_menu().check(('New workspace',), must_be_disabled=('Rename', 'Settings', 'Remove'))
+ def test_basic_screen_sizes(self):
+
+ original_browser_size = self.driver.get_window_size()
+ # Change the browser width to 1000 px
+ self.driver.set_window_size(1000, 600)
+
+ self.login(username="user_with_workspaces", next="/user_with_workspaces/pending-events")
+
+ # Open the workspace settings
+ with self.edit_mode:
+ self.open_menu().click_entry('Settings')
+ workspace_preferences_dialog = FormModalTester(self, self.wait_element_visible('.wc-workspace-preferences-modal'))
+
+ # Find the screen sizes field
+ screen_sizes_field = workspace_preferences_dialog.body.find_element(By.CSS_SELECTOR, '.se-screen-size-field')
+ add_button_field = screen_sizes_field.find_element(By.CSS_SELECTOR, 'div.se-btn > i.fa-plus')
+
+ # Add a new screen size
+ add_button_field.click()
+
+ workspace_preferences_dialog.accept()
+
+ # Make sure an error appears (check display is not none)
+ self.assertTrue(workspace_preferences_dialog.error_message.is_displayed())
+
+ # Change the screen size
+
+ # Get the first input with name 'lessOrEqual'
+ lessOrEqual_input = screen_sizes_field.find_element(By.CSS_SELECTOR, 'input[name="lessOrEqual"]')
+
+ # Input 900
+ lessOrEqual_input.clear()
+ lessOrEqual_input.send_keys('900')
+
+ # Click the edit button
+ edit_button = screen_sizes_field.find_element(By.CSS_SELECTOR, 'div.se-btn > i.fa-edit')
+ edit_button.click()
+
+ # Wait for the changes to be saved and the editing message to appear
+ self.wait_element_visible('.wc-editing-interval')
+
+ # Move the widget to the right
+ iwidget = self.find_tab(id="102").widgets[0]
+ original_position = iwidget.position['x']
+ ActionChains(self.driver).click_and_hold(iwidget.title_element).move_by_offset(400, 0).release().perform()
+
+ self.wait_element_visible('.wc-editing-interval-close').click()
+
+ # Make sure the widget has returned to its original position
+ time.sleep(1)
+ self.assertEqual(iwidget.position['x'], original_position)
+
+ self.driver.set_window_size(600, 600)
+
+ # Make sure the widget has moved
+ time.sleep(1)
+ self.assertNotEqual(iwidget.position['x'], original_position)
+
+ self.driver.set_window_size(original_browser_size['width'], original_browser_size['height'])
+
def test_move_iwidget_between_tabs(self):
self.login(username='user_with_workspaces', next='/user_with_workspaces/pending-events')
diff --git a/src/wirecloud/platform/wiring/tests.py b/src/wirecloud/platform/wiring/tests.py
index 24facc6be2..4429b245e8 100644
--- a/src/wirecloud/platform/wiring/tests.py
+++ b/src/wirecloud/platform/wiring/tests.py
@@ -2788,6 +2788,8 @@ def test_remove_components_using_key_delete_when_behaviour_engine_is_enabled(sel
# In the case (2), the platform should remove the component selected
# In the case (3), the platform should ignore the component selected
+ # This test is prone to failures. Rerun it if it fails
+
self.login(username='user_with_workspaces', next='/user_with_workspaces/mashup-with-behaviours')
with self.edit_mode as edit_session:
diff --git a/src/wirecloud/platform/workspace/mashupTemplateGenerator.py b/src/wirecloud/platform/workspace/mashupTemplateGenerator.py
index 224584ecd4..096ec70858 100644
--- a/src/wirecloud/platform/workspace/mashupTemplateGenerator.py
+++ b/src/wirecloud/platform/workspace/mashupTemplateGenerator.py
@@ -40,7 +40,6 @@ def get_workspace_description(workspace):
return get_iwidgets_description(included_iwidgets)
-
def process_iwidget(workspace, iwidget, wiring, parametrization, readOnlyWidgets, cache_manager):
widget = iwidget.widget
@@ -136,35 +135,46 @@ def process_iwidget(workspace, iwidget, wiring, parametrization, readOnlyWidgets
'value': value,
}
- return {
+ screenSizes = []
+ for configuration in iwidget.positions['configurations']:
+ screenSizes.append({
+ 'moreOrEqual': configuration['moreOrEqual'],
+ 'lessOrEqual': configuration['lessOrEqual'],
+ 'id': configuration['id'],
+ 'position': {
+ 'anchor': configuration['widget'].get('anchor', 'top-left'),
+ 'relx': configuration['widget'].get('relx', True),
+ 'rely': configuration['widget'].get('rely', True if iwidget.layout != 1 else False),
+ 'x': str(configuration['widget']['left']),
+ 'y': str(configuration['widget']['top']),
+ 'z': str(configuration['widget']['zIndex'])
+ },
+ 'rendering': {
+ 'relwidth': configuration['widget'].get('relwidth', True),
+ 'relheight': configuration['widget'].get('relheight', True if iwidget.layout != 1 else False),
+ 'width': str(configuration['widget']['width']),
+ 'height': str(configuration['widget']['height']),
+ 'fulldragboard': bool(configuration['widget']['fulldragboard']),
+ 'minimized': bool(configuration['widget']['minimized']),
+ 'titlevisible': bool(configuration['widget'].get('titlevisible', True)),
+ },
+ })
+
+ iwidget_data = {
'id': iwidget_id,
'vendor': iwidget.widget.resource.vendor,
'name': iwidget.widget.resource.short_name,
'version': iwidget.widget.resource.version,
'title': iwidget.name,
+ 'layout': iwidget.layout,
'readonly': readOnlyWidgets,
'properties': properties,
'preferences': preferences,
- 'position': {
- 'anchor': iwidget.positions['widget'].get('anchor', 'top-left'),
- 'relx': iwidget.positions['widget'].get('relx', True),
- 'rely': iwidget.positions['widget'].get('rely', True if iwidget.layout != 1 else False),
- 'x': str(iwidget.positions['widget']['left']),
- 'y': str(iwidget.positions['widget']['top']),
- 'z': str(iwidget.positions['widget']['zIndex']),
- },
- 'rendering': {
- 'relwidth': iwidget.positions['widget'].get('relwidth', True),
- 'relheight': iwidget.positions['widget'].get('relheight', True if iwidget.layout != 1 else False),
- 'width': str(iwidget.positions['widget']['width']),
- 'height': str(iwidget.positions['widget']['height']),
- 'layout': iwidget.layout,
- 'fulldragboard': bool(iwidget.positions['widget']['fulldragboard']),
- 'minimized': bool(iwidget.positions['widget']['minimized']),
- 'titlevisible': bool(iwidget.positions['widget'].get('titlevisible', True)),
- },
+ 'screenSizes': screenSizes
}
+ return iwidget_data
+
def build_json_template_from_workspace(options, workspace, user):
options['type'] = 'mashup'
diff --git a/src/wirecloud/platform/workspace/mashupTemplateParser.py b/src/wirecloud/platform/workspace/mashupTemplateParser.py
index d280035de4..034d95de4a 100644
--- a/src/wirecloud/platform/workspace/mashupTemplateParser.py
+++ b/src/wirecloud/platform/workspace/mashupTemplateParser.py
@@ -225,27 +225,38 @@ def fillWorkspaceUsingTemplate(workspace, template):
for resource in tab_entry['resources']:
- position = resource['position']
- rendering = resource['rendering']
-
widget = get_or_add_widget_from_catalogue(resource.get('vendor'), resource.get('name'), resource.get('version'), user)
iwidget_data = {
"widget": widget.uri,
"title": resource.get('title'),
- "left": float(position.get('x')),
- "top": float(position.get('y')),
"icon_left": 0,
"icon_top": 0,
- "zIndex": int(position.get('z')),
- "width": float(rendering.get('width')),
- "height": float(rendering.get('height')),
- "layout": int(rendering.get('layout')),
- "minimized": rendering['minimized'],
- "fulldragboard": rendering['fulldragboard'],
- "titlevisible": rendering['titlevisible'],
+ "layout": int(resource.get('layout')),
+ "layoutConfigurations": []
}
+ for configuration in resource["screenSizes"]:
+ position = configuration['position']
+ rendering = configuration['rendering']
+
+ iwidget_layoutConfig = {
+ 'moreOrEqual': configuration['moreOrEqual'],
+ 'lessOrEqual': configuration['lessOrEqual'],
+ 'id': configuration['id'],
+ "left": float(position.get('x')),
+ "top": float(position.get('y')),
+ "zIndex": int(position.get('z')),
+ "width": float(rendering.get('width')),
+ "height": float(rendering.get('height')),
+ "minimized": rendering['minimized'],
+ "fulldragboard": rendering['fulldragboard'],
+ "titlevisible": rendering['titlevisible'],
+ 'action': 'update'
+ }
+
+ iwidget_data['layoutConfigurations'].append(iwidget_layoutConfig)
+
iwidget = SaveIWidget(iwidget_data, user, tab, commit=False)
if resource.get('readonly'):
iwidget.readOnly = True
diff --git a/src/wirecloud/platform/workspace/tests.py b/src/wirecloud/platform/workspace/tests.py
index ed113571f3..2f92d76730 100644
--- a/src/wirecloud/platform/workspace/tests.py
+++ b/src/wirecloud/platform/workspace/tests.py
@@ -712,11 +712,11 @@ def test_build_xml_template_from_basic_workspace(self):
self.assertXPathAttr(template, '/mashup/structure/tab[1]', 'name', 'tab')
self.assertXPathCount(template, '/mashup/structure/tab[1]/resource', 2)
self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[1]', 'readonly', 'false', optional=True)
- self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[1]/rendering', 'minimized', 'false', optional=True)
- self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[1]/rendering', 'fulldragboard', 'false', optional=True)
+ self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[1]/screensizes/screensize[1]/rendering', 'minimized', 'false', optional=True)
+ self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[1]/screensizes/screensize[1]/rendering', 'fulldragboard', 'false', optional=True)
self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[2]', 'readonly', 'false', optional=True)
- self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[2]/rendering', 'minimized', 'false', optional=True)
- self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[2]/rendering', 'fulldragboard', 'false', optional=True)
+ self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[2]/screensizes/screensize[1]/rendering', 'minimized', 'false', optional=True)
+ self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[2]/screensizes/screensize[1]/rendering', 'fulldragboard', 'false', optional=True)
self.check_workspace_xml_wiring(template)
@@ -735,12 +735,12 @@ def test_build_xml_template_from_workspace_minimized_and_fulldragboard(self):
# Minimize the first iwidget
iwidget = IWidget.objects.get(pk=1)
- iwidget.positions['widget']['minimized'] = True
+ iwidget.positions['configurations'][0]['widget']['minimized'] = True
iwidget.save()
# Set the fulldragboard flag on the second iwidget
iwidget = IWidget.objects.get(pk=2)
- iwidget.positions['widget']['fulldragboard'] = True
+ iwidget.positions['configurations'][0]['widget']['fulldragboard'] = True
iwidget.save()
template = build_xml_template_from_workspace(options, self.workspace_with_iwidgets, self.user, raw=True)
@@ -756,11 +756,11 @@ def test_build_xml_template_from_workspace_minimized_and_fulldragboard(self):
# order depends on the database backend)
widgets = {widget.get('id'): widget for widget in template.xpath('/mashup/structure/tab[1]/resource')}
self.assertXPathAttr(widgets["1"], '.', 'readonly', 'false', optional=True)
- self.assertXPathAttr(widgets["1"], 'rendering', 'minimized', 'true')
- self.assertXPathAttr(widgets["1"], 'rendering', 'fulldragboard', 'false', optional=True)
+ self.assertXPathAttr(widgets["1"], 'screensizes/screensize[1]/rendering', 'minimized', 'true')
+ self.assertXPathAttr(widgets["1"], 'screensizes/screensize[1]/rendering', 'fulldragboard', 'false', optional=True)
self.assertXPathAttr(widgets["2"], '.', 'readonly', 'false', optional=True)
- self.assertXPathAttr(widgets["2"], 'rendering', 'minimized', 'false', optional=True)
- self.assertXPathAttr(widgets["2"], 'rendering', 'fulldragboard', 'true')
+ self.assertXPathAttr(widgets["2"], 'screensizes/screensize[1]/rendering', 'minimized', 'false', optional=True)
+ self.assertXPathAttr(widgets["2"], 'screensizes/screensize[1]/rendering', 'fulldragboard', 'true')
self.check_workspace_xml_wiring(template)
@@ -785,11 +785,11 @@ def test_build_xml_template_from_workspace_read_only_widgets(self):
self.assertXPathAttr(template, '/mashup/structure/tab[1]', 'name', 'tab')
self.assertXPathCount(template, '/mashup/structure/tab[1]/resource', 2)
self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[1]', 'readonly', 'true')
- self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[1]/rendering', 'minimized', 'false', optional=True)
- self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[1]/rendering', 'fulldragboard', 'false', optional=True)
+ self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[1]/screensizes/screensize[1]/rendering', 'minimized', 'false', optional=True)
+ self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[1]/screensizes/screensize[1]/rendering', 'fulldragboard', 'false', optional=True)
self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[2]', 'readonly', 'true')
- self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[2]/rendering', 'minimized', 'false', optional=True)
- self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[2]/rendering', 'fulldragboard', 'false', optional=True)
+ self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[2]/screensizes/screensize[1]/rendering', 'minimized', 'false', optional=True)
+ self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[2]/screensizes/screensize[1]/rendering', 'fulldragboard', 'false', optional=True)
self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[@id="2"]/preferencevalue[@name="username"]', 'readonly', 'false', optional=True)
self.assertXPathAttr(template, '/mashup/structure/tab[1]/resource[@id="2"]/preferencevalue[@name="username"]', 'hidden', 'false', optional=True)
diff --git a/src/wirecloud/platform/workspace/utils.py b/src/wirecloud/platform/workspace/utils.py
index dd695e60df..0758fb5788 100644
--- a/src/wirecloud/platform/workspace/utils.py
+++ b/src/wirecloud/platform/workspace/utils.py
@@ -515,7 +515,6 @@ def get_tab_data(tab, workspace=None, cache_manager=None, user=None):
def get_iwidget_data(iwidget, workspace, cache_manager=None, user=None):
- widget_position = iwidget.positions.get('widget', {})
permissions = iwidget.permissions
if workspace.creator != user and 'owner' in permissions:
del permissions['owner']
@@ -526,25 +525,39 @@ def get_iwidget_data(iwidget, workspace, cache_manager=None, user=None):
'tab': iwidget.tab.id,
'layout': iwidget.layout,
'widget': iwidget.widget_uri,
- 'top': widget_position.get('top', 0),
- 'left': widget_position.get('left', 0),
- 'anchor': widget_position.get('anchor', 'top-left'),
- 'relx': True if iwidget.layout != 1 else widget_position.get('relx', True),
- 'rely': True if iwidget.layout != 1 else widget_position.get('rely', False),
- 'relheight': True if iwidget.layout != 1 else widget_position.get('relheight', False),
- 'relwidth': True if iwidget.layout != 1 else widget_position.get('relwidth', True),
- 'zIndex': widget_position.get('zIndex', 0),
- 'width': widget_position.get('width', 0),
- 'height': widget_position.get('height', 0),
- 'fulldragboard': widget_position.get('fulldragboard', False),
- 'minimized': widget_position.get('minimized', False),
+ 'layoutConfigurations': [],
'readonly': iwidget.readOnly,
'permissions': permissions,
'preferences': {},
- 'properties': {},
- 'titlevisible': widget_position.get('titlevisible', True),
+ 'properties': {}
}
+ if not 'configurations' in iwidget.positions:
+ raise ValueError(_('Invalid iwidget format stored in the database. Please, update the iwidget positions field.'))
+
+ for layoutConfiguration in iwidget.positions.get('configurations'):
+ widget_position = layoutConfiguration.get('widget', {})
+ dataLayout = {
+ 'top': widget_position.get('top', 0),
+ 'left': widget_position.get('left', 0),
+ 'anchor': widget_position.get('anchor', 'top-left'),
+ 'relx': True if iwidget.layout != 1 else widget_position.get('relx', True),
+ 'rely': True if iwidget.layout != 1 else widget_position.get('rely', False),
+ 'relheight': True if iwidget.layout != 1 else widget_position.get('relheight', False),
+ 'relwidth': True if iwidget.layout != 1 else widget_position.get('relwidth', True),
+ 'zIndex': widget_position.get('zIndex', 0),
+ 'width': widget_position.get('width', 0),
+ 'height': widget_position.get('height', 0),
+ 'fulldragboard': widget_position.get('fulldragboard', False),
+ 'minimized': widget_position.get('minimized', False),
+ 'titlevisible': widget_position.get('titlevisible', True),
+ 'id': layoutConfiguration.get('id', 0),
+ 'moreOrEqual': layoutConfiguration.get('moreOrEqual', 0),
+ 'lessOrEqual': layoutConfiguration.get('lessOrEqual', -1)
+ }
+
+ data_ret['layoutConfigurations'].append(dataLayout)
+
if iwidget.widget is None or not iwidget.widget.resource.is_available_for(workspace.creator):
# The widget used by this iwidget is missing
return data_ret