Merge pull request #1212 from basecamp/column-perma

Column perma
This commit is contained in:
Jason Zimdars
2025-10-03 16:09:42 -05:00
committed by GitHub
44 changed files with 284 additions and 172 deletions
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10,21V19H6.41L10.91,14.5L9.5,13.09L5,17.59V14H3V21H10M14.5,10.91L19,6.41V10H21V3H14V5H17.59L13.09,9.5L14.5,10.91Z" /></svg>

After

Width:  |  Height:  |  Size: 193 B

+93 -38
View File
@@ -84,6 +84,10 @@
.card {
display: none;
}
&:not(.cards--considering) {
margin-block-start: var(--column-width-collapsed);
}
}
&:not(.is-collapsed) {
@@ -107,6 +111,10 @@
}
}
.cards__new-column {
margin-block-start: var(--column-width-collapsed);
}
/* Used when filtering */
.cards--grid {
--cards-gap: 1rem;
@@ -191,15 +199,46 @@
inline-size: 100%;
margin-block-end: calc(-0.5 * var(--cards-gap));
justify-content: center;
}
&:hover,
&:has(~ .cards__expander-menu:hover) {
background-color: var(--column-color);
filter: none;
.cards:is(.cards--considering) &:hover {
cursor: unset;
filter: none;
}
@media (any-hover: hover) {
.btn--circle,
~ .btn--circle,
~ .cards__expander-menu .btn--circle {
transition: opacity 300ms ease-in-out;
opacity: 0;
.cards:hover & {
opacity: 1;
}
}
}
}
.btn.cards__expander-button {
--btn-background: transparent;
block-size: var(--column-width-collapsed);
inline-size: var(--column-width-collapsed);
inset: 0 0 auto auto;
position: absolute;
translate: calc(var(--column-gap) * -2);
z-index: var(--z-popup);
.cards--considering & {
translate: none;
}
.cards.is-collapsed & {
display: none;
}
}
.cards__expander-count {
line-height: var(--column-width-collapsed);
inline-size: var(--column-width-collapsed);
@@ -226,9 +265,9 @@
}
.cards__expander-menu {
inset: 0 0 auto auto;
inset: 0 auto auto 0;
position: absolute;
translate: calc(var(--column-gap) * -2);
translate: calc(var(--column-gap) * 2);
z-index: var(--z-popup);
.btn--circle {
@@ -249,14 +288,25 @@
.blank-slate--card {
box-shadow: none !important;
border: 2px dashed color-mix(in srgb, var(--card-color) 40%, var(--color-canvas));;
font-weight: 600;
rotate: 2deg;
color: color-mix(in srgb, var(--card-color) 70%, var(--color-canvas));
p {
font-size: var(--text-small);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
&.blank-slate-for-grid {
display: none;
.cards--grid & {
display: initial;
}
}
.cards--grid &:not(.blank-slate-for-grid) {
display: none;
}
}
}
@@ -383,23 +433,32 @@
.cards--considering {
--gradient-opacity: 25%;
--bottom-gradient-size: 4em;
background-color: var(--color-canvas);
background-image: linear-gradient(90deg,
transparent 0%,
color-mix(in srgb, var(--color-considering) var(--gradient-opacity), transparent) 33%,
color-mix(in srgb, var(--color-considering) var(--gradient-opacity), transparent) 66%,
transparent 100%);
padding-bottom: var(--bottom-gradient-size);
position: relative;
@supports(mask: radial-gradient(black)) {
@supports(mask: linear-gradient(black)) {
&:before {
background-image: linear-gradient(90deg,
transparent 0%,
color-mix(in srgb, var(--color-considering) var(--gradient-opacity), transparent) 33%,
color-mix(in srgb, var(--color-considering) var(--gradient-opacity), transparent) 66%,
transparent 100%);
content: "";
inset: calc(var(--column-width-collapsed) + var(--block-space-half)) 0 0 0;
position: absolute;
z-index: 0;
}
&:after {
background: linear-gradient(90deg,
color-mix(in oklch, var(--color-considering) 0%, transparent) 0%,
color-mix(in oklch, var(--color-considering) 20%, transparent) 25%,
color-mix(in oklch, var(--color-considering) 20%, transparent) 50%,
color-mix(in oklch, var(--color-considering) 0%, transparent) 100%);
content: "";
inset: 0;
inset: calc(var(--column-width-collapsed) + var(--block-space-half)) 0 0 0;
mask: var(--wavy-background-mask);
position: absolute;
z-index: 0;
@@ -416,7 +475,7 @@
.cards__decoration {
--gradient-opacity: 30%;
--size: 4.25em;
--size: 2.2em;
background-color: var(--color-canvas);
background-image: radial-gradient(ellipse at bottom,
@@ -424,7 +483,7 @@
transparent 70%);
block-size: var(--size);
inline-size: 100%;
inset: calc(var(--size) * -1) 0 auto 0;
inset: calc(var(--column-width-collapsed) + var(--block-space) - var(--size)) 0 auto 0;
position: absolute;
z-index: -1;
@@ -433,23 +492,31 @@
}
@supports(mask: radial-gradient(black)) {
--gradient-opacity: 30%;
&:before {
background: radial-gradient(ellipse at bottom,
color-mix(in srgb, var(--color-considering) var(--gradient-opacity), transparent) 0%,
transparent 70%);
content: "";
inset: 0;
mask: radial-gradient(6px at 50% calc(100% + 3px), transparent calc(99% - 2px), black calc(101% - 2px) 99%, transparent 101%) calc(50% - 8px) calc(50% - 3px + .5px)/16px 6px,
mask: radial-gradient(6px at 50% calc(100% + 3px),
transparent calc(99% - 2px),
black calc(101% - 2px) 99%, transparent 101%) calc(50% - 8px) calc(50% - 3px + .5px)/16px 6px,
radial-gradient(6px at 50% -3px, transparent calc(99% - 2px), black calc(101% - 2px) 99%, transparent 101%) 50% calc(50% + 3px)/16px 6px;
position: absolute;
z-index: 0;
}
}
}
&.cards__decoration--end {
inset: auto 0 calc(var(--size) * -1);
rotate: 180deg;
}
.cards__decoration-end {
background: linear-gradient( transparent 0%, var(--color-canvas) 90%);
block-size: var(--bottom-gradient-size);
content: "";
inset: auto 0 0;
position: absolute;
z-index: 1;
}
.card {
@@ -458,6 +525,7 @@
background-color: var(--color-canvas);
line-height: 1.2;
z-index: 2;
@media (min-width: 640px) {
--text-xx-large: 1.6em;
@@ -532,18 +600,12 @@
/* ------------------------------------------------------------------------ */
.cards--on-deck {
--column-color: var(--color-ink-lighter);
--card-color: var(--color-ink-light) !important;
.card {
--card-color: var(--color-card-complete) !important;
}
&.cards.is-collapsed {
.cards__expander:after {
background: var(--column-color);
}
}
.bubble {
display: none !important;
}
@@ -572,11 +634,4 @@
z-index: 1;
}
}
/* Closed
/* ------------------------------------------------------------------------ */
.cards--closed {
--column-color: var(--color-ink-lighter);
}
}
+7 -1
View File
@@ -323,8 +323,14 @@
}
.card:has(.card__closed),
.card-perma:has(.card__closed) {
.card:is(.card--postponed),
.card-perma:has(.card__closed),
.card-perma:has(.card--postponed) {
--card-color: var(--color-card-complete) !important;
.bubble {
display: none;
}
}
.card__closed-title {
+1
View File
@@ -45,6 +45,7 @@
.icon--crown { --svg: url("crown.svg "); }
.icon--email { --svg: url("email.svg "); }
.icon--everyone { --svg: url("everyone.svg "); }
.icon--expand { --svg: url("expand.svg "); }
.icon--gear { --svg: url("gear.svg "); }
.icon--filter { --svg: url("filter.svg "); }
.icon--globe { --svg: url("globe.svg "); }
@@ -1,6 +1,4 @@
class Account::SettingsController < ApplicationController
include FilterScoped
def show
@account = Account.sole
@users = User.active.alphabetically
-2
View File
@@ -6,8 +6,6 @@ class CardsController < ApplicationController
before_action :set_collection, only: %i[ create ]
before_action :set_card, only: %i[ show edit update destroy ]
enable_collection_filtering only: :index
PAGE_SIZE = 25
def index
-26
View File
@@ -6,12 +6,6 @@ module FilterScoped
before_action :set_user_filtering
end
class_methods do
def enable_collection_filtering(**options)
before_action :enable_collection_filtering, **options
end
end
private
def set_filter
if params[:filter_id].present?
@@ -32,24 +26,4 @@ module FilterScoped
def expanded_param
ActiveRecord::Type::Boolean.new.cast(params[:expand_all])
end
def enable_collection_filtering
# We pass a block so that we don't have to pass around the script_name and host
# to the model to make +url_for+ invocable
@user_filtering.enable_collection_filtering do |**options|
url_for(options)
end
end
def enable_referral_collection_filtering
@user_filtering.enable_collection_filtering do |**options|
if request.referer.present?
uri = URI.parse(request.referer)
uri.query = Rack::Utils.build_query(options)
uri.to_s
else
url_for(options)
end
end
end
end
-2
View File
@@ -1,8 +1,6 @@
class EventsController < ApplicationController
include DayTimelinesScoped
enable_collection_filtering only: :index
def index
fresh_when @day_timeline
end
-7
View File
@@ -1,14 +1,7 @@
class My::MenusController < ApplicationController
include FilterScoped
before_action :enable_referral_collection_filtering, if: :collection_filtering_enabled?
def show
fresh_when @user_filtering
end
private
def collection_filtering_enabled?
params[:enable_collection_filtering].present?
end
end
@@ -1,5 +1,4 @@
class Notifications::SettingsController < ApplicationController
include FilterScoped
before_action :set_settings
def show
@@ -1,6 +1,4 @@
class NotificationsController < ApplicationController
include FilterScoped
def index
@unread = Current.user.notifications.unread.ordered unless current_page_param
set_page_and_extract_portion_from Current.user.notifications.read.ordered
-2
View File
@@ -1,6 +1,4 @@
class WebhooksController < ApplicationController
include FilterScoped
before_action :ensure_can_administer
before_action :set_collection
before_action :set_webhook, except: %i[ index new create ]
+1 -17
View File
@@ -71,28 +71,12 @@ class User::Filtering
filter.collections.any?
end
def enable_collection_filtering(&block)
@collection_filtering_route_resolver = block
end
def self_filter_path(...)
if supports_collection_filtering?
@collection_filtering_route_resolver.call(...)
else
cards_path(...)
end
end
def single_collection_or_first
# Default to the first selected or, when no selection, to the first one
filter.collections.first || collections.first
end
def cache_key
ActiveSupport::Cache.expand_cache_key([ user, filter, expanded?, collections, tags, users, filters, supports_collection_filtering? ], "user-filtering")
end
def supports_collection_filtering?
@collection_filtering_route_resolver.present?
ActiveSupport::Cache.expand_cache_key([ user, filter, expanded?, collections, tags, users, filters ], "user-filtering")
end
end
+1 -1
View File
@@ -1,7 +1,7 @@
<% @page_title = "Account Settings" %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<h1 class="header__title"><%= @page_title %></h1>
<% end %>
+1 -1
View File
@@ -10,7 +10,7 @@
<% end %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<h1 class="header__title divider divider--fade full-width">
<span class="overflow-ellipsis"><%= @user_filtering.selected_collections_label %></span>
+1 -1
View File
@@ -10,7 +10,7 @@
<% end %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<%= link_to collection_url(@card.collection), class: "header__title btn borderless txt-large",
style: "--btn-padding: 0.25ch 1ch 0.25ch 0.75ch; view-transistion-name: card-collection-title;",
@@ -1,11 +1,33 @@
<%= turbo_frame_tag :closed_column do %>
<% if @page.used? %>
<%= with_manual_pagination :closed_column, @page do %>
<%= render "collections/columns/list", cards: @page.records, draggable: true %>
<% @page_title = "Column: Closed" %>
<% content_for :header do %>
<%= render "filters/menu" %>
<div class="header__actions header__actions--start">
<%= link_to @collection, class: "btn borderless txt-medium", data: { controller: "hotkey", action: "keydown.esc@document->hotkey#click" } do %>
<span class="overflow-ellipsis">
&larr;
<strong><%= @collection.name %></strong>
</span>
<% end %>
<% else %>
<div class="card blank-slate blank-slate--card">
<p class="txt-align-center txt-normal">Drag cards here</p>
</div>
<% end %>
</div>
<h1 class="header__title divider divider--fade full-width">
<span class="overflow-ellipsis"><%= @page_title %></span>
</h1>
<% end %>
<section class="cards cards--grid">
<%= turbo_frame_tag :closed_column do %>
<% if @page.used? %>
<%= with_manual_pagination :closed_column, @page do %>
<%= render "collections/columns/list", cards: @page.records, draggable: true %>
<% end %>
<% else %>
<div class="card blank-slate blank-slate--card">
<p class="txt-align-center">Drag cards here</p>
<p class="txt-align-center blank-slate-for-grid">Nothing here</p>
</div>
<% end %>
<% end %>
</section>
@@ -1,11 +1,33 @@
<%= turbo_frame_tag :not_now_column do %>
<% if @page.used? %>
<%= with_manual_pagination :not_now_column, @page do %>
<%= render "collections/columns/list", cards: @page.records, draggable: true %>
<% @page_title = "Column: Now now" %>
<% content_for :header do %>
<%= render "filters/menu" %>
<div class="header__actions header__actions--start">
<%= link_to @collection, class: "btn borderless txt-medium", data: { controller: "hotkey", action: "keydown.esc@document->hotkey#click" } do %>
<span class="overflow-ellipsis">
&larr;
<strong><%= @collection.name %></strong>
</span>
<% end %>
<% else %>
<div class="card blank-slate blank-slate--card">
<p class="txt-align-center txt-normal">Drag cards here</p>
</div>
<% end %>
</div>
<h1 class="header__title divider divider--fade full-width">
<span class="overflow-ellipsis"><%= @page_title %></span>
</h1>
<% end %>
<section class="cards cards--grid">
<%= turbo_frame_tag :not_now_column do %>
<% if @page.used? %>
<%= with_manual_pagination :not_now_column, @page do %>
<%= render "collections/columns/list", cards: @page.records, draggable: true %>
<% end %>
<% else %>
<div class="card blank-slate blank-slate--card">
<p class="txt-align-center">Drag cards here</p>
<p class="txt-align-center blank-slate-for-grid">Nothing here</p>
</div>
<% end %>
<% end %>
</section>
+31 -9
View File
@@ -1,11 +1,33 @@
<%= turbo_frame_tag dom_id(@column, :cards) do %>
<% if @page.used? %>
<%= with_manual_pagination dom_id(@column, :cards), @page do %>
<%= render "collections/columns/list", cards: @page.records, draggable: true %>
<% @page_title = "Column: #{ @column.name }" %>
<% content_for :header do %>
<%= render "filters/menu" %>
<div class="header__actions header__actions--start">
<%= link_to @column.collection, class: "btn borderless txt-medium", data: { controller: "hotkey", action: "keydown.esc@document->hotkey#click" } do %>
<span class="overflow-ellipsis">
&larr;
<strong><%= @column.collection.name %></strong>
</span>
<% end %>
<% else %>
<div class="card blank-slate blank-slate--card">
<p class="txt-align-center txt-normal">Drag cards here</p>
</div>
<% end %>
</div>
<h1 class="header__title divider divider--fade full-width">
<span class="overflow-ellipsis"><%= @page_title %></span>
</h1>
<% end %>
<section class="cards cards--grid">
<%= turbo_frame_tag dom_id(@column, :cards) do %>
<% if @page.used? %>
<%= with_manual_pagination dom_id(@column, :cards), @page do %>
<%= render "collections/columns/list", cards: @page.records, draggable: true %>
<% end %>
<% else %>
<div class="card blank-slate blank-slate--card">
<p class="txt-align-center">Drag cards here</p>
<p class="txt-align-center blank-slate-for-grid">Nothing here</p>
</div>
<% end %>
<% end %>
</section>
@@ -1,11 +1,32 @@
<%= turbo_frame_tag :stream_column do %>
<% if @page.used? %>
<%= with_manual_pagination :stream_column, @page do %>
<%= render "collections/columns/list", cards: @page.records, draggable: true %>
<% @page_title = "Column: The Stream" %>
<% content_for :header do %>
<%= render "filters/menu" %>
<div class="header__actions header__actions--start">
<%= link_to @collection, class: "btn borderless txt-medium", data: { controller: "hotkey", action: "keydown.esc@document->hotkey#click" } do %>
<span class="overflow-ellipsis">
&larr;
<strong><%= @collection.name %></strong>
</span>
<% end %>
<% else %>
<div class="card blank-slate blank-slate--card">
<p class="txt-align-center txt-normal">Drag cards here</p>
</div>
<% end %>
</div>
<h1 class="header__title divider divider--fade full-width">
<span class="overflow-ellipsis"><%= @page_title %></span>
</h1>
<% end %>
<section class="cards cards--grid">
<%= turbo_frame_tag :stream_column do %>
<% if @page.used? %>
<%= with_manual_pagination :stream_column, @page do %>
<%= render "collections/columns/list", cards: @page.records, draggable: true %>
<% end %>
<% else %>
<div class="card blank-slate blank-slate--card">
<p class="txt-align-center blank-slate-for-grid">Nothing here</p>
</div>
<% end %>
<% end %>
</section>
+1 -1
View File
@@ -1,7 +1,7 @@
<% @page_title = "Collection Settings" %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<div class="header__actions header__actions--start">
<%= link_to @collection, class: "btn borderless txt-medium", data: { controller: "hotkey", action: "keydown.esc@document->hotkey#click" } do %>
<span class="overflow-ellipsis">
+1 -1
View File
@@ -1,7 +1,7 @@
<% @page_title = "Create a new collection" %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<% end %>
<div class="panel shadow center" style="--panel-size: 55ch; view-transition-name: new-collection">
+1 -1
View File
@@ -10,7 +10,7 @@
<% end %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<div class="header__actions header__actions--start">
<%= render "cards/webhooks", collection: @collection if Current.user.admin? %>
+3 -1
View File
@@ -6,7 +6,9 @@
data-drag-and-drop-url="<%= columns_card_drops_closure_path("__id__") %>"
>
<%= render "collections/show/expander", title: "Done", count: collection.cards.closed.count, column_id: "closed-cards" %>
<%= render "collections/show/expander", title: "Done", count: collection.cards.closed.count, column_id: "closed-cards" do %>
<%= render "collections/show/menu/expand", column_path: collection_columns_closed_path(collection) %>
<% end %>
<%= column_frame_tag :closed_column, src: collection_columns_closed_path(collection) %>
</section>
@@ -11,5 +11,10 @@
<%= render "collections/show/menu/column", column: column %>
<% end %>
<%= link_to collection_column_path(column.collection, column), class: "btn btn--circle txt-x-small borderless cards__expander-button", data: { turbo_frame: "_top" } do %>
<%= icon_tag "expand", class: "translucent" %>
<span class="for-screen-reader">Expand column</span>
<% end %>
<%= column_frame_tag dom_id(column, :cards), src: collection_column_path(column.collection, column) %>
</section>
+3 -1
View File
@@ -6,7 +6,9 @@
data-drag-and-drop-url="<%= columns_card_drops_not_now_path("__id__") %>"
>
<%= render "collections/show/expander", title: "Not Now", count: collection.cards.postponed.count, column_id: "not-now" %>
<%= render "collections/show/expander", title: "Not Now", count: collection.cards.postponed.count, column_id: "not-now" do %>
<%= render "collections/show/menu/expand", column_path: collection_columns_not_now_path(collection) %>
<% end %>
<%= column_frame_tag :not_now_column, src: collection_columns_not_now_path(collection) %>
</section>
+9 -1
View File
@@ -5,6 +5,13 @@
data-drag-and-drop-url="<%= columns_card_drops_stream_path("__id__") %>">
<div class="cards__decoration"></div>
<header class="cards__expander">
<h2 class="cards__expander-title">The Stream</h2>
<%= link_to collection_columns_stream_path(collection), class: "btn btn--circle txt-x-small borderless cards__expander-button", data: { turbo_frame: "_top" } do %>
<%= icon_tag "expand", class: "translucent" %>
<span class="for-screen-reader">Expand column</span>
<% end %>
</header>
<%= render "columns/show/add_card_button", collection: collection %>
<% if page.used? %>
@@ -13,6 +20,7 @@
<% end %>
<% end %>
<div class="cards__decoration cards__decoration--end"></div>
<div class="cards__decoration-end"></div>
</section>
<% end %>
@@ -6,14 +6,20 @@
<dialog class="popup panel flex-column gap fill-white shadow txt-small margin-block-double" data-dialog-target="dialog">
<ul class="popup__list">
<li class="popup__item">
<button class="popup__btn btn" data-action="click->clicker#click">Rename column</button>
<button class="popup__btn btn" data-action="click->clicker#click">
<%= icon_tag "rename" %>
<span>Rename column</span>
</button>
</li>
<li class="popup__item">
<%= button_to "Delete column", collection_column_path(column.collection, column),
<%= button_to collection_column_path(column.collection, column),
method: :delete,
class: "popup__btn btn",
class: "popup__btn btn txt-negative",
form_class: "display-contents",
form: { data: { turbo_confirm: "Are you sure you want to delete this column? This will move the cards back to the stream." } } %>
form: { data: { turbo_confirm: "Are you sure you want to delete this column? This will move the cards back to The Stream." } } do %>
<%= icon_tag "trash" %>
<span>Delete column</span>
<% end %>
</li>
</ul>
</dialog>
@@ -1,4 +1,4 @@
<div class="position-relative" data-controller="dialog" data-action="keydown.esc->dialog#close click@document->dialog#closeOnClickOutside" data-turbo-permanent>
<div class="position-relative cards__new-column" data-controller="dialog" data-action="keydown.esc->dialog#close click@document->dialog#closeOnClickOutside" data-turbo-permanent>
<button class="btn btn--circle txt-x-small borderless" data-action="click->dialog#open:stop" aria-label="Add a new column, etc.">
<%= icon_tag "add", class: "translucent", "aria-hidden": true %>
</button>
@@ -0,0 +1,4 @@
<%= link_to column_path, class: "btn btn--circle txt-x-small borderless cards__expander-button", data: { turbo_frame: "_top" } do %>
<%= icon_tag "expand", class: "translucent" %>
<span class="for-screen-reader">Expand column</span>
<% end %>
+1 -1
View File
@@ -4,7 +4,7 @@
<%= render "filters/broadcasts", filter: @filter %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<%= render "events/index/add_card_button", user_filtering: @user_filtering %>
<h1 class="header__title">
+1 -1
View File
@@ -8,6 +8,6 @@
dialog_target: "dialog",
navigable_list_focus_on_selection_value: false,
navigable_list_actionable_items_value: true } do %>
<%= turbo_frame_tag "my_menu", src: my_menu_path(enable_collection_filtering: user_filtering.supports_collection_filtering?, **user_filtering.filter.as_params), target: "_top" %>
<%= turbo_frame_tag "my_menu", src: my_menu_path, target: "_top" %>
<% end %>
</nav>
+4 -7
View File
@@ -1,10 +1,7 @@
<% # Using method: :get inside Turbo frame triggers some special Turbo handling where the script_name is lost %>
<%= form_with url: user_filtering.self_filter_path(script_name: Account.sole.slug), method: :get, class: "display-contents",
data: { controller: "form" } do |form| %>
<% if user_filtering.collections.any? %>
<%= collapsible_nav_section "Collections" do %>
<%= render "filters/menu/collections/all_option", form: form, user_filtering: user_filtering %>
<%= render partial: "filters/menu/collections/collection", collection: user_filtering.collections, as: :collection, locals: { form: form, user_filtering: user_filtering } %>
<% end %>
<% if user_filtering.collections.any? %>
<%= collapsible_nav_section "Collections" do %>
<%= render "filters/menu/collections/all_option", user_filtering: user_filtering %>
<%= render partial: "filters/menu/collections/collection", collection: user_filtering.collections, as: :collection %>
<% end %>
<% end %>
@@ -1,5 +1,3 @@
<% clear_url_path = user_filtering.self_filter_path(user_filtering.as_params.except(:collection_ids), script_name: request.script_name) %>
<% if Current.user.collections.many? %>
<li class="popup__item" data-filter-target="item" data-navigable-list-target="item" id="filter-collection-all">
<%= icon_tag "collection", class: "popup__icon" %>
+1 -1
View File
@@ -2,7 +2,7 @@
<% @hide_footer_frames = true %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<h1 class="header__title"><%= @page_title %></h1>
@@ -1,7 +1,7 @@
<% @page_title = "Notifications settings" %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<h1 class="header__title"><%= @page_title %></h1>
<% end %>
@@ -11,5 +11,5 @@
<% else %>
<p class="txt-medium translucent">Nothing here</p>
<% end %>
<div class="cards__decoration cards__decoration--end"></div>
<div class="cards__decoration-end"></div>
</section>
@@ -8,5 +8,5 @@
<% end %>
<% end %>
<div class="cards__decoration cards__decoration--end"></div>
</section>
<div class="cards__decoration-end"></div>
</section>
+1 -1
View File
@@ -1,7 +1,7 @@
<% @page_title = "Edit your profile" %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<% end %>
<div class="panel shadow center">
+1 -1
View File
@@ -1,7 +1,7 @@
<% @page_title = @user.name %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<% end %>
<div class="panel shadow center txt-align-center margin-block-end-double">
+1 -1
View File
@@ -1,7 +1,7 @@
<% @page_title = @webhook.name %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<div class="header__actions header__actions--start">
<%= link_to @webhook, class: "btn borderless txt-medium", data: { controller: "hotkey", action: "keydown.esc@document->hotkey#click" } do %>
<span class="overflow-ellipsis">
+1 -1
View File
@@ -1,7 +1,7 @@
<% @page_title = "Webhooks" %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<div class="header__actions header__actions--start">
<%= link_to cards_path(collection_ids: [ @collection ]), class: "btn borderless txt-medium", data: { controller: "hotkey", action: "keydown.esc@document->hotkey#click" } do %>
<span class="overflow-ellipsis">
+1 -1
View File
@@ -1,7 +1,7 @@
<% @page_title = "Set up a Webhook" %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<div class="header__actions header__actions--start">
<%= link_to collection_webhooks_path, class: "btn borderless txt-medium", data: { controller: "hotkey", action: "keydown.esc@document->hotkey#click" } do %>
<span class="overflow-ellipsis">
+1 -1
View File
@@ -1,7 +1,7 @@
<% @page_title = @webhook.name %>
<% content_for :header do %>
<%= render "filters/menu", user_filtering: @user_filtering %>
<%= render "filters/menu" %>
<div class="header__actions header__actions--start">
<%= link_to collection_webhooks_path, class: "btn borderless txt-medium", data: { controller: "hotkey", action: "keydown.esc@document->hotkey#click" } do %>
<span class="overflow-ellipsis">