editar por idioma
This commit is contained in:
parent
bd3a19de14
commit
98d71596c0
6 changed files with 48 additions and 20 deletions
|
@ -22,11 +22,15 @@ class ApplicationController < ActionController::Base
|
||||||
|
|
||||||
def find_post(site)
|
def find_post(site)
|
||||||
id = params[:post_id] || params[:id]
|
id = params[:post_id] || params[:id]
|
||||||
lang = params.fetch(:lang, I18n.locale.to_s)
|
lang = find_lang
|
||||||
posts = site.posts_for(lang)
|
posts = site.posts_for(lang)
|
||||||
|
|
||||||
posts.find do |p|
|
posts.find do |p|
|
||||||
p.id == id
|
p.id == id
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def find_lang
|
||||||
|
params.fetch(:lang, I18n.locale.to_s)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,23 +2,26 @@ class PostsController < ApplicationController
|
||||||
before_action :authenticate!
|
before_action :authenticate!
|
||||||
|
|
||||||
def index
|
def index
|
||||||
|
@lang = find_lang
|
||||||
@site = find_site
|
@site = find_site
|
||||||
@category = session[:category] = params.dig(:category)
|
@category = session[:category] = params.dig(:category)
|
||||||
@lang = params.fetch(:lang, I18n.locale.to_s)
|
|
||||||
@posts = @site.posts_for(@lang)
|
@posts = @site.posts_for(@lang)
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
@lang = find_lang
|
||||||
@site = find_site
|
@site = find_site
|
||||||
@post = find_post(@site)
|
@post = find_post(@site)
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
@lang = find_lang
|
||||||
@site = find_site
|
@site = find_site
|
||||||
@post = Post.new(site: @site, front_matter: { date: Time.now })
|
@post = Post.new(site: @site, front_matter: { date: Time.now })
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
@lang = find_lang
|
||||||
@site = find_site
|
@site = find_site
|
||||||
@post = Post.new(site: @site, front_matter: post_params.to_hash)
|
@post = Post.new(site: @site, front_matter: post_params.to_hash)
|
||||||
|
|
||||||
|
@ -30,12 +33,14 @@ class PostsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
|
@lang = find_lang
|
||||||
@site = find_site
|
@site = find_site
|
||||||
@post = find_post(@site)
|
@post = find_post(@site)
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
p = post_params
|
p = post_params
|
||||||
|
@lang = find_lang
|
||||||
@site = find_site
|
@site = find_site
|
||||||
@post = find_post(@site)
|
@post = find_post(@site)
|
||||||
|
|
||||||
|
|
|
@ -36,13 +36,20 @@ class Post
|
||||||
class: Jekyll::Document)
|
class: Jekyll::Document)
|
||||||
end
|
end
|
||||||
|
|
||||||
@lang = lang || I18n.locale.to_s
|
|
||||||
@site = site
|
@site = site
|
||||||
@post = post
|
@post = post
|
||||||
# los errores tienen que ser un hash para que
|
# los errores tienen que ser un hash para que
|
||||||
# ActiveModel pueda traer los errores normalmente
|
# ActiveModel pueda traer los errores normalmente
|
||||||
@errors = {}
|
@errors = {}
|
||||||
|
|
||||||
|
# Si el sitio está traducido, trabajamos con la colección del
|
||||||
|
# idioma, sino, con posts
|
||||||
|
if @site.i18n?
|
||||||
|
@collection = @lang = lang || I18n.locale.to_s
|
||||||
|
else
|
||||||
|
@collection = 'posts'
|
||||||
|
end
|
||||||
|
|
||||||
# sincronizar los datos del document
|
# sincronizar los datos del document
|
||||||
if new?
|
if new?
|
||||||
@front_matter = {}
|
@front_matter = {}
|
||||||
|
@ -66,7 +73,7 @@ class Post
|
||||||
# Determina si fue traducido, buscando los slugs de su front_matter
|
# Determina si fue traducido, buscando los slugs de su front_matter
|
||||||
# lang en otras colecciones
|
# lang en otras colecciones
|
||||||
def translated?
|
def translated?
|
||||||
get_front_matter('lang').present?
|
@site.i18n? && get_front_matter('lang').present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def translations
|
def translations
|
||||||
|
@ -84,6 +91,7 @@ class Post
|
||||||
# todos los datos para escribir el archivo, que es la condición
|
# todos los datos para escribir el archivo, que es la condición
|
||||||
# necesaria para poder crearlo :P
|
# necesaria para poder crearlo :P
|
||||||
def save
|
def save
|
||||||
|
binding.pry
|
||||||
cleanup!
|
cleanup!
|
||||||
|
|
||||||
return false unless valid?
|
return false unless valid?
|
||||||
|
@ -120,7 +128,11 @@ class Post
|
||||||
# Devuelve la ruta del post, si se cambió alguno de los datos,
|
# Devuelve la ruta del post, si se cambió alguno de los datos,
|
||||||
# generamos una ruta nueva para tener siempre la ruta actualizada.
|
# generamos una ruta nueva para tener siempre la ruta actualizada.
|
||||||
def path
|
def path
|
||||||
basename_changed? ? File.join(@site.path, '_posts', basename_from_front_matter) : @post.try(:path)
|
if basename_changed?
|
||||||
|
File.join(@site.path, "_#{@collection}", basename_from_front_matter)
|
||||||
|
else
|
||||||
|
@post.try(:path)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO los slugs se pueden repetir, el identificador real sería
|
# TODO los slugs se pueden repetir, el identificador real sería
|
||||||
|
@ -174,7 +186,7 @@ class Post
|
||||||
|
|
||||||
# Genera un post nuevo y lo agrega a la colección del sitio.
|
# Genera un post nuevo y lo agrega a la colección del sitio.
|
||||||
def new_post
|
def new_post
|
||||||
opts = { site: @site.jekyll, collection: @site.jekyll.posts }
|
opts = { site: @site.jekyll, collection: @site.jekyll.collections[@collection] }
|
||||||
@post = Jekyll::Document.new(path, opts)
|
@post = Jekyll::Document.new(path, opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -182,11 +194,13 @@ class Post
|
||||||
#
|
#
|
||||||
# TODO no sería la forma correcta de hacerlo en Rails
|
# TODO no sería la forma correcta de hacerlo en Rails
|
||||||
def add_post_to_site!
|
def add_post_to_site!
|
||||||
@site.jekyll.posts.docs << @post
|
@site.jekyll.collections[@collection].docs << @post
|
||||||
@site.jekyll.posts.docs.sort!
|
@site.jekyll.collections[@collection].docs.sort!
|
||||||
|
|
||||||
@site.posts << self unless @site.posts.include? self
|
unless @site.collections[@collection].include? self
|
||||||
@site.posts.sort!
|
@site.collections[@collection] << self
|
||||||
|
@site.collections[@collection].sort!
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Los define, asegurandose que las llaves siempre son strings, para no
|
# Los define, asegurandose que las llaves siempre son strings, para no
|
||||||
|
@ -210,7 +224,7 @@ class Post
|
||||||
|
|
||||||
# Reemplaza el post en el sitio por uno nuevo
|
# Reemplaza el post en el sitio por uno nuevo
|
||||||
def replace_post!
|
def replace_post!
|
||||||
@old_post = @site.jekyll.posts.docs.delete @post
|
@old_post = @site.jekyll.collections[@lang].docs.delete @post
|
||||||
|
|
||||||
new_post
|
new_post
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,12 +2,13 @@
|
||||||
# Usuaria
|
# Usuaria
|
||||||
class Site
|
class Site
|
||||||
|
|
||||||
attr_accessor :jekyll
|
attr_accessor :jekyll, :collections
|
||||||
attr_reader :path
|
attr_reader :path
|
||||||
|
|
||||||
def initialize(jekyll:, path: nil)
|
def initialize(jekyll:, path: nil)
|
||||||
@jekyll = jekyll
|
@jekyll = jekyll
|
||||||
@path = path || @jekyll.config['source']
|
@path = path || @jekyll.config['source']
|
||||||
|
@collections = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
# Determina si el sitio está en varios idiomas
|
# Determina si el sitio está en varios idiomas
|
||||||
|
@ -61,6 +62,10 @@ class Site
|
||||||
@jekyll.config
|
@jekyll.config
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def collections
|
||||||
|
@collections
|
||||||
|
end
|
||||||
|
|
||||||
# Los posts de este sitio, si el sitio está traducido, trae los posts
|
# Los posts de este sitio, si el sitio está traducido, trae los posts
|
||||||
# del idioma actual, porque _posts va a estar vacío
|
# del idioma actual, porque _posts va a estar vacío
|
||||||
def posts
|
def posts
|
||||||
|
@ -77,9 +82,8 @@ class Site
|
||||||
def posts_for(collection)
|
def posts_for(collection)
|
||||||
return unless @jekyll.config['collections'].key? collection
|
return unless @jekyll.config['collections'].key? collection
|
||||||
|
|
||||||
# TODO tal vez no necesitamos esta magia
|
_collection = @collections[collection]
|
||||||
instance = instance_variable_get("@#{collection}")
|
return _collection if _collection
|
||||||
return instance if instance
|
|
||||||
|
|
||||||
Rails.logger.info "Procesando #{collection}"
|
Rails.logger.info "Procesando #{collection}"
|
||||||
|
|
||||||
|
@ -92,9 +96,9 @@ class Site
|
||||||
|
|
||||||
# Los convertimos a una clase intermedia capaz de acceder a sus
|
# Los convertimos a una clase intermedia capaz de acceder a sus
|
||||||
# datos y modificarlos
|
# datos y modificarlos
|
||||||
instance_variable_set("@#{collection}", col.map do |post|
|
@collections[collection] = col.map do |post|
|
||||||
Post.new(site: self, post: post, lang: collection)
|
Post.new(site: self, post: post, lang: collection)
|
||||||
end)
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def categories
|
def categories
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
- field_class = "form-control #{direction}"
|
- field_class = "form-control #{direction}"
|
||||||
-# TODO habilitar form_for
|
-# TODO habilitar form_for
|
||||||
- if @post.new?
|
- if @post.new?
|
||||||
- url = site_posts_path(@site)
|
- url = site_posts_path(@site, lang: @lang)
|
||||||
- method = :post
|
- method = :post
|
||||||
- else
|
- else
|
||||||
- url = site_post_path(@site, @post)
|
- url = site_post_path(@site, @post, lang: @lang)
|
||||||
- method = :patch
|
- method = :patch
|
||||||
= form_tag url, method: method, class: 'form' do
|
= form_tag url, method: method, class: 'form' do
|
||||||
.form-group
|
.form-group
|
||||||
|
|
|
@ -13,7 +13,8 @@
|
||||||
|
|
||||||
.row
|
.row
|
||||||
.col
|
.col
|
||||||
= link_to t('posts.edit'), edit_site_post_path(@site, @post),
|
= link_to t('posts.edit'),
|
||||||
|
edit_site_post_path(@site, @post, lang: @lang),
|
||||||
class: 'btn btn-info'
|
class: 'btn btn-info'
|
||||||
|
|
||||||
.row
|
.row
|
||||||
|
|
Loading…
Reference in a new issue