@themarioga/grid-editor 8.7.0 → 8.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -80,6 +80,33 @@ GridEditor.locales.es = {
80
80
  "container.tabs_layout_horizontal": "Horizontal",
81
81
  "container.tabs_layout_vertical": "Vertical",
82
82
  "container.tabs_layout_vertical_from": "Vertical desde {breakpoint}",
83
+ "container.add_carousel": "Carrusel",
84
+ "container.add_carousel_item": "A\xF1adir diapositiva",
85
+ "confirm.delete_carousel_item": "\xBFBorrar esta diapositiva y todo lo que contiene?",
86
+ "panel.kind_carousel_item": "Diapositiva",
87
+ "container.carousel_previous": "Anterior",
88
+ "container.carousel_next": "Siguiente",
89
+ "container.carousel_slide_label": "Diapositiva {number}",
90
+ "container.carousel_counter": "{current} / {total}",
91
+ "tool.carousel_show_previous": "Diapositiva anterior",
92
+ "tool.carousel_show_next": "Diapositiva siguiente",
93
+ "tool.carousel_move_back": "Mover atr\xE1s",
94
+ "tool.carousel_move_forward": "Mover adelante",
95
+ "container.carousel_section": "Carrusel",
96
+ "container.carousel_controls": "Flechas",
97
+ "container.carousel_indicators": "Indicadores",
98
+ "container.carousel_fade": "Fundido",
99
+ "container.carousel_dark": "Tema oscuro",
100
+ "container.carousel_ride": "Autoplay",
101
+ "container.carousel_ride_no": "No",
102
+ "container.carousel_ride_load": "Al cargar",
103
+ "container.carousel_ride_interaction": "Tras la primera interacci\xF3n",
104
+ "container.carousel_interval": "Intervalo (s)",
105
+ "container.carousel_pause": "Pausa al pasar el rat\xF3n",
106
+ "container.carousel_wrap": "Volver al principio",
107
+ "container.carousel_keyboard": "Teclado",
108
+ "container.carousel_touch": "T\xE1ctil",
109
+ "container.carousel_item_section": "Diapositiva",
83
110
  "container.add_accordion": "Acorde\xF3n",
84
111
  "container.add_accordion_item": "A\xF1adir apartado",
85
112
  "container.accordion_label": "Apartado {number}",
@@ -86,6 +86,33 @@
86
86
  "container.tabs_layout_horizontal": "Horizontal",
87
87
  "container.tabs_layout_vertical": "Vertical",
88
88
  "container.tabs_layout_vertical_from": "Vertical desde {breakpoint}",
89
+ "container.add_carousel": "Carrusel",
90
+ "container.add_carousel_item": "A\xF1adir diapositiva",
91
+ "confirm.delete_carousel_item": "\xBFBorrar esta diapositiva y todo lo que contiene?",
92
+ "panel.kind_carousel_item": "Diapositiva",
93
+ "container.carousel_previous": "Anterior",
94
+ "container.carousel_next": "Siguiente",
95
+ "container.carousel_slide_label": "Diapositiva {number}",
96
+ "container.carousel_counter": "{current} / {total}",
97
+ "tool.carousel_show_previous": "Diapositiva anterior",
98
+ "tool.carousel_show_next": "Diapositiva siguiente",
99
+ "tool.carousel_move_back": "Mover atr\xE1s",
100
+ "tool.carousel_move_forward": "Mover adelante",
101
+ "container.carousel_section": "Carrusel",
102
+ "container.carousel_controls": "Flechas",
103
+ "container.carousel_indicators": "Indicadores",
104
+ "container.carousel_fade": "Fundido",
105
+ "container.carousel_dark": "Tema oscuro",
106
+ "container.carousel_ride": "Autoplay",
107
+ "container.carousel_ride_no": "No",
108
+ "container.carousel_ride_load": "Al cargar",
109
+ "container.carousel_ride_interaction": "Tras la primera interacci\xF3n",
110
+ "container.carousel_interval": "Intervalo (s)",
111
+ "container.carousel_pause": "Pausa al pasar el rat\xF3n",
112
+ "container.carousel_wrap": "Volver al principio",
113
+ "container.carousel_keyboard": "Teclado",
114
+ "container.carousel_touch": "T\xE1ctil",
115
+ "container.carousel_item_section": "Diapositiva",
89
116
  "container.add_accordion": "Acorde\xF3n",
90
117
  "container.add_accordion_item": "A\xF1adir apartado",
91
118
  "container.accordion_label": "Apartado {number}",
@@ -3,4 +3,4 @@
3
3
  (May\xFAs para el m\xEDnimo)`,"tool.column_wider":`Ensanchar columna
4
4
  (May\xFAs para el m\xE1ximo)`,"tool.indent_decrease":`Reducir sangr\xEDa
5
5
  (May\xFAs para quitarla)`,"tool.indent_increase":`Aumentar sangr\xEDa
6
- (May\xFAs para el m\xE1ximo)`,"tool.edit_source":"Editar el c\xF3digo fuente","tool.preview":"Vista previa","tool.more":"M\xE1s","group.rows":"Filas","group.content":"Contenido","group.elements":"Elementos","group.select":"A\xF1adir","panel.title":"Ajustes: {kind}","panel.close":"Cerrar","panel.done":"Hecho","panel.id":"Id","panel.classes":"Clases","panel.section_general":"Id y clases","panel.editor":"Editor","panel.kind_row":"Fila","panel.kind_column":"Columna","panel.kind_text":"Texto","panel.kind_element":"Elemento","panel.kind_section":"Secci\xF3n","panel.kind_tab":"Pesta\xF1a","panel.kind_accordion_item":"Elemento de acorde\xF3n","tool.id_placeholder":"id","tool.id_title":"Asignar un identificador \xFAnico","tool.classes_placeholder":"clases","tool.classes_title":"Clases css, separadas por espacios","tool.toggle_class":'Aplicar o quitar el estilo "{label}"',"row.add":"A\xF1adir fila {layout}","row.add_row_cols":"A\xF1adir una fila de {columns} columnas, {counts} por fila","container.add_tabs":"Pesta\xF1as","container.add_tab":"A\xF1adir pesta\xF1a","container.tab_label":"Pesta\xF1a {number}","container.tabs_section":"Pesta\xF1as","container.tabs_style":"Estilo","container.tabs_style_tabs":"Pesta\xF1as","container.tabs_style_pills":"Pills","container.tabs_style_underline":"Subrayado","container.tabs_width":"Ancho","container.tabs_width_natural":"Natural","container.tabs_width_fill":"Rellenar","container.tabs_width_justified":"Justificado","container.tabs_align":"Alineaci\xF3n","container.tabs_align_start":"Inicio","container.tabs_align_center":"Centro","container.tabs_align_end":"Fin","container.tabs_layout":"Disposici\xF3n","container.tabs_layout_horizontal":"Horizontal","container.tabs_layout_vertical":"Vertical","container.tabs_layout_vertical_from":"Vertical desde {breakpoint}","container.add_accordion":"Acorde\xF3n","container.add_accordion_item":"A\xF1adir apartado","container.accordion_label":"Apartado {number}","container.add_popup":"Ventana emergente","container.popup_title":"T\xEDtulo","container.popup_trigger":"Abrir","container.add_card":"Tarjeta","container.card_title":"T\xEDtulo de la tarjeta","container.card_footer":"Pie de la tarjeta","confirm.title":"Confirmar","confirm.ok":"Borrar","confirm.cancel":"Cancelar","confirm.delete_row":"\xBFSeguro que quieres borrar esta fila?","confirm.delete_column":"\xBFSeguro que quieres borrar esta columna?","confirm.delete_text":"\xBFSeguro que quieres borrar este texto?","confirm.delete_plain":"\xBFSeguro que quieres borrar este contenido?","confirm.delete_element":"\xBFSeguro que quieres borrar este elemento?","confirm.delete_container":"\xBFSeguro que quieres borrar este contenedor y todo su contenido?","confirm.delete_tab":"\xBFSeguro que quieres borrar esta pesta\xF1a y todo su contenido?","confirm.delete_accordion_item":"\xBFSeguro que quieres borrar este apartado y todo su contenido?","view.all":"Todos los tama\xF1os","view.xs":"M\xF3vil","view.sm":"Tablet","view.md":"Escritorio peque\xF1o","view.lg":"Escritorio","view.xl":"Escritorio grande","view.xxl":"Pantalla panor\xE1mica","utility.section":"Responsive: {view}","utility.col_width":"Ancho","utility.col_equal":"Igual","utility.col_auto":"Auto","section.add":"Secci\xF3n","section.width":"Ancho","section.fixed":"Fijo","section.fluid":"Ancho completo","section.from":"Fijo desde {breakpoint}","tool.add_row_to_section":"A\xF1adir fila","tool.delete_section":"Quitar secci\xF3n","confirm.delete_section":"\xBFSeguro que quieres borrar esta secci\xF3n y todo su contenido?","tool.copy":"Copiar","tool.paste":"Pegar","clipboard.paste_row":"Pegar fila","clipboard.paste_section":"Pegar secci\xF3n","autosave.restore_title":"\xBFRecuperar el borrador?","autosave.restore_message":"Hay un borrador de esta p\xE1gina guardado el {date}, con cambios que no se publicaron. \xBFQuieres recuperarlo?","autosave.restore":"Recuperar","autosave.discard":"Descartar","utility.col_from_row":"De la fila: {count}","utility.row_cols":"Columnas por fila","badge.row_cols":"{count} por fila","badge.row_cols_auto":"Tan anchas como su contenido","utility.default":"Por defecto","utility.inherit":"Hereda: {value} (de {breakpoint})","utility.varies":"Cambia en {breakpoints}; elegir aqu\xED lo sustituye","utility.display":"Display","utility.visibility_hidden":"Oculto","tool.hide_in_view":"Ocultar en esta vista","tool.show_in_view":"Mostrar en esta vista","badge.hidden_in":"Oculto en {breakpoints}","utility.order":"Orden","utility.order_first":"Primero","utility.order_last":"\xDAltimo","tool.order_earlier":"Antes en esta vista","tool.order_later":"Despu\xE9s en esta vista","badge.order":"Orden: {value}","utility.justify_content":"Justificar columnas","utility.align_items":"Alinear columnas","utility.align_content":"Alinear l\xEDneas","utility.flex_direction":"Direcci\xF3n","utility.flex_wrap":"Salto de l\xEDnea","utility.gap":"Separaci\xF3n","utility.row_gap":"Separaci\xF3n entre filas","utility.column_gap":"Separaci\xF3n entre columnas","utility.flex_fill":"Rellenar","utility.flex_grow":"Crecer","utility.flex_shrink":"Encoger","utility.sticky":"Fijo al desplazar","utility.align_self":"Alinearse","utility.gutters":"Espaciado entre columnas","utility.gutters_x":"Espaciado horizontal","utility.gutters_y":"Espaciado vertical","utility.padding":"Relleno","utility.margin":"Margen","utility.side_all":"Todos los lados","utility.side_x":"Izquierda y derecha","utility.side_y":"Arriba y abajo","utility.side_t":"Arriba","utility.side_b":"Abajo","utility.side_s":"Inicio","utility.side_e":"Fin","utility.text_align":"Alineaci\xF3n del texto","utility.text_start":"Inicio","utility.text_center":"Centro","utility.text_end":"Fin","utility.float":"Flotar","utility.float_start":"Inicio","utility.float_end":"Fin","utility.float_none":"Ninguno","utility.spacing_gutter":"El relleno lateral de una columna es su espaciado: cambiarlo cambia el espacio entre columnas","inline_style.section_title":"Estilo","inline_style.dialog_title":"Estilo: {kind}","inline_style.section_size":"Tama\xF1o","inline_style.section_spacing":"Espaciado","inline_style.section_border":"Borde","inline_style.section_background":"Fondo","inline_style.section_text":"Texto","inline_style.section_typography":"Tipograf\xEDa","inline_style.section_display":"Visualizaci\xF3n","inline_style.section_flex":"Flex","inline_style.section_position":"Posici\xF3n","inline_style.section_custom":"CSS libre","inline_style.all_sizes":"Se aplica a todos los tama\xF1os","inline_style.overridden":"La clase {class} tiene prioridad sobre este valor","inline_style.invalid":"Esta propiedad no acepta ese valor","inline_style.catalog":"Clases de Bootstrap","inline_style.shadow_x":"X","inline_style.shadow_y":"Y","inline_style.shadow_blur":"Desenfoque","inline_style.shadow_spread":"Extensi\xF3n","inline_style.shadow_color":"Color","inline_style.shadow_inset":"Interior","inline_style.shadow_text_mode":"Editar como texto","inline_style.shadow_builder_mode":"Editar con el constructor","inline_style.prop_width":"Ancho","inline_style.prop_height":"Alto","inline_style.prop_min_width":"Ancho m\xEDnimo","inline_style.prop_min_height":"Alto m\xEDnimo","inline_style.prop_max_width":"Ancho m\xE1ximo","inline_style.prop_max_height":"Alto m\xE1ximo","inline_style.prop_margin_top":"Margen superior","inline_style.prop_margin_right":"Margen derecho","inline_style.prop_margin_bottom":"Margen inferior","inline_style.prop_margin_left":"Margen izquierdo","inline_style.prop_padding_top":"Relleno superior","inline_style.prop_padding_right":"Relleno derecho","inline_style.prop_padding_bottom":"Relleno inferior","inline_style.prop_padding_left":"Relleno izquierdo","inline_style.prop_border_width":"Grosor del borde","inline_style.prop_border_style":"Estilo del borde","inline_style.prop_border_color":"Color del borde","inline_style.prop_border_radius":"Radio del borde","inline_style.prop_box_shadow":"Sombra","inline_style.prop_background_color":"Color de fondo","inline_style.prop_background_image":"Imagen de fondo","inline_style.prop_background_size":"Tama\xF1o del fondo","inline_style.prop_background_position":"Posici\xF3n del fondo","inline_style.prop_background_repeat":"Repetici\xF3n del fondo","inline_style.prop_color":"Color","inline_style.prop_font_size":"Tama\xF1o de letra","inline_style.prop_text_align":"Alineaci\xF3n","inline_style.prop_text_shadow":"Sombra del texto","inline_style.prop_font_family":"Fuente","inline_style.prop_font_weight":"Grosor de letra","inline_style.prop_font_style":"Estilo de letra","inline_style.prop_line_height":"Interlineado","inline_style.prop_letter_spacing":"Espaciado entre letras","inline_style.prop_text_transform":"May\xFAsculas","inline_style.prop_text_decoration":"Decoraci\xF3n","inline_style.prop_display":"Display","inline_style.prop_opacity":"Opacidad","inline_style.prop_overflow":"Desbordamiento","inline_style.prop_visibility":"Visibilidad","inline_style.prop_position":"Posici\xF3n","inline_style.prop_top":"Arriba","inline_style.prop_right":"Derecha","inline_style.prop_bottom":"Abajo","inline_style.prop_left":"Izquierda","inline_style.prop_z_index":"Z-index","error.sortable_missing":"\xA1SortableJS no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de Sortable; sin \xE9l no se puede arrastrar.","warning.already_editing":"Este elemento ya tiene un editor: se devuelve ese, con las opciones con las que se cre\xF3.","warning.destroyed":"Se ha llamado a {method}() en un editor destruido, y no hace nada.","warning.duplicate_build":"grideditor.js se ha cargado dos veces: se mantiene el primer GridEditor.","warning.adapter_no_jquery":"grideditor.jquery.js necesita jQuery 4 y la p\xE1gina no tiene jQuery: la API de jQuery no est\xE1 disponible.","error.tinymce_missing":"\xA1tinyMCE no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de tinyMCE.","error.ckeditor_missing":"\xA1CKEditor 5 no est\xE1 disponible! Aseg\xFArate de haber cargado su archivo ckeditor5.umd.js.","error.ckeditor_start":"CKEditor no ha podido arrancar: {message}","warning.ckeditor_plugin":"CKEditor no tiene ning\xFAn plugin llamado {name}, as\xED que se deja fuera.","error.codemirror_missing":"\xA1CodeMirror no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de CodeMirror; sin \xE9l el c\xF3digo se edita en un textarea normal.","error.summernote_missing":"\xA1Summernote no est\xE1 disponible! Aseg\xFArate de haber cargado jQuery y el archivo js de Summernote."};})();
6
+ (May\xFAs para el m\xE1ximo)`,"tool.edit_source":"Editar el c\xF3digo fuente","tool.preview":"Vista previa","tool.more":"M\xE1s","group.rows":"Filas","group.content":"Contenido","group.elements":"Elementos","group.select":"A\xF1adir","panel.title":"Ajustes: {kind}","panel.close":"Cerrar","panel.done":"Hecho","panel.id":"Id","panel.classes":"Clases","panel.section_general":"Id y clases","panel.editor":"Editor","panel.kind_row":"Fila","panel.kind_column":"Columna","panel.kind_text":"Texto","panel.kind_element":"Elemento","panel.kind_section":"Secci\xF3n","panel.kind_tab":"Pesta\xF1a","panel.kind_accordion_item":"Elemento de acorde\xF3n","tool.id_placeholder":"id","tool.id_title":"Asignar un identificador \xFAnico","tool.classes_placeholder":"clases","tool.classes_title":"Clases css, separadas por espacios","tool.toggle_class":'Aplicar o quitar el estilo "{label}"',"row.add":"A\xF1adir fila {layout}","row.add_row_cols":"A\xF1adir una fila de {columns} columnas, {counts} por fila","container.add_tabs":"Pesta\xF1as","container.add_tab":"A\xF1adir pesta\xF1a","container.tab_label":"Pesta\xF1a {number}","container.tabs_section":"Pesta\xF1as","container.tabs_style":"Estilo","container.tabs_style_tabs":"Pesta\xF1as","container.tabs_style_pills":"Pills","container.tabs_style_underline":"Subrayado","container.tabs_width":"Ancho","container.tabs_width_natural":"Natural","container.tabs_width_fill":"Rellenar","container.tabs_width_justified":"Justificado","container.tabs_align":"Alineaci\xF3n","container.tabs_align_start":"Inicio","container.tabs_align_center":"Centro","container.tabs_align_end":"Fin","container.tabs_layout":"Disposici\xF3n","container.tabs_layout_horizontal":"Horizontal","container.tabs_layout_vertical":"Vertical","container.tabs_layout_vertical_from":"Vertical desde {breakpoint}","container.add_carousel":"Carrusel","container.add_carousel_item":"A\xF1adir diapositiva","confirm.delete_carousel_item":"\xBFBorrar esta diapositiva y todo lo que contiene?","panel.kind_carousel_item":"Diapositiva","container.carousel_previous":"Anterior","container.carousel_next":"Siguiente","container.carousel_slide_label":"Diapositiva {number}","container.carousel_counter":"{current} / {total}","tool.carousel_show_previous":"Diapositiva anterior","tool.carousel_show_next":"Diapositiva siguiente","tool.carousel_move_back":"Mover atr\xE1s","tool.carousel_move_forward":"Mover adelante","container.carousel_section":"Carrusel","container.carousel_controls":"Flechas","container.carousel_indicators":"Indicadores","container.carousel_fade":"Fundido","container.carousel_dark":"Tema oscuro","container.carousel_ride":"Autoplay","container.carousel_ride_no":"No","container.carousel_ride_load":"Al cargar","container.carousel_ride_interaction":"Tras la primera interacci\xF3n","container.carousel_interval":"Intervalo (s)","container.carousel_pause":"Pausa al pasar el rat\xF3n","container.carousel_wrap":"Volver al principio","container.carousel_keyboard":"Teclado","container.carousel_touch":"T\xE1ctil","container.carousel_item_section":"Diapositiva","container.add_accordion":"Acorde\xF3n","container.add_accordion_item":"A\xF1adir apartado","container.accordion_label":"Apartado {number}","container.add_popup":"Ventana emergente","container.popup_title":"T\xEDtulo","container.popup_trigger":"Abrir","container.add_card":"Tarjeta","container.card_title":"T\xEDtulo de la tarjeta","container.card_footer":"Pie de la tarjeta","confirm.title":"Confirmar","confirm.ok":"Borrar","confirm.cancel":"Cancelar","confirm.delete_row":"\xBFSeguro que quieres borrar esta fila?","confirm.delete_column":"\xBFSeguro que quieres borrar esta columna?","confirm.delete_text":"\xBFSeguro que quieres borrar este texto?","confirm.delete_plain":"\xBFSeguro que quieres borrar este contenido?","confirm.delete_element":"\xBFSeguro que quieres borrar este elemento?","confirm.delete_container":"\xBFSeguro que quieres borrar este contenedor y todo su contenido?","confirm.delete_tab":"\xBFSeguro que quieres borrar esta pesta\xF1a y todo su contenido?","confirm.delete_accordion_item":"\xBFSeguro que quieres borrar este apartado y todo su contenido?","view.all":"Todos los tama\xF1os","view.xs":"M\xF3vil","view.sm":"Tablet","view.md":"Escritorio peque\xF1o","view.lg":"Escritorio","view.xl":"Escritorio grande","view.xxl":"Pantalla panor\xE1mica","utility.section":"Responsive: {view}","utility.col_width":"Ancho","utility.col_equal":"Igual","utility.col_auto":"Auto","section.add":"Secci\xF3n","section.width":"Ancho","section.fixed":"Fijo","section.fluid":"Ancho completo","section.from":"Fijo desde {breakpoint}","tool.add_row_to_section":"A\xF1adir fila","tool.delete_section":"Quitar secci\xF3n","confirm.delete_section":"\xBFSeguro que quieres borrar esta secci\xF3n y todo su contenido?","tool.copy":"Copiar","tool.paste":"Pegar","clipboard.paste_row":"Pegar fila","clipboard.paste_section":"Pegar secci\xF3n","autosave.restore_title":"\xBFRecuperar el borrador?","autosave.restore_message":"Hay un borrador de esta p\xE1gina guardado el {date}, con cambios que no se publicaron. \xBFQuieres recuperarlo?","autosave.restore":"Recuperar","autosave.discard":"Descartar","utility.col_from_row":"De la fila: {count}","utility.row_cols":"Columnas por fila","badge.row_cols":"{count} por fila","badge.row_cols_auto":"Tan anchas como su contenido","utility.default":"Por defecto","utility.inherit":"Hereda: {value} (de {breakpoint})","utility.varies":"Cambia en {breakpoints}; elegir aqu\xED lo sustituye","utility.display":"Display","utility.visibility_hidden":"Oculto","tool.hide_in_view":"Ocultar en esta vista","tool.show_in_view":"Mostrar en esta vista","badge.hidden_in":"Oculto en {breakpoints}","utility.order":"Orden","utility.order_first":"Primero","utility.order_last":"\xDAltimo","tool.order_earlier":"Antes en esta vista","tool.order_later":"Despu\xE9s en esta vista","badge.order":"Orden: {value}","utility.justify_content":"Justificar columnas","utility.align_items":"Alinear columnas","utility.align_content":"Alinear l\xEDneas","utility.flex_direction":"Direcci\xF3n","utility.flex_wrap":"Salto de l\xEDnea","utility.gap":"Separaci\xF3n","utility.row_gap":"Separaci\xF3n entre filas","utility.column_gap":"Separaci\xF3n entre columnas","utility.flex_fill":"Rellenar","utility.flex_grow":"Crecer","utility.flex_shrink":"Encoger","utility.sticky":"Fijo al desplazar","utility.align_self":"Alinearse","utility.gutters":"Espaciado entre columnas","utility.gutters_x":"Espaciado horizontal","utility.gutters_y":"Espaciado vertical","utility.padding":"Relleno","utility.margin":"Margen","utility.side_all":"Todos los lados","utility.side_x":"Izquierda y derecha","utility.side_y":"Arriba y abajo","utility.side_t":"Arriba","utility.side_b":"Abajo","utility.side_s":"Inicio","utility.side_e":"Fin","utility.text_align":"Alineaci\xF3n del texto","utility.text_start":"Inicio","utility.text_center":"Centro","utility.text_end":"Fin","utility.float":"Flotar","utility.float_start":"Inicio","utility.float_end":"Fin","utility.float_none":"Ninguno","utility.spacing_gutter":"El relleno lateral de una columna es su espaciado: cambiarlo cambia el espacio entre columnas","inline_style.section_title":"Estilo","inline_style.dialog_title":"Estilo: {kind}","inline_style.section_size":"Tama\xF1o","inline_style.section_spacing":"Espaciado","inline_style.section_border":"Borde","inline_style.section_background":"Fondo","inline_style.section_text":"Texto","inline_style.section_typography":"Tipograf\xEDa","inline_style.section_display":"Visualizaci\xF3n","inline_style.section_flex":"Flex","inline_style.section_position":"Posici\xF3n","inline_style.section_custom":"CSS libre","inline_style.all_sizes":"Se aplica a todos los tama\xF1os","inline_style.overridden":"La clase {class} tiene prioridad sobre este valor","inline_style.invalid":"Esta propiedad no acepta ese valor","inline_style.catalog":"Clases de Bootstrap","inline_style.shadow_x":"X","inline_style.shadow_y":"Y","inline_style.shadow_blur":"Desenfoque","inline_style.shadow_spread":"Extensi\xF3n","inline_style.shadow_color":"Color","inline_style.shadow_inset":"Interior","inline_style.shadow_text_mode":"Editar como texto","inline_style.shadow_builder_mode":"Editar con el constructor","inline_style.prop_width":"Ancho","inline_style.prop_height":"Alto","inline_style.prop_min_width":"Ancho m\xEDnimo","inline_style.prop_min_height":"Alto m\xEDnimo","inline_style.prop_max_width":"Ancho m\xE1ximo","inline_style.prop_max_height":"Alto m\xE1ximo","inline_style.prop_margin_top":"Margen superior","inline_style.prop_margin_right":"Margen derecho","inline_style.prop_margin_bottom":"Margen inferior","inline_style.prop_margin_left":"Margen izquierdo","inline_style.prop_padding_top":"Relleno superior","inline_style.prop_padding_right":"Relleno derecho","inline_style.prop_padding_bottom":"Relleno inferior","inline_style.prop_padding_left":"Relleno izquierdo","inline_style.prop_border_width":"Grosor del borde","inline_style.prop_border_style":"Estilo del borde","inline_style.prop_border_color":"Color del borde","inline_style.prop_border_radius":"Radio del borde","inline_style.prop_box_shadow":"Sombra","inline_style.prop_background_color":"Color de fondo","inline_style.prop_background_image":"Imagen de fondo","inline_style.prop_background_size":"Tama\xF1o del fondo","inline_style.prop_background_position":"Posici\xF3n del fondo","inline_style.prop_background_repeat":"Repetici\xF3n del fondo","inline_style.prop_color":"Color","inline_style.prop_font_size":"Tama\xF1o de letra","inline_style.prop_text_align":"Alineaci\xF3n","inline_style.prop_text_shadow":"Sombra del texto","inline_style.prop_font_family":"Fuente","inline_style.prop_font_weight":"Grosor de letra","inline_style.prop_font_style":"Estilo de letra","inline_style.prop_line_height":"Interlineado","inline_style.prop_letter_spacing":"Espaciado entre letras","inline_style.prop_text_transform":"May\xFAsculas","inline_style.prop_text_decoration":"Decoraci\xF3n","inline_style.prop_display":"Display","inline_style.prop_opacity":"Opacidad","inline_style.prop_overflow":"Desbordamiento","inline_style.prop_visibility":"Visibilidad","inline_style.prop_position":"Posici\xF3n","inline_style.prop_top":"Arriba","inline_style.prop_right":"Derecha","inline_style.prop_bottom":"Abajo","inline_style.prop_left":"Izquierda","inline_style.prop_z_index":"Z-index","error.sortable_missing":"\xA1SortableJS no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de Sortable; sin \xE9l no se puede arrastrar.","warning.already_editing":"Este elemento ya tiene un editor: se devuelve ese, con las opciones con las que se cre\xF3.","warning.destroyed":"Se ha llamado a {method}() en un editor destruido, y no hace nada.","warning.duplicate_build":"grideditor.js se ha cargado dos veces: se mantiene el primer GridEditor.","warning.adapter_no_jquery":"grideditor.jquery.js necesita jQuery 4 y la p\xE1gina no tiene jQuery: la API de jQuery no est\xE1 disponible.","error.tinymce_missing":"\xA1tinyMCE no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de tinyMCE.","error.ckeditor_missing":"\xA1CKEditor 5 no est\xE1 disponible! Aseg\xFArate de haber cargado su archivo ckeditor5.umd.js.","error.ckeditor_start":"CKEditor no ha podido arrancar: {message}","warning.ckeditor_plugin":"CKEditor no tiene ning\xFAn plugin llamado {name}, as\xED que se deja fuera.","error.codemirror_missing":"\xA1CodeMirror no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de CodeMirror; sin \xE9l el c\xF3digo se edita en un textarea normal.","error.summernote_missing":"\xA1Summernote no est\xE1 disponible! Aseg\xFArate de haber cargado jQuery y el archivo js de Summernote."};})();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/js/register.js", "../../src/js/locales/grideditor.es.js"],
4
- "sourcesContent": ["/**\n * What a plugin's or a locale's classic script imports in place of the\n * editor: the GridEditor the page already loaded.\n *\n * The build points `import { GridEditor } from '../grideditor.js'` here for\n * the classic scripts, so each registers on the editor the page has rather\n * than bringing its own. Loaded before the editor there is nothing to\n * register on, and saying so is better than a TypeError three calls later.\n */\nvar GridEditor = window.GridEditor;\n\nif (!GridEditor || typeof GridEditor.get !== 'function') {\n throw new Error('grid-editor: load grideditor.js (or grideditor.bundle.min.js) before its plugins, ' +\n 'its locales and grideditor.jquery.js');\n}\n\nexport { GridEditor };\nexport default GridEditor;\n", "/**\n * Spanish strings for grid-editor.\n *\n * Load after the editor and select with `locale: 'es'`:\n *\n * <script src=\"dist/grideditor.min.js\"></script>\n * <script src=\"dist/locales/grideditor.es.js\"></script>\n * <script>new GridEditor('#myGrid', { locale: 'es' });</script>\n *\n * or, as a module, `import '@themarioga/grid-editor/locales/es'`.\n *\n * This is one of the two locales grid-editor ships, so it is held to complete\n * coverage of `GridEditor.locales.en`: test/locales.js fails when a key\n * is missing. Add the Spanish string in the same change that adds the English\n * one, and keep the wording short enough to fit the tooltip or the dropdown\n * item it appears in.\n */\nimport { GridEditor } from '../grideditor.js';\n\nGridEditor.locales.es = {\n 'tool.move': 'Mover',\n 'tool.settings': 'Configuraci\u00F3n',\n 'tool.add_row': 'A\u00F1adir fila',\n 'tool.delete_text': 'Quitar texto',\n 'tool.delete_plain': 'Quitar contenido',\n 'tool.edit_html': 'Editar html',\n 'codemirror.apply': 'Aplicar',\n 'codemirror.cancel': 'Cancelar',\n 'tool.convert_type': 'Editar como texto de {editor}',\n 'text.add': 'Texto',\n 'text.add_type': 'Texto ({editor})',\n 'text.no_editor': 'No hay cargado ning\u00FAn editor de texto \"{type}\": este texto se puede mover y borrar, pero no editar',\n 'text.tinymce': 'tinyMCE',\n 'text.ckeditor': 'CKEditor',\n 'text.summernote': 'Summernote',\n 'tool.add_column': 'A\u00F1adir columna\\n(mant\u00E9n pulsado para elegir el ancho)',\n 'tool.column_size': '{size} de 12',\n 'tool.column_equal': 'Igual: reparte lo que queda de la fila',\n 'tool.column_auto': 'Auto: tan ancha como su contenido',\n 'tool.delete_row': 'Borrar fila',\n 'tool.delete_column': 'Borrar columna',\n 'tool.delete_element': 'Borrar elemento',\n 'tool.delete_container': 'Borrar contenedor',\n 'tool.delete_pane': 'Borrar panel',\n 'tool.rename': 'Haz doble clic para renombrar',\n 'tool.toggle_popup': 'Plegar esta ventana mientras editas',\n 'tool.element_info': 'Elemento: {name}',\n 'tool.column_narrower': 'Estrechar columna\\n(May\u00FAs para el m\u00EDnimo)',\n 'tool.column_wider': 'Ensanchar columna\\n(May\u00FAs para el m\u00E1ximo)',\n 'tool.indent_decrease': 'Reducir sangr\u00EDa\\n(May\u00FAs para quitarla)',\n 'tool.indent_increase': 'Aumentar sangr\u00EDa\\n(May\u00FAs para el m\u00E1ximo)',\n 'tool.edit_source': 'Editar el c\u00F3digo fuente',\n 'tool.preview': 'Vista previa',\n 'tool.more': 'M\u00E1s',\n 'group.rows': 'Filas',\n 'group.content': 'Contenido',\n 'group.elements': 'Elementos',\n 'group.select': 'A\u00F1adir',\n 'panel.title': 'Ajustes: {kind}',\n 'panel.close': 'Cerrar',\n 'panel.done': 'Hecho',\n 'panel.id': 'Id',\n 'panel.classes': 'Clases',\n 'panel.section_general': 'Id y clases',\n 'panel.editor': 'Editor',\n 'panel.kind_row': 'Fila',\n 'panel.kind_column': 'Columna',\n 'panel.kind_text': 'Texto',\n 'panel.kind_element': 'Elemento',\n 'panel.kind_section': 'Secci\u00F3n',\n 'panel.kind_tab': 'Pesta\u00F1a',\n 'panel.kind_accordion_item': 'Elemento de acorde\u00F3n',\n 'tool.id_placeholder': 'id',\n 'tool.id_title': 'Asignar un identificador \u00FAnico',\n 'tool.classes_placeholder': 'clases',\n 'tool.classes_title': 'Clases css, separadas por espacios',\n 'tool.toggle_class': 'Aplicar o quitar el estilo \"{label}\"',\n 'row.add': 'A\u00F1adir fila {layout}',\n 'row.add_row_cols': 'A\u00F1adir una fila de {columns} columnas, {counts} por fila',\n 'container.add_tabs': 'Pesta\u00F1as',\n 'container.add_tab': 'A\u00F1adir pesta\u00F1a',\n 'container.tab_label': 'Pesta\u00F1a {number}',\n 'container.tabs_section': 'Pesta\u00F1as',\n 'container.tabs_style': 'Estilo',\n 'container.tabs_style_tabs': 'Pesta\u00F1as',\n 'container.tabs_style_pills': 'Pills',\n 'container.tabs_style_underline': 'Subrayado',\n 'container.tabs_width': 'Ancho',\n 'container.tabs_width_natural': 'Natural',\n 'container.tabs_width_fill': 'Rellenar',\n 'container.tabs_width_justified': 'Justificado',\n 'container.tabs_align': 'Alineaci\u00F3n',\n 'container.tabs_align_start': 'Inicio',\n 'container.tabs_align_center': 'Centro',\n 'container.tabs_align_end': 'Fin',\n 'container.tabs_layout': 'Disposici\u00F3n',\n 'container.tabs_layout_horizontal': 'Horizontal',\n 'container.tabs_layout_vertical': 'Vertical',\n 'container.tabs_layout_vertical_from': 'Vertical desde {breakpoint}',\n 'container.add_accordion': 'Acorde\u00F3n',\n 'container.add_accordion_item': 'A\u00F1adir apartado',\n 'container.accordion_label': 'Apartado {number}',\n 'container.add_popup': 'Ventana emergente',\n 'container.popup_title': 'T\u00EDtulo',\n 'container.popup_trigger': 'Abrir',\n 'container.add_card': 'Tarjeta',\n 'container.card_title': 'T\u00EDtulo de la tarjeta',\n 'container.card_footer': 'Pie de la tarjeta',\n 'confirm.title': 'Confirmar',\n 'confirm.ok': 'Borrar',\n 'confirm.cancel': 'Cancelar',\n 'confirm.delete_row': '\u00BFSeguro que quieres borrar esta fila?',\n 'confirm.delete_column': '\u00BFSeguro que quieres borrar esta columna?',\n 'confirm.delete_text': '\u00BFSeguro que quieres borrar este texto?',\n 'confirm.delete_plain': '\u00BFSeguro que quieres borrar este contenido?',\n 'confirm.delete_element': '\u00BFSeguro que quieres borrar este elemento?',\n 'confirm.delete_container': '\u00BFSeguro que quieres borrar este contenedor y todo su contenido?',\n 'confirm.delete_tab': '\u00BFSeguro que quieres borrar esta pesta\u00F1a y todo su contenido?',\n 'confirm.delete_accordion_item': '\u00BFSeguro que quieres borrar este apartado y todo su contenido?',\n 'view.all': 'Todos los tama\u00F1os',\n 'view.xs': 'M\u00F3vil',\n 'view.sm': 'Tablet',\n 'view.md': 'Escritorio peque\u00F1o',\n 'view.lg': 'Escritorio',\n 'view.xl': 'Escritorio grande',\n 'view.xxl': 'Pantalla panor\u00E1mica',\n 'utility.section': 'Responsive: {view}',\n 'utility.col_width': 'Ancho',\n 'utility.col_equal': 'Igual',\n 'utility.col_auto': 'Auto',\n 'section.add': 'Secci\u00F3n',\n 'section.width': 'Ancho',\n 'section.fixed': 'Fijo',\n 'section.fluid': 'Ancho completo',\n 'section.from': 'Fijo desde {breakpoint}',\n 'tool.add_row_to_section': 'A\u00F1adir fila',\n 'tool.delete_section': 'Quitar secci\u00F3n',\n 'confirm.delete_section': '\u00BFSeguro que quieres borrar esta secci\u00F3n y todo su contenido?',\n 'tool.copy': 'Copiar',\n 'tool.paste': 'Pegar',\n 'clipboard.paste_row': 'Pegar fila',\n 'clipboard.paste_section': 'Pegar secci\u00F3n',\n 'autosave.restore_title': '\u00BFRecuperar el borrador?',\n 'autosave.restore_message': 'Hay un borrador de esta p\u00E1gina guardado el {date}, con cambios que no se publicaron. \u00BFQuieres recuperarlo?',\n 'autosave.restore': 'Recuperar',\n 'autosave.discard': 'Descartar',\n 'utility.col_from_row': 'De la fila: {count}',\n 'utility.row_cols': 'Columnas por fila',\n 'badge.row_cols': '{count} por fila',\n 'badge.row_cols_auto': 'Tan anchas como su contenido',\n 'utility.default': 'Por defecto',\n 'utility.inherit': 'Hereda: {value} (de {breakpoint})',\n 'utility.varies': 'Cambia en {breakpoints}; elegir aqu\u00ED lo sustituye',\n 'utility.display': 'Display',\n 'utility.visibility_hidden': 'Oculto',\n 'tool.hide_in_view': 'Ocultar en esta vista',\n 'tool.show_in_view': 'Mostrar en esta vista',\n 'badge.hidden_in': 'Oculto en {breakpoints}',\n 'utility.order': 'Orden',\n 'utility.order_first': 'Primero',\n 'utility.order_last': '\u00DAltimo',\n 'tool.order_earlier': 'Antes en esta vista',\n 'tool.order_later': 'Despu\u00E9s en esta vista',\n 'badge.order': 'Orden: {value}',\n 'utility.justify_content': 'Justificar columnas',\n 'utility.align_items': 'Alinear columnas',\n 'utility.align_content': 'Alinear l\u00EDneas',\n 'utility.flex_direction': 'Direcci\u00F3n',\n 'utility.flex_wrap': 'Salto de l\u00EDnea',\n 'utility.gap': 'Separaci\u00F3n',\n 'utility.row_gap': 'Separaci\u00F3n entre filas',\n 'utility.column_gap': 'Separaci\u00F3n entre columnas',\n 'utility.flex_fill': 'Rellenar',\n 'utility.flex_grow': 'Crecer',\n 'utility.flex_shrink': 'Encoger',\n 'utility.sticky': 'Fijo al desplazar',\n 'utility.align_self': 'Alinearse',\n 'utility.gutters': 'Espaciado entre columnas',\n 'utility.gutters_x': 'Espaciado horizontal',\n 'utility.gutters_y': 'Espaciado vertical',\n 'utility.padding': 'Relleno',\n 'utility.margin': 'Margen',\n 'utility.side_all': 'Todos los lados',\n 'utility.side_x': 'Izquierda y derecha',\n 'utility.side_y': 'Arriba y abajo',\n 'utility.side_t': 'Arriba',\n 'utility.side_b': 'Abajo',\n 'utility.side_s': 'Inicio',\n 'utility.side_e': 'Fin',\n 'utility.text_align': 'Alineaci\u00F3n del texto',\n 'utility.text_start': 'Inicio',\n 'utility.text_center': 'Centro',\n 'utility.text_end': 'Fin',\n 'utility.float': 'Flotar',\n 'utility.float_start': 'Inicio',\n 'utility.float_end': 'Fin',\n 'utility.float_none': 'Ninguno',\n 'utility.spacing_gutter': 'El relleno lateral de una columna es su espaciado: cambiarlo cambia el espacio entre columnas',\n 'inline_style.section_title': 'Estilo',\n 'inline_style.dialog_title': 'Estilo: {kind}',\n 'inline_style.section_size': 'Tama\u00F1o',\n 'inline_style.section_spacing': 'Espaciado',\n 'inline_style.section_border': 'Borde',\n 'inline_style.section_background': 'Fondo',\n 'inline_style.section_text': 'Texto',\n 'inline_style.section_typography': 'Tipograf\u00EDa',\n 'inline_style.section_display': 'Visualizaci\u00F3n',\n 'inline_style.section_flex': 'Flex',\n 'inline_style.section_position': 'Posici\u00F3n',\n 'inline_style.section_custom': 'CSS libre',\n 'inline_style.all_sizes': 'Se aplica a todos los tama\u00F1os',\n 'inline_style.overridden': 'La clase {class} tiene prioridad sobre este valor',\n 'inline_style.invalid': 'Esta propiedad no acepta ese valor',\n 'inline_style.catalog': 'Clases de Bootstrap',\n 'inline_style.shadow_x': 'X',\n 'inline_style.shadow_y': 'Y',\n 'inline_style.shadow_blur': 'Desenfoque',\n 'inline_style.shadow_spread': 'Extensi\u00F3n',\n 'inline_style.shadow_color': 'Color',\n 'inline_style.shadow_inset': 'Interior',\n 'inline_style.shadow_text_mode': 'Editar como texto',\n 'inline_style.shadow_builder_mode': 'Editar con el constructor',\n 'inline_style.prop_width': 'Ancho',\n 'inline_style.prop_height': 'Alto',\n 'inline_style.prop_min_width': 'Ancho m\u00EDnimo',\n 'inline_style.prop_min_height': 'Alto m\u00EDnimo',\n 'inline_style.prop_max_width': 'Ancho m\u00E1ximo',\n 'inline_style.prop_max_height': 'Alto m\u00E1ximo',\n 'inline_style.prop_margin_top': 'Margen superior',\n 'inline_style.prop_margin_right': 'Margen derecho',\n 'inline_style.prop_margin_bottom': 'Margen inferior',\n 'inline_style.prop_margin_left': 'Margen izquierdo',\n 'inline_style.prop_padding_top': 'Relleno superior',\n 'inline_style.prop_padding_right': 'Relleno derecho',\n 'inline_style.prop_padding_bottom': 'Relleno inferior',\n 'inline_style.prop_padding_left': 'Relleno izquierdo',\n 'inline_style.prop_border_width': 'Grosor del borde',\n 'inline_style.prop_border_style': 'Estilo del borde',\n 'inline_style.prop_border_color': 'Color del borde',\n 'inline_style.prop_border_radius': 'Radio del borde',\n 'inline_style.prop_box_shadow': 'Sombra',\n 'inline_style.prop_background_color': 'Color de fondo',\n 'inline_style.prop_background_image': 'Imagen de fondo',\n 'inline_style.prop_background_size': 'Tama\u00F1o del fondo',\n 'inline_style.prop_background_position': 'Posici\u00F3n del fondo',\n 'inline_style.prop_background_repeat': 'Repetici\u00F3n del fondo',\n 'inline_style.prop_color': 'Color',\n 'inline_style.prop_font_size': 'Tama\u00F1o de letra',\n 'inline_style.prop_text_align': 'Alineaci\u00F3n',\n 'inline_style.prop_text_shadow': 'Sombra del texto',\n 'inline_style.prop_font_family': 'Fuente',\n 'inline_style.prop_font_weight': 'Grosor de letra',\n 'inline_style.prop_font_style': 'Estilo de letra',\n 'inline_style.prop_line_height': 'Interlineado',\n 'inline_style.prop_letter_spacing': 'Espaciado entre letras',\n 'inline_style.prop_text_transform': 'May\u00FAsculas',\n 'inline_style.prop_text_decoration': 'Decoraci\u00F3n',\n 'inline_style.prop_display': 'Display',\n 'inline_style.prop_opacity': 'Opacidad',\n 'inline_style.prop_overflow': 'Desbordamiento',\n 'inline_style.prop_visibility': 'Visibilidad',\n 'inline_style.prop_position': 'Posici\u00F3n',\n 'inline_style.prop_top': 'Arriba',\n 'inline_style.prop_right': 'Derecha',\n 'inline_style.prop_bottom': 'Abajo',\n 'inline_style.prop_left': 'Izquierda',\n 'inline_style.prop_z_index': 'Z-index',\n 'error.sortable_missing': '\u00A1SortableJS no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de Sortable; sin \u00E9l no se puede arrastrar.',\n 'warning.already_editing': 'Este elemento ya tiene un editor: se devuelve ese, con las opciones con las que se cre\u00F3.',\n 'warning.destroyed': 'Se ha llamado a {method}() en un editor destruido, y no hace nada.',\n 'warning.duplicate_build': 'grideditor.js se ha cargado dos veces: se mantiene el primer GridEditor.',\n 'warning.adapter_no_jquery': 'grideditor.jquery.js necesita jQuery 4 y la p\u00E1gina no tiene jQuery: la API de jQuery no est\u00E1 disponible.',\n 'error.tinymce_missing': '\u00A1tinyMCE no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de tinyMCE.',\n 'error.ckeditor_missing': '\u00A1CKEditor 5 no est\u00E1 disponible! Aseg\u00FArate de haber cargado su archivo ckeditor5.umd.js.',\n 'error.ckeditor_start': 'CKEditor no ha podido arrancar: {message}',\n 'warning.ckeditor_plugin': 'CKEditor no tiene ning\u00FAn plugin llamado {name}, as\u00ED que se deja fuera.',\n 'error.codemirror_missing': '\u00A1CodeMirror no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de CodeMirror; sin \u00E9l el c\u00F3digo se edita en un textarea normal.',\n 'error.summernote_missing': '\u00A1Summernote no est\u00E1 disponible! Aseg\u00FArate de haber cargado jQuery y el archivo js de Summernote.',\n};\n\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * What a plugin's or a locale's classic script imports in place of the\n * editor: the GridEditor the page already loaded.\n *\n * The build points `import { GridEditor } from '../grideditor.js'` here for\n * the classic scripts, so each registers on the editor the page has rather\n * than bringing its own. Loaded before the editor there is nothing to\n * register on, and saying so is better than a TypeError three calls later.\n */\nvar GridEditor = window.GridEditor;\n\nif (!GridEditor || typeof GridEditor.get !== 'function') {\n throw new Error('grid-editor: load grideditor.js (or grideditor.bundle.min.js) before its plugins, ' +\n 'its locales and grideditor.jquery.js');\n}\n\nexport { GridEditor };\nexport default GridEditor;\n", "/**\n * Spanish strings for grid-editor.\n *\n * Load after the editor and select with `locale: 'es'`:\n *\n * <script src=\"dist/grideditor.min.js\"></script>\n * <script src=\"dist/locales/grideditor.es.js\"></script>\n * <script>new GridEditor('#myGrid', { locale: 'es' });</script>\n *\n * or, as a module, `import '@themarioga/grid-editor/locales/es'`.\n *\n * This is one of the two locales grid-editor ships, so it is held to complete\n * coverage of `GridEditor.locales.en`: test/locales.js fails when a key\n * is missing. Add the Spanish string in the same change that adds the English\n * one, and keep the wording short enough to fit the tooltip or the dropdown\n * item it appears in.\n */\nimport { GridEditor } from '../grideditor.js';\n\nGridEditor.locales.es = {\n 'tool.move': 'Mover',\n 'tool.settings': 'Configuraci\u00F3n',\n 'tool.add_row': 'A\u00F1adir fila',\n 'tool.delete_text': 'Quitar texto',\n 'tool.delete_plain': 'Quitar contenido',\n 'tool.edit_html': 'Editar html',\n 'codemirror.apply': 'Aplicar',\n 'codemirror.cancel': 'Cancelar',\n 'tool.convert_type': 'Editar como texto de {editor}',\n 'text.add': 'Texto',\n 'text.add_type': 'Texto ({editor})',\n 'text.no_editor': 'No hay cargado ning\u00FAn editor de texto \"{type}\": este texto se puede mover y borrar, pero no editar',\n 'text.tinymce': 'tinyMCE',\n 'text.ckeditor': 'CKEditor',\n 'text.summernote': 'Summernote',\n 'tool.add_column': 'A\u00F1adir columna\\n(mant\u00E9n pulsado para elegir el ancho)',\n 'tool.column_size': '{size} de 12',\n 'tool.column_equal': 'Igual: reparte lo que queda de la fila',\n 'tool.column_auto': 'Auto: tan ancha como su contenido',\n 'tool.delete_row': 'Borrar fila',\n 'tool.delete_column': 'Borrar columna',\n 'tool.delete_element': 'Borrar elemento',\n 'tool.delete_container': 'Borrar contenedor',\n 'tool.delete_pane': 'Borrar panel',\n 'tool.rename': 'Haz doble clic para renombrar',\n 'tool.toggle_popup': 'Plegar esta ventana mientras editas',\n 'tool.element_info': 'Elemento: {name}',\n 'tool.column_narrower': 'Estrechar columna\\n(May\u00FAs para el m\u00EDnimo)',\n 'tool.column_wider': 'Ensanchar columna\\n(May\u00FAs para el m\u00E1ximo)',\n 'tool.indent_decrease': 'Reducir sangr\u00EDa\\n(May\u00FAs para quitarla)',\n 'tool.indent_increase': 'Aumentar sangr\u00EDa\\n(May\u00FAs para el m\u00E1ximo)',\n 'tool.edit_source': 'Editar el c\u00F3digo fuente',\n 'tool.preview': 'Vista previa',\n 'tool.more': 'M\u00E1s',\n 'group.rows': 'Filas',\n 'group.content': 'Contenido',\n 'group.elements': 'Elementos',\n 'group.select': 'A\u00F1adir',\n 'panel.title': 'Ajustes: {kind}',\n 'panel.close': 'Cerrar',\n 'panel.done': 'Hecho',\n 'panel.id': 'Id',\n 'panel.classes': 'Clases',\n 'panel.section_general': 'Id y clases',\n 'panel.editor': 'Editor',\n 'panel.kind_row': 'Fila',\n 'panel.kind_column': 'Columna',\n 'panel.kind_text': 'Texto',\n 'panel.kind_element': 'Elemento',\n 'panel.kind_section': 'Secci\u00F3n',\n 'panel.kind_tab': 'Pesta\u00F1a',\n 'panel.kind_accordion_item': 'Elemento de acorde\u00F3n',\n 'tool.id_placeholder': 'id',\n 'tool.id_title': 'Asignar un identificador \u00FAnico',\n 'tool.classes_placeholder': 'clases',\n 'tool.classes_title': 'Clases css, separadas por espacios',\n 'tool.toggle_class': 'Aplicar o quitar el estilo \"{label}\"',\n 'row.add': 'A\u00F1adir fila {layout}',\n 'row.add_row_cols': 'A\u00F1adir una fila de {columns} columnas, {counts} por fila',\n 'container.add_tabs': 'Pesta\u00F1as',\n 'container.add_tab': 'A\u00F1adir pesta\u00F1a',\n 'container.tab_label': 'Pesta\u00F1a {number}',\n 'container.tabs_section': 'Pesta\u00F1as',\n 'container.tabs_style': 'Estilo',\n 'container.tabs_style_tabs': 'Pesta\u00F1as',\n 'container.tabs_style_pills': 'Pills',\n 'container.tabs_style_underline': 'Subrayado',\n 'container.tabs_width': 'Ancho',\n 'container.tabs_width_natural': 'Natural',\n 'container.tabs_width_fill': 'Rellenar',\n 'container.tabs_width_justified': 'Justificado',\n 'container.tabs_align': 'Alineaci\u00F3n',\n 'container.tabs_align_start': 'Inicio',\n 'container.tabs_align_center': 'Centro',\n 'container.tabs_align_end': 'Fin',\n 'container.tabs_layout': 'Disposici\u00F3n',\n 'container.tabs_layout_horizontal': 'Horizontal',\n 'container.tabs_layout_vertical': 'Vertical',\n 'container.tabs_layout_vertical_from': 'Vertical desde {breakpoint}',\n 'container.add_carousel': 'Carrusel',\n 'container.add_carousel_item': 'A\u00F1adir diapositiva',\n 'confirm.delete_carousel_item': '\u00BFBorrar esta diapositiva y todo lo que contiene?',\n 'panel.kind_carousel_item': 'Diapositiva',\n 'container.carousel_previous': 'Anterior',\n 'container.carousel_next': 'Siguiente',\n 'container.carousel_slide_label': 'Diapositiva {number}',\n 'container.carousel_counter': '{current} / {total}',\n 'tool.carousel_show_previous': 'Diapositiva anterior',\n 'tool.carousel_show_next': 'Diapositiva siguiente',\n 'tool.carousel_move_back': 'Mover atr\u00E1s',\n 'tool.carousel_move_forward': 'Mover adelante',\n 'container.carousel_section': 'Carrusel',\n 'container.carousel_controls': 'Flechas',\n 'container.carousel_indicators': 'Indicadores',\n 'container.carousel_fade': 'Fundido',\n 'container.carousel_dark': 'Tema oscuro',\n 'container.carousel_ride': 'Autoplay',\n 'container.carousel_ride_no': 'No',\n 'container.carousel_ride_load': 'Al cargar',\n 'container.carousel_ride_interaction': 'Tras la primera interacci\u00F3n',\n 'container.carousel_interval': 'Intervalo (s)',\n 'container.carousel_pause': 'Pausa al pasar el rat\u00F3n',\n 'container.carousel_wrap': 'Volver al principio',\n 'container.carousel_keyboard': 'Teclado',\n 'container.carousel_touch': 'T\u00E1ctil',\n 'container.carousel_item_section': 'Diapositiva',\n 'container.add_accordion': 'Acorde\u00F3n',\n 'container.add_accordion_item': 'A\u00F1adir apartado',\n 'container.accordion_label': 'Apartado {number}',\n 'container.add_popup': 'Ventana emergente',\n 'container.popup_title': 'T\u00EDtulo',\n 'container.popup_trigger': 'Abrir',\n 'container.add_card': 'Tarjeta',\n 'container.card_title': 'T\u00EDtulo de la tarjeta',\n 'container.card_footer': 'Pie de la tarjeta',\n 'confirm.title': 'Confirmar',\n 'confirm.ok': 'Borrar',\n 'confirm.cancel': 'Cancelar',\n 'confirm.delete_row': '\u00BFSeguro que quieres borrar esta fila?',\n 'confirm.delete_column': '\u00BFSeguro que quieres borrar esta columna?',\n 'confirm.delete_text': '\u00BFSeguro que quieres borrar este texto?',\n 'confirm.delete_plain': '\u00BFSeguro que quieres borrar este contenido?',\n 'confirm.delete_element': '\u00BFSeguro que quieres borrar este elemento?',\n 'confirm.delete_container': '\u00BFSeguro que quieres borrar este contenedor y todo su contenido?',\n 'confirm.delete_tab': '\u00BFSeguro que quieres borrar esta pesta\u00F1a y todo su contenido?',\n 'confirm.delete_accordion_item': '\u00BFSeguro que quieres borrar este apartado y todo su contenido?',\n 'view.all': 'Todos los tama\u00F1os',\n 'view.xs': 'M\u00F3vil',\n 'view.sm': 'Tablet',\n 'view.md': 'Escritorio peque\u00F1o',\n 'view.lg': 'Escritorio',\n 'view.xl': 'Escritorio grande',\n 'view.xxl': 'Pantalla panor\u00E1mica',\n 'utility.section': 'Responsive: {view}',\n 'utility.col_width': 'Ancho',\n 'utility.col_equal': 'Igual',\n 'utility.col_auto': 'Auto',\n 'section.add': 'Secci\u00F3n',\n 'section.width': 'Ancho',\n 'section.fixed': 'Fijo',\n 'section.fluid': 'Ancho completo',\n 'section.from': 'Fijo desde {breakpoint}',\n 'tool.add_row_to_section': 'A\u00F1adir fila',\n 'tool.delete_section': 'Quitar secci\u00F3n',\n 'confirm.delete_section': '\u00BFSeguro que quieres borrar esta secci\u00F3n y todo su contenido?',\n 'tool.copy': 'Copiar',\n 'tool.paste': 'Pegar',\n 'clipboard.paste_row': 'Pegar fila',\n 'clipboard.paste_section': 'Pegar secci\u00F3n',\n 'autosave.restore_title': '\u00BFRecuperar el borrador?',\n 'autosave.restore_message': 'Hay un borrador de esta p\u00E1gina guardado el {date}, con cambios que no se publicaron. \u00BFQuieres recuperarlo?',\n 'autosave.restore': 'Recuperar',\n 'autosave.discard': 'Descartar',\n 'utility.col_from_row': 'De la fila: {count}',\n 'utility.row_cols': 'Columnas por fila',\n 'badge.row_cols': '{count} por fila',\n 'badge.row_cols_auto': 'Tan anchas como su contenido',\n 'utility.default': 'Por defecto',\n 'utility.inherit': 'Hereda: {value} (de {breakpoint})',\n 'utility.varies': 'Cambia en {breakpoints}; elegir aqu\u00ED lo sustituye',\n 'utility.display': 'Display',\n 'utility.visibility_hidden': 'Oculto',\n 'tool.hide_in_view': 'Ocultar en esta vista',\n 'tool.show_in_view': 'Mostrar en esta vista',\n 'badge.hidden_in': 'Oculto en {breakpoints}',\n 'utility.order': 'Orden',\n 'utility.order_first': 'Primero',\n 'utility.order_last': '\u00DAltimo',\n 'tool.order_earlier': 'Antes en esta vista',\n 'tool.order_later': 'Despu\u00E9s en esta vista',\n 'badge.order': 'Orden: {value}',\n 'utility.justify_content': 'Justificar columnas',\n 'utility.align_items': 'Alinear columnas',\n 'utility.align_content': 'Alinear l\u00EDneas',\n 'utility.flex_direction': 'Direcci\u00F3n',\n 'utility.flex_wrap': 'Salto de l\u00EDnea',\n 'utility.gap': 'Separaci\u00F3n',\n 'utility.row_gap': 'Separaci\u00F3n entre filas',\n 'utility.column_gap': 'Separaci\u00F3n entre columnas',\n 'utility.flex_fill': 'Rellenar',\n 'utility.flex_grow': 'Crecer',\n 'utility.flex_shrink': 'Encoger',\n 'utility.sticky': 'Fijo al desplazar',\n 'utility.align_self': 'Alinearse',\n 'utility.gutters': 'Espaciado entre columnas',\n 'utility.gutters_x': 'Espaciado horizontal',\n 'utility.gutters_y': 'Espaciado vertical',\n 'utility.padding': 'Relleno',\n 'utility.margin': 'Margen',\n 'utility.side_all': 'Todos los lados',\n 'utility.side_x': 'Izquierda y derecha',\n 'utility.side_y': 'Arriba y abajo',\n 'utility.side_t': 'Arriba',\n 'utility.side_b': 'Abajo',\n 'utility.side_s': 'Inicio',\n 'utility.side_e': 'Fin',\n 'utility.text_align': 'Alineaci\u00F3n del texto',\n 'utility.text_start': 'Inicio',\n 'utility.text_center': 'Centro',\n 'utility.text_end': 'Fin',\n 'utility.float': 'Flotar',\n 'utility.float_start': 'Inicio',\n 'utility.float_end': 'Fin',\n 'utility.float_none': 'Ninguno',\n 'utility.spacing_gutter': 'El relleno lateral de una columna es su espaciado: cambiarlo cambia el espacio entre columnas',\n 'inline_style.section_title': 'Estilo',\n 'inline_style.dialog_title': 'Estilo: {kind}',\n 'inline_style.section_size': 'Tama\u00F1o',\n 'inline_style.section_spacing': 'Espaciado',\n 'inline_style.section_border': 'Borde',\n 'inline_style.section_background': 'Fondo',\n 'inline_style.section_text': 'Texto',\n 'inline_style.section_typography': 'Tipograf\u00EDa',\n 'inline_style.section_display': 'Visualizaci\u00F3n',\n 'inline_style.section_flex': 'Flex',\n 'inline_style.section_position': 'Posici\u00F3n',\n 'inline_style.section_custom': 'CSS libre',\n 'inline_style.all_sizes': 'Se aplica a todos los tama\u00F1os',\n 'inline_style.overridden': 'La clase {class} tiene prioridad sobre este valor',\n 'inline_style.invalid': 'Esta propiedad no acepta ese valor',\n 'inline_style.catalog': 'Clases de Bootstrap',\n 'inline_style.shadow_x': 'X',\n 'inline_style.shadow_y': 'Y',\n 'inline_style.shadow_blur': 'Desenfoque',\n 'inline_style.shadow_spread': 'Extensi\u00F3n',\n 'inline_style.shadow_color': 'Color',\n 'inline_style.shadow_inset': 'Interior',\n 'inline_style.shadow_text_mode': 'Editar como texto',\n 'inline_style.shadow_builder_mode': 'Editar con el constructor',\n 'inline_style.prop_width': 'Ancho',\n 'inline_style.prop_height': 'Alto',\n 'inline_style.prop_min_width': 'Ancho m\u00EDnimo',\n 'inline_style.prop_min_height': 'Alto m\u00EDnimo',\n 'inline_style.prop_max_width': 'Ancho m\u00E1ximo',\n 'inline_style.prop_max_height': 'Alto m\u00E1ximo',\n 'inline_style.prop_margin_top': 'Margen superior',\n 'inline_style.prop_margin_right': 'Margen derecho',\n 'inline_style.prop_margin_bottom': 'Margen inferior',\n 'inline_style.prop_margin_left': 'Margen izquierdo',\n 'inline_style.prop_padding_top': 'Relleno superior',\n 'inline_style.prop_padding_right': 'Relleno derecho',\n 'inline_style.prop_padding_bottom': 'Relleno inferior',\n 'inline_style.prop_padding_left': 'Relleno izquierdo',\n 'inline_style.prop_border_width': 'Grosor del borde',\n 'inline_style.prop_border_style': 'Estilo del borde',\n 'inline_style.prop_border_color': 'Color del borde',\n 'inline_style.prop_border_radius': 'Radio del borde',\n 'inline_style.prop_box_shadow': 'Sombra',\n 'inline_style.prop_background_color': 'Color de fondo',\n 'inline_style.prop_background_image': 'Imagen de fondo',\n 'inline_style.prop_background_size': 'Tama\u00F1o del fondo',\n 'inline_style.prop_background_position': 'Posici\u00F3n del fondo',\n 'inline_style.prop_background_repeat': 'Repetici\u00F3n del fondo',\n 'inline_style.prop_color': 'Color',\n 'inline_style.prop_font_size': 'Tama\u00F1o de letra',\n 'inline_style.prop_text_align': 'Alineaci\u00F3n',\n 'inline_style.prop_text_shadow': 'Sombra del texto',\n 'inline_style.prop_font_family': 'Fuente',\n 'inline_style.prop_font_weight': 'Grosor de letra',\n 'inline_style.prop_font_style': 'Estilo de letra',\n 'inline_style.prop_line_height': 'Interlineado',\n 'inline_style.prop_letter_spacing': 'Espaciado entre letras',\n 'inline_style.prop_text_transform': 'May\u00FAsculas',\n 'inline_style.prop_text_decoration': 'Decoraci\u00F3n',\n 'inline_style.prop_display': 'Display',\n 'inline_style.prop_opacity': 'Opacidad',\n 'inline_style.prop_overflow': 'Desbordamiento',\n 'inline_style.prop_visibility': 'Visibilidad',\n 'inline_style.prop_position': 'Posici\u00F3n',\n 'inline_style.prop_top': 'Arriba',\n 'inline_style.prop_right': 'Derecha',\n 'inline_style.prop_bottom': 'Abajo',\n 'inline_style.prop_left': 'Izquierda',\n 'inline_style.prop_z_index': 'Z-index',\n 'error.sortable_missing': '\u00A1SortableJS no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de Sortable; sin \u00E9l no se puede arrastrar.',\n 'warning.already_editing': 'Este elemento ya tiene un editor: se devuelve ese, con las opciones con las que se cre\u00F3.',\n 'warning.destroyed': 'Se ha llamado a {method}() en un editor destruido, y no hace nada.',\n 'warning.duplicate_build': 'grideditor.js se ha cargado dos veces: se mantiene el primer GridEditor.',\n 'warning.adapter_no_jquery': 'grideditor.jquery.js necesita jQuery 4 y la p\u00E1gina no tiene jQuery: la API de jQuery no est\u00E1 disponible.',\n 'error.tinymce_missing': '\u00A1tinyMCE no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de tinyMCE.',\n 'error.ckeditor_missing': '\u00A1CKEditor 5 no est\u00E1 disponible! Aseg\u00FArate de haber cargado su archivo ckeditor5.umd.js.',\n 'error.ckeditor_start': 'CKEditor no ha podido arrancar: {message}',\n 'warning.ckeditor_plugin': 'CKEditor no tiene ning\u00FAn plugin llamado {name}, as\u00ED que se deja fuera.',\n 'error.codemirror_missing': '\u00A1CodeMirror no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de CodeMirror; sin \u00E9l el c\u00F3digo se edita en un textarea normal.',\n 'error.summernote_missing': '\u00A1Summernote no est\u00E1 disponible! Aseg\u00FArate de haber cargado jQuery y el archivo js de Summernote.',\n};\n\n"],
5
+ "mappings": "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",
6
6
  "names": ["GridEditor", "GridEditor"]
