Class: Alchemy::Admin::ElementsController
- Inherits:
-
BaseController
- Object
- ApplicationController
- BaseController
- BaseController
- Alchemy::Admin::ElementsController
- Defined in:
- app/controllers/alchemy/admin/elements_controller.rb
Instance Method Summary collapse
-
#collapse ⇒ Object
Collapses the element, all nested elements and persists the state in the db.
-
#create ⇒ Object
Creates a element as discribed in config/alchemy/elements.yml on page via AJAX.
- #destroy ⇒ Object
-
#expand ⇒ Object
Expands the element, all parents and persists the state in the db.
- #index ⇒ Object
- #new ⇒ Object
- #order ⇒ Object
- #publish ⇒ Object
-
#update ⇒ Object
Updates the element and all ingredients in the element.
Methods inherited from BaseController
Methods included from Modules
included, #module_definition_for, register_module
Methods included from Alchemy::AbilityHelper
Methods included from ConfigurationMethods
#configuration, #multi_language?, #multi_site?, #prefix_locale?
Instance Method Details
#collapse ⇒ Object
Collapses the element, all nested elements and persists the state in the db
111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'app/controllers/alchemy/admin/elements_controller.rb', line 111 def collapse # We do not want to trigger the touch callback or any validations @element.update_columns(folded: true) # Collapse all nested elements nested_elements_ids = collapse_nested_elements_ids(@element) Alchemy::Element.where(id: nested_elements_ids).update_all(folded: true) render json: { nestedElementIds: nested_elements_ids, title: Alchemy.t(@element.folded? ? :show_element_content : :hide_element_content) } end |
#create ⇒ Object
Creates a element as discribed in config/alchemy/elements.yml on page via AJAX.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'app/controllers/alchemy/admin/elements_controller.rb', line 28 def create @page_version = PageVersion.find(params[:element][:page_version_id]) @page = @page_version.page Element.transaction do @paste_from_clipboard = params[:paste_from_clipboard].present? @element = if @paste_from_clipboard paste_element_from_clipboard else Element.new(create_element_params) end if @page.definition["insert_elements_at"] == "top" @insert_at_top = true @element.position = 1 end end if @element.save render :create else @element.page_version = @page_version @elements = @page.available_element_definitions load_clipboard_items render :new end end |
#destroy ⇒ Object
78 79 80 81 82 |
# File 'app/controllers/alchemy/admin/elements_controller.rb', line 78 def destroy @richtext_ids = @element.richtext_ingredients_ids @element.destroy @notice = Alchemy.t("Successfully deleted element") % {element: @element.display_name} end |
#expand ⇒ Object
Expands the element, all parents and persists the state in the db
126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'app/controllers/alchemy/admin/elements_controller.rb', line 126 def # We do not want to trigger the touch callback or any validations @element.update_columns(folded: false) # We want to expand the upper most parent first in order to prevent # re-painting issues in the browser parent_element_ids = @element.parent_element_ids.reverse Alchemy::Element.where(id: parent_element_ids).update_all(folded: false) render json: { parentElementIds: parent_element_ids, title: Alchemy.t(@element.folded? ? :show_element_content : :hide_element_content) } end |
#index ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'app/controllers/alchemy/admin/elements_controller.rb', line 9 def index @page_version = PageVersion.find(params[:page_version_id]) @page = @page_version.page elements = @page_version.elements.order(:position).includes(*element_includes) @elements = elements.not_nested.unfixed @fixed_elements = elements.not_nested.fixed load_clipboard_items end |
#new ⇒ Object
18 19 20 21 22 23 24 25 |
# File 'app/controllers/alchemy/admin/elements_controller.rb', line 18 def new @page_version = PageVersion.find(params[:page_version_id]) @page = @page_version.page @parent_element = Element.find_by(id: params[:parent_element_id]) @elements = @page.available_elements_within_current_scope(@parent_element) @element = @page_version.elements.build load_clipboard_items end |
#order ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'app/controllers/alchemy/admin/elements_controller.rb', line 93 def order @element = Element.find(params[:element_id]) @element.update( parent_element_id: params[:parent_element_id], position: params[:position] ) if params[:parent_element_id].present? @parent_element = Element.find_by(id: params[:parent_element_id]) end render json: { message: Alchemy.t(:successfully_saved_element_position), preview_text: @element.preview_text } end |
#publish ⇒ Object
84 85 86 87 88 89 90 91 |
# File 'app/controllers/alchemy/admin/elements_controller.rb', line 84 def publish @element.public = !@element.public? @element.save(validate: false) render json: { public: @element.public?, label: @element.public? ? Alchemy.t(:hide_element) : Alchemy.t(:show_element) } end |
#update ⇒ Object
Updates the element and all ingredients in the element.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'app/controllers/alchemy/admin/elements_controller.rb', line 55 def update if @element.update(element_params) render json: { notice: Alchemy.t(:element_saved), previewText: Rails::Html::SafeListSanitizer.new.sanitize(@element.preview_text), ingredientAnchors: @element.ingredients.select { |i| i.settings[:anchor] }.map do |ingredient| { ingredientId: ingredient.id, active: ingredient.dom_id.present? } end } else @warning = Alchemy.t("Validation failed") render json: { warning: @warning, errorMessage: Alchemy.t(:ingredient_validations_headline), ingredientsWithErrors: @element.ingredients_with_errors.map(&:id), errors: @element. } end end |