diff --git a/Gemfile.lock b/Gemfile.lock index eec0d2f7..a637291b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - rolemodel_rails (0.22.0) + rolemodel_rails (0.23.0) GEM remote: https://rubygems.org/ diff --git a/lib/generators/rolemodel/all_generator.rb b/lib/generators/rolemodel/all_generator.rb index b38a4951..eb94b892 100644 --- a/lib/generators/rolemodel/all_generator.rb +++ b/lib/generators/rolemodel/all_generator.rb @@ -17,12 +17,12 @@ def run_all_the_generators generate 'rolemodel:saas:all' generate 'rolemodel:mailers' generate 'rolemodel:linters:all' - generate 'rolemodel:modals' + generate 'rolemodel:ui_components:all' generate 'rolemodel:source_map' generate 'rolemodel:good_job' generate 'rolemodel:kaminari' generate 'rolemodel:editors' - generate 'rolemodel:tailored_select' + # generate 'rolemodel:tailored_select' # Not production ready generate 'rolemodel:lograge' end end diff --git a/lib/generators/rolemodel/saas/devise/devise_generator.rb b/lib/generators/rolemodel/saas/devise/devise_generator.rb index 54629258..041ed4b2 100644 --- a/lib/generators/rolemodel/saas/devise/devise_generator.rb +++ b/lib/generators/rolemodel/saas/devise/devise_generator.rb @@ -111,7 +111,7 @@ def modify_existing_files inject_into_file 'app/models/user.rb', after: /devise\s+:.*\n.*\n/ do optimize_indentation <<~'RUBY', 2 - enum role: { user: 'user', admin: 'admin' } + enum :role, { user: 'user', admin: 'admin' } belongs_to :organization, inverse_of: :users accepts_nested_attributes_for :organization diff --git a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/confirmations/new.html.slim b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/confirmations/new.html.slim index 8293f723..31dd1641 100644 --- a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/confirmations/new.html.slim +++ b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/confirmations/new.html.slim @@ -1,7 +1,8 @@ .app__login = simple_form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post, class: 'card card--login' }) do |f| .card__header - = image_tag asset_path('logo.png') # TODO: Replace with your own logo + / TODO: Replace with your own logo + = image_tag asset_path('/logo.png') .card__body = f.input :email, required: true, autofocus: true, autocomplete: "email", input_html: { value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) } .card__footer diff --git a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/passwords/edit.html.slim b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/passwords/edit.html.slim index d5cc153e..58a36d60 100644 --- a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/passwords/edit.html.slim +++ b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/passwords/edit.html.slim @@ -1,7 +1,8 @@ .app__login = simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put, class: 'card card--login' }) do |f| .card__header - = image_tag asset_path('logo.png') # TODO: Replace with your own logo + / TODO: Replace with your own logo + = image_tag asset_path('/logo.png') .card__body = f.hidden_field :reset_password_token = f.input :password, label: t(".new_password", default: "New password"), required: true, autofocus: true, autocomplete: "new-password", hint: (@minimum_password_length ? t("devise.shared.minimum_password_length", count: @minimum_password_length, default: "(%{count} characters minimum)") : nil) diff --git a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/passwords/new.html.slim b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/passwords/new.html.slim index 8519f2a5..856445a7 100644 --- a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/passwords/new.html.slim +++ b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/passwords/new.html.slim @@ -1,7 +1,8 @@ .app__login = simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post, class: 'card card--login' }) do |f| .card__header - = image_tag asset_path('logo.png') # TODO: Replace with your own logo + / TODO: Replace with your own logo + = image_tag asset_path('/logo.png') .card__body = f.input :email, required: true, autofocus: true, autocomplete: "email" .card__footer diff --git a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/registrations/edit.html.slim b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/registrations/edit.html.slim index 0c47aef2..d48f1f07 100644 --- a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/registrations/edit.html.slim +++ b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/registrations/edit.html.slim @@ -1,7 +1,8 @@ .app__login = simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, class: 'card card--login' }) do |f| .card__header - = image_tag asset_path('logo.png') # TODO: Replace with your own logo + / TODO: Replace with your own logo + = image_tag asset_path('/logo.png') .card__body = f.input :first_name, required: true, autofocus: true, autocomplete: "first_name" = f.input :last_name, required: true, autocomplete: "last_name" diff --git a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/registrations/new.html.slim b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/registrations/new.html.slim index b1dae8fc..4298d528 100644 --- a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/registrations/new.html.slim +++ b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/registrations/new.html.slim @@ -1,7 +1,8 @@ .app__login = simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { class: 'card card--login' }) do |f| .card__header - = image_tag asset_path('logo.png') # TODO: Replace with your own logo + / TODO: Replace with your own logo + = image_tag asset_path('/logo.png') .card__body = f.input :first_name, required: true, autofocus: true = f.input :last_name, required: true diff --git a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/sessions/new.html.slim b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/sessions/new.html.slim index 88aff0f7..c2b24a1c 100644 --- a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/sessions/new.html.slim +++ b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/sessions/new.html.slim @@ -1,7 +1,8 @@ .app__login = simple_form_for(resource, as: resource_name, url: session_path(resource_name), html: { class: 'card card--login' }) do |f| .card__header - = image_tag asset_path('logo.png') # TODO: Replace with your own logo + / TODO: Replace with your own logo + = image_tag asset_path('/logo.png') .card__body = f.input :email, required: true, autofocus: true, autocomplete: "email" = f.input :password, required: true, autocomplete: "current-password" diff --git a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/unlocks/new.html.slim b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/unlocks/new.html.slim index 2fb3598c..dc460d62 100644 --- a/lib/generators/rolemodel/saas/devise/templates/app/views/devise/unlocks/new.html.slim +++ b/lib/generators/rolemodel/saas/devise/templates/app/views/devise/unlocks/new.html.slim @@ -1,7 +1,8 @@ .app__login = simple_form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post, class: 'card card--login' }) do |f| .card__header - = image_tag asset_path('logo.png') # TODO: Replace with your own logo + / TODO: Replace with your own logo + = image_tag asset_path('/logo.png') .card__body = f.input :email, autofocus: true, autocomplete: "email" .card__footer diff --git a/lib/generators/rolemodel/simple_form/simple_form_generator.rb b/lib/generators/rolemodel/simple_form/simple_form_generator.rb index 60a43701..9a64433b 100644 --- a/lib/generators/rolemodel/simple_form/simple_form_generator.rb +++ b/lib/generators/rolemodel/simple_form/simple_form_generator.rb @@ -15,7 +15,12 @@ def add_files directory 'app/inputs' copy_file 'config/initializers/simple_form.rb' copy_file 'config/locales/simple_form.en.yml' - copy_file 'lib/templates/slim/scaffold/_form.html.slim' + + # Because directory 'lib/templates/slim/scaffold' will try to parse the + # template files rather than just copy them. + Pathname.new(self.class.source_root).glob('lib/templates/slim/scaffold/*.tt').each do |tt| + copy_file tt, tt.relative_path_from(self.class.source_root) + end end end end diff --git a/lib/generators/rolemodel/simple_form/templates/config/initializers/simple_form.rb b/lib/generators/rolemodel/simple_form/templates/config/initializers/simple_form.rb index a0fbe1ab..f5d77193 100644 --- a/lib/generators/rolemodel/simple_form/templates/config/initializers/simple_form.rb +++ b/lib/generators/rolemodel/simple_form/templates/config/initializers/simple_form.rb @@ -102,7 +102,7 @@ config.boolean_style = :inline # Default class for buttons - config.button_class = 'btn' + config.button_class = 'btn btn--primary' # Method used to tidy up errors. Specify any Rails Array method. # :first lists the first message for each field. diff --git a/lib/generators/rolemodel/simple_form/templates/lib/templates/slim/scaffold/_form.html.slim b/lib/generators/rolemodel/simple_form/templates/lib/templates/slim/scaffold/_form.html.slim.tt similarity index 84% rename from lib/generators/rolemodel/simple_form/templates/lib/templates/slim/scaffold/_form.html.slim rename to lib/generators/rolemodel/simple_form/templates/lib/templates/slim/scaffold/_form.html.slim.tt index 45900d2d..06a69ba6 100644 --- a/lib/generators/rolemodel/simple_form/templates/lib/templates/slim/scaffold/_form.html.slim +++ b/lib/generators/rolemodel/simple_form/templates/lib/templates/slim/scaffold/_form.html.slim.tt @@ -1,3 +1,5 @@ +-# locals: (<%= singular_table_name %>:) + = simple_form_for(@<%= singular_table_name %>) do |f| = f.error_notification = f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? @@ -6,5 +8,5 @@ = f.<%= attribute.reference? ? :association : :input %> :<%= attribute.name %> <%- end -%> - .form__actions + .flex.justify-end = f.button :submit diff --git a/lib/generators/rolemodel/slim/README.md b/lib/generators/rolemodel/slim/README.md index 3b1f6f0b..e76c0eda 100644 --- a/lib/generators/rolemodel/slim/README.md +++ b/lib/generators/rolemodel/slim/README.md @@ -3,3 +3,7 @@ ## What you get * [Slim](https://github.com/slim-template/slim) +* [Slim Rails](https://github.com/slim-template/slim-rails) +* Slim scaffold generation templates + +Adds template files for use when running the rails scaffold command. E.G. `rails generate scaffold demo name:string description:string`. This will generate slim files utilizing Optics styling for the basic CRUD pages. Your app can further customize them by editing the `.tt` files in `lib/templates/slim/scaffold` diff --git a/lib/generators/rolemodel/slim/slim_generator.rb b/lib/generators/rolemodel/slim/slim_generator.rb index dbbef973..b3e6045b 100644 --- a/lib/generators/rolemodel/slim/slim_generator.rb +++ b/lib/generators/rolemodel/slim/slim_generator.rb @@ -9,9 +9,21 @@ def add_slim bundle_command 'add slim' end + def add_slim_rails + bundle_command 'add slim-rails' + end + def replace_erb_layout remove_file 'app/views/layouts/application.html.erb' template 'app/views/layouts/application.html.slim' end + + def copy_templates + # Because directory 'lib/templates/slim/scaffold' will try to parse the + # template files rather than just copy them. + Pathname.new(self.class.source_root).glob('lib/templates/slim/scaffold/*.tt').each do |tt| + copy_file tt, tt.relative_path_from(self.class.source_root) + end + end end end diff --git a/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/edit.html.slim.tt b/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/edit.html.slim.tt new file mode 100644 index 00000000..b96a8413 --- /dev/null +++ b/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/edit.html.slim.tt @@ -0,0 +1,15 @@ +- content_for :title, "Editing <%= human_name.downcase %>" + +nav.breadcrumbs.breadcrumbs--large.margin-y-md + = link_to "<%= human_name.pluralize %>", <%= index_helper(type: :path) %>, class: "breadcrumbs__link" + .breadcrumbs__separator = icon('chevron_right') + = link_to "<%= human_name.pluralize %>", <%= model_resource_name(prefix: "@") %>, class: "breadcrumbs__link" + .breadcrumbs__separator = icon('chevron_right') + span.breadcrumbs__text Editing <%= human_name.downcase %> + +.card + .card__header + h1 Editing <%= human_name.downcase %> + .divider + .card__body + = render "form", <%= singular_table_name %>: @<%= singular_table_name %> diff --git a/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/index.html.slim.tt b/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/index.html.slim.tt new file mode 100644 index 00000000..f4c2df04 --- /dev/null +++ b/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/index.html.slim.tt @@ -0,0 +1,13 @@ +- content_for :title, "<%= human_name.pluralize %>" + +header.content-header + .content-header__details + h1.content-header__title <%= human_name.pluralize %> + + .content-header__aside + = link_to <%= new_helper(type: :path) %>, class: 'btn btn--primary' do + = icon('add') + | New <%= human_name.downcase %> + +.flex.flex-col.gap-md#<%= plural_table_name %> + = render @<%= plural_table_name %> diff --git a/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/new.html.slim.tt b/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/new.html.slim.tt new file mode 100644 index 00000000..51cd3dfa --- /dev/null +++ b/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/new.html.slim.tt @@ -0,0 +1,13 @@ +- content_for :title, "New <%= human_name.downcase %>" + +nav.breadcrumbs.breadcrumbs--large.margin-y-md + = link_to "<%= human_name.pluralize %>", <%= index_helper(type: :path) %>, class: "breadcrumbs__link" + .breadcrumbs__separator = icon('chevron_right') + span.breadcrumbs__text New <%= human_name.downcase %> + +.card + .card__header + h1 New <%= human_name.downcase %> + .divider + .card__body + = render "form", <%= singular_table_name %>: @<%= singular_table_name %> diff --git a/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/partial.html.slim.tt b/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/partial.html.slim.tt new file mode 100644 index 00000000..bfb6a3a8 --- /dev/null +++ b/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/partial.html.slim.tt @@ -0,0 +1,10 @@ +-# locals: (<%= singular_table_name %>:) + +.card.card--padded id=dom_id(<%= singular_name %>) + .flex.items-center.justify-between + .text-pair + span.text-pair__title = <%= singular_table_name %>.name + + = link_to <%= singular_name %>, class: "btn btn--small btn--icon btn--pill btn--no-border" do + = icon('chevron_right') + span.sr-only View <%= human_name.downcase %> diff --git a/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/show.html.slim.tt b/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/show.html.slim.tt new file mode 100644 index 00000000..09b56121 --- /dev/null +++ b/lib/generators/rolemodel/slim/templates/lib/templates/slim/scaffold/show.html.slim.tt @@ -0,0 +1,33 @@ +nav.breadcrumbs.breadcrumbs--large.margin-y-md + = link_to "<%= human_name.pluralize %>", <%= index_helper(type: :path) %>, class: "breadcrumbs__link" + .breadcrumbs__separator = icon('chevron_right') + span.breadcrumbs__text = @<%= singular_table_name %>.name + +header.content-header + .content-header__details + h1.content-header__title = @<%= singular_table_name %>.name + + .content-header__aside + = link_to <%= edit_helper(type: :path) %>, class: 'btn btn--icon' do + = icon('edit') + span.sr-only Edit <%= human_name.downcase %> + + = button_to @<%= singular_table_name %>, form: { data: { turbo_confirm: 'Are you sure?' } }, class: "btn btn--destructive btn--icon", method: :delete do + = icon('delete') + span.sr-only Destroy this <%= human_name.downcase %> + +.flex.flex-col.gap-md +<% attributes.reject(&:password_digest?).each do |attribute| -%> + .text-pair.text-pair--inline + span.text-pair__title <%= attribute.human_name %>: + span.text-pair__subtitle +<% if attribute.attachment? -%> + = link_to @<%= singular_name %>.<%= attribute.column_name %>.filename, <%= singular_name %>.<%= attribute.column_name %> if <%= singular_name %>.<%= attribute.column_name %>.attached? +<% elsif attribute.attachments? -%> + <%% @<%= singular_name %>.<%= attribute.column_name %>.each do |<%= attribute.singular_name %>| %> + div = link_to <%= attribute.singular_name %>.filename, <%= attribute.singular_name %> + <%% end %> +<% else -%> + = @<%= singular_name %>.<%= attribute.column_name %> +<% end -%> +<% end -%> diff --git a/lib/generators/rolemodel/ui_components/all_generator.rb b/lib/generators/rolemodel/ui_components/all_generator.rb index dec8444d..c0e7c920 100644 --- a/lib/generators/rolemodel/ui_components/all_generator.rb +++ b/lib/generators/rolemodel/ui_components/all_generator.rb @@ -1,5 +1,5 @@ module Rolemodel - module Saas + module UiComponents class AllGenerator < Rails::Generators::Base source_root File.expand_path('templates', __dir__) diff --git a/lib/generators/rolemodel/ui_components/modals/templates/app/views/application/_confirm.html.slim b/lib/generators/rolemodel/ui_components/modals/templates/app/views/application/_confirm.html.slim index f3a0dda1..77cc66eb 100644 --- a/lib/generators/rolemodel/ui_components/modals/templates/app/views/application/_confirm.html.slim +++ b/lib/generators/rolemodel/ui_components/modals/templates/app/views/application/_confirm.html.slim @@ -8,5 +8,5 @@ .confirm-dialog__footer button#confirm-cancel.confirm-cancel.btn | Cancel - button#confirm-accept.btn-destructive + button#confirm-accept.btn.btn--destructive | Yes, I'm Sure diff --git a/lib/generators/rolemodel/ui_components/navbar/templates/app/views/layouts/_navbar.html.slim b/lib/generators/rolemodel/ui_components/navbar/templates/app/views/layouts/_navbar.html.slim index 614984c6..f49a142c 100644 --- a/lib/generators/rolemodel/ui_components/navbar/templates/app/views/layouts/_navbar.html.slim +++ b/lib/generators/rolemodel/ui_components/navbar/templates/app/views/layouts/_navbar.html.slim @@ -1,6 +1,6 @@ nav.navbar.navbar--primary = link_to root_path, class: "navbar__brand" do - = image_tag "logo.png", alt: "Logo", class: "navbar__logo" + = image_tag "/logo.png", alt: "Logo", class: "navbar__logo" - if user_signed_in? .navbar__content.navbar__content--justify-start diff --git a/lib/rolemodel_rails/version.rb b/lib/rolemodel_rails/version.rb index 0754cd45..a7f85ef2 100644 --- a/lib/rolemodel_rails/version.rb +++ b/lib/rolemodel_rails/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module RolemodelRails - VERSION = '0.22.0' + VERSION = '0.23.0' end