7
7
  }
@@ -297,11 +297,26 @@ GridEditor.features.autosave = function(ge) {
297
297
  var found = readDraft(false);
298
298
  return found ? { html: found.html, savedAt: found.savedAt } : null;
299
299
  },
300
+ // What there is now is not a draft any more - a page calls this
301
+ // once it has saved to its server - so the save waiting does not
302
+ // write it back, and only a change from here makes a new draft
300
303
  clearDraft: function() {
301
304
  if (state === "unavailable") {
302
305
  return false;
303
306
  }
307
+ window.clearTimeout(timer);
308
+ timer = null;
304
309
  remove();
310
+ if (base !== null && state !== "asking" && !sourceOpen) {
311
+ var watching = !!observer && state === "enabled";
312
+ if (watching) {
313
+ observer.disconnect();
314
+ }
315
+ last = ge.snapshotHtml();
316
+ if (watching) {
317
+ watch();
318
+ }
319
+ }
305
320
  return true;
306
321
  }
307
322
  }
@@ -303,11 +303,26 @@
303
303
  var found = readDraft(false);
304
304
  return found ? { html: found.html, savedAt: found.savedAt } : null;
305
305
  },
306
+ // What there is now is not a draft any more - a page calls this
307
+ // once it has saved to its server - so the save waiting does not
308
+ // write it back, and only a change from here makes a new draft
306
309
  clearDraft: function() {
307
310
  if (state === "unavailable") {
308
311
  return false;
309
312
  }
313
+ window.clearTimeout(timer);
314
+ timer = null;
310
315
  remove();
316
+ if (base !== null && state !== "asking" && !sourceOpen) {
317
+ var watching = !!observer && state === "enabled";
318
+ if (watching) {
319
+ observer.disconnect();
320
+ }
321
+ last = ge.snapshotHtml();
322
+ if (watching) {
323
+ watch();
324
+ }
325
+ }
311
326
  return true;
312
327
  }
