5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2025-03-14 23:08:17 +00:00

Merge branch 'issue-15068' into production.panel.sutty.nl

This commit is contained in:
f 2024-06-04 17:14:45 -03:00
commit e2d9774229
No known key found for this signature in database
8 changed files with 75 additions and 12 deletions

View file

@ -117,7 +117,7 @@ class PostsController < ApplicationController
service = PostService.new(site: site, service = PostService.new(site: site,
usuarie: current_usuarie, usuarie: current_usuarie,
params: params) params: params)
@post = service.create @post = service.create_or_update
if post.persisted? if post.persisted?
site.touch site.touch
@ -165,7 +165,24 @@ class PostsController < ApplicationController
if service.update.persisted? if service.update.persisted?
site.touch site.touch
forget_content forget_content
end
if htmx?
if post.persisted?
swap_modals
@value = post.title.value
@uuid = post.uuid.value
@name = params.require(:name)
render render_path_from_attribute, layout: false
else
headers['HX-Retarget'] = "##{params.require(:form)}"
headers['HX-Reswap'] = 'outerHTML'
render 'posts/form', layout: false, post: post, site: site, **params.permit(:form, :base, :dir, :locale)
end
elsif post.persisted?
redirect_to site_post_path(site, post) redirect_to site_post_path(site, post)
else else
render 'posts/edit' render 'posts/edit'

View file

@ -41,5 +41,5 @@ Rails.start()
Turbolinks.start() Turbolinks.start()
ActiveStorage.start() ActiveStorage.start()
window.htmx = require('htmx.org/dist/htmx.js') window.htmx = require("@suttyweb/htmx.org/dist/htmx.js");
window.htmx.config.selfRequestsOnly = true; window.htmx.config.selfRequestsOnly = true;

View file

@ -5,12 +5,30 @@
PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do
include AutoPublishConcern include AutoPublishConcern
# Si estamos pasando el UUID con los parámetros, el post quizás
# existe.
#
# @return [Post]
def create_or_update
uuid = params.require(base).permit(:uuid).values.first
binding.pry
if uuid.blank?
create
elsif (indexed_post = site.indexed_posts.find_by(post_id: uuid)).present?
self.post = indexed_post.post
update
else
create
end
end
# Crea un artículo nuevo # Crea un artículo nuevo
# #
# @return Post # @return Post
def create def create
self.post = site.posts(lang: locale) self.post ||= site.posts(lang: locale).build(layout: layout)
.build(layout: layout)
post.usuaries << usuarie post.usuaries << usuarie
post.draft.value = true if site.invitade? usuarie post.draft.value = true if site.invitade? usuarie
post.assign_attributes(post_params) post.assign_attributes(post_params)

View file

@ -38,7 +38,8 @@
datos y recibir su UUID en respuesta. datos y recibir su UUID en respuesta.
- content_for :post_form do - content_for :post_form do
%div{ id: modal_id, data: { controller: 'modal' }} %div{ id: modal_id, data: { controller: 'modal' }}
- if layout.is_a?(String) -# Si hay un solo layout o el post asociado ya existía
- if layout.is_a?(String) || metadata.has_one.present?
= render 'bootstrap/modal', id: id, modal_content_attributes: { class: 'h-100' } do = render 'bootstrap/modal', id: id, modal_content_attributes: { class: 'h-100' } do
- content_for :"#{id}_body" do - content_for :"#{id}_body" do
-# @todo ocultar el modal después de guardar -# @todo ocultar el modal después de guardar
@ -47,7 +48,8 @@
- content_for :"#{id}_footer" do - content_for :"#{id}_footer" do
= render 'bootstrap/btn', form: form_id, content: t('.save'), type: 'submit', class: 'm-0 mt-1 mr-1' = render 'bootstrap/btn', form: form_id, content: t('.save'), type: 'submit', class: 'm-0 mt-1 mr-1'
= render 'bootstrap/btn', content: t('.cancel'), action: 'modal#hide', class: 'm-0 mt-1 mr-1' = render 'bootstrap/btn', content: t('.close'), action: 'modal#hide', class: 'm-0 mt-1 mr-1'
- else - else
-# @todo Implementar selección de layout para cargar el formulario correcto
Nada Nada

View file

