decidim-navbar_links 0.18.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.
Files changed (31) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE-AGPLv3.txt +661 -0
  3. data/README.md +39 -0
  4. data/Rakefile +27 -0
  5. data/app/assets/config/decidim_navbar_links_manifest.js +0 -0
  6. data/app/assets/images/decidim/navbar_links/icon.svg +1 -0
  7. data/app/commands/decidim/navbar_links/admin/create_navbar_link.rb +44 -0
  8. data/app/commands/decidim/navbar_links/admin/update_navbar_link.rb +49 -0
  9. data/app/controllers/decidim/navbar_links/admin/application_controller.rb +18 -0
  10. data/app/controllers/decidim/navbar_links/admin/navbar_links_controller.rb +76 -0
  11. data/app/controllers/decidim/navbar_links/application_controller.rb +13 -0
  12. data/app/forms/decidim/navbar_links/admin/navbar_link_form.rb +23 -0
  13. data/app/forms/decidim/navbar_links/application_controller.rb +13 -0
  14. data/app/helpers/decidim/navbar_links/application_helper.rb +10 -0
  15. data/app/models/decidim/navbar_links/application_record.rb +10 -0
  16. data/app/models/decidim/navbar_links/navbar_link.rb +18 -0
  17. data/app/permissions/decidim/navbar_links/admin/permissions.rb +21 -0
  18. data/app/views/decidim/navbar_links/admin/navbar_links/_form.html.erb +16 -0
  19. data/app/views/decidim/navbar_links/admin/navbar_links/edit.html.erb +13 -0
  20. data/app/views/decidim/navbar_links/admin/navbar_links/index.html.erb +48 -0
  21. data/app/views/decidim/navbar_links/admin/navbar_links/new.html.erb +13 -0
  22. data/app/views/layouts/decidim/admin/settings.html.erb +40 -0
  23. data/config/i18n-tasks.yml +10 -0
  24. data/config/locales/en.yml +64 -0
  25. data/lib/decidim/navbar_links/admin.rb +10 -0
  26. data/lib/decidim/navbar_links/admin_engine.rb +28 -0
  27. data/lib/decidim/navbar_links/engine.rb +25 -0
  28. data/lib/decidim/navbar_links/test/factories.rb +13 -0
  29. data/lib/decidim/navbar_links/version.rb +10 -0
  30. data/lib/decidim/navbar_links.rb +12 -0
  31. metadata +86 -0
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # Decidim::NavbarLinks
2
+
3
+ [![CircleCI](https://circleci.com/gh/OpenSourcePolitics/decidim-module-navbar_links.svg?style=svg)](https://circleci.com/gh/OpenSourcePolitics/decidim-module-navbar_links)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/179ba669f18869b0040a/maintainability)](https://codeclimate.com/github/OpenSourcePolitics/decidim-module-navbar_links/maintainability)
5
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/179ba669f18869b0040a/test_coverage)](https://codeclimate.com/github/OpenSourcePolitics/decidim-module-navbar_links/test_coverage)
6
+
7
+ ## Usage
8
+
9
+ NavbarLinks adds a custom link to your decidim menu.
10
+
11
+ Admin view:
12
+ ![Admin view](https://github.com/OpenSourcePolitics/decidim-module-navbar_links/blob/media/admin.png)
13
+
14
+ Homepage view:
15
+ ![Home view](https://github.com/OpenSourcePolitics/decidim-module-navbar_links/blob/media/home.png)
16
+
17
+ ## Installation
18
+
19
+ Add this line to your application's Gemfile:
20
+
21
+ ```ruby
22
+ gem 'decidim-navbar_links', git: "https://github.com/OpenSourcePolitics/decidim-module-navbar_links"
23
+ ```
24
+
25
+ And then execute:
26
+
27
+ ```bash
28
+ $ bundle
29
+ $ bundle exec rake decidim_navbar_links:install:migrations
30
+ $ bundle exec rake db:migrate
31
+ ```
32
+
33
+ ## Contributing
34
+
35
+ See [Decidim](https://github.com/decidim/decidim).
36
+
37
+ ## License
38
+
39
+ This engine is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "decidim/dev/common_rake"
4
+
5
+ def install_module(path)
6
+ Dir.chdir(path) do
7
+ system("bundle exec rake decidim_navbar_links:install:migrations")
8
+ system("bundle exec rake db:migrate")
9
+ end
10
+ end
11
+
12
+ def seed_db(path)
13
+ Dir.chdir(path) do
14
+ system("bundle exec rake db:seed")
15
+ end
16
+ end
17
+
18
+ desc "Generates a dummy app for testing"
19
+ task test_app: "decidim:generate_external_test_app" do
20
+ ENV["RAILS_ENV"] = "test"
21
+ install_module("spec/decidim_dummy_app")
22
+ end
23
+
24
+ desc "Generates a development app"
25
+ task development_app: "decidim:generate_external_development_app" do
26
+ install_module("development_app")
27
+ end
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 35 35"><path d="M17.5 35A17.5 17.5 0 1 1 35 17.5 17.52 17.52 0 0 1 17.5 35zm0-33.06A15.56 15.56 0 1 0 33.06 17.5 15.57 15.57 0 0 0 17.5 1.94zm9.5 13.7H8a1 1 0 0 1 0-1.94h19a1 1 0 0 1 0 1.94zm0 3.68H8a1 1 0 0 1 0-1.94h19a1 1 0 0 1 0 1.94zM22.26 23H8a1 1 0 0 1 0-1.94h14.26a1 1 0 0 1 0 1.94z"/></svg>
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ module Admin
6
+ # A command with all the business logic when creating a static NavbarLink.
7
+ class CreateNavbarLink < Rectify::Command
8
+ # Public: Initializes the command.
9
+ #
10
+ # form - A form object with the params.
11
+ def initialize(form)
12
+ @form = form
13
+ end
14
+
15
+ # Executes the command. Broadcasts these events:
16
+ #
17
+ # - :ok when everything is valid.
18
+ # - :invalid if the form wasn't valid and we couldn't proceed.
19
+ #
20
+ # Returns nothing.
21
+ def call
22
+ return broadcast(:invalid) if form.invalid?
23
+
24
+ create_navbar_link
25
+ broadcast(:ok)
26
+ end
27
+
28
+ private
29
+
30
+ attr_reader :form
31
+
32
+ def create_navbar_link
33
+ Decidim::NavbarLinks::NavbarLink.create!(
34
+ title: form.title,
35
+ link: form.link,
36
+ weight: form.weight,
37
+ target: form.target,
38
+ organization: form.organization
39
+ )
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ module Admin
6
+ # A command with all the business logic when updating a navbar link.
7
+ class UpdateNavbarLink < Rectify::Command
8
+ # Public: Initializes the command.
9
+ #
10
+ # form - A form object with the params.
11
+ def initialize(form, navbar_link)
12
+ @form = form
13
+ @navbar_link = navbar_link
14
+ end
15
+
16
+ # Executes the command. Broadcasts these events:
17
+ #
18
+ # - :ok when everything is valid.
19
+ # - :invalid if the form wasn't valid and we couldn't proceed.
20
+ #
21
+ # Returns nothing.
22
+ def call
23
+ return broadcast(:invalid) if form.invalid?
24
+
25
+ update_navbar_link
26
+ broadcast(:ok)
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :form
32
+
33
+ def update_navbar_link
34
+ @navbar_link.update!(attributes)
35
+ end
36
+
37
+ def attributes
38
+ {
39
+ title: form.title,
40
+ link: form.link,
41
+ weight: form.weight,
42
+ target: form.target,
43
+ organization: form.organization
44
+ }
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ module Admin
6
+ # This controller is the abstract class from which all other controllers of
7
+ # this engine inherit.
8
+ #
9
+ # Note that it inherits from `decidim::admin::Components::BaseController`, which
10
+ # override its layout and provide all kinds of useful methods.
11
+ class ApplicationController < Decidim::Admin::ApplicationController
12
+ def permission_class_chain
13
+ [Decidim::NavbarLinks::Admin::Permissions] + super
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ module Admin
6
+ class NavbarLinksController < NavbarLinks::Admin::ApplicationController
7
+ layout "decidim/admin/settings"
8
+ helper_method :navbar_link
9
+
10
+ def index
11
+ enforce_permission_to :index, :navbar_link
12
+ @navbar_links = NavbarLink.organization(current_organization)
13
+ end
14
+
15
+ def new
16
+ enforce_permission_to :new, :navbar_link
17
+ @form = form(Decidim::NavbarLinks::Admin::NavbarLinkForm).instance
18
+ end
19
+
20
+ def create
21
+ enforce_permission_to :new, :navbar_link
22
+ @form = form(Decidim::NavbarLinks::Admin::NavbarLinkForm).from_params(params)
23
+
24
+ Decidim::NavbarLinks::Admin::CreateNavbarLink.call(@form) do
25
+ on(:ok) do
26
+ flash[:notice] = I18n.t("navbar_links.create.success", scope: "decidim.admin")
27
+ redirect_to navbar_links_path
28
+ end
29
+
30
+ on(:invalid) do
31
+ flash.now[:alert] = I18n.t("navbar_links.create.error", scope: "decidim.admin")
32
+ render :new
33
+ end
34
+ end
35
+ end
36
+
37
+ def edit
38
+ enforce_permission_to :update, :navbar_link, navbar_link: navbar_link
39
+ @form = form(Decidim::NavbarLinks::Admin::NavbarLinkForm).from_model(navbar_link)
40
+ end
41
+
42
+ def update
43
+ enforce_permission_to :update, :navbar_link, navbar_link: navbar_link
44
+ @form = form(Decidim::NavbarLinks::Admin::NavbarLinkForm).from_params(params)
45
+
46
+ Decidim::NavbarLinks::Admin::UpdateNavbarLink.call(@form, navbar_link) do
47
+ on(:ok) do
48
+ flash[:notice] = I18n.t("navbar_links.update.success", scope: "decidim.admin")
49
+ redirect_to navbar_links_path
50
+ end
51
+
52
+ on(:invalid) do
53
+ flash.now[:alert] = I18n.t("navbar_links.update.error", scope: "decidim.admin")
54
+ render :edit
55
+ end
56
+ end
57
+ end
58
+
59
+ def destroy
60
+ enforce_permission_to :destroy, :navbar_link
61
+ navbar_link.destroy!
62
+
63
+ flash[:notice] = I18n.t("navbar_links.destroy.success", scope: "decidim.admin")
64
+
65
+ redirect_to navbar_links_path
66
+ end
67
+
68
+ private
69
+
70
+ def navbar_link
71
+ @navbar_link = Decidim::NavbarLinks::NavbarLink.find(params[:id])
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ # This controller is the abstract class from which all other controllers of
6
+ # this engine inherit.
7
+ #
8
+ # Note that it inherits from `Decidim::Components::BaseController`, which
9
+ # override its layout and provide all kinds of useful methods.
10
+ class ApplicationController < Decidim::Components::BaseController
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ module Admin
6
+ # A form object to create or update scopes.
7
+ class NavbarLinkForm < Form
8
+ include TranslatableAttributes
9
+
10
+ translatable_attribute :title, String
11
+ attribute :link, String
12
+ attribute :weight, Integer
13
+ attribute :target, String
14
+
15
+ validates :link, format: { with: URI.regexp(%w(http https)) }, presence: true
16
+ validates :title, translatable_presence: true
17
+ validates :weight, presence: true
18
+
19
+ alias organization current_organization
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ # This controller is the abstract class from which all other controllers of
6
+ # this engine inherit.
7
+ #
8
+ # Note that it inherits from `Decidim::Components::BaseController`, which
9
+ # override its layout and provide all kinds of useful methods.
10
+ class ApplicationController < Decidim::Components::BaseController
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ # Custom helpers, scoped to the navbar_links engine.
6
+ #
7
+ module ApplicationHelper
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ # Abstract class from which all models in this engine inherit.
6
+ class ApplicationRecord < ActiveRecord::Base
7
+ self.abstract_class = true
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ class NavbarLink < ApplicationRecord
6
+ belongs_to :organization, foreign_key: "decidim_organization_id", class_name: "Decidim::Organization"
7
+ scope :organization, ->(organization) { where(organization: organization) }
8
+ before_save :validate_link_regex
9
+
10
+ def validate_link_regex
11
+ link = URI.parse(self.link)
12
+ link&.host
13
+ rescue URI::InvalidURIError
14
+ errors.add(:link)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ module Admin
6
+ class Permissions < Decidim::DefaultPermissions
7
+ def permissions
8
+ if permission_action.subject == :navbar_link
9
+ if permission_action.scope == :admin && user&.admin?
10
+ allow!
11
+ else
12
+ disallow!
13
+ end
14
+ end
15
+
16
+ permission_action
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ <div class="row column">
2
+ <%= form.translated :text_field, :title, label: t(".title") %>
3
+ </div>
4
+
5
+ <div class="row">
6
+ <div class="columns xlarge-6">
7
+ <%= form.text_field :link, placeholder: "http://", label: t(".link") %>
8
+ </div>
9
+ <div class="columns xlarge-6">
10
+ <%= form.number_field :weight, label: t(".weight") %>
11
+ </div>
12
+ <div class="columns xlarge-6">
13
+ <%= form.radio_button :target, "blank", label: t(".new_tab") %>
14
+ <%= form.radio_button :target, "", label: t(".same_tab") %>
15
+ </div>
16
+ </div>
@@ -0,0 +1,13 @@
1
+ <%= decidim_form_for(@form) do |f| %>
2
+ <div class="card">
3
+ <div class="card-divider">
4
+ <h2 class="card-title"><%= t ".title" %></h2>
5
+ </div>
6
+ <div class="card-section">
7
+ <%= render partial: "form", object: f %>
8
+ </div>
9
+ </div>
10
+ <div class="button--double form-general-submit">
11
+ <%= f.submit t(".update") %>
12
+ </div>
13
+ <% end %>
@@ -0,0 +1,48 @@
1
+ <div class="card" id="navbar_links">
2
+ <div class="card-divider">
3
+ <h2 class="card-title">
4
+ <%= t "decidim.admin.titles.navbar_links" %> <%= link_to t("actions.add", scope: "decidim.admin"), new_navbar_link_path, class: "button tiny button--title" %>
5
+ </h2>
6
+ </div>
7
+ <div class="card-section">
8
+ <% if @navbar_links.any? %>
9
+ <div class="table-scroll">
10
+ <table class="table-list">
11
+ <thead>
12
+ <tr>
13
+ <th><%= t("models.navbar_link.fields.title", scope: "decidim.admin") %></th>
14
+ <th><%= t("models.navbar_link.fields.weight", scope: "decidim.admin") %></th>
15
+ <th><%= t("models.navbar_link.fields.link", scope: "decidim.admin") %></th>
16
+ <th></th>
17
+ </tr>
18
+ </thead>
19
+ <tbody>
20
+ <% @navbar_links.each do |navbar_link| %>
21
+ <tr id="<%= "navbar_link_#{navbar_link.id}" %>">
22
+ <td>
23
+ <%= translated_attribute(navbar_link.title) %>
24
+ </td>
25
+ <td>
26
+ <%= navbar_link.weight %>
27
+ </td>
28
+ <td>
29
+ <%= link_to navbar_link.link, navbar_link.link, target: :blank %>
30
+ </td>
31
+ <td class="table-list__actions">
32
+ <% if allowed_to? :update, :navbar_link %>
33
+ <%= icon_link_to "pencil", ["edit", navbar_link], t("actions.edit", scope: "decidim.admin"), class: "action-icon--edit", method: :get, data: {} %>
34
+ <% end %>
35
+ <% if allowed_to? :destroy, :navbar_link %>
36
+ <%= icon_link_to "circle-x", navbar_link, t("actions.destroy", scope: "decidim.admin"), class: "action-icon--remove", method: :delete, data: { confirm: t("actions.confirm_destroy", scope: "decidim.admin") } %>
37
+ <% end %>
38
+ </td>
39
+ </tr>
40
+ <% end %>
41
+ </tbody>
42
+ </table>
43
+ </div>
44
+ <% else %>
45
+ <p><%= t("decidim.admin.navbar_links.no_links") %></p>
46
+ <% end %>
47
+ </div>
48
+ </div>
@@ -0,0 +1,13 @@
1
+ <%= decidim_form_for(@form, url: navbar_links_path) do |f| %>
2
+ <div class="card">
3
+ <div class="card-divider">
4
+ <h2 class="card-title"><%= t ".title" %></h2>
5
+ </div>
6
+ <div class="card-section">
7
+ <%= render partial: "form", object: f %>
8
+ </div>
9
+ </div>
10
+ <div class="button--double form-general-submit">
11
+ <%= f.submit t(".create") %>
12
+ </div>
13
+ <% end %>
@@ -0,0 +1,40 @@
1
+ <% content_for :secondary_nav do %>
2
+ <div class="secondary-nav">
3
+ <div class="secondary-nav__title">
4
+ <%= t ".title" %>
5
+ </div>
6
+ <ul>
7
+ <li <% if is_active_link?(decidim_admin.edit_organization_path) %> class="is-active" <% end %>>
8
+ <%= link_to t("menu.configuration", scope: "decidim.admin"), decidim_admin.edit_organization_path %>
9
+ </li>
10
+ <li <% if is_active_link?(decidim_admin.edit_organization_appearance_path) %> class="is-active" <% end %>>
11
+ <%= link_to t("menu.appearance", scope: "decidim.admin"), decidim_admin.edit_organization_appearance_path %>
12
+ </li>
13
+ <li <% if is_active_link?(decidim_admin.edit_organization_homepage_path, /^\/admin\/organization\/homepage/) %> class="is-active" <% end %>>
14
+ <%= link_to t("menu.homepage", scope: "decidim.admin"), decidim_admin.edit_organization_homepage_path %>
15
+ </li>
16
+ <li <% if is_active_link?(decidim_admin_navbar_links.navbar_links_path) %> class="is-active" <% end %>>
17
+ <%= link_to t("menu.navbar_links", scope: "decidim_navbar_links.admin"), decidim_admin_navbar_links.navbar_links_path %>
18
+ </li>
19
+ <li <% if is_active_link?(decidim_admin.scopes_path) %> class="is-active" <% end %>>
20
+ <%= link_to t("menu.scopes", scope: "decidim.admin"), decidim_admin.scopes_path %>
21
+ </li>
22
+ <li <% if is_active_link?(decidim_admin.scope_types_path) %> class="is-active" <% end %>>
23
+ <%= link_to t("menu.scope_types", scope: "decidim.admin"), decidim_admin.scope_types_path %>
24
+ </li>
25
+ <li <% if is_active_link?(decidim_admin.areas_path) %> class="is-active" <% end %>>
26
+ <%= link_to t("menu.areas", scope: "decidim.admin"), decidim_admin.areas_path %>
27
+ </li>
28
+ <li <% if is_active_link?(decidim_admin.area_types_path) %> class="is-active" <% end %>>
29
+ <%= link_to t("menu.area_types", scope: "decidim.admin"), decidim_admin.area_types_path %>
30
+ </li>
31
+ <li <% if allowed_to?(:update, :help_sections) && is_active_link?(decidim_admin.help_sections_path) %> class="is-active" <% end %>>
32
+ <%= link_to t("menu.help_sections", scope: "decidim.admin"), decidim_admin.help_sections_path %>
33
+ </li>
34
+ </ul>
35
+ </div>
36
+ <% end %>
37
+
38
+ <%= render "layouts/decidim/admin/application" do %>
39
+ <%= yield %>
40
+ <% end %>
@@ -0,0 +1,10 @@
1
+ ---
2
+
3
+ base_locale: en
4
+ locales: [en]
5
+
6
+ ignore_unused:
7
+ - "decidim.components.navbar_links.name"
8
+
9
+ ignore_missing:
10
+ - decidim.participatory_processes.scopes.global
@@ -0,0 +1,64 @@
1
+ ---
2
+ en:
3
+ decidim:
4
+ admin:
5
+ actions:
6
+ add: Add
7
+ confirm_destroy: Confirm destroy
8
+ destroy: Destroy
9
+ edit: Edit
10
+ menu:
11
+ appearance: Appearance
12
+ area_types: Area types
13
+ areas: Areas
14
+ configuration: Configuration
15
+ help_sections: Help sections
16
+ homepage: Homepage
17
+ navbar_links: Navbar links
18
+ scope_types: Scope types
19
+ scopes: Scopes
20
+ models:
21
+ navbar_link:
22
+ fields:
23
+ link: Link
24
+ title: Title
25
+ weight: Weight
26
+ navbar_links:
27
+ create:
28
+ error: Error
29
+ success: Success
30
+ destroy:
31
+ success: Success
32
+ no_links: No links
33
+ update:
34
+ error: Error
35
+ success: Success
36
+ titles:
37
+ navbar_links: Navbar Links
38
+ components:
39
+ navbar_links:
40
+ name: NavbarLinks
41
+ navbar_links:
42
+ admin:
43
+ navbar_links:
44
+ edit:
45
+ title: Title
46
+ update: Update
47
+ form:
48
+ link: Link
49
+ new_tab: New tab
50
+ same_tab: Same tab
51
+ title: Title
52
+ weight: Weight
53
+ new:
54
+ create: Create
55
+ title: Title
56
+ decidim_navbar_links:
57
+ admin:
58
+ menu:
59
+ navbar_links: Navbar links
60
+ layouts:
61
+ decidim:
62
+ admin:
63
+ settings:
64
+ title: Title
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ # This module contains all the domain logic associated to decidim's NavbarLinks
6
+ # component admin panel.
7
+ module Admin
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module NavbarLinks
5
+ # This is the engine that runs on the public interface of `NavbarLinks`.
6
+ class AdminEngine < ::Rails::Engine
7
+ isolate_namespace Decidim::NavbarLinks::Admin
8
+
9
+ paths["db/migrate"] = nil
10
+ paths["lib/tasks"] = nil
11
+
12
+ routes do
13
+ resources :navbar_links
14
+ root to: "navbar_links#index"
15
+ end
16
+
17
+ initializer "decidim_navbar_links.admin_mount_routes" do
18
+ Decidim::Core::Engine.routes do
19
+ mount Decidim::NavbarLinks::AdminEngine, at: "/admin", as: "decidim_admin_navbar_links"
20
+ end
21
+ end
22
+
23
+ def load_seed
24
+ nil
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails"
4
+ require "decidim/core"
5
+
6
+ module Decidim
7
+ module NavbarLinks
8
+ # This is the engine that runs on the public interface of navbar_links.
9
+ class Engine < ::Rails::Engine
10
+ isolate_namespace Decidim::NavbarLinks
11
+
12
+ initializer "decidim.menu" do
13
+ Decidim.menu :menu do |menu|
14
+ NavbarLink.organization(current_organization).each do |navbar_link|
15
+ menu.item translated_attribute(navbar_link.title),
16
+ navbar_link.link,
17
+ position: 5,
18
+ active: :exact,
19
+ target: navbar_link.target
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end