313
328
  }
@@ -1 +1 @@
1
- (()=>{var c=window.GridEditor;if(!c||typeof c.get!="function")throw new Error("grid-editor: load grideditor.js (or grideditor.bundle.min.js) before its plugins, its locales and grideditor.jquery.js");Object.assign(c.locales.en,{"autosave.restore_title":"Restore the draft?","autosave.restore_message":"There is a draft of this page saved on {date}, with changes that were not published. Restore it?","autosave.restore":"Restore","autosave.discard":"Discard"});var L=1,A={local:"localStorage",session:"sessionStorage"},k=1e3,D=new Set;function G(e){for(var s=2166136261,n=0;n<e.length;n++)s^=e.charCodeAt(n),s=Math.imul(s,16777619);return(s>>>0).toString(16).padStart(8,"0")}function H(e){return!!e&&typeof e=="object"&&e.version===L&&typeof e.html=="string"&&typeof e.base=="string"&&typeof e.savedAt=="string"&&!isNaN(Date.parse(e.savedAt))}c.features.autosave=function(e){var s=j(e.settings.autosave||{}),n=s.key||"grideditor.autosave:"+window.location.pathname+"#"+e.canvas.id,v=N(s.storage),r="disabled",g=!0,S=!1,l=null,f=null,d=null,u=null,i=null,p=!1,x=!1;v?D.has(n)?(e.warn('autosave: another editor on this page already saves to "'+n+'", so this one does not; give each its own autosave.key'),r="unavailable"):(D.add(n),s.enabled&&(r="enabled",l=E(!0))):(e.warn("autosave: the browser will not give this page its "+A[s.storage]+", so nothing is saved"),r="unavailable");function j(t){var a={enabled:t.enabled===void 0?!0:!!t.enabled,storage:t.storage===void 0?"local":t.storage,key:t.key===void 0?null:t.key,delay:t.delay===void 0?k:t.delay,maxAge:t.maxAge===void 0?null:t.maxAge};return A[a.storage]||(e.warn('autosave.storage "'+a.storage+'" is not local or session: local is used'),a.storage="local"),a.key!==null&&(typeof a.key!="string"||a.key==="")&&(e.warn("autosave.key must be a string: the page's own key is used"),a.key=null),(typeof a.delay!="number"||!Number.isInteger(a.delay)||a.delay<0)&&(e.warn("autosave.delay must be a whole number of milliseconds, 0 or more: "+k+" is used"),a.delay=k),a.maxAge!==null&&!(typeof a.maxAge=="number"&&isFinite(a.maxAge)&&a.maxAge>0)&&(e.warn("autosave.maxAge must be a number of milliseconds over 0, or null: drafts do not expire"),a.maxAge=null),a}function N(t){try{var a=window[A[t]];return a.getItem(n),a}catch(o){return null}}function E(t){var a;try{a=v.getItem(n)}catch(w){return null}if(a===null)return null;var o=null;try{o=JSON.parse(a)}catch(w){}return H(o)?t&&s.maxAge!==null&&Date.now()-Date.parse(o.savedAt)>s.maxAge?(m(),null):o:(t&&(e.warn('autosave: what is saved under "'+n+'" is not a draft this version can read: it is discarded'),m()),null)}function m(){try{v.removeItem(n)}catch(t){}}function h(t){if(window.clearTimeout(u),u=null,p||f===null)return!1;var a=!!i;a&&i.disconnect();var o=e.snapshotHtml();if(a&&b(),o===d)return!1;var w={version:L,html:o,savedAt:new Date().toISOString(),base:f};try{v.setItem(n,JSON.stringify(w))}catch(y){return x||(x=!0,e.warn("autosave: the draft could not be saved ("+(y&&y.message||y)+")")),e.emit("autosave-error",{canvas:e.canvas,error:y}),!1}return d=o,e.emit("after-autosave",{canvas:e.canvas,html:o,savedAt:w.savedAt,source:t}),!0}function R(){window.clearTimeout(u),u=window.setTimeout(function(){h("change")},s.delay)}function b(){i||(i=new MutationObserver(R)),i.observe(e.canvas,{subtree:!0,childList:!0,attributes:!0,characterData:!0})}function O(){window.clearTimeout(u),u=null,i&&i.disconnect()}function I(){r==="enabled"&&h("pagehide")}function _(){if(!(r==="destroyed"||r==="unavailable")){if(d=e.snapshotHtml(),f=G(d),window.addEventListener("pagehide",I),r==="enabled"&&l&&l.base===f&&l.html!==d){T(l);return}l=null,r==="enabled"&&b()}}function F(t){try{return new Date(t).toLocaleString(e.settings.locale||void 0)}catch(a){return new Date(t).toLocaleString()}}function T(t){r="asking",e.confirm(e.t("autosave.restore_message",{date:F(t.savedAt)}),{title:e.t("autosave.restore_title"),ok:e.t("autosave.restore"),cancel:e.t("autosave.discard")},function(a){if(r!=="destroyed"){if(a===null){window.setTimeout(function(){r==="asking"&&T(t)},0);return}l=null,a?(d=t.html,e.setHtml(t.html),e.emit("after-restore-draft",{canvas:e.canvas,html:t.html,savedAt:t.savedAt})):m(),r=g?"enabled":"disabled",r==="enabled"&&b()}})}return{onInit:function(){S||(S=!0,Promise.resolve().then(_))},onSourceOpen:function(){p=!0},onSourceClose:function(){p=!1},onDestroy:function(){r==="enabled"&&u&&h("destroy"),O(),i=null,window.removeEventListener("pagehide",I),r!=="unavailable"&&D.delete(n),r="destroyed"},methods:{enableAutosave:function(){return r==="unavailable"?!1:r==="asking"?(g=!0,!0):(r!=="enabled"&&(r="enabled",f!==null&&b()),!0)},disableAutosave:function(){return r==="unavailable"?!1:r==="asking"?(g=!1,!0):(O(),r="disabled",!0)},saveDraft:function(){return r==="unavailable"||r==="asking"?!1:h("api")},getDraft:function(){if(r==="unavailable")return null;var t=E(!1);return t?{html:t.html,savedAt:t.savedAt}:null},clearDraft:function(){return r==="unavailable"?!1:(m(),!0)}}}};})();
1
+ (()=>{var v=window.GridEditor;if(!v||typeof v.get!="function")throw new Error("grid-editor: load grideditor.js (or grideditor.bundle.min.js) before its plugins, its locales and grideditor.jquery.js");Object.assign(v.locales.en,{"autosave.restore_title":"Restore the draft?","autosave.restore_message":"There is a draft of this page saved on {date}, with changes that were not published. Restore it?","autosave.restore":"Restore","autosave.discard":"Discard"});var L=1,A={local:"localStorage",session:"sessionStorage"},k=1e3,D=new Set;function F(e){for(var s=2166136261,n=0;n<e.length;n++)s^=e.charCodeAt(n),s=Math.imul(s,16777619);return(s>>>0).toString(16).padStart(8,"0")}function G(e){return!!e&&typeof e=="object"&&e.version===L&&typeof e.html=="string"&&typeof e.base=="string"&&typeof e.savedAt=="string"&&!isNaN(Date.parse(e.savedAt))}v.features.autosave=function(e){var s=j(e.settings.autosave||{}),n=s.key||"grideditor.autosave:"+window.location.pathname+"#"+e.canvas.id,m=N(s.storage),r="disabled",p=!0,S=!1,u=null,f=null,d=null,l=null,o=null,h=!1,x=!1;m?D.has(n)?(e.warn('autosave: another editor on this page already saves to "'+n+'", so this one does not; give each its own autosave.key'),r="unavailable"):(D.add(n),s.enabled&&(r="enabled",u=E(!0))):(e.warn("autosave: the browser will not give this page its "+A[s.storage]+", so nothing is saved"),r="unavailable");function j(t){var a={enabled:t.enabled===void 0?!0:!!t.enabled,storage:t.storage===void 0?"local":t.storage,key:t.key===void 0?null:t.key,delay:t.delay===void 0?k:t.delay,maxAge:t.maxAge===void 0?null:t.maxAge};return A[a.storage]||(e.warn('autosave.storage "'+a.storage+'" is not local or session: local is used'),a.storage="local"),a.key!==null&&(typeof a.key!="string"||a.key==="")&&(e.warn("autosave.key must be a string: the page's own key is used"),a.key=null),(typeof a.delay!="number"||!Number.isInteger(a.delay)||a.delay<0)&&(e.warn("autosave.delay must be a whole number of milliseconds, 0 or more: "+k+" is used"),a.delay=k),a.maxAge!==null&&!(typeof a.maxAge=="number"&&isFinite(a.maxAge)&&a.maxAge>0)&&(e.warn("autosave.maxAge must be a number of milliseconds over 0, or null: drafts do not expire"),a.maxAge=null),a}function N(t){try{var a=window[A[t]];return a.getItem(n),a}catch(i){return null}}function E(t){var a;try{a=m.getItem(n)}catch(y){return null}if(a===null)return null;var i=null;try{i=JSON.parse(a)}catch(y){}return G(i)?t&&s.maxAge!==null&&Date.now()-Date.parse(i.savedAt)>s.maxAge?(b(),null):i:(t&&(e.warn('autosave: what is saved under "'+n+'" is not a draft this version can read: it is discarded'),b()),null)}function b(){try{m.removeItem(n)}catch(t){}}function w(t){if(window.clearTimeout(l),l=null,h||f===null)return!1;var a=!!o;a&&o.disconnect();var i=e.snapshotHtml();if(a&&c(),i===d)return!1;var y={version:L,html:i,savedAt:new Date().toISOString(),base:f};try{m.setItem(n,JSON.stringify(y))}catch(g){return x||(x=!0,e.warn("autosave: the draft could not be saved ("+(g&&g.message||g)+")")),e.emit("autosave-error",{canvas:e.canvas,error:g}),!1}return d=i,e.emit("after-autosave",{canvas:e.canvas,html:i,savedAt:y.savedAt,source:t}),!0}function H(){window.clearTimeout(l),l=window.setTimeout(function(){w("change")},s.delay)}function c(){o||(o=new MutationObserver(H)),o.observe(e.canvas,{subtree:!0,childList:!0,attributes:!0,characterData:!0})}function O(){window.clearTimeout(l),l=null,o&&o.disconnect()}function T(){r==="enabled"&&w("pagehide")}function R(){if(!(r==="destroyed"||r==="unavailable")){if(d=e.snapshotHtml(),f=F(d),window.addEventListener("pagehide",T),r==="enabled"&&u&&u.base===f&&u.html!==d){I(u);return}u=null,r==="enabled"&&c()}}function _(t){try{return new Date(t).toLocaleString(e.settings.locale||void 0)}catch(a){return new Date(t).toLocaleString()}}function I(t){r="asking",e.confirm(e.t("autosave.restore_message",{date:_(t.savedAt)}),{title:e.t("autosave.restore_title"),ok:e.t("autosave.restore"),cancel:e.t("autosave.discard")},function(a){if(r!=="destroyed"){if(a===null){window.setTimeout(function(){r==="asking"&&I(t)},0);return}u=null,a?(d=t.html,e.setHtml(t.html),e.emit("after-restore-draft",{canvas:e.canvas,html:t.html,savedAt:t.savedAt})):b(),r=p?"enabled":"disabled",r==="enabled"&&c()}})}return{onInit:function(){S||(S=!0,Promise.resolve().then(R))},onSourceOpen:function(){h=!0},onSourceClose:function(){h=!1},onDestroy:function(){r==="enabled"&&l&&w("destroy"),O(),o=null,window.removeEventListener("pagehide",T),r!=="unavailable"&&D.delete(n),r="destroyed"},methods:{enableAutosave:function(){return r==="unavailable"?!1:r==="asking"?(p=!0,!0):(r!=="enabled"&&(r="enabled",f!==null&&c()),!0)},disableAutosave:function(){return r==="unavailable"?!1:r==="asking"?(p=!1,!0):(O(),r="disabled",!0)},saveDraft:function(){return r==="unavailable"||r==="asking"?!1:w("api")},getDraft:function(){if(r==="unavailable")return null;var t=E(!1);return t?{html:t.html,savedAt:t.savedAt}:null},clearDraft:function(){if(r==="unavailable")return!1;if(window.clearTimeout(l),l=null,b(),f!==null&&r!=="asking"&&!h){var t=!!o&&r==="enabled";t&&o.disconnect(),d=e.snapshotHtml(),t&&c()}return!0}}}};})();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/js/register.js", "../../src/js/plugins/grideditor.autosave.js"],
4
- "sourcesContent": ["/**\n * What a plugin's or a locale's classic script imports in place of the\n * editor: the GridEditor the page already loaded.\n *\n * The build points `import { GridEditor } from '../grideditor.js'` here for\n * the classic scripts, so each registers on the editor the page has rather\n * than bringing its own. Loaded before the editor there is nothing to\n * register on, and saying so is better than a TypeError three calls later.\n */\nvar GridEditor = window.GridEditor;\n\nif (!GridEditor || typeof GridEditor.get !== 'function') {\n throw new Error('grid-editor: load grideditor.js (or grideditor.bundle.min.js) before its plugins, ' +\n 'its locales and grideditor.jquery.js');\n}\n\nexport { GridEditor };\nexport default GridEditor;\n", "/**\n * Autosave for grid-editor.\n *\n * A feature plugin: load this file after the editor and what is being edited\n * is kept in the browser's storage as it changes, and offered back the next\n * time an editor starts from the same html. What it can ask the editor for is\n * the handle its factory is called with, described in docs/plugins.md.\n *\n * <script src=\"dist/grideditor.min.js\"></script>\n * <script src=\"dist/plugins/grideditor.autosave.min.js\"></script>\n *\n * It reads the canvas with ge.snapshotHtml(), which leaves the canvas\n * editing: the text being typed into stays open, with its cursor. A save\n * comes `delay` ms after the last change, and when the page is left.\n *\n * A draft remembers the html its editor started from, and is only offered\n * to an editor that starts from the same html: a page that loads one\n * document after another is not offered one document's draft over another.\n * Such a page gives each document a key of its own, and each keeps its draft.\n *\n * new GridEditor('#myGrid', { autosave: { key: 'page-42', storage: 'session' } });\n */\nimport { GridEditor } from '../grideditor.js';\n\nObject.assign(GridEditor.locales.en, {\n 'autosave.restore_title': 'Restore the draft?',\n 'autosave.restore_message': 'There is a draft of this page saved on {date}, with changes that were not published. Restore it?',\n 'autosave.restore': 'Restore',\n 'autosave.discard': 'Discard',\n});\n\nvar VERSION = 1;\nvar STORAGES = { local: 'localStorage', session: 'sessionStorage' };\nvar DEFAULT_DELAY = 1000;\n\n/** The keys the editors on this page save to: one editor to a key. */\nvar liveKeys = new Set();\n\n/** FNV-1a, 32 bits, as hex: enough to tell one document's html from another's. */\nfunction fingerprint(text) {\n var hash = 0x811c9dc5;\n\n for (var i = 0; i < text.length; i++) {\n hash ^= text.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193);\n }\n\n return (hash >>> 0).toString(16).padStart(8, '0');\n}\n\n/** A stored value that is a draft this file wrote, or null. */\nfunction validDraft(value) {\n return !!value && typeof value === 'object' && value.version === VERSION &&\n typeof value.html === 'string' && typeof value.base === 'string' &&\n typeof value.savedAt === 'string' && !isNaN(Date.parse(value.savedAt));\n}\n\nGridEditor.features.autosave = function(ge) {\n\n var options = optionsFrom(ge.settings.autosave || {});\n var key = options.key || 'grideditor.autosave:' + window.location.pathname + '#' + ge.canvas.id;\n var storage = storageFor(options.storage);\n\n // unavailable | disabled | asking | enabled | destroyed\n var state = 'disabled';\n var enabledAfterAsking = true; // What asking ends in: a method may have changed it meanwhile\n var started = false; // Whether the first init has been looked at\n var draft = null; // The draft found when the editor was made, while it may be offered\n var base = null; // The fingerprint of the html the editor started from\n var last = null; // The html saved last, or the one there was to start from\n var timer = null;\n var observer = null;\n var sourceOpen = false;\n var warnedWrite = false;\n\n if (!storage) {\n ge.warn('autosave: the browser will not give this page its ' + STORAGES[options.storage] +\n ', so nothing is saved');\n state = 'unavailable';\n } else if (liveKeys.has(key)) {\n ge.warn('autosave: another editor on this page already saves to \"' + key + '\", so this one does not; ' +\n 'give each its own autosave.key');\n state = 'unavailable';\n } else {\n liveKeys.add(key);\n if (options.enabled) {\n state = 'enabled';\n draft = readDraft(true);\n }\n }\n\n function optionsFrom(given) {\n var result = {\n enabled: given.enabled === undefined ? true : !!given.enabled,\n storage: given.storage === undefined ? 'local' : given.storage,\n key: given.key === undefined ? null : given.key,\n delay: given.delay === undefined ? DEFAULT_DELAY : given.delay,\n maxAge: given.maxAge === undefined ? null : given.maxAge,\n };\n\n if (!STORAGES[result.storage]) {\n ge.warn('autosave.storage \"' + result.storage + '\" is not local or session: local is used');\n result.storage = 'local';\n }\n if (result.key !== null && (typeof result.key !== 'string' || result.key === '')) {\n ge.warn('autosave.key must be a string: the page\\'s own key is used');\n result.key = null;\n }\n if (typeof result.delay !== 'number' || !Number.isInteger(result.delay) || result.delay < 0) {\n ge.warn('autosave.delay must be a whole number of milliseconds, 0 or more: ' + DEFAULT_DELAY + ' is used');\n result.delay = DEFAULT_DELAY;\n }\n if (result.maxAge !== null && !(typeof result.maxAge === 'number' && isFinite(result.maxAge) && result.maxAge > 0)) {\n ge.warn('autosave.maxAge must be a number of milliseconds over 0, or null: drafts do not expire');\n result.maxAge = null;\n }\n\n return result;\n }\n\n /** The storage, if the browser lets the page have it. */\n function storageFor(name) {\n try {\n var found = window[STORAGES[name]];\n found.getItem(key);\n return found;\n } catch (error) {\n return null;\n }\n }\n\n /**\n * The draft saved under the key, or null. Starting, one that cannot be\n * read or has expired is taken away: nothing will ever offer it.\n */\n function readDraft(starting) {\n var raw;\n\n try {\n raw = storage.getItem(key);\n } catch (error) {\n return null;\n }\n if (raw === null) { return null; }\n\n var value = null;\n try { value = JSON.parse(raw); } catch (error) { /* not ours, or mangled */ }\n\n if (!validDraft(value)) {\n if (starting) {\n ge.warn('autosave: what is saved under \"' + key + '\" is not a draft this version can read: it is discarded');\n remove();\n }\n return null;\n }\n\n if (starting && options.maxAge !== null && Date.now() - Date.parse(value.savedAt) > options.maxAge) {\n remove();\n return null;\n }\n\n return value;\n }\n\n function remove() {\n try { storage.removeItem(key); } catch (error) { /* nothing to take away */ }\n }\n\n /** Write the canvas as it is, if it changed. True when it was written. */\n function save(source) {\n window.clearTimeout(timer);\n timer = null;\n\n if (sourceOpen || base === null) { return false; }\n\n // The read itself may change the canvas - getHtml, when a plugin\n // cannot be read on a copy - and that is not a change to save\n var watching = !!observer;\n if (watching) { observer.disconnect(); }\n var html = ge.snapshotHtml();\n if (watching) { watch(); }\n\n if (html === last) { return false; }\n\n var value = { version: VERSION, html: html, savedAt: new Date().toISOString(), base: base };\n\n try {\n storage.setItem(key, JSON.stringify(value));\n } catch (error) {\n if (!warnedWrite) {\n warnedWrite = true;\n ge.warn('autosave: the draft could not be saved (' + (error && error.message || error) + ')');\n }\n ge.emit('autosave-error', { canvas: ge.canvas, error: error });\n return false;\n }\n\n last = html;\n ge.emit('after-autosave', { canvas: ge.canvas, html: html, savedAt: value.savedAt, source: source });\n return true;\n }\n\n function schedule() {\n window.clearTimeout(timer);\n timer = window.setTimeout(function() { save('change'); }, options.delay);\n }\n\n function watch() {\n if (!observer) { observer = new MutationObserver(schedule); }\n observer.observe(ge.canvas, { subtree: true, childList: true, attributes: true, characterData: true });\n }\n\n function unwatch() {\n window.clearTimeout(timer);\n timer = null;\n if (observer) { observer.disconnect(); }\n }\n\n function onPageHide() {\n if (state === 'enabled') { save('pagehide'); }\n }\n\n /** After the first init has finished: what there is to start from, and the draft offered. */\n function start() {\n if (state === 'destroyed' || state === 'unavailable') { return; }\n\n last = ge.snapshotHtml();\n base = fingerprint(last);\n window.addEventListener('pagehide', onPageHide);\n\n // One of another document, or the same as what is there, is not offered\n if (state === 'enabled' && draft && draft.base === base && draft.html !== last) {\n ask(draft);\n return;\n }\n\n draft = null;\n if (state === 'enabled') { watch(); }\n }\n\n function dateOf(savedAt) {\n try {\n return new Date(savedAt).toLocaleString(ge.settings.locale || undefined);\n } catch (error) {\n return new Date(savedAt).toLocaleString();\n }\n }\n\n function ask(found) {\n state = 'asking';\n\n ge.confirm(ge.t('autosave.restore_message', { date: dateOf(found.savedAt) }), {\n title: ge.t('autosave.restore_title'),\n ok: ge.t('autosave.restore'),\n cancel: ge.t('autosave.discard'),\n }, function(restore) {\n if (state === 'destroyed') { return; }\n\n // Taken away unanswered - setLocale - so asked again, in the new\n // language, once the old modal is out of the way\n if (restore === null) {\n window.setTimeout(function() {\n if (state === 'asking') { ask(found); }\n }, 0);\n return;\n }\n\n draft = null;\n\n if (restore) {\n last = found.html;\n ge.setHtml(found.html);\n ge.emit('after-restore-draft', { canvas: ge.canvas, html: found.html, savedAt: found.savedAt });\n } else {\n remove();\n }\n\n state = enabledAfterAsking ? 'enabled' : 'disabled';\n if (state === 'enabled') { watch(); }\n });\n }\n\n return {\n // The first init, once it has finished: the canvas is ready to be read\n onInit: function() {\n if (started) { return; }\n started = true;\n Promise.resolve().then(start);\n },\n\n onSourceOpen: function() { sourceOpen = true; },\n onSourceClose: function() { sourceOpen = false; },\n\n onDestroy: function() {\n if (state === 'enabled' && timer) { save('destroy'); }\n\n unwatch();\n observer = null;\n window.removeEventListener('pagehide', onPageHide);\n if (state !== 'unavailable') { liveKeys.delete(key); }\n state = 'destroyed';\n },\n\n methods: {\n enableAutosave: function() {\n if (state === 'unavailable') { return false; }\n if (state === 'asking') {\n enabledAfterAsking = true;\n return true;\n }\n if (state !== 'enabled') {\n state = 'enabled';\n if (base !== null) { watch(); }\n }\n return true;\n },\n\n disableAutosave: function() {\n if (state === 'unavailable') { return false; }\n if (state === 'asking') {\n enabledAfterAsking = false;\n return true;\n }\n unwatch();\n state = 'disabled';\n return true;\n },\n\n saveDraft: function() {\n if (state === 'unavailable' || state === 'asking') { return false; }\n return save('api');\n },\n\n getDraft: function() {\n if (state === 'unavailable') { return null; }\n\n var found = readDraft(false);\n return found ? { html: found.html, savedAt: found.savedAt } : null;\n },\n\n clearDraft: function() {\n if (state === 'unavailable') { return false; }\n\n remove();\n return true;\n },\n },\n };\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * What a plugin's or a locale's classic script imports in place of the\n * editor: the GridEditor the page already loaded.\n *\n * The build points `import { GridEditor } from '../grideditor.js'` here for\n * the classic scripts, so each registers on the editor the page has rather\n * than bringing its own. Loaded before the editor there is nothing to\n * register on, and saying so is better than a TypeError three calls later.\n */\nvar GridEditor = window.GridEditor;\n\nif (!GridEditor || typeof GridEditor.get !== 'function') {\n throw new Error('grid-editor: load grideditor.js (or grideditor.bundle.min.js) before its plugins, ' +\n 'its locales and grideditor.jquery.js');\n}\n\nexport { GridEditor };\nexport default GridEditor;\n", "/**\n * Autosave for grid-editor.\n *\n * A feature plugin: load this file after the editor and what is being edited\n * is kept in the browser's storage as it changes, and offered back the next\n * time an editor starts from the same html. What it can ask the editor for is\n * the handle its factory is called with, described in docs/plugins.md.\n *\n * <script src=\"dist/grideditor.min.js\"></script>\n * <script src=\"dist/plugins/grideditor.autosave.min.js\"></script>\n *\n * It reads the canvas with ge.snapshotHtml(), which leaves the canvas\n * editing: the text being typed into stays open, with its cursor. A save\n * comes `delay` ms after the last change, and when the page is left.\n *\n * A draft remembers the html its editor started from, and is only offered\n * to an editor that starts from the same html: a page that loads one\n * document after another is not offered one document's draft over another.\n * Such a page gives each document a key of its own, and each keeps its draft.\n *\n * new GridEditor('#myGrid', { autosave: { key: 'page-42', storage: 'session' } });\n */\nimport { GridEditor } from '../grideditor.js';\n\nObject.assign(GridEditor.locales.en, {\n 'autosave.restore_title': 'Restore the draft?',\n 'autosave.restore_message': 'There is a draft of this page saved on {date}, with changes that were not published. Restore it?',\n 'autosave.restore': 'Restore',\n 'autosave.discard': 'Discard',\n});\n\nvar VERSION = 1;\nvar STORAGES = { local: 'localStorage', session: 'sessionStorage' };\nvar DEFAULT_DELAY = 1000;\n\n/** The keys the editors on this page save to: one editor to a key. */\nvar liveKeys = new Set();\n\n/** FNV-1a, 32 bits, as hex: enough to tell one document's html from another's. */\nfunction fingerprint(text) {\n var hash = 0x811c9dc5;\n\n for (var i = 0; i < text.length; i++) {\n hash ^= text.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193);\n }\n\n return (hash >>> 0).toString(16).padStart(8, '0');\n}\n\n/** A stored value that is a draft this file wrote, or null. */\nfunction validDraft(value) {\n return !!value && typeof value === 'object' && value.version === VERSION &&\n typeof value.html === 'string' && typeof value.base === 'string' &&\n typeof value.savedAt === 'string' && !isNaN(Date.parse(value.savedAt));\n}\n\nGridEditor.features.autosave = function(ge) {\n\n var options = optionsFrom(ge.settings.autosave || {});\n var key = options.key || 'grideditor.autosave:' + window.location.pathname + '#' + ge.canvas.id;\n var storage = storageFor(options.storage);\n\n // unavailable | disabled | asking | enabled | destroyed\n var state = 'disabled';\n var enabledAfterAsking = true; // What asking ends in: a method may have changed it meanwhile\n var started = false; // Whether the first init has been looked at\n var draft = null; // The draft found when the editor was made, while it may be offered\n var base = null; // The fingerprint of the html the editor started from\n var last = null; // The html saved last, or the one there was to start from\n var timer = null;\n var observer = null;\n var sourceOpen = false;\n var warnedWrite = false;\n\n if (!storage) {\n ge.warn('autosave: the browser will not give this page its ' + STORAGES[options.storage] +\n ', so nothing is saved');\n state = 'unavailable';\n } else if (liveKeys.has(key)) {\n ge.warn('autosave: another editor on this page already saves to \"' + key + '\", so this one does not; ' +\n 'give each its own autosave.key');\n state = 'unavailable';\n } else {\n liveKeys.add(key);\n if (options.enabled) {\n state = 'enabled';\n draft = readDraft(true);\n }\n }\n\n function optionsFrom(given) {\n var result = {\n enabled: given.enabled === undefined ? true : !!given.enabled,\n storage: given.storage === undefined ? 'local' : given.storage,\n key: given.key === undefined ? null : given.key,\n delay: given.delay === undefined ? DEFAULT_DELAY : given.delay,\n maxAge: given.maxAge === undefined ? null : given.maxAge,\n };\n\n if (!STORAGES[result.storage]) {\n ge.warn('autosave.storage \"' + result.storage + '\" is not local or session: local is used');\n result.storage = 'local';\n }\n if (result.key !== null && (typeof result.key !== 'string' || result.key === '')) {\n ge.warn('autosave.key must be a string: the page\\'s own key is used');\n result.key = null;\n }\n if (typeof result.delay !== 'number' || !Number.isInteger(result.delay) || result.delay < 0) {\n ge.warn('autosave.delay must be a whole number of milliseconds, 0 or more: ' + DEFAULT_DELAY + ' is used');\n result.delay = DEFAULT_DELAY;\n }\n if (result.maxAge !== null && !(typeof result.maxAge === 'number' && isFinite(result.maxAge) && result.maxAge > 0)) {\n ge.warn('autosave.maxAge must be a number of milliseconds over 0, or null: drafts do not expire');\n result.maxAge = null;\n }\n\n return result;\n }\n\n /** The storage, if the browser lets the page have it. */\n function storageFor(name) {\n try {\n var found = window[STORAGES[name]];\n found.getItem(key);\n return found;\n } catch (error) {\n return null;\n }\n }\n\n /**\n * The draft saved under the key, or null. Starting, one that cannot be\n * read or has expired is taken away: nothing will ever offer it.\n */\n function readDraft(starting) {\n var raw;\n\n try {\n raw = storage.getItem(key);\n } catch (error) {\n return null;\n }\n if (raw === null) { return null; }\n\n var value = null;\n try { value = JSON.parse(raw); } catch (error) { /* not ours, or mangled */ }\n\n if (!validDraft(value)) {\n if (starting) {\n ge.warn('autosave: what is saved under \"' + key + '\" is not a draft this version can read: it is discarded');\n remove();\n }\n return null;\n }\n\n if (starting && options.maxAge !== null && Date.now() - Date.parse(value.savedAt) > options.maxAge) {\n remove();\n return null;\n }\n\n return value;\n }\n\n function remove() {\n try { storage.removeItem(key); } catch (error) { /* nothing to take away */ }\n }\n\n /** Write the canvas as it is, if it changed. True when it was written. */\n function save(source) {\n window.clearTimeout(timer);\n timer = null;\n\n if (sourceOpen || base === null) { return false; }\n\n // The read itself may change the canvas - getHtml, when a plugin\n // cannot be read on a copy - and that is not a change to save\n var watching = !!observer;\n if (watching) { observer.disconnect(); }\n var html = ge.snapshotHtml();\n if (watching) { watch(); }\n\n if (html === last) { return false; }\n\n var value = { version: VERSION, html: html, savedAt: new Date().toISOString(), base: base };\n\n try {\n storage.setItem(key, JSON.stringify(value));\n } catch (error) {\n if (!warnedWrite) {\n warnedWrite = true;\n ge.warn('autosave: the draft could not be saved (' + (error && error.message || error) + ')');\n }\n ge.emit('autosave-error', { canvas: ge.canvas, error: error });\n return false;\n }\n\n last = html;\n ge.emit('after-autosave', { canvas: ge.canvas, html: html, savedAt: value.savedAt, source: source });\n return true;\n }\n\n function schedule() {\n window.clearTimeout(timer);\n timer = window.setTimeout(function() { save('change'); }, options.delay);\n }\n\n function watch() {\n if (!observer) { observer = new MutationObserver(schedule); }\n observer.observe(ge.canvas, { subtree: true, childList: true, attributes: true, characterData: true });\n }\n\n function unwatch() {\n window.clearTimeout(timer);\n timer = null;\n if (observer) { observer.disconnect(); }\n }\n\n function onPageHide() {\n if (state === 'enabled') { save('pagehide'); }\n }\n\n /** After the first init has finished: what there is to start from, and the draft offered. */\n function start() {\n if (state === 'destroyed' || state === 'unavailable') { return; }\n\n last = ge.snapshotHtml();\n base = fingerprint(last);\n window.addEventListener('pagehide', onPageHide);\n\n // One of another document, or the same as what is there, is not offered\n if (state === 'enabled' && draft && draft.base === base && draft.html !== last) {\n ask(draft);\n return;\n }\n\n draft = null;\n if (state === 'enabled') { watch(); }\n }\n\n function dateOf(savedAt) {\n try {\n return new Date(savedAt).toLocaleString(ge.settings.locale || undefined);\n } catch (error) {\n return new Date(savedAt).toLocaleString();\n }\n }\n\n function ask(found) {\n state = 'asking';\n\n ge.confirm(ge.t('autosave.restore_message', { date: dateOf(found.savedAt) }), {\n title: ge.t('autosave.restore_title'),\n ok: ge.t('autosave.restore'),\n cancel: ge.t('autosave.discard'),\n }, function(restore) {\n if (state === 'destroyed') { return; }\n\n // Taken away unanswered - setLocale - so asked again, in the new\n // language, once the old modal is out of the way\n if (restore === null) {\n window.setTimeout(function() {\n if (state === 'asking') { ask(found); }\n }, 0);\n return;\n }\n\n draft = null;\n\n if (restore) {\n last = found.html;\n ge.setHtml(found.html);\n ge.emit('after-restore-draft', { canvas: ge.canvas, html: found.html, savedAt: found.savedAt });\n } else {\n remove();\n }\n\n state = enabledAfterAsking ? 'enabled' : 'disabled';\n if (state === 'enabled') { watch(); }\n });\n }\n\n return {\n // The first init, once it has finished: the canvas is ready to be read\n onInit: function() {\n if (started) { return; }\n started = true;\n Promise.resolve().then(start);\n },\n\n onSourceOpen: function() { sourceOpen = true; },\n onSourceClose: function() { sourceOpen = false; },\n\n onDestroy: function() {\n if (state === 'enabled' && timer) { save('destroy'); }\n\n unwatch();\n observer = null;\n window.removeEventListener('pagehide', onPageHide);\n if (state !== 'unavailable') { liveKeys.delete(key); }\n state = 'destroyed';\n },\n\n methods: {\n enableAutosave: function() {\n if (state === 'unavailable') { return false; }\n if (state === 'asking') {\n enabledAfterAsking = true;\n return true;\n }\n if (state !== 'enabled') {\n state = 'enabled';\n if (base !== null) { watch(); }\n }\n return true;\n },\n\n disableAutosave: function() {\n if (state === 'unavailable') { return false; }\n if (state === 'asking') {\n enabledAfterAsking = false;\n return true;\n }\n unwatch();\n state = 'disabled';\n return true;\n },\n\n saveDraft: function() {\n if (state === 'unavailable' || state === 'asking') { return false; }\n return save('api');\n },\n\n getDraft: function() {\n if (state === 'unavailable') { return null; }\n\n var found = readDraft(false);\n return found ? { html: found.html, savedAt: found.savedAt } : null;\n },\n\n // What there is now is not a draft any more - a page calls this\n // once it has saved to its server - so the save waiting does not\n // write it back, and only a change from here makes a new draft\n clearDraft: function() {\n if (state === 'unavailable') { return false; }\n\n window.clearTimeout(timer);\n timer = null;\n remove();\n\n // Not while it asks: the canvas is not what was offered yet\n if (base !== null && state !== 'asking' && !sourceOpen) {\n var watching = !!observer && state === 'enabled';\n if (watching) { observer.disconnect(); }\n last = ge.snapshotHtml();\n if (watching) { watch(); }\n }\n return true;\n },\n },\n };\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["GridEditor", "GridEditor", "VERSION", "STORAGES", "DEFAULT_DELAY", "liveKeys", "fingerprint", "text", "hash", "i", "validDraft", "value", "ge", "options", "optionsFrom", "key", "storage", "storageFor", "state", "enabledAfterAsking", "started", "draft", "base", "last", "timer", "observer", "sourceOpen", "warnedWrite", "readDraft", "given", "result", "name", "found", "error", "starting", "raw", "remove", "save", "source", "watching", "html", "watch", "schedule", "unwatch", "onPageHide", "start", "ask", "dateOf", "savedAt", "restore"]
7
7
  }