@ -758,6 +758,18 @@ en:
empty: "(Empty)" empty: "(Empty)"
draft: draft:
label: Draft label: Draft
new_has_many:
edit: "Edit"
new_has_and_belongs_to_many:
edit: "Edit"
new_predefined_array:
edit: "Edit"
new_array:
edit: "Edit"
new_has_one:
edit: "Edit"
new_belongs_to:
edit: "Edit"
reorder: reorder:
submit: 'Save order' submit: 'Save order'
select: 'Select this post' select: 'Select this post'
@ -946,6 +958,7 @@ en:
add: "Add %{layout}" add: "Add %{layout}"
add_new: "Add new option" add_new: "Add new option"
cancel: "Cancel" cancel: "Cancel"
close: "Close"
edit: "Edit" edit: "Edit"
filter: "Start typing to filter..." filter: "Start typing to filter..."
save: "Save" save: "Save"

View file

@ -766,6 +766,18 @@ es:
empty: "(Vacío)" empty: "(Vacío)"
draft: draft:
label: Borrador label: Borrador
new_has_many:
edit: "Editar"
new_has_and_belongs_to_many:
edit: "Editar"
new_predefined_array:
edit: "Editar"
new_array:
edit: "Editar"
new_has_one:
edit: "Editar"
new_belongs_to:
edit: "Editar"
reorder: reorder:
submit: 'Guardar orden' submit: 'Guardar orden'
select: 'Seleccionar este artículo' select: 'Seleccionar este artículo'
@ -954,6 +966,7 @@ es:
add: "Agregar %{layout}" add: "Agregar %{layout}"
add_new: "Agregar nueva opción" add_new: "Agregar nueva opción"
cancel: "Cancelar" cancel: "Cancelar"
close: "Cerrar"
edit: "Editar" edit: "Editar"
filter: "Empezá a escribir para filtrar..." filter: "Empezá a escribir para filtrar..."
save: "Guardar" save: "Guardar"

View file

@ -14,6 +14,7 @@
"@rails/ujs": "^6.1.3-1", "@rails/ujs": "^6.1.3-1",
"@rails/webpacker": "5.4.4", "@rails/webpacker": "5.4.4",
"@suttyweb/editor": "^0.1.29", "@suttyweb/editor": "^0.1.29",
"@suttyweb/htmx.org": "^1.9.13",
"babel-loader": "^8.2.2", "babel-loader": "^8.2.2",
"bs-custom-file-input": "^1.3.4", "bs-custom-file-input": "^1.3.4",
"chart.js": "^3.5.1", "chart.js": "^3.5.1",
@ -22,7 +23,6 @@
"commonmark": "^0.29.0", "commonmark": "^0.29.0",
"fork-awesome": "^1.1.7", "fork-awesome": "^1.1.7",
"fork-ts-checker-webpack-plugin": "^6.1.0", "fork-ts-checker-webpack-plugin": "^6.1.0",
"htmx.org": "^1.9.11",
"input-map": "git+https://0xacab.org/sutty/input-map.git", "input-map": "git+https://0xacab.org/sutty/input-map.git",
"input-tag": "git+https://0xacab.org/sutty/input-tag.git", "input-tag": "git+https://0xacab.org/sutty/input-tag.git",
"leaflet": "^1.7.1", "leaflet": "^1.7.1",

View file

@ -1984,6 +1984,11 @@
linkifyjs "^4.1.1" linkifyjs "^4.1.1"
prosemirror-svelte-nodeview "^1.0.2" prosemirror-svelte-nodeview "^1.0.2"
"@suttyweb/htmx.org@^1.9.13":
version "1.9.13"
resolved "https://registry.yarnpkg.com/@suttyweb/htmx.org/-/htmx.org-1.9.13.tgz#bc67a5e2947d7cc125649b829610da8ee61f21af"
integrity sha512-/2x3AGXT2CFOmp8Nf59XY2brah5wSo4YvcctYA2zD4BByNft4XE0rUk4VM7TjPxR1LOzg6VK1crZmdiy3JyzxQ==
"@types/caseless@*": "@types/caseless@*":
version "0.12.2" version "0.12.2"
resolved "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz" resolved "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz"
@ -4575,11 +4580,6 @@ html-entities@^1.3.1:
resolved "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz" resolved "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz"
integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==
htmx.org@^1.9.11:
version "1.9.11"
resolved "https://registry.yarnpkg.com/htmx.org/-/htmx.org-1.9.11.tgz#00192041ee682d6ca7146d0fbd901169ffe72d87"
integrity sha512-WlVuICn8dfNOOgYmdYzYG8zSnP3++AdHkMHooQAzGZObWpVXYathpz/I37ycF4zikR6YduzfCvEcxk20JkIUsw==
http-deceiver@^1.2.7: http-deceiver@^1.2.7:
version "1.2.7" version "1.2.7"
resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz"