aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorcedricnjanga2018-01-30 06:37:52 -0800
committercedricnjanga2018-01-30 06:37:52 -0800
commit7ec19d8dc153e1491cb1a693b11b3b0a351f316c (patch)
tree6da6a8bbcf1ae789a460fece5cf7e961562c5222 /app
parentf32d869cc3f34a939764cc3fa4d612a5d6544d08 (diff)
parent617a54cf63d7f11111b168534d49cdc04a5865d4 (diff)
downloadchouette-core-7ec19d8dc153e1491cb1a693b11b3b0a351f316c.tar.bz2
Merge branch 'master' into 5683-add_workgroup_id_to_calendars
Diffstat (limited to 'app')
-rw-r--r--app/assets/stylesheets/components/_buttons.sass41
-rw-r--r--app/assets/stylesheets/components/_dropdown.sass22
-rw-r--r--app/controllers/api_keys_controller.rb7
-rw-r--r--app/controllers/application_controller.rb13
-rw-r--r--app/controllers/companies_controller.rb6
-rw-r--r--app/controllers/compliance_check_sets_controller.rb18
-rw-r--r--app/controllers/compliance_control_sets_controller.rb10
-rw-r--r--app/controllers/compliance_controls_controller.rb6
-rw-r--r--app/controllers/import_resources_controller.rb8
-rw-r--r--app/controllers/imports_controller.rb3
-rw-r--r--app/controllers/lines_controller.rb4
-rw-r--r--app/controllers/networks_controller.rb3
-rw-r--r--app/controllers/purchase_windows_controller.rb7
-rw-r--r--app/controllers/referential_companies_controller.rb7
-rw-r--r--app/controllers/referential_lines_controller.rb3
-rw-r--r--app/controllers/referential_networks_controller.rb7
-rw-r--r--app/controllers/referentials_controller.rb6
-rw-r--r--app/controllers/routes_controller.rb5
-rw-r--r--app/controllers/routing_constraint_zones_controller.rb3
-rw-r--r--app/controllers/stop_areas_controller.rb5
-rw-r--r--app/controllers/time_tables_controller.rb3
-rw-r--r--app/controllers/workbenches_controller.rb3
-rw-r--r--app/decorators/api_key_decorator.rb30
-rw-r--r--app/decorators/calendar_decorator.rb21
-rw-r--r--app/decorators/company_decorator.rb50
-rw-r--r--app/decorators/compliance_check_decorator.rb8
-rw-r--r--app/decorators/compliance_check_set_decorator.rb12
-rw-r--r--app/decorators/compliance_control_decorator.rb63
-rw-r--r--app/decorators/compliance_control_set_decorator.rb41
-rw-r--r--app/decorators/import_decorator.rb37
-rw-r--r--app/decorators/import_resource_decorator.rb10
-rw-r--r--app/decorators/line_decorator.rb113
-rw-r--r--app/decorators/network_decorator.rb50
-rw-r--r--app/decorators/purchase_window_decorator.rb44
-rw-r--r--app/decorators/referential_decorator.rb108
-rw-r--r--app/decorators/referential_line_decorator.rb53
-rw-r--r--app/decorators/referential_network_decorator.rb60
-rw-r--r--app/decorators/route_decorator.rb107
-rw-r--r--app/decorators/routing_constraint_zone_decorator.rb58
-rw-r--r--app/decorators/stop_area_decorator.rb102
-rw-r--r--app/decorators/stop_point_decorator.rb34
-rw-r--r--app/decorators/time_table_decorator.rb66
-rw-r--r--app/helpers/compliance_control_sets_helper.rb3
-rw-r--r--app/helpers/table_builder_helper.rb77
-rw-r--r--app/models/chouette/purchase_window.rb10
-rw-r--r--app/models/merge.rb4
-rw-r--r--app/views/calendars/index.html.slim4
-rw-r--r--app/views/calendars/show.html.slim22
-rw-r--r--app/views/companies/index.html.slim4
-rw-r--r--app/views/companies/show.html.slim18
-rw-r--r--app/views/compliance_check_sets/index.html.slim1
-rw-r--r--app/views/compliance_check_sets/show.html.slim13
-rw-r--r--app/views/compliance_control_sets/index.html.slim4
-rw-r--r--app/views/compliance_control_sets/show.html.slim12
-rw-r--r--app/views/compliance_controls/show.html.slim2
-rw-r--r--app/views/import_resources/index.html.slim1
-rw-r--r--app/views/imports/index.html.slim3
-rw-r--r--app/views/imports/show.html.slim10
-rw-r--r--app/views/layouts/navigation/_page_header.html.slim29
-rw-r--r--app/views/lines/index.html.slim4
-rw-r--r--app/views/lines/show.html.slim10
-rw-r--r--app/views/networks/index.html.slim3
-rw-r--r--app/views/networks/show.html.slim10
-rw-r--r--app/views/purchase_windows/index.html.slim4
-rw-r--r--app/views/purchase_windows/show.html.slim9
-rw-r--r--app/views/referential_companies/index.html.slim4
-rw-r--r--app/views/referential_lines/show.html.slim13
-rw-r--r--app/views/referential_networks/index.html.slim3
-rw-r--r--app/views/referential_networks/show.html.slim9
-rw-r--r--app/views/referential_stop_areas/_form.html.slim2
-rw-r--r--app/views/referential_stop_areas/show.html.slim9
-rw-r--r--app/views/referentials/show.html.slim20
-rw-r--r--app/views/routes/show.html.slim17
-rw-r--r--app/views/routing_constraint_zones/index.html.slim3
-rw-r--r--app/views/routing_constraint_zones/show.html.slim9
-rw-r--r--app/views/stop_areas/index.html.slim4
-rw-r--r--app/views/stop_areas/show.html.slim9
-rw-r--r--app/views/time_tables/index.html.slim4
-rw-r--r--app/views/time_tables/show.html.slim15
-rw-r--r--app/views/workbench_outputs/show.html.slim2
-rw-r--r--app/views/workbenches/show.html.slim4
81 files changed, 724 insertions, 917 deletions
diff --git a/app/assets/stylesheets/components/_buttons.sass b/app/assets/stylesheets/components/_buttons.sass
index a649a07ef..93f9907a5 100644
--- a/app/assets/stylesheets/components/_buttons.sass
+++ b/app/assets/stylesheets/components/_buttons.sass
@@ -142,16 +142,25 @@ table, .table
margin: 0
border-radius: 0
box-shadow: 0 0 3px rgba($darkgrey, 0.25)
-
- > li > a, > li > button
- padding: 5px 15px
-
- > li.delete-action
- > a, > button
+ > ul
+ padding: 0
+ margin: 0
+ > li > a, > li > button
+ padding: 5px 15px
+ white-space: nowrap
+ padding: 5px 15px
+ font-weight: normal
+ line-height: $line-height
display: block
+ font-size: 14px
+ &:hover, &:focus
+ text-decoration: none
+ background-color: whitesmoke
+ outline: none
+
+ &:not(:first-child)
position: relative
margin-top: 11px
-
&:before
content: ''
display: block
@@ -162,14 +171,18 @@ table, .table
height: 1px
background-color: $grey
- .fa:first-child
- margin-right: 0.5em
-
- & + li.delete-action
+ > li.delete-action
> a, > button
- margin-top: 0
- &:before
- display: none
+ display: block
+ position: relative
+ .fa:first-child
+ margin-right: 0.5em
+
+ & + li.delete-action
+ > a, > button
+ margin-top: 0
+ &:before
+ display: none
&.table-2entries .t2e-item
diff --git a/app/assets/stylesheets/components/_dropdown.sass b/app/assets/stylesheets/components/_dropdown.sass
index 8a8d69063..a0d217b14 100644
--- a/app/assets/stylesheets/components/_dropdown.sass
+++ b/app/assets/stylesheets/components/_dropdown.sass
@@ -18,9 +18,19 @@
background-color: whitesmoke
outline: none
- > .disabled > a, > .disabled > button
- cursor: not-allowed
- &, &:hover, &:focus
- color: rgba($darkgrey, 0.5)
- background-color: transparent
- outline: none
+ &, & > ul
+ > .disabled > a, > .disabled > button
+ cursor: not-allowed
+ &, &:hover, &:focus
+ color: rgba($darkgrey, 0.5)
+ background-color: transparent
+ outline: none
+
+ > ul > li > a
+ display: block
+ padding: 3px 20px
+ clear: both
+ font-weight: normal
+ line-height: 1.42857
+ color: #333333
+ white-space: nowrap
diff --git a/app/controllers/api_keys_controller.rb b/app/controllers/api_keys_controller.rb
index 9706c5961..a03a67481 100644
--- a/app/controllers/api_keys_controller.rb
+++ b/app/controllers/api_keys_controller.rb
@@ -31,11 +31,4 @@ class ApiKeysController < ChouetteController
def api_key_params
params.require(:api_key).permit(:name, :referential_id)
end
-
- def decorate_api_keys(api_keys)
- ModelDecorator.decorate(
- api_keys,
- with: ApiKeyDecorator,
- )
- end
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 80d194096..8bd3da2f9 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -52,6 +52,19 @@ class ApplicationController < ActionController::Base
end
helper_method :current_functional_scope
+ def collection_name
+ self.class.name.split("::").last.gsub('Controller', '').underscore
+ end
+
+ def decorated_collection
+ if instance_variable_defined?("@#{collection_name}")
+ instance_variable_get("@#{collection_name}")
+ else
+ nil
+ end
+ end
+ helper_method :decorated_collection
+
def begin_of_association_chain
current_organisation
end
diff --git a/app/controllers/companies_controller.rb b/app/controllers/companies_controller.rb
index f84252920..4afd12be1 100644
--- a/app/controllers/companies_controller.rb
+++ b/app/controllers/companies_controller.rb
@@ -47,6 +47,9 @@ class CompaniesController < ChouetteController
end
end
+ def resource
+ super.decorate(context: { referential: line_referential })
+ end
def resource_url(company = nil)
line_referential_company_path(line_referential, company || resource)
@@ -79,9 +82,8 @@ class CompaniesController < ChouetteController
end
def decorate_companies(companies)
- ModelDecorator.decorate(
+ CompanyDecorator.decorate(
companies,
- with: CompanyDecorator,
context: {
referential: line_referential
}
diff --git a/app/controllers/compliance_check_sets_controller.rb b/app/controllers/compliance_check_sets_controller.rb
index 4ec86f0d6..271598428 100644
--- a/app/controllers/compliance_check_sets_controller.rb
+++ b/app/controllers/compliance_check_sets_controller.rb
@@ -11,9 +11,8 @@ class ComplianceCheckSetsController < ChouetteController
scope = self.ransack_period_range(scope: @compliance_check_sets, error_message: t('compliance_check_sets.filters.error_period_filter'), query: :where_created_at_between)
@q_for_form = scope.ransack(params[:q])
format.html {
- @compliance_check_sets = ModelDecorator.decorate(
- @q_for_form.result.order(created_at: :desc),
- with: ComplianceCheckSetDecorator
+ @compliance_check_sets = ComplianceCheckSetDecorator.decorate(
+ @q_for_form.result.order(created_at: :desc)
)
}
end
@@ -41,18 +40,9 @@ class ComplianceCheckSetsController < ChouetteController
def executed_for_html
@q_checks_form = @compliance_check_set.compliance_checks.ransack(params[:q])
@compliance_check_set = @compliance_check_set.decorate
- compliance_checks =
- decorate_compliance_checks( @q_checks_form.result)
- .group_by(&:compliance_check_block)
+ compliance_checks = @q_checks_form.result
+ .group_by(&:compliance_check_block)
@direct_compliance_checks = compliance_checks.delete nil
@blocks_to_compliance_checks_map = compliance_checks
end
-
- # Decoration
- # ----------
- def decorate_compliance_checks(compliance_checks)
- ModelDecorator.decorate(
- compliance_checks,
- with: ComplianceCheckDecorator)
- end
end
diff --git a/app/controllers/compliance_control_sets_controller.rb b/app/controllers/compliance_control_sets_controller.rb
index 2d3d03ad0..ae1d01feb 100644
--- a/app/controllers/compliance_control_sets_controller.rb
+++ b/app/controllers/compliance_control_sets_controller.rb
@@ -38,17 +38,11 @@ class ComplianceControlSetsController < ChouetteController
private
def decorate_compliance_control_sets(compliance_control_sets)
- ModelDecorator.decorate(
- compliance_control_sets,
- with: ComplianceControlSetDecorator
- )
+ ComplianceControlSetDecorator.decorate(compliance_control_sets)
end
def decorate_compliance_controls(compliance_controls)
- ModelDecorator.decorate(
- compliance_controls,
- with: ComplianceControlDecorator,
- )
+ ComplianceControlDecorator.decorate(compliance_controls)
end
def compliance_control_set_params
diff --git a/app/controllers/compliance_controls_controller.rb b/app/controllers/compliance_controls_controller.rb
index dfbecaa71..73dc18f59 100644
--- a/app/controllers/compliance_controls_controller.rb
+++ b/app/controllers/compliance_controls_controller.rb
@@ -8,6 +8,12 @@ class ComplianceControlsController < ChouetteController
@sti_subclasses = ComplianceControl.subclasses
end
+ def show
+ show! do
+ @compliance_control = @compliance_control.decorate
+ end
+ end
+
def new
if params[:sti_class].blank?
flash[:notice] = I18n.t("compliance_controls.errors.mandatory_control_type")
diff --git a/app/controllers/import_resources_controller.rb b/app/controllers/import_resources_controller.rb
index c83721310..ea78394a1 100644
--- a/app/controllers/import_resources_controller.rb
+++ b/app/controllers/import_resources_controller.rb
@@ -27,12 +27,6 @@ class ImportResourcesController < ChouetteController
private
def decorate_import_resources(import_resources)
- ImportResourcesDecorator.decorate(
- import_resources,
- with: ImportResourceDecorator,
- context: {
- import: @import
- }
- )
+ ImportResourcesDecorator.decorate(import_resources)
end
end
diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb
index 46d34efda..7a999d657 100644
--- a/app/controllers/imports_controller.rb
+++ b/app/controllers/imports_controller.rb
@@ -84,9 +84,8 @@ class ImportsController < ChouetteController
end
def decorate_imports(imports)
- ModelDecorator.decorate(
+ ImportDecorator.decorate(
imports,
- with: ImportDecorator,
context: {
workbench: @workbench
}
diff --git a/app/controllers/lines_controller.rb b/app/controllers/lines_controller.rb
index 7041a3a26..27a9bf9be 100644
--- a/app/controllers/lines_controller.rb
+++ b/app/controllers/lines_controller.rb
@@ -15,9 +15,8 @@ class LinesController < ChouetteController
def index
@hide_group_of_line = line_referential.group_of_lines.empty?
index! do |format|
- @lines = ModelDecorator.decorate(
+ @lines = LineDecorator.decorate(
@lines,
- with: LineDecorator,
context: {
line_referential: @line_referential,
current_organisation: current_organisation
@@ -69,7 +68,6 @@ class LinesController < ChouetteController
respond_to do |format|
format.json { render :json => filtered_lines_maps}
end
-
end
protected
diff --git a/app/controllers/networks_controller.rb b/app/controllers/networks_controller.rb
index 79a5eb97b..1c69b1240 100644
--- a/app/controllers/networks_controller.rb
+++ b/app/controllers/networks_controller.rb
@@ -89,9 +89,8 @@ class NetworksController < ChouetteController
end
def decorate_networks(networks)
- ModelDecorator.decorate(
+ NetworkDecorator.decorate(
networks,
- with: NetworkDecorator,
context: {
line_referential: line_referential
}
diff --git a/app/controllers/purchase_windows_controller.rb b/app/controllers/purchase_windows_controller.rb
index 04b5736bb..293a7d8e4 100644
--- a/app/controllers/purchase_windows_controller.rb
+++ b/app/controllers/purchase_windows_controller.rb
@@ -36,13 +36,12 @@ class PurchaseWindowsController < ChouetteController
end
def decorate_purchase_windows(purchase_windows)
- ModelDecorator.decorate(
+ PurchaseWindowDecorator.decorate(
purchase_windows,
- with: PurchaseWindowDecorator,
context: {
referential: @referential
- }
- )
+ }
+ )
end
def sort_column
diff --git a/app/controllers/referential_companies_controller.rb b/app/controllers/referential_companies_controller.rb
index 7e65a72cf..806a70c8f 100644
--- a/app/controllers/referential_companies_controller.rb
+++ b/app/controllers/referential_companies_controller.rb
@@ -69,10 +69,13 @@ class ReferentialCompaniesController < ChouetteController
%w[asc desc].include?(params[:direction]) ? params[:direction] : 'asc'
end
+ def collection_name
+ "companies"
+ end
+
def decorate_companies(companies)
- ModelDecorator.decorate(
+ CompanyDecorator.decorate(
companies,
- with: CompanyDecorator,
context: {
referential: referential
}
diff --git a/app/controllers/referential_lines_controller.rb b/app/controllers/referential_lines_controller.rb
index 9e8f5c512..37051faeb 100644
--- a/app/controllers/referential_lines_controller.rb
+++ b/app/controllers/referential_lines_controller.rb
@@ -28,9 +28,8 @@ class ReferentialLinesController < ChouetteController
@routes = @routes.paginate(page: params[:page], per_page: 10)
- @routes = ModelDecorator.decorate(
+ @routes = RouteDecorator.decorate(
@routes,
- with: RouteDecorator,
context: {
referential: referential,
line: @line
diff --git a/app/controllers/referential_networks_controller.rb b/app/controllers/referential_networks_controller.rb
index b2d83f953..fe00a99df 100644
--- a/app/controllers/referential_networks_controller.rb
+++ b/app/controllers/referential_networks_controller.rb
@@ -56,6 +56,10 @@ class ReferentialNetworksController < ChouetteController
end
end
+ def collection_name
+ 'networks'
+ end
+
def resource_url(network = nil)
referential_network_path(referential, network || resource)
end
@@ -78,9 +82,8 @@ class ReferentialNetworksController < ChouetteController
end
def decorate_networks(networks)
- ModelDecorator.decorate(
+ ReferentialNetworkDecorator.decorate(
networks,
- with: ReferentialNetworkDecorator,
context: {
referential: referential
}
diff --git a/app/controllers/referentials_controller.rb b/app/controllers/referentials_controller.rb
index 436d5ccb5..0ed3f75dd 100644
--- a/app/controllers/referentials_controller.rb
+++ b/app/controllers/referentials_controller.rb
@@ -32,9 +32,8 @@ class ReferentialsController < ChouetteController
show! do |format|
@referential = @referential.decorate(context: { current_workbench_id: params[:current_workbench_id] } )
@reflines = lines_collection.paginate(page: params[:page], per_page: 10)
- @reflines = ModelDecorator.decorate(
+ @reflines = ReferentialLineDecorator.decorate(
@reflines,
- with: ReferentialLineDecorator,
context: {
referential: referential,
current_organisation: current_organisation
@@ -80,6 +79,7 @@ class ReferentialsController < ChouetteController
referential.archive!
redirect_to workbench_path(referential.workbench_id), notice: t('notice.referential.archived')
end
+
def unarchive
if referential.unarchive!
flash[:notice] = t('notice.referential.unarchived')
@@ -97,7 +97,7 @@ class ReferentialsController < ChouetteController
helper_method :current_referential
def resource
- @referential ||= current_organisation.find_referential(params[:id])
+ @referential ||= current_organisation.find_referential(params[:id]).decorate
end
def collection
diff --git a/app/controllers/routes_controller.rb b/app/controllers/routes_controller.rb
index 79f49143a..af5a9a91b 100644
--- a/app/controllers/routes_controller.rb
+++ b/app/controllers/routes_controller.rb
@@ -47,10 +47,7 @@ class RoutesController < ChouetteController
line: @line
})
- @route_sp = ModelDecorator.decorate(
- @route_sp,
- with: StopPointDecorator
- )
+ @route_sp = StopPointDecorator.decorate(@route_sp)
end
end
diff --git a/app/controllers/routing_constraint_zones_controller.rb b/app/controllers/routing_constraint_zones_controller.rb
index a72b288b8..47df211d0 100644
--- a/app/controllers/routing_constraint_zones_controller.rb
+++ b/app/controllers/routing_constraint_zones_controller.rb
@@ -13,9 +13,8 @@ class RoutingConstraintZonesController < ChouetteController
def index
index! do |format|
- @routing_constraint_zones = ModelDecorator.decorate(
+ @routing_constraint_zones = RoutingConstraintZoneDecorator.decorate(
@routing_constraint_zones,
- with: RoutingConstraintZoneDecorator,
context: {
referential: referential,
line: parent
diff --git a/app/controllers/stop_areas_controller.rb b/app/controllers/stop_areas_controller.rb
index 5243ce56c..79ffea72e 100644
--- a/app/controllers/stop_areas_controller.rb
+++ b/app/controllers/stop_areas_controller.rb
@@ -57,10 +57,7 @@ class StopAreasController < ChouetteController
redirect_to params.merge(:page => 1)
end
- @stop_areas = ModelDecorator.decorate(
- @stop_areas,
- with: StopAreaDecorator
- )
+ @stop_areas = StopAreaDecorator.decorate(@stop_areas)
}
end
end
diff --git a/app/controllers/time_tables_controller.rb b/app/controllers/time_tables_controller.rb
index a0fa168f0..0707b9648 100644
--- a/app/controllers/time_tables_controller.rb
+++ b/app/controllers/time_tables_controller.rb
@@ -167,9 +167,8 @@ class TimeTablesController < ChouetteController
end
def decorate_time_tables(time_tables)
- ModelDecorator.decorate(
+ TimeTableDecorator.decorate(
time_tables,
- with: TimeTableDecorator,
context: {
referential: @referential
}
diff --git a/app/controllers/workbenches_controller.rb b/app/controllers/workbenches_controller.rb
index b2dac9e67..2a71fe811 100644
--- a/app/controllers/workbenches_controller.rb
+++ b/app/controllers/workbenches_controller.rb
@@ -18,9 +18,8 @@ class WorkbenchesController < ChouetteController
@q_for_form = scope.ransack(params[:q])
@q_for_result = scope.ransack(ransack_params)
@wbench_refs = sort_result(@q_for_result.result).paginate(page: params[:page], per_page: 30)
- @wbench_refs = ModelDecorator.decorate(
+ @wbench_refs = ReferentialDecorator.decorate(
@wbench_refs,
- with: ReferentialDecorator,
context: {
current_workbench_id: params[:id]
}
diff --git a/app/decorators/api_key_decorator.rb b/app/decorators/api_key_decorator.rb
deleted file mode 100644
index def3a6a01..000000000
--- a/app/decorators/api_key_decorator.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-class ApiKeyDecorator < Draper::Decorator
- decorates Api::V1::ApiKey
- delegate_all
-
-
- def action_links
- links = []
-
- links << Link.new(
- content: h.t('api_keys.actions.show'),
- href: h.organisation_api_key_path(object),
- )
-
- links << Link.new(
- content: h.t('api_keys.actions.edit'),
- href: h.edit_organisation_api_key_path(object),
- )
-
- if h.policy(object).destroy?
- links << Link.new(
- content: h.destroy_link_content,
- href: h.organisation_api_key_path(object),
- method: :delete,
- data: { confirm: h.t('api_keys.actions.destroy_confirm') }
- )
- end
-
- links
- end
-end
diff --git a/app/decorators/calendar_decorator.rb b/app/decorators/calendar_decorator.rb
index ce2c1a2dd..be1f9e3bf 100644
--- a/app/decorators/calendar_decorator.rb
+++ b/app/decorators/calendar_decorator.rb
@@ -1,18 +1,13 @@
-class CalendarDecorator < Draper::Decorator
- delegate_all
+class CalendarDecorator < AF83::Decorator
+ decorates Calendar
- def action_links
- links = []
+ create_action_link
- if h.policy(object).destroy?
- links << Link.new(
- content: h.destroy_link_content,
- href: h.workgroup_calendar_path(context[:workgroup], object),
- method: :delete,
- data: { confirm: h.t('calendars.actions.destroy_confirm') }
- )
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link
+ instance_decorator.edit_action_link
+ instance_decorator.destroy_action_link do |l|
+ l.data {{ confirm: h.t('calendars.actions.destroy_confirm') }}
end
-
- links
end
end
diff --git a/app/decorators/company_decorator.rb b/app/decorators/company_decorator.rb
index 50b82d276..aadce68bb 100644
--- a/app/decorators/company_decorator.rb
+++ b/app/decorators/company_decorator.rb
@@ -1,45 +1,35 @@
-class CompanyDecorator < Draper::Decorator
+class CompanyDecorator < AF83::Decorator
decorates Chouette::Company
- delegate_all
-
- def self.collection_decorator_class
- PaginatingDecorator
- end
-
- def linecount
- object.lines.count
+ create_action_link do |l|
+ l.content { h.t('companies.actions.new') }
+ l.href { [:new, context[:referential], :company] }
end
- # Requires:
- # context: {
- # referential:
- # }
- def action_links
- links = []
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.href { [context[:referential], object] }
+ end
- if h.policy(object).update?
- links << Link.new(
- content: h.t('companies.actions.edit'),
- href: h.edit_line_referential_company_path(
+ instance_decorator.edit_action_link do |l|
+ l.content {|l| l.action == "show" ? h.t('actions.edit') : h.t('companies.actions.edit') }
+ l.href {
+ h.edit_line_referential_company_path(
context[:referential],
object
)
- )
+ }
end
- if h.policy(object).destroy?
- links << Link.new(
- content: h.destroy_link_content('companies.actions.destroy'),
- href: h.line_referential_company_path(
+ instance_decorator.destroy_action_link do |l|
+ l.content { h.destroy_link_content('companies.actions.destroy') }
+ l.href {
+ h.edit_line_referential_company_path(
context[:referential],
object
- ),
- method: :delete,
- data: { confirm: h.t('companies.actions.destroy_confirm') }
- )
+ )
+ }
+ l.data {{ confirm: h.t('companies.actions.destroy_confirm') }}
end
-
- links
end
end
diff --git a/app/decorators/compliance_check_decorator.rb b/app/decorators/compliance_check_decorator.rb
deleted file mode 100644
index 5431f5796..000000000
--- a/app/decorators/compliance_check_decorator.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-class ComplianceCheckDecorator < Draper::Decorator
- delegate_all
-
- def action_links
- []
- end
-
-end
diff --git a/app/decorators/compliance_check_set_decorator.rb b/app/decorators/compliance_check_set_decorator.rb
index c58e14d88..334f39e88 100644
--- a/app/decorators/compliance_check_set_decorator.rb
+++ b/app/decorators/compliance_check_set_decorator.rb
@@ -1,15 +1,15 @@
-class ComplianceCheckSetDecorator < Draper::Decorator
- delegate_all
+class ComplianceCheckSetDecorator < AF83::Decorator
+ decorates ComplianceCheckSet
- def action_links
- links = []
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link
end
- def lines_status
+ define_instance_method :lines_status do
object.compliance_check_resources.where(status: :OK, resource_type: :line).count
end
- def lines_in_compliance_check_set
+ define_instance_method :lines_in_compliance_check_set do
object.compliance_check_resources.where(resource_type: :line).count
end
diff --git a/app/decorators/compliance_control_decorator.rb b/app/decorators/compliance_control_decorator.rb
index f56e80417..c57a7ccc7 100644
--- a/app/decorators/compliance_control_decorator.rb
+++ b/app/decorators/compliance_control_decorator.rb
@@ -1,30 +1,47 @@
-class ComplianceControlDecorator < Draper::Decorator
- delegate_all
+class ComplianceControlDecorator < AF83::Decorator
+ decorates ComplianceControl
- def action_links
- policy = h.policy(object)
- links = []
-
- links << Link.new(
- content: h.t('compliance_control_sets.actions.show'),
- href: h.compliance_control_set_compliance_control_path(object.compliance_control_set.id, object.id)
- )
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.content h.t('compliance_control_sets.actions.show')
+ l.href do
+ h.compliance_control_set_compliance_control_path(
+ object.compliance_control_set.id,
+ object.id
+ )
+ end
+ end
- if policy.edit?
- links << Link.new(
- content: h.t('compliance_controls.actions.edit'),
- href: h.edit_compliance_control_set_compliance_control_path(object.compliance_control_set.id, object.id)
- )
+ instance_decorator.edit_action_link do |l|
+ l.href do
+ h.edit_compliance_control_set_compliance_control_path(
+ object.compliance_control_set_id,
+ object.id
+ )
+ end
end
- if policy.destroy?
- links << Link.new(
- content: h.destroy_link_content,
- href: h.compliance_control_set_compliance_control_path(object.compliance_control_set.id, object.id),
- method: :delete,
- data: { confirm: h.t('compliance_controls.actions.destroy_confirm') }
- )
+ instance_decorator.destroy_action_link do |l|
+ l.content h.destroy_link_content
+ l.href do
+ h.compliance_control_set_compliance_control_path(
+ object.compliance_control_set.id,
+ object.id
+ )
+ end
+ l.data confirm: h.t('compliance_controls.actions.destroy_confirm')
end
- links
+ end
+
+ define_instance_class_method :predicate do
+ object_class.predicate
+ end
+
+ define_instance_class_method :prerequisite do
+ object_class.prerequisite
+ end
+
+ define_instance_class_method :dynamic_attributes do
+ object_class.dynamic_attributes
end
end
diff --git a/app/decorators/compliance_control_set_decorator.rb b/app/decorators/compliance_control_set_decorator.rb
index 73d65d54a..387822c67 100644
--- a/app/decorators/compliance_control_set_decorator.rb
+++ b/app/decorators/compliance_control_set_decorator.rb
@@ -1,35 +1,24 @@
-class ComplianceControlSetDecorator < Draper::Decorator
- delegate_all
+class ComplianceControlSetDecorator < AF83::Decorator
+ decorates ComplianceControlSet
- def action_links
- policy = h.policy(object)
- links = []
+ create_action_link do |l|
+ l.content t('compliance_control_sets.actions.new')
+ end
- if policy.edit?
- links << Link.new(
- content: h.t('compliance_control_sets.actions.edit'),
- href: h.edit_compliance_control_set_path(object.id)
- )
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.edit_action_link do |l|
+ l.content t('compliance_control_sets.actions.edit')
end
- if policy.clone?
- links << Link.new(
- content: h.t('actions.clone'),
- href: h.clone_compliance_control_set_path(object.id)
- )
+ instance_decorator.action_link policy: :clone, secondary: :show do |l|
+ l.content t('actions.clone')
+ l.href { h.clone_compliance_control_set_path(object.id) }
end
- if policy.destroy?
- links << Link.new(
- content: h.destroy_link_content,
- href: h.compliance_control_set_path(object.id),
- method: :delete,
- data: { confirm: h.t('compliance_control_sets.actions.destroy_confirm') }
- )
+ instance_decorator.destroy_action_link do |l|
+ l.content h.destroy_link_content
+ l.href { h.compliance_control_set_path(object.id) }
+ l.data confirm: h.t('compliance_control_sets.actions.destroy_confirm')
end
-
- links
end
-
end
-
diff --git a/app/decorators/import_decorator.rb b/app/decorators/import_decorator.rb
index 8b00234d2..c6b1f2349 100644
--- a/app/decorators/import_decorator.rb
+++ b/app/decorators/import_decorator.rb
@@ -1,9 +1,7 @@
-class ImportDecorator < Draper::Decorator
+class ImportDecorator < AF83::Decorator
decorates Import
- delegate_all
-
- def import_status_css_class
+ define_instance_method :import_status_css_class do
cls =''
cls = 'overheaded-success' if object.status == 'successful'
cls = 'overheaded-warning' if object.status == 'warning'
@@ -11,28 +9,19 @@ class ImportDecorator < Draper::Decorator
cls
end
- def action_links
- policy = h.policy(object)
- links = []
-
- links << Link.new(
- content: h.t('imports.actions.download'),
- href: object.file.url
- )
+ create_action_link do |l|
+ l.content t('imports.actions.new')
+ l.href { h.new_workbench_import_path(workbench_id: context[:workbench]) }
+ end
- if policy.destroy?
- links << Link.new(
- content: h.destroy_link_content,
- href: h.workbench_import_path(
- context[:workbench],
- object
- ),
- method: :delete,
- data: { confirm: h.t('imports.actions.destroy_confirm') }
- )
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.href { h.workbench_import_path(context[:workbench], object) }
end
- links
+ instance_decorator.action_link secondary: :show do |l|
+ l.content t('imports.actions.download')
+ l.href { object.file.url }
+ end
end
-
end
diff --git a/app/decorators/import_resource_decorator.rb b/app/decorators/import_resource_decorator.rb
deleted file mode 100644
index 9bfd1f757..000000000
--- a/app/decorators/import_resource_decorator.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-class ImportResourceDecorator < Draper::Decorator
- decorates ImportResource
-
- delegate_all
-
- def action_links
- links = []
- end
-
-end
diff --git a/app/decorators/line_decorator.rb b/app/decorators/line_decorator.rb
index 9c0cf7292..9171a6310 100644
--- a/app/decorators/line_decorator.rb
+++ b/app/decorators/line_decorator.rb
@@ -1,76 +1,71 @@
-class LineDecorator < Draper::Decorator
+class LineDecorator < AF83::Decorator
decorates Chouette::Line
- delegate_all
-
- # Requires:
- # context: {
- # line_referential: ,
- # current_organisation:
- # }
- def action_links
- links = []
+ create_action_link do |l|
+ l.content t('lines.actions.new')
+ l.href { h.new_line_referential_line_path(context[:line_referential]) }
+ end
- links << Link.new(
- content: h.t('lines.actions.show_network'),
- href: [context[:line_referential], object.network]
- )
+ with_instance_decorator do |instance_decorator|
+ ### primary (and secondary) can be
+ ### - a single action
+ ### - an array of actions
+ ### - a boolean
- links << Link.new(
- content: h.t('lines.actions.show_company'),
- href: [context[:line_referential], object.company],
- disabled: object.company.nil?
- )
+ instance_decorator.show_action_link do |l|
+ l.content t('lines.actions.show')
+ l.href { [context[:line_referential], object] }
+ end
- if h.policy(Chouette::Line).create? &&
- context[:line_referential].organisations.include?(
- context[:current_organisation]
- )
- links << Link.new(
- content: h.t('lines.actions.edit'),
- href: h.edit_line_referential_line_path(context[:line_referential], object.id)
- )
+ instance_decorator.action_link secondary: :show do |l|
+ l.content t('lines.actions.show_network')
+ l.href { [context[:line_referential], object.network] }
end
- if h.policy(Chouette::Line).create? &&
- context[:line_referential].organisations.include?(
- context[:current_organisation]
- )
- links << Link.new(
- content: h.t('lines.actions.new'),
- href: h.new_line_referential_line_path(context[:line_referential])
- )
+ instance_decorator.action_link secondary: :show do |l|
+ l.content t('lines.actions.show_company')
+ l.href { [context[:line_referential], object.company] }
+ l.disabled { object.company.nil? }
end
- if h.policy(object).deactivate?
- links << Link.new(
- content: h.deactivate_link_content('lines.actions.deactivate'),
- href: h.deactivate_line_referential_line_path(context[:line_referential], object),
- method: :put,
- data: {confirm: h.t('lines.actions.deactivate_confirm')},
- extra_class: "delete-action"
- )
+ can_edit_line = ->(){ h.policy(Chouette::Line).create? && context[:line_referential].organisations.include?(context[:current_organisation]) }
+
+ instance_decorator.with_condition can_edit_line do
+ edit_action_link do |l|
+ l.content {|l| l.primary? ? h.t('actions.edit') : h.t('lines.actions.edit') }
+ l.href { h.edit_line_referential_line_path(context[:line_referential], object.id) }
+ end
+
+ action_link on: :index, secondary: :index do |l|
+ l.content t('lines.actions.new')
+ l.href { h.new_line_referential_line_path(context[:line_referential]) }
+ end
end
- if h.policy(object).activate?
- links << Link.new(
- content: h.activate_link_content('lines.actions.activate'),
- href: h.activate_line_referential_line_path(context[:line_referential], object),
- method: :put,
- data: {confirm: h.t('lines.actions.activate_confirm')},
- extra_class: "delete-action"
- )
+ ### the option :policy will automatically check for the corresponding method
+ ### on the object's policy
+
+ instance_decorator.action_link policy: :deactivate, secondary: :show, footer: :index do |l|
+ l.content { h.deactivate_link_content('lines.actions.deactivate') }
+ l.href { h.deactivate_line_referential_line_path(context[:line_referential], object) }
+ l.method :put
+ l.data confirm: h.t('lines.actions.deactivate_confirm')
+ l.add_class "delete-action"
end
- if h.policy(object).destroy?
- links << Link.new(
- content: h.destroy_link_content('lines.actions.destroy'),
- href: h.line_referential_line_path(context[:line_referential], object),
- method: :delete,
- data: {confirm: h.t('lines.actions.destroy_confirm')}
- )
+ instance_decorator.action_link policy: :activate, secondary: :show, footer: :index do |l|
+ l.content { h.activate_link_content('lines.actions.activate') }
+ l.href { h.activate_line_referential_line_path(context[:line_referential], object) }
+ l.method :put
+ l.data confirm: h.t('lines.actions.activate_confirm')
+ l.add_class "delete-action"
end
- links
+ instance_decorator.destroy_action_link do |l|
+ l.content { h.destroy_link_content('lines.actions.destroy') }
+ l.href { h.line_referential_line_path(context[:line_referential], object) }
+ l.data confirm: h.t('lines.actions.destroy_confirm')
+ l.add_class "delete-action"
+ end
end
end
diff --git a/app/decorators/network_decorator.rb b/app/decorators/network_decorator.rb
index b0a19cf60..90f0d0e82 100644
--- a/app/decorators/network_decorator.rb
+++ b/app/decorators/network_decorator.rb
@@ -1,44 +1,42 @@
-class NetworkDecorator < Draper::Decorator
+class NetworkDecorator < AF83::Decorator
decorates Chouette::Network
- delegate_all
-
- # Requires:
+ # Action links require:
# context: {
# line_referential: ,
# }
- def action_links
- links = []
- if h.policy(Chouette::Network).create?
- links << Link.new(
- content: h.t('networks.actions.new'),
- href: h.new_line_referential_network_path(context[:line_referential])
- )
+ create_action_link do |l|
+ l.content t('networks.actions.new')
+ l.href { h.new_line_referential_network_path(context[:line_referential]) }
+ end
+
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.href do
+ h.line_referential_network_path(context[:line_referential], object)
+ end
end
- if h.policy(object).update?
- links << Link.new(
- content: h.t('networks.actions.edit'),
- href: h.edit_line_referential_network_path(
+ instance_decorator.action_link secondary: true, policy: :edit do |l|
+ l.content t('networks.actions.edit')
+ l.href do
+ h.edit_line_referential_network_path(
context[:line_referential],
object
)
- )
+ end
end
- if h.policy(object).destroy?
- links << Link.new(
- content: h.destroy_link_content('networks.actions.destroy'),
- href: h.line_referential_network_path(
+ instance_decorator.destroy_action_link do |l|
+ l.content h.destroy_link_content('networks.actions.destroy')
+ l.href do
+ h.line_referential_network_path(
context[:line_referential],
object
- ),
- method: :delete,
- data: { confirm: h.t('networks.actions.destroy_confirm') }
- )
+ )
+ end
+ l.data confirm: h.t('networks.actions.destroy_confirm')
end
-
- links
end
end
diff --git a/app/decorators/purchase_window_decorator.rb b/app/decorators/purchase_window_decorator.rb
index 646fdea0d..54b241173 100644
--- a/app/decorators/purchase_window_decorator.rb
+++ b/app/decorators/purchase_window_decorator.rb
@@ -1,31 +1,37 @@
-class PurchaseWindowDecorator < Draper::Decorator
+class PurchaseWindowDecorator < AF83::Decorator
decorates Chouette::PurchaseWindow
- delegate_all
- def action_links
- policy = h.policy(object)
- links = []
+ create_action_link do |l|
+ l.content t('purchase_windows.actions.new')
+ l.href { h.new_referential_purchase_window_path(context[:referential]) }
+ end
- if policy.update?
- links << Link.new(
- content: I18n.t('actions.edit'),
- href: h.edit_referential_purchase_window_path(context[:referential].id, object)
- )
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.content t('purchase_windows.actions.show')
+ l.href do
+ h.referential_purchase_window_path(
+ context[:referential],
+ object
+ )
+ end
end
- if policy.destroy?
- links << Link.new(
- content: I18n.t('actions.destroy'),
- href: h.referential_purchase_window_path(context[:referential].id, object),
- method: :delete,
- data: { confirm: h.t('purchase_windows.actions.destroy_confirm') }
- )
+ instance_decorator.edit_action_link do |l|
+ l.href do
+ h.edit_referential_purchase_window_path(context[:referential].id, object)
+ end
end
- links
+ instance_decorator.destroy_action_link do |l|
+ l.href do
+ h.referential_purchase_window_path(context[:referential].id, object)
+ end
+ l.data confirm: h.t('purchase_windows.actions.destroy_confirm')
+ end
end
- def bounding_dates
+ define_instance_method :bounding_dates do
unless object.date_ranges.empty?
object.date_ranges.map(&:min).min..object.date_ranges.map(&:max).max
end
diff --git a/app/decorators/referential_decorator.rb b/app/decorators/referential_decorator.rb
index d75ad1050..3132cbf92 100644
--- a/app/decorators/referential_decorator.rb
+++ b/app/decorators/referential_decorator.rb
@@ -1,88 +1,60 @@
-class ReferentialDecorator < Draper::Decorator
- delegate_all
+class ReferentialDecorator < AF83::Decorator
+ decorates Referential
- def action_links
- policy = h.policy(object)
- links = []
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link
+ instance_decorator.edit_action_link
- if has_feature?(:referential_vehicle_journeys)
- links << Link.new(
- content: h.t('referential_vehicle_journeys.index.title'),
- href: h.referential_vehicle_journeys_path(object)
- )
+ instance_decorator.action_link feature: :referential_vehicle_journeys, secondary: :show, on: :show do |l|
+ l.content t('referential_vehicle_journeys.index.title')
+ l.href { h.referential_vehicle_journeys_path(object) }
end
- if has_feature?(:purchase_windows)
- links << Link.new(
- content: h.t('purchase_windows.index.title'),
- href: h.referential_purchase_windows_path(object)
- )
+ instance_decorator.action_link feature: :purchase_windows, secondary: :show, on: :show do |l|
+ l.content t('purchase_windows.index.title')
+ l.href { h.referential_purchase_windows_path(object) }
end
- links << Link.new(
- content: h.t('time_tables.index.title'),
- href: h.referential_time_tables_path(object)
- )
-
- if policy.clone?
- links << Link.new(
- content: h.t('actions.clone'),
- href: h.new_referential_path(from: object.id, current_workbench_id: context[:current_workbench_id])
- )
+ instance_decorator.action_link secondary: :show do |l|
+ l.content t('time_tables.index.title')
+ l.href { h.referential_time_tables_path(object) }
end
- if policy.validate?
- links << Link.new(
- content: h.t('actions.validate'),
- href: h.referential_select_compliance_control_set_path(object.id)
- )
+ instance_decorator.action_link policy: :clone, secondary: :show do |l|
+ l.content t('actions.clone')
+ l.href { h.new_referential_path(from: object.id, current_workbench_id: context[:current_workbench_id]) }
end
- if policy.archive?
- links << Link.new(
- content: h.t('actions.archive'),
- href: h.archive_referential_path(object.id),
- method: :put
- )
+ instance_decorator.action_link policy: :validate, secondary: :show do |l|
+ l.content t('actions.validate')
+ l.href { h.referential_select_compliance_control_set_path(object.id) }
end
- if policy.unarchive?
- links << Link.new(
- content: h.t('actions.unarchive'),
- href: h.unarchive_referential_path(object.id),
- method: :put
- )
+ instance_decorator.action_link policy: :archive, secondary: :show do |l|
+ l.content t('actions.archive')
+ l.href { h.archive_referential_path(object.id) }
+ l.method :put
end
- if policy.edit?
- links << HTMLElement.new(
- :button,
- 'Purger',
- type: 'button',
- data: {
- toggle: 'modal',
- target: '#purgeModal'
- }
- )
+ instance_decorator.action_link policy: :unarchive, secondary: :show, on: :show do |l|
+ l.content t('actions.unarchive')
+ l.href { h.unarchive_referential_path(object.id) }
+ l.method :put
end
- if policy.destroy?
- links << Link.new(
- content: h.destroy_link_content,
- href: h.referential_path(object),
- method: :delete,
- data: { confirm: h.t('referentials.actions.destroy_confirm') }
- )
+ instance_decorator.action_link policy: :edit, secondary: :show, on: :show do |l|
+ l.content 'Purger'
+ l.href '#'
+ l.type 'button'
+ l.data {{
+ toggle: 'modal',
+ target: '#purgeModal'
+ }}
end
- links
- end
-
- private
-
- # TODO move to a base Decorator (ApplicationDecorator)
- def has_feature?(*features)
- h.has_feature?(*features) rescue false
+ instance_decorator.destroy_action_link do |l|
+ l.href { h.referential_path(object) }
+ l.data {{ confirm: h.t('referentials.actions.destroy_confirm') }}
+ end
end
-
end
diff --git a/app/decorators/referential_line_decorator.rb b/app/decorators/referential_line_decorator.rb
index dceb3e2a9..8f884a8e0 100644
--- a/app/decorators/referential_line_decorator.rb
+++ b/app/decorators/referential_line_decorator.rb
@@ -1,40 +1,43 @@
-class ReferentialLineDecorator < Draper::Decorator
+class ReferentialLineDecorator < AF83::Decorator
decorates Chouette::Line
- delegate_all
-
- # Requires:
+ # Action links require:
# context: {
# referential: ,
# current_organisation:
# }
- def action_links
- links = []
- links << Link.new(
- content: Chouette::Line.human_attribute_name(:footnotes),
- href: h.referential_line_footnotes_path(context[:referential], object)
- )
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.href { h.referential_line_path(context[:referential], object) }
+ end
- links << Link.new(
- content: h.t('routing_constraint_zones.index.title'),
- href: h.referential_line_routing_constraint_zones_path(
- context[:referential],
- object
- )
- )
+ instance_decorator.action_link secondary: true do |l|
+ l.content Chouette::Line.human_attribute_name(:footnotes)
+ l.href { h.referential_line_footnotes_path(context[:referential], object) }
+ end
- if !object.hub_restricted? ||
- (object.hub_restricted? && object.routes.size < 2)
- if h.policy(Chouette::Route).create? &&
- context[:referential].organisation == context[:current_organisation]
- links << Link.new(
- content: h.t('routes.actions.new'),
- href: h.new_referential_line_route_path(context[:referential], object)
+ instance_decorator.action_link secondary: true do |l|
+ l.content h.t('routing_constraint_zones.index.title')
+ l.href do
+ h.referential_line_routing_constraint_zones_path(
+ context[:referential],
+ object
)
end
end
- links
+ instance_decorator.action_link(
+ if: ->() {
+ (!object.hub_restricted? ||
+ (object.hub_restricted? && object.routes.size < 2)) &&
+ (h.policy(Chouette::Route).create? &&
+ context[:referential].organisation == context[:current_organisation])
+ },
+ secondary: true
+ ) do |l|
+ l.content h.t('routes.actions.new')
+ l.href { h.new_referential_line_route_path(context[:referential], object) }
+ end
end
end
diff --git a/app/decorators/referential_network_decorator.rb b/app/decorators/referential_network_decorator.rb
index 1260a38cb..ff3467188 100644
--- a/app/decorators/referential_network_decorator.rb
+++ b/app/decorators/referential_network_decorator.rb
@@ -1,38 +1,40 @@
-class ReferentialNetworkDecorator < Draper::Decorator
+class ReferentialNetworkDecorator < AF83::Decorator
decorates Chouette::Network
- delegate_all
+ # Action links require:
+ # context: {
+ # referential: ,
+ # }
-# Requires:
-# context: {
-# referential: ,
-# }
-def action_links
- links = []
-
- if h.policy(Chouette::Network).create?
- links << Link.new(
- content: h.t('networks.actions.new'),
- href: h.new_referential_network_path(context[:referential])
- )
+ create_action_link do |l|
+ l.content t('networks.actions.new')
+ l.href { h.new_referential_network_path(context[:referential]) }
end
- if h.policy(object).update?
- links << Link.new(
- content: h.t('networks.actions.edit'),
- href: h.edit_referential_network_path(context[:referential], object)
- )
- end
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.href { h.referential_network_path(context[:referential], object) }
+ end
- if h.policy(object).destroy?
- links << Link.new(
- content: h.destroy_link_content('networks.actions.destroy'),
- href: h.referential_network_path(context[:referential], object),
- method: :delete,
- data: { confirm: t('networks.actions.destroy_confirm') }
- )
- end
+ instance_decorator.edit_action_link do |l|
+ l.content t('networks.actions.edit')
+ l.href do
+ h.edit_referential_network_path(
+ context[:referential],
+ object
+ )
+ end
+ end
- links
+ instance_decorator.destroy_action_link do |l|
+ l.content h.destroy_link_content('networks.actions.destroy')
+ l.href do
+ h.referential_network_path(
+ context[:referential],
+ object
+ )
+ end
+ l.data confirm: h.t('networks.actions.destroy_confirm')
+ end
end
end \ No newline at end of file
diff --git a/app/decorators/route_decorator.rb b/app/decorators/route_decorator.rb
index ec7f0d6aa..7e3ea889f 100644
--- a/app/decorators/route_decorator.rb
+++ b/app/decorators/route_decorator.rb
@@ -1,75 +1,98 @@
-class RouteDecorator < Draper::Decorator
+class RouteDecorator < AF83::Decorator
decorates Chouette::Route
- delegate_all
-
- # Requires:
+ # Action links require:
# context: {
# referential: ,
# line:
# }
- def action_links
- links = []
- if object.stop_points.any?
- links << Link.new(
- content: h.t('journey_patterns.actions.index'),
- href: [
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.href do
+ h.referential_line_route_path(
+ context[:referential],
+ context[:line],
+ object
+ )
+ end
+ end
+
+ instance_decorator.edit_action_link do |l|
+ l.href do
+ h.edit_referential_line_route_path(
+ context[:referential],
+ context[:line],
+ object
+ )
+ end
+ end
+
+ instance_decorator.action_link(
+ if: ->() { object.stop_points.any? },
+ secondary: :show
+ ) do |l|
+ l.content h.t('journey_patterns.actions.index')
+ l.href do
+ [
context[:referential],
context[:line],
object,
:journey_patterns_collection
]
- )
+ end
end
- if object.journey_patterns.present?
- links << Link.new(
- content: h.t('vehicle_journeys.actions.index'),
- href: [
+ instance_decorator.action_link(
+ if: ->() { object.journey_patterns.present? },
+ secondary: :show
+ ) do |l|
+ l.content h.t('vehicle_journeys.actions.index')
+ l.href do
+ [
context[:referential],
context[:line],
object,
:vehicle_journeys
]
- )
+ end
end
- links << Link.new(
- content: h.t('vehicle_journey_exports.new.title'),
- href: h.referential_line_route_vehicle_journey_exports_path(
- context[:referential],
- context[:line],
- object,
- format: :zip
- )
- )
+ instance_decorator.action_link secondary: :show do |l|
+ l.content h.t('vehicle_journey_exports.new.title')
+ l.href do
+ h.referential_line_route_vehicle_journey_exports_path(
+ context[:referential],
+ context[:line],
+ object,
+ format: :zip
+ )
+ end
+ end
- if h.policy(object).duplicate?
- links << Link.new(
- content: h.t('routes.duplicate.title'),
- href: h.duplicate_referential_line_route_path(
+ instance_decorator.action_link(
+ secondary: :show,
+ policy: :duplicate
+ ) do |l|
+ l.content h.t('routes.duplicate.title')
+ l.href do
+ h.duplicate_referential_line_route_path(
context[:referential],
context[:line],
object
- ),
- method: :post
- )
+ )
+ end
end
- if h.policy(object).destroy?
- links << Link.new(
- content: h.destroy_link_content,
- href: h.referential_line_route_path(
+ instance_decorator.destroy_action_link do |l|
+ l.href do
+ h.referential_line_route_path(
context[:referential],
context[:line],
object
- ),
- method: :delete,
- data: { confirm: h.t('routes.actions.destroy_confirm') }
- )
+ )
+ end
+ l.data confirm: h.t('routes.actions.destroy_confirm')
end
-
- links
end
end
diff --git a/app/decorators/routing_constraint_zone_decorator.rb b/app/decorators/routing_constraint_zone_decorator.rb
index 0b438a554..962625fa7 100644
--- a/app/decorators/routing_constraint_zone_decorator.rb
+++ b/app/decorators/routing_constraint_zone_decorator.rb
@@ -1,42 +1,56 @@
-class RoutingConstraintZoneDecorator < Draper::Decorator
+class RoutingConstraintZoneDecorator < AF83::Decorator
decorates Chouette::RoutingConstraintZone
- delegate_all
-
- # Requires:
+ # Action links require:
# context: {
# referential: ,
# line:
# }
- def action_links
- links = []
- if h.policy(object).update?
- links << Link.new(
- content: h.t('actions.edit'),
- href: h.edit_referential_line_routing_constraint_zone_path(
+ create_action_link(
+ if: ->() {
+ h.policy(Chouette::RoutingConstraintZone).create? &&
+ context[:referential].organisation == h.current_organisation
+ }
+ ) do |l|
+ l.href do
+ h.new_referential_line_routing_constraint_zone_path(
+ context[:referential],
+ context[:line]
+ )
+ end
+ end
+
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.href do
+ h.referential_line_routing_constraint_zone_path(
context[:referential],
context[:line],
object
)
- )
+ end
end
- if h.policy(object).destroy?
- links << Link.new(
- content: h.destroy_link_content,
- href: h.referential_line_routing_constraint_zone_path(
+ instance_decorator.edit_action_link do |l|
+ l.href do
+ h.edit_referential_line_routing_constraint_zone_path(
context[:referential],
context[:line],
object
- ),
- method: :delete,
- data: {
- confirm: h.t('routing_constraint_zones.actions.destroy_confirm')
- }
- )
+ )
+ end
end
- links
+ instance_decorator.destroy_action_link do |l|
+ l.href do
+ h.referential_line_routing_constraint_zone_path(
+ context[:referential],
+ context[:line],
+ object
+ )
+ end
+ l.data confirm: h.t('routing_constraint_zones.actions.destroy_confirm')
+ end
end
end
diff --git a/app/decorators/stop_area_decorator.rb b/app/decorators/stop_area_decorator.rb
index 32f6e1d2b..2e57da0e4 100644
--- a/app/decorators/stop_area_decorator.rb
+++ b/app/decorators/stop_area_decorator.rb
@@ -1,66 +1,70 @@
-class StopAreaDecorator < Draper::Decorator
+class StopAreaDecorator < AF83::Decorator
decorates Chouette::StopArea
- delegate_all
-
- def common_action_links(stop_area = nil)
- top_links, bottom_links = [], []
- stop_area ||= object
+ create_action_link do |l|
+ l.content t('stop_areas.actions.new')
+ l.href { h.new_stop_area_referential_stop_area_path }
+ end
- if h.policy(stop_area).update?
- top_links << Link.new(
- content: h.t('stop_areas.actions.edit'),
- href: h.edit_stop_area_referential_stop_area_path(
- stop_area.stop_area_referential,
- stop_area
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.href do
+ h.stop_area_referential_stop_area_path(
+ object.stop_area_referential,
+ object
)
- )
+ end
end
- if h.policy(stop_area).destroy?
- bottom_links << Link.new(
- content: h.destroy_link_content('stop_areas.actions.destroy'),
- href: h.stop_area_referential_stop_area_path(
- stop_area.stop_area_referential,
- stop_area
- ),
- method: :delete,
- data: { confirm: t('stop_areas.actions.destroy_confirm') }
- )
+ instance_decorator.edit_action_link do |l|
+ l.content h.t('stop_areas.actions.edit')
+ l.href do
+ h.edit_stop_area_referential_stop_area_path(
+ object.stop_area_referential,
+ object
+ )
+ end
end
- [top_links, bottom_links]
- end
-
- def action_links(stop_area = nil)
- stop_area ||= object
- top_links, bottom_links = common_action_links(stop_area)
- links = []
-
- if h.policy(object).deactivate?
- links << Link.new(
- content: h.deactivate_link_content('stop_areas.actions.deactivate'),
- href: h.deactivate_stop_area_referential_stop_area_path(stop_area.stop_area_referential, object),
- method: :put,
- data: {confirm: h.t('stop_areas.actions.deactivate_confirm')},
- extra_class: "delete-action"
- )
+ instance_decorator.action_link policy: :deactivate, secondary: true do |l|
+ l.content h.deactivate_link_content('stop_areas.actions.deactivate')
+ l.href do
+ h.deactivate_stop_area_referential_stop_area_path(
+ object.stop_area_referential,
+ object
+ )
+ end
+ l.method :put
+ l.data confirm: h.t('stop_areas.actions.deactivate_confirm')
+ l.add_class 'delete-action'
end
- if h.policy(object).activate?
- links << Link.new(
- content: h.activate_link_content('stop_areas.actions.activate'),
- href: h.activate_stop_area_referential_stop_area_path(stop_area.stop_area_referential, object),
- method: :put,
- data: {confirm: h.t('stop_areas.actions.activate_confirm')},
- extra_class: "delete-action"
- )
+ instance_decorator.action_link policy: :activate, secondary: true do |l|
+ l.content h.activate_link_content('stop_areas.actions.activate')
+ l.href do
+ h.activate_stop_area_referential_stop_area_path(
+ object.stop_area_referential,
+ object
+ )
+ end
+ l.method :put
+ l.data confirm: h.t('stop_areas.actions.activate_confirm')
+ l.add_class 'delete-action'
end
- top_links + links + bottom_links
+ instance_decorator.destroy_action_link do |l|
+ l.content h.destroy_link_content('stop_areas.actions.destroy')
+ l.href do
+ h.stop_area_referential_stop_area_path(
+ object.stop_area_referential,
+ object
+ )
+ end
+ l.data confirm: h.t('stop_areas.actions.destroy_confirm')
+ end
end
- def waiting_time_text
+ define_instance_method :waiting_time_text do
return '-' if [nil, 0].include? waiting_time
h.t('stop_areas.waiting_time_format', value: waiting_time)
end
diff --git a/app/decorators/stop_point_decorator.rb b/app/decorators/stop_point_decorator.rb
index 27e1a7058..e777e2b56 100644
--- a/app/decorators/stop_point_decorator.rb
+++ b/app/decorators/stop_point_decorator.rb
@@ -1,9 +1,35 @@
-class StopPointDecorator < StopAreaDecorator
+class StopPointDecorator < AF83::Decorator
decorates Chouette::StopPoint
- delegate_all
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.href do
+ h.referential_stop_area_path(
+ object.referential,
+ object.stop_area
+ )
+ end
+ end
- def action_links
- common_action_links(object.stop_area).flatten
+ instance_decorator.edit_action_link do |l|
+ l.content h.t('stop_points.actions.edit')
+ l.href do
+ h.edit_stop_area_referential_stop_area_path(
+ object.stop_area.stop_area_referential,
+ object.stop_area
+ )
+ end
+ end
+
+ instance_decorator.destroy_action_link do |l|
+ l.content h.destroy_link_content('stop_points.actions.destroy')
+ l.href do
+ h.referential_stop_area_path(
+ object.referential,
+ object.stop_area
+ )
+ end
+ l.data confirm: h.t('stop_points.actions.destroy_confirm')
+ end
end
end
diff --git a/app/decorators/time_table_decorator.rb b/app/decorators/time_table_decorator.rb
index c6eeac176..9a56fc2ee 100644
--- a/app/decorators/time_table_decorator.rb
+++ b/app/decorators/time_table_decorator.rb
@@ -1,55 +1,53 @@
-class TimeTableDecorator < Draper::Decorator
+class TimeTableDecorator < AF83::Decorator
decorates Chouette::TimeTable
- delegate_all
+ create_action_link if: ->{ h.policy(Chouette::TimeTable).create? && context[:referential].organisation == h.current_organisation } do |l|
+ l.href { h.new_referential_time_table_path(context[:referential]) }
+ end
+
+ with_instance_decorator do |instance_decorator|
+ instance_decorator.show_action_link do |l|
+ l.href { [context[:referential], object] }
+ end
- # Requires:
- # context: {
- # referential: ,
- # }
- def action_links
- links = []
+ instance_decorator.edit_action_link do |l|
+ l.href { [context[:referential], object] }
+ end
- if object.calendar
- links << Link.new(
- content: h.t('actions.actualize'),
- href: h.actualize_referential_time_table_path(
+ instance_decorator.action_link if: ->{ object.calendar }, secondary: true do |l|
+ l.content t('actions.actualize')
+ l.href do
+ h.actualize_referential_time_table_path(
context[:referential],
object
- ),
- method: :post
- )
+ )
+ end
+ l.method :post
end
- if h.policy(object).edit?
- links << Link.new(
- content: h.t('actions.combine'),
- href: h.new_referential_time_table_time_table_combination_path(
+ instance_decorator.action_link policy: :edit, secondary: true do |l|
+ l.content t('actions.combine')
+ l.href do
+ h.new_referential_time_table_time_table_combination_path(
context[:referential],
object
)
- )
+ end
end
- if h.policy(object).duplicate?
- links << Link.new(
- content: h.t('actions.duplicate'),
- href: h.duplicate_referential_time_table_path(
+ instance_decorator.action_link policy: :duplicate, secondary: true do |l|
+ l.content t('actions.duplicate')
+ l.href do
+ h.duplicate_referential_time_table_path(
context[:referential],
object
)
- )
+ end
end
- if h.policy(object).destroy?
- links << Link.new(
- content: h.destroy_link_content,
- href: h.referential_time_table_path(context[:referential], object),
- method: :delete,
- data: { confirm: h.t('time_tables.actions.destroy_confirm') }
- )
+ instance_decorator.destroy_action_link do |l|
+ l.href { h.referential_time_table_path(context[:referential], object) }
+ l.data {{ confirm: h.t('time_tables.actions.destroy_confirm') }}
end
-
- links
end
end
diff --git a/app/helpers/compliance_control_sets_helper.rb b/app/helpers/compliance_control_sets_helper.rb
index 57e6d9608..448d5c008 100644
--- a/app/helpers/compliance_control_sets_helper.rb
+++ b/app/helpers/compliance_control_sets_helper.rb
@@ -100,7 +100,8 @@ module ComplianceControlSetsHelper
],
sortable: true,
cls: 'table has-filter has-search',
- model: ComplianceControl
+ model: ComplianceControl,
+ action: :index
end
metas = content_tag :div, I18n.t('compliance_control_blocks.metas.control', count: compliance_controls.count), class: 'pull-right'
table + metas
diff --git a/app/helpers/table_builder_helper.rb b/app/helpers/table_builder_helper.rb
index 9ead7180a..f48075ed9 100644
--- a/app/helpers/table_builder_helper.rb
+++ b/app/helpers/table_builder_helper.rb
@@ -86,30 +86,36 @@ module TableBuilderHelper
overhead: [],
# Possibility to override the result of collection.model
- model: nil
+ model: nil,
+
+ #overrides the params[:action] value
+ action: nil
)
content_tag :table,
- thead(collection, columns, sortable, selectable, links.any?, overhead, model || collection.model) +
- tbody(collection, columns, selectable, links, overhead),
+ thead(collection, columns, sortable, selectable, links.any?, overhead, model || collection.model, action || params[:action]) +
+ tbody(collection, columns, selectable, links, overhead, model, action || params[:action]),
class: cls
end
- def self.item_row_class_name collection
- if collection.respond_to?(:model)
- model_name = collection.model.name
- elsif collection.respond_to?(:first)
- model_name = collection.first.class.name
- else
- model_name = "item"
- end
+ def self.item_row_class_name collection, model=nil
+ model_name = model&.name
+
+ model_name ||=
+ if collection.respond_to?(:model)
+ collection.model.name
+ elsif collection.respond_to?(:first)
+ collection.first.class.name
+ else
+ "item"
+ end
model_name.split("::").last.parameterize
end
private
- def thead(collection, columns, sortable, selectable, has_links, overhead, model )
+ def thead(collection, columns, sortable, selectable, has_links, overhead, model, action)
content_tag :thead do
# Inserts overhead content if any specified
over_head = ''
@@ -188,7 +194,9 @@ module TableBuilderHelper
end
# Inserts a blank column for the gear menu
- if has_links || collection.last.try(:action_links).try(:any?)
+ last_item = collection.last
+ action_links = last_item && last_item.respond_to?(:action_links) && (last_item&.action_links&.is_a?(AF83::Decorator::ActionLinks) ? last_item.action_links(action) : last_item.action_links)
+ if has_links || action_links.try(:any?)
hcont << content_tag(:th, '')
end
@@ -199,7 +207,7 @@ module TableBuilderHelper
end
end
- def tr item, columns, selectable, links, overhead, model_name
+ def tr item, columns, selectable, links, overhead, model_name, action
klass = "#{model_name}-#{item.id}"
content_tag :tr, class: klass do
bcont = []
@@ -267,10 +275,12 @@ module TableBuilderHelper
end
end
- if links.any? || item.try(:action_links).try(:any?)
+ action_links = item && item.respond_to?(:action_links) && (item.action_links.is_a?(AF83::Decorator::ActionLinks) ? item.action_links(action) : item.action_links)
+
+ if links.any? || action_links.try(:any?)
bcont << content_tag(
:td,
- build_links(item, links),
+ build_links(item, links, action),
class: 'actions'
)
end
@@ -279,12 +289,12 @@ module TableBuilderHelper
end
end
- def tbody(collection, columns, selectable, links, overhead)
- model_name = TableBuilderHelper.item_row_class_name collection
+ def tbody(collection, columns, selectable, links, overhead, model = nil, action)
+ model_name = TableBuilderHelper.item_row_class_name collection, model
content_tag :tbody do
collection.map do |item|
- tr item, columns, selectable, links, overhead, model_name
+ tr item, columns, selectable, links, overhead, model_name, action
end.join.html_safe
end
end
@@ -297,7 +307,7 @@ module TableBuilderHelper
end
end
- def build_links(item, links)
+ def build_links(item, links, action)
trigger = content_tag(
:div,
class: 'btn dropdown-toggle',
@@ -306,13 +316,26 @@ module TableBuilderHelper
content_tag :span, '', class: 'fa fa-cog'
end
- menu = content_tag :ul, class: 'dropdown-menu' do
- (
- CustomLinks.new(item, pundit_user, links, referential, workgroup).links +
- item.action_links.select { |link| link.is_a?(Link) }
- ).map do |link|
- gear_menu_link(link)
- end.join.html_safe
+ action_links = item.action_links
+ if action_links.is_a?(AF83::Decorator::ActionLinks)
+ menu = content_tag :div, class: 'dropdown-menu' do
+ item.action_links(action).grouped_by(:primary, :secondary, :footer).map do |group, _links|
+ if _links.any?
+ content_tag :ul, class: group do
+ _links.map{|link| gear_menu_link(link)}.join.html_safe
+ end
+ end
+ end.join.html_safe
+ end
+ else
+ menu = content_tag :ul, class: 'dropdown-menu' do
+ (
+ CustomLinks.new(item, pundit_user, links, referential, workgroup).links +
+ action_links.select { |link| link.is_a?(Link) }
+ ).map do |link|
+ gear_menu_link(link)
+ end.join.html_safe
+ end
end
content_tag :div, trigger + menu, class: 'btn-group'
diff --git a/app/models/chouette/purchase_window.rb b/app/models/chouette/purchase_window.rb
index e89a0ec7f..22bcc1de1 100644
--- a/app/models/chouette/purchase_window.rb
+++ b/app/models/chouette/purchase_window.rb
@@ -6,7 +6,9 @@ module Chouette
# include ChecksumSupport
include ObjectidSupport
include PeriodSupport
+ include ChecksumSupport
extend Enumerize
+
enumerize :color, in: %w(#9B9B9B #FFA070 #C67300 #7F551B #41CCE3 #09B09C #3655D7 #6321A0 #E796C6 #DD2DAA)
has_paper_trail
@@ -16,7 +18,7 @@ module Chouette
validates_presence_of :name, :referential
scope :contains_date, ->(date) { where('date ? <@ any (date_ranges)', date) }
-
+
def self.ransackable_scopes(auth_object = nil)
[:contains_date]
end
@@ -29,6 +31,12 @@ module Chouette
"IBOO-#{self.referential.id}-#{self.id}"
end
+ def checksum_attributes
+ attrs = ['name', 'color', 'referential_id']
+ ranges_attrs = date_ranges.map{|r| [r.first, r.last]}.flatten.sort
+ self.slice(*attrs).values + ranges_attrs
+ end
+
# def checksum_attributes
# end
diff --git a/app/models/merge.rb b/app/models/merge.rb
index 91be27f2c..62bf581d6 100644
--- a/app/models/merge.rb
+++ b/app/models/merge.rb
@@ -20,6 +20,10 @@ class Merge < ActiveRecord::Base
referentials.first(3).map { |r| r.name.truncate(10) }.join(',')
end
+ def full_names
+ referentials.map(&:name).to_sentence
+ end
+
attr_reader :new
def merge!
diff --git a/app/views/calendars/index.html.slim b/app/views/calendars/index.html.slim
index 60bc9793d..309f0e6f9 100644
--- a/app/views/calendars/index.html.slim
+++ b/app/views/calendars/index.html.slim
@@ -1,7 +1,4 @@
- breadcrumb :calendars, current_workgroup
-- content_for :page_header_actions do
- - if policy(Calendar).create?
- = link_to(t('actions.add'), new_workgroup_calendar_path(current_workgroup), class: 'btn btn-default')
.page_content
.container-fluid
@@ -35,7 +32,6 @@
attribute: Proc.new { |c| t("#{c.try(:shared)}") } \
) \
],
- links: [:show, :edit],
cls: 'table has-filter'
= new_pagination @calendars, 'pull-right'
diff --git a/app/views/calendars/show.html.slim b/app/views/calendars/show.html.slim
index 9f7512173..cd2be2bd1 100644
--- a/app/views/calendars/show.html.slim
+++ b/app/views/calendars/show.html.slim
@@ -1,25 +1,13 @@
- breadcrumb :calendar, @workgroup, @calendar
- page_header_content_for @calendar
-- content_for :page_header_content do
- .row.mb-sm
- .col-lg-12.text-right
- - @calendar.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
-- if policy(@calendar).edit?
- - content_for :page_header_actions do
- = link_to(t('actions.edit'), edit_workgroup_calendar_path(@workgroup, @calendar), class: 'btn btn-default')
.page_content
.container-fluid
.row
.col-lg-6.col-md-6.col-sm-12.col-xs-12
= definition_list t('metadatas'),
- { 'Nom court' => @calendar.try(:short_name),
- Calendar.human_attribute_name(:shared) => t("#{@calendar.shared}"),
- 'Organisation' => @calendar.organisation.name,
- Calendar.human_attribute_name(:dates) => @calendar.dates.collect{|d| l(d, format: :short)}.join(', ').html_safe,
- Calendar.human_attribute_name(:date_ranges) => @calendar.periods.map{|d| t('validity_range', debut: l(d.begin, format: :short), end: l(d.end, format: :short))}.join('<br>').html_safe }
+ { 'Nom court' => resource.try(:short_name),
+ Calendar.human_attribute_name(:shared) => t("#{resource.shared}"),
+ 'Organisation' => resource.organisation.name,
+ Calendar.human_attribute_name(:dates) => resource.dates.collect{|d| l(d, format: :short)}.join(', ').html_safe,
+ Calendar.human_attribute_name(:date_ranges) => resource.periods.map{|d| t('validity_range', debut: l(d.begin, format: :short), end: l(d.end, format: :short))}.join('<br>').html_safe }
diff --git a/app/views/companies/index.html.slim b/app/views/companies/index.html.slim
index e031f3776..9f1502e54 100644
--- a/app/views/companies/index.html.slim
+++ b/app/views/companies/index.html.slim
@@ -1,7 +1,4 @@
- breadcrumb :companies, @line_referential
-- content_for :page_header_actions do
- - if policy(Chouette::Company).create?
- = link_to(t('companies.actions.new'), new_line_referential_company_path(@line_referential), class: 'btn btn-primary')
.page_content
.container-fluid
@@ -34,7 +31,6 @@
end \
) \
],
- links: [:show],
cls: 'table has-search'
= new_pagination @companies, 'pull-right'
diff --git a/app/views/companies/show.html.slim b/app/views/companies/show.html.slim
index 0d6b4aae3..ca0a410b3 100644
--- a/app/views/companies/show.html.slim
+++ b/app/views/companies/show.html.slim
@@ -1,25 +1,13 @@
- breadcrumb :company, @company
-- content_for :page_header_content do
- .row
- .col-lg-12.text-right.mb-sm
- - if policy(Chouette::Company).create?
- = link_to t('companies.actions.new'), new_line_referential_company_path(@line_referential), class: 'btn btn-primary'
- - if policy(@company).update?
- = link_to t('companies.actions.edit'), edit_line_referential_company_path(@line_referential, @company), class: 'btn btn-primary'
- - if policy(@company).destroy?
- = link_to line_referential_company_path(@line_referential, @company), method: :delete, data: {confirm: t('companies.actions.destroy_confirm')}, class: 'btn btn-primary' do
- span.fa.fa-trash
- span = t('companies.actions.destroy')
- page_header_content_for @company
-
.page_content
.container-fluid
.row
.col-lg-6.col-md-6.col-sm-12.col-xs-12
= definition_list t('metadatas'),
{ 'ID Codif' => @company.try(:get_objectid).try(:short_id),
- Chouette::Company.human_attribute_name(:phone) => @company.phone,
- Chouette::Company.human_attribute_name(:email) => @company.email,
- Chouette::Company.human_attribute_name(:url) => @company.url }
+ Chouette::Company.human_attribute_name(:phone) => resource.phone,
+ Chouette::Company.human_attribute_name(:email) => resource.email,
+ Chouette::Company.human_attribute_name(:url) => resource.url }
diff --git a/app/views/compliance_check_sets/index.html.slim b/app/views/compliance_check_sets/index.html.slim
index f15e85bdd..ead467174 100644
--- a/app/views/compliance_check_sets/index.html.slim
+++ b/app/views/compliance_check_sets/index.html.slim
@@ -41,7 +41,6 @@
), \
],
sortable: true,
- links: [:show],
cls: 'table has-filter has-search'
- unless @compliance_check_sets.any?
.row.mt-xs
diff --git a/app/views/compliance_check_sets/show.html.slim b/app/views/compliance_check_sets/show.html.slim
index 4db2e805f..4df14ab06 100644
--- a/app/views/compliance_check_sets/show.html.slim
+++ b/app/views/compliance_check_sets/show.html.slim
@@ -1,15 +1,4 @@
-- breadcrumb :compliance_check_set, @workbench, @compliance_check_set
-/ PageHeader
-- content_for :page_header_content do
- .row
- .col-lg-12.text-right.mb-sm
- - @compliance_check_set.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
-
+- breadcrumb :compliance_check_sets, @workbench, @compliance_check_set
- page_header_content_for @compliance_check_set
/ PageContent
diff --git a/app/views/compliance_control_sets/index.html.slim b/app/views/compliance_control_sets/index.html.slim
index 28d2254bf..144a4e5b9 100644
--- a/app/views/compliance_control_sets/index.html.slim
+++ b/app/views/compliance_control_sets/index.html.slim
@@ -1,7 +1,4 @@
- breadcrumb :compliance_control_sets
-- content_for :page_header_actions do
- - if policy(ComplianceControlSet).create?
- = link_to(t('compliance_control_sets.actions.new'), new_compliance_control_set_path, class: 'btn btn-default')
.page_content
.container-fluid
@@ -38,7 +35,6 @@
) \
],
sortable: true,
- links: [:show],
cls: 'table has-filter has-search'
= new_pagination @compliance_control_sets, 'pull-right'
diff --git a/app/views/compliance_control_sets/show.html.slim b/app/views/compliance_control_sets/show.html.slim
index d915bbdaf..59100681d 100644
--- a/app/views/compliance_control_sets/show.html.slim
+++ b/app/views/compliance_control_sets/show.html.slim
@@ -1,17 +1,5 @@
- breadcrumb :compliance_control_set, @compliance_control_set
- page_header_content_for @compliance_control_set
-- content_for :page_header_content do
- .row.mb-sm
- .col-lg-12.text-right
- - @compliance_control_set.action_links.each do |link|
- - if link.is_a?(HTMLElement)
- = link.to_html(class: 'btn btn-primary')
- - else
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
.page_content
.container-fluid
diff --git a/app/views/compliance_controls/show.html.slim b/app/views/compliance_controls/show.html.slim
index 54b07abf1..8a65bb864 100644
--- a/app/views/compliance_controls/show.html.slim
+++ b/app/views/compliance_controls/show.html.slim
@@ -1,6 +1,4 @@
- breadcrumb :compliance_control, @compliance_control
-- content_for :page_header_actions do
- = link_to(t('actions.edit'), edit_compliance_control_set_compliance_control_path(params[:compliance_control_set_id], params[:id]), class: 'btn btn-default')
- page_header_content_for @compliance_control
diff --git a/app/views/import_resources/index.html.slim b/app/views/import_resources/index.html.slim
index 0c21a9e09..6b4e60026 100644
--- a/app/views/import_resources/index.html.slim
+++ b/app/views/import_resources/index.html.slim
@@ -43,7 +43,6 @@
end \
), \
],
- links: [],
cls: 'table has-search'
- else
.col-lg-12
diff --git a/app/views/imports/index.html.slim b/app/views/imports/index.html.slim
index 856b715e0..4fc077bd6 100644
--- a/app/views/imports/index.html.slim
+++ b/app/views/imports/index.html.slim
@@ -1,6 +1,4 @@
- breadcrumb :imports, @workbench
-- content_for :page_header_actions do
- = link_to(t('imports.actions.new'), new_workbench_import_path(workbench_id: @workbench), class: 'btn btn-primary')
.page_content
.container-fluid
@@ -34,7 +32,6 @@
attribute: 'creator' \
) \
],
- links: [:show],
cls: 'table has-search'
= new_pagination @imports, 'pull-right'
diff --git a/app/views/imports/show.html.slim b/app/views/imports/show.html.slim
index cf137867b..7a9d02077 100644
--- a/app/views/imports/show.html.slim
+++ b/app/views/imports/show.html.slim
@@ -1,13 +1,4 @@
- breadcrumb :import, @workbench, @import
-- content_for :page_header_content do
- .row
- .col-lg-12.text-right.mb-sm
- - @import.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
- page_header_content_for @import
@@ -54,7 +45,6 @@
sortable: false, \
) \
],
- links: [],
cls: 'table',
overhead: [ \
{}, \
diff --git a/app/views/layouts/navigation/_page_header.html.slim b/app/views/layouts/navigation/_page_header.html.slim
index 90fd7d855..e407e53da 100644
--- a/app/views/layouts/navigation/_page_header.html.slim
+++ b/app/views/layouts/navigation/_page_header.html.slim
@@ -1,23 +1,36 @@
-div.page_header
- div.container-fluid
- div.row
- div.col-lg-9.col-md-8.col-sm-7.col-xs-7
+- action_links = resource.action_links(params[:action]) rescue nil
+- action_links ||= decorated_collection.action_links(params[:action]) rescue nil
+
+.page_header
+ .container-fluid
+ .row
+ .col-lg-9.col-md-8.col-sm-7.col-xs-7
- if defined?(resource_class)
- div.page-icon
+ .page-icon
span.sb class="sb-#{resource_class.model_name.name.underscore}"
- div.page-title
+ .page-title
- if content_for? :page_header_title
h1 = yield :page_header_title
- else
- if defined?(resource_class)
h1 = t("#{resource_class.model_name.name.underscore.pluralize}.#{params[:action]}.title")
- div.col-lg-3.col-md-4.col-sm-5.col-xs-5.text-right
- div.page-action
+ .col-lg-3.col-md-4.col-sm-5.col-xs-5.text-right
+ .page-action
- if content_for? :page_header_meta
= yield :page_header_meta
- if content_for? :page_header_actions
= yield :page_header_actions
+ - if action_links&.primary&.any?
+ - action_links.primary.each do |link|
+ = link.to_html do |l|
+ - l.class "btn btn-default #{l.disabled ? "disabled" : ""}"
+ - if action_links&.secondary&.any?
+ .row.mb-sm
+ .col-lg-12.text-right
+ - action_links.secondary.each do |link|
+ = link.to_html do |l|
+ - l.class "btn btn-primary #{l.disabled ? "disabled" : ""}"
- if content_for? :page_header_content
= yield :page_header_content
diff --git a/app/views/lines/index.html.slim b/app/views/lines/index.html.slim
index b62263263..2d64e5f73 100644
--- a/app/views/lines/index.html.slim
+++ b/app/views/lines/index.html.slim
@@ -1,7 +1,4 @@
- breadcrumb :lines, @line_referential
-- content_for :page_header_actions do
- - if policy(Chouette::Line).create?
- = link_to(t('lines.actions.new'), new_line_referential_line_path(@line_referential), class: 'btn btn-primary')
.page_content
.container-fluid
@@ -52,7 +49,6 @@
attribute: Proc.new { |n| n.transport_submode.present? ? t("enumerize.transport_submode.#{n.try(:transport_submode)}") : "-" } \
) \
],
- links: [:show],
cls: 'table has-filter has-search'
= new_pagination @lines, 'pull-right'
diff --git a/app/views/lines/show.html.slim b/app/views/lines/show.html.slim
index 83244f739..34b907bdd 100644
--- a/app/views/lines/show.html.slim
+++ b/app/views/lines/show.html.slim
@@ -1,14 +1,4 @@
- breadcrumb :line, @line
-- content_for :page_header_content do
- .row
- .col-lg-12.text-right.mb-sm
- - @line.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: "btn btn-primary #{link.disabled ? "disabled" : ""}" do
- = link.content
-
- page_header_content_for @line
.page_content
diff --git a/app/views/networks/index.html.slim b/app/views/networks/index.html.slim
index b13c73e9e..6aeb140cc 100644
--- a/app/views/networks/index.html.slim
+++ b/app/views/networks/index.html.slim
@@ -1,7 +1,4 @@
- breadcrumb :networks, @line_referential
-- content_for :page_header_actions do
- - if policy(Chouette::Network).create?
- = link_to(t('networks.actions.new'), new_line_referential_network_path(@line_referential), class: 'btn btn-primary')
.page_content
.container-fluid
diff --git a/app/views/networks/show.html.slim b/app/views/networks/show.html.slim
index 8e40a13b2..527fb8d5b 100644
--- a/app/views/networks/show.html.slim
+++ b/app/views/networks/show.html.slim
@@ -1,14 +1,6 @@
- breadcrumb :network, @network
- page_header_content_for @network
-- content_for :page_header_content do
- .row
- .col-lg-12.text-right.mb-sm
- - @network.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
+
.page_content
.container-fluid
.row
diff --git a/app/views/purchase_windows/index.html.slim b/app/views/purchase_windows/index.html.slim
index 04f9fb0a8..0dba86935 100644
--- a/app/views/purchase_windows/index.html.slim
+++ b/app/views/purchase_windows/index.html.slim
@@ -1,7 +1,4 @@
- breadcrumb :purchase_windows, @referential
-- content_for :page_header_actions do
- - if policy(Chouette::PurchaseWindow).create?
- = link_to(t('actions.add'), new_referential_purchase_window_path(@referential), class: 'btn btn-default')
.page_content
.container-fluid
@@ -32,7 +29,6 @@
sortable: false \
) \
],
- links: [:show],
cls: 'table has-filter'
= new_pagination @purchase_windows, 'pull-right'
diff --git a/app/views/purchase_windows/show.html.slim b/app/views/purchase_windows/show.html.slim
index 4ddde1706..4e836f424 100644
--- a/app/views/purchase_windows/show.html.slim
+++ b/app/views/purchase_windows/show.html.slim
@@ -1,14 +1,5 @@
- breadcrumb :purchase_window, @referential, @purchase_window
- page_header_content_for @purchase_window
-- content_for :page_header_content do
- .row.mb-sm
- .col-lg-12.text-right
- - @purchase_window.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
.page_content
.container-fluid
diff --git a/app/views/referential_companies/index.html.slim b/app/views/referential_companies/index.html.slim
index 07de2bc9d..3bff448c7 100644
--- a/app/views/referential_companies/index.html.slim
+++ b/app/views/referential_companies/index.html.slim
@@ -1,7 +1,4 @@
- breadcrumb :referential_companies, @referential
-- content_for :page_header_actions do
- - if policy(Chouette::Company).create?
- = link_to(t('companies.actions.new'), new_referential_company_path(@referential), class: 'btn btn-default')
.page_content
.container-fluid
@@ -46,7 +43,6 @@
attribute: 'url' \
) \
],
- links: [:show],
cls: 'table has-search'
= new_pagination @companies, 'pull-right'
diff --git a/app/views/referential_lines/show.html.slim b/app/views/referential_lines/show.html.slim
index cfba8cab3..02d605d8c 100644
--- a/app/views/referential_lines/show.html.slim
+++ b/app/views/referential_lines/show.html.slim
@@ -1,13 +1,4 @@
- breadcrumb :referential_line, @referential, @line
-- content_for :page_header_content do
- .row
- .col-lg-12.text-right.mb-sm
- - @line.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
- page_header_content_for @line
.page_content
@@ -79,8 +70,8 @@
attribute: Proc.new{ |r| r.try(:journey_patterns).count } \
) \
],
- links: [:show, :edit],
- cls: 'table has-search'
+ cls: 'table has-search',
+ action: :index
= new_pagination @routes, 'pull-right'
diff --git a/app/views/referential_networks/index.html.slim b/app/views/referential_networks/index.html.slim
index d556e7e5e..efa28dc05 100644
--- a/app/views/referential_networks/index.html.slim
+++ b/app/views/referential_networks/index.html.slim
@@ -1,7 +1,4 @@
- breadcrumb :referential_networks, @referential
-- if policy(Chouette::Network).create?
- - content_for :page_header_actions do
- = link_to(t('networks.actions.new'), new_referential_network_path(@referential), class: 'btn btn-default')
.page_content
.container-fluid
diff --git a/app/views/referential_networks/show.html.slim b/app/views/referential_networks/show.html.slim
index 7de304671..3d13d9211 100644
--- a/app/views/referential_networks/show.html.slim
+++ b/app/views/referential_networks/show.html.slim
@@ -1,14 +1,5 @@
- breadcrumb :referential_network, @referential, @network
- page_header_content_for @network
-- content_for :page_header_content do
- .row
- .col-lg-12.text-right.mb-sm
- - @network.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
/ PageContent
.page_content
diff --git a/app/views/referential_stop_areas/_form.html.slim b/app/views/referential_stop_areas/_form.html.slim
index 50f5d4aaf..8181ec3f3 100644
--- a/app/views/referential_stop_areas/_form.html.slim
+++ b/app/views/referential_stop_areas/_form.html.slim
@@ -7,7 +7,7 @@
= form.inputs do
= form.input :id, as: :hidden
= form.input :name, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.name")}
- = form.input :stop_area_type, as: :select, :input_html => { :disabled => !@stop_area.new_record? }, :collection => Chouette::StopArea.area_type.options, :include_blank => false }
+ = form.input :stop_area_type, as: :select, :input_html => { :disabled => !@stop_area.new_record? }, :collection => Chouette::StopArea.area_type.options, :include_blank => false
.location_info
h3 = t("stop_areas.stop_area.localisation")
diff --git a/app/views/referential_stop_areas/show.html.slim b/app/views/referential_stop_areas/show.html.slim
index 0470b4654..cb04ab7a6 100644
--- a/app/views/referential_stop_areas/show.html.slim
+++ b/app/views/referential_stop_areas/show.html.slim
@@ -1,14 +1,5 @@
- breadcrumb :referential_stop_area, @referential, @stop_area
- page_header_content_for @stop_area
-- content_for :page_header_content do
- .row
- .col-lg-12.text-right.mb-sm
- - @stop_area.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
.page_content
.container-fluid
diff --git a/app/views/referentials/show.html.slim b/app/views/referentials/show.html.slim
index cbb622c44..6c88f5b81 100644
--- a/app/views/referentials/show.html.slim
+++ b/app/views/referentials/show.html.slim
@@ -1,21 +1,5 @@
- breadcrumb @referential
- page_header_content_for @referential
-- content_for :page_header_actions do
- - unless (@referential.referential_read_only? || !policy(@referential).edit?)
- = link_to(t('actions.edit'), edit_referential_path(@referential), class: 'btn btn-default')
-
-- content_for :page_header_content do
- .row.mb-sm
- .col-lg-12.text-right
- - @referential.action_links.each do |link|
- - if link.is_a?(HTMLElement)
- = link.to_html(class: 'btn btn-primary')
- - else
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
.page_content
.container-fluid
@@ -72,8 +56,8 @@
attribute: Proc.new { |n| n&.company&.name || "-" } \
) \
],
- links: [:show],
- cls: 'table has-filter has-search'
+ cls: 'table has-filter has-search',
+ action: :index
= new_pagination @reflines, 'pull-right'
diff --git a/app/views/routes/show.html.slim b/app/views/routes/show.html.slim
index 644f79022..375d7c57b 100644
--- a/app/views/routes/show.html.slim
+++ b/app/views/routes/show.html.slim
@@ -1,18 +1,5 @@
- breadcrumb :route, @referential, @route
- page_header_content_for @route
-- content_for :page_header_actions do
- - if policy(@route).edit?
- = link_to(t('actions.edit'), edit_referential_line_route_path(@referential, @line, @route), class: 'btn btn-default')
-
-- content_for :page_header_content do
- .row.mb-sm
- .col-lg-12.text-right
- - @route.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
.page_content
.container-fluid
@@ -67,9 +54,9 @@
attribute: Proc.new { |s| t("stop_points.stop_point.for_alighting.#{s.for_alighting}") } \
) \
],
- links: [:show],
sortable: false,
- cls: 'table has-stoppoints'
+ cls: 'table has-stoppoints',
+ action: :index
- else
= replacement_msg t('stop_areas.search_no_results')
diff --git a/app/views/routing_constraint_zones/index.html.slim b/app/views/routing_constraint_zones/index.html.slim
index 7c54fca68..2f67b467e 100644
--- a/app/views/routing_constraint_zones/index.html.slim
+++ b/app/views/routing_constraint_zones/index.html.slim
@@ -1,7 +1,4 @@
- breadcrumb :routing_constraint_zones, @referential, @line
-- content_for :page_header_actions do
- - if (policy(Chouette::RoutingConstraintZone).create? && @referential.organisation == current_organisation)
- = link_to(t('actions.new'), new_referential_line_routing_constraint_zone_path(@referential, @line), class: 'btn btn-primary')
.page_content
.container-fluid
diff --git a/app/views/routing_constraint_zones/show.html.slim b/app/views/routing_constraint_zones/show.html.slim
index 3d1988545..8c8e9b17a 100644
--- a/app/views/routing_constraint_zones/show.html.slim
+++ b/app/views/routing_constraint_zones/show.html.slim
@@ -1,14 +1,5 @@
- breadcrumb :routing_constraint_zone, @referential, @line, @routing_constraint_zone
- page_header_content_for @routing_constraint_zone
-- content_for :page_header_content do
- .row
- .col-lg-12.text-right.mb-sm
- - @routing_constraint_zone.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
.page_content
.container-fluid
diff --git a/app/views/stop_areas/index.html.slim b/app/views/stop_areas/index.html.slim
index 63e99fd75..71c7f995c 100644
--- a/app/views/stop_areas/index.html.slim
+++ b/app/views/stop_areas/index.html.slim
@@ -1,7 +1,4 @@
- breadcrumb :stop_areas, @stop_area_referential
-- content_for :page_header_actions do
- - if policy(Chouette::StopArea).create?
- = link_to(t('stop_areas.actions.new'), new_stop_area_referential_stop_area_path(@stop_area_referential), class: 'btn btn-primary')
.page_content
.container-fluid
@@ -51,7 +48,6 @@
attribute: Proc.new { |s| Chouette::AreaType.find(s.area_type).try :label } \
), \
],
- links: [:show],
cls: 'table has-filter has-search'
= new_pagination @stop_areas, 'pull-right'
diff --git a/app/views/stop_areas/show.html.slim b/app/views/stop_areas/show.html.slim
index f9de34a98..b5ec8ac00 100644
--- a/app/views/stop_areas/show.html.slim
+++ b/app/views/stop_areas/show.html.slim
@@ -1,14 +1,5 @@
- breadcrumb :stop_area, @stop_area_referential, @stop_area
- page_header_content_for @stop_area
-- content_for :page_header_content do
- .row
- .col-lg-12.text-right.mb-sm
- - @stop_area.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
/ PageContent
.page_content
diff --git a/app/views/time_tables/index.html.slim b/app/views/time_tables/index.html.slim
index b684b0bcb..f58fbb5ea 100644
--- a/app/views/time_tables/index.html.slim
+++ b/app/views/time_tables/index.html.slim
@@ -1,7 +1,4 @@
- breadcrumb :time_tables, @referential
-- content_for :page_header_actions do
- - if (policy(Chouette::TimeTable).create? && @referential.organisation == current_organisation)
- = link_to(t('actions.add'), new_referential_time_table_path(@referential), class: 'btn btn-default')
.page_content
.container-fluid
@@ -54,7 +51,6 @@
attribute: Proc.new { |tt| l(tt.updated_at, format: :short) } \
) \
],
- links: [:show, :edit],
cls: 'table has-search'
= new_pagination @time_tables, 'pull-right'
diff --git a/app/views/time_tables/show.html.slim b/app/views/time_tables/show.html.slim
index df9789055..6d15323f3 100644
--- a/app/views/time_tables/show.html.slim
+++ b/app/views/time_tables/show.html.slim
@@ -4,21 +4,6 @@
- content_for :page_header_title, t('time_tables.show.title', name: @time_table.comment), flush: true
-- content_for :page_header_actions do
- - if policy(@time_table).edit?
- = link_to(t('actions.edit'), edit_referential_time_table_path(@referential, @time_table), class: 'btn btn-default')
-
-- content_for :page_header_content do
- .row.mb-sm
- .col-lg-12.text-right
- - @time_table.action_links.each do |link|
- = link_to link.href,
- method: link.method,
- data: link.data,
- class: 'btn btn-primary' do
- = link.content
-
-
.page_content
.container-fluid
.row
diff --git a/app/views/workbench_outputs/show.html.slim b/app/views/workbench_outputs/show.html.slim
index dc0a54204..4f71fb7ef 100644
--- a/app/views/workbench_outputs/show.html.slim
+++ b/app/views/workbench_outputs/show.html.slim
@@ -20,7 +20,7 @@
), \
TableBuilderHelper::Column.new( \
key: :name, \
- attribute: 'name', \
+ attribute: 'full_names', \
link_to: lambda do |merge| \
workbench_merge_path merge.workbench, merge \
end \
diff --git a/app/views/workbenches/show.html.slim b/app/views/workbenches/show.html.slim
index 8907f3f08..a162ca334 100644
--- a/app/views/workbenches/show.html.slim
+++ b/app/views/workbenches/show.html.slim
@@ -59,8 +59,8 @@
) \
],
selectable: ->(ref){ @workbench.referentials.include?(ref) },
- links: [:show, :edit],
- cls: 'table has-filter has-search'
+ cls: 'table has-filter has-search',
+ action: :index
= multiple_selection_toolbox([:delete], collection_name: 'referentials')