2010-11-05 15:45:05 -07:00
|
|
|
!!! 5
|
|
|
|
%html
|
|
|
|
%head
|
Move closet-hangers-update form from partial to JS
We lose no-JS support, which I kinda miss, but caching is gonna be more
important down the line. Delete form moves next, then we cache.
CSRF token changes: it looks like, by setting a data attribute in AJAX, I
was overwriting the CSRF token. I don't remember it working that way, but
now we use beforeSend to add the X-CSRF-Token header instead, which is nicer,
anyway. The issue might've been something else, but this worked :/
The CSS was also not showing the loading ellipsis properly. I think that's a
dev-only issue in how live assets are being served versus static assets, but
may as well add UTF-8 charset directives everywhere, anyway.
2013-06-22 15:27:00 -07:00
|
|
|
%meta{charset: 'utf-8'}
|
2010-11-06 08:52:58 -07:00
|
|
|
%title
|
|
|
|
- if content_for? :title
|
|
|
|
= yield :title
|
2011-05-13 05:21:42 -07:00
|
|
|
|
|
2011-05-21 19:58:48 -07:00
|
|
|
- if content_for? :title_category
|
|
|
|
= yield :title_category
|
|
|
|
- else
|
2012-12-29 22:46:36 -08:00
|
|
|
#{t 'app_name'}: #{t '.title_tagline'}
|
2013-12-26 09:44:03 -08:00
|
|
|
%link{href: image_path('favicon.png'), rel: 'icon'}
|
2013-03-05 18:08:57 -08:00
|
|
|
= stylesheet_link_tag "application"
|
2024-09-09 19:49:51 -07:00
|
|
|
= stylesheet_link_tag "fonts"
|
2024-09-09 18:33:28 -07:00
|
|
|
= yield :stylesheets
|
2024-09-05 16:18:48 -07:00
|
|
|
- if use_responsive_design?
|
|
|
|
%meta{name: "viewport", content: "width=device-width, initial-scale=1"}
|
2011-05-20 16:29:04 -07:00
|
|
|
= yield :meta
|
2012-07-29 13:45:12 -07:00
|
|
|
= open_graph_tags
|
2010-11-10 13:59:54 -08:00
|
|
|
= csrf_meta_tag
|
2024-01-29 04:21:19 -08:00
|
|
|
= impress_2020_meta_tags
|
2010-11-11 10:43:22 -08:00
|
|
|
= signed_in_meta_tag
|
2014-01-18 19:54:11 -08:00
|
|
|
- if user_signed_in?
|
|
|
|
= current_user_id_meta_tag
|
2024-03-13 21:26:22 -07:00
|
|
|
= javascript_include_tag 'application', defer: true
|
|
|
|
= yield :javascripts
|
Add Turbo to speed up the app, and set up for missing UJS features
Oh right, we don't have Rails UJS going on anymore, which is what
handled the confirmation prompts for deleting lists. Turbo is the more
standard modern solution to that, and should speed up certain
pageloads, so let's do it!
Here I install the `turbo-rails` gem, then run `rails turbo:install` to
install the `@hotwired/turbo-rails` npm package. Then I move
`application.js` that's run all on pages but the outfit editor into our
section of JS that gets run through the bundler, and add Turbo to it.
I had to fix a couple tricky things:
1. The outfit editor page doesn't play nice with being swapped into the
document, so I make it require a full page reload instead.
2. Prefetching the Sign In link can cause the wrong `return_to` address
to be written to the `session`. (It's a GET request that does, ever
so slightly, take its own actions, oops!) As a simple hacky answer,
we disallow prefetching on that link.
Haven't fixed up the UJS stuff for confirm prompts to use Turbo yet,
that's next!
2024-03-13 13:43:48 -07:00
|
|
|
= yield :head
|
2024-07-07 21:11:14 -07:00
|
|
|
= render 'analytics'
|
2010-11-05 15:45:05 -07:00
|
|
|
%body{:class => body_class}
|
|
|
|
#container
|
Improve top nav support on mobile for responsive design pages
Before this change, pages that opt in with `use_responsive_design`
would often have the top nav be real cluttered for logged-in users. (I
think I happened to first test this responsive design without being
logged in on my dev box, oops!) Because the home link and `#userbar`
were absolutely positioned on the page, they would frequently overlap.
Here, I stop doing our old tricks to make the top nav load last on the
page. (This was to get "main content" loading faster, which I think is
a. not as relevant today with more commonly faster connections, and b.
was a bit naive to think that it'd be helpful to have to wait a long
time to _navigate_ if a page is unexpectedly large.)
These tricks used to leave some padding at the top of the `#container`,
which these elements would then visually fill via `position: absolute`
once they load.
Next, I update the CSS (for the responsive design pages only) to use
the new `#main-nav` container to lay them out in Flexbox: all in one
row if possible, or wrapped if needed.
Some designs hide stuff like this into a hamburger menu or such when
the screen gets small. I haven't done that here! No specific reason,
I'm just not sold that it's that much better, or worth the trouble.
I tested this on the following combinations:
1. Logged out, homepage
2. Logged in, homepage
3. Logged out, `/items`
4. Logged in, `/items`
5. Logged out, `/items/89487-Dyeworks-Purple-Haunted-Sky-Background`
6. Logged in, `/items/89487-Dyeworks-Purple-Haunted-Sky-Background`
Hope it's solid! 🤞
2024-10-05 17:52:38 -07:00
|
|
|
%nav#main-nav
|
|
|
|
- if home_link?
|
|
|
|
%a#home-link{:href => root_path}
|
|
|
|
%span= t 'app_name'
|
|
|
|
|
|
|
|
#userbar
|
|
|
|
- if user_signed_in?
|
|
|
|
%span
|
|
|
|
= t '.userbar.greeting', :user_name => current_user.name
|
|
|
|
= userbar_contributions_summary(current_user)
|
|
|
|
= link_to t('.userbar.items'), user_closet_hangers_path(current_user), :id => 'userbar-items-link'
|
|
|
|
= link_to t('.userbar.outfits'), current_user_outfits_path
|
|
|
|
= link_to t('.userbar.settings'), edit_auth_user_path
|
|
|
|
= button_to t('.userbar.logout'), destroy_auth_user_session_path, method: :delete,
|
|
|
|
params: {return_to: request.fullpath}
|
|
|
|
- else
|
|
|
|
= link_to auth_user_sign_in_path_with_return_to,
|
|
|
|
id: 'userbar-log-in', "data-turbo-prefetch": false do
|
|
|
|
%span= t('.userbar.login')
|
|
|
|
|
2011-07-09 08:45:30 -07:00
|
|
|
= yield :before_title
|
2024-03-10 18:47:33 -07:00
|
|
|
= render 'announcement'
|
2011-05-13 05:20:29 -07:00
|
|
|
- if content_for?(:title) && show_title_header?
|
2010-11-06 08:52:58 -07:00
|
|
|
%h1#title= yield :title
|
2010-11-05 15:45:05 -07:00
|
|
|
= yield :before_flashes
|
|
|
|
= flashes
|
|
|
|
|
|
|
|
- if content_for? :content
|
|
|
|
= yield(:content)
|
|
|
|
- else
|
|
|
|
= yield
|
2011-03-23 15:23:01 -07:00
|
|
|
|
2010-11-05 15:45:05 -07:00
|
|
|
#footer
|
2013-01-11 09:46:14 -08:00
|
|
|
= form_tag choose_locale_path, :id => 'locale-form' do
|
|
|
|
= hidden_field_tag 'return_to', request.fullpath
|
|
|
|
= select_tag 'locale', options_for_select(locale_options, locale)
|
2014-04-02 20:15:15 -07:00
|
|
|
%noscript= submit_tag 'Go'
|
2013-01-11 09:46:14 -08:00
|
|
|
|
2010-11-05 15:45:05 -07:00
|
|
|
%ul
|
2024-02-29 11:24:21 -08:00
|
|
|
%li= link_to t('.footer.source_code'), 'https://code.openneo.net/OpenNeo/impress'
|
2024-02-29 11:22:12 -08:00
|
|
|
%li.terms{"data-updated-recently": terms_updated_recently }
|
|
|
|
= link_to t('.footer.terms', date: terms_updated_timestamp),
|
|
|
|
terms_path
|
2024-09-20 18:43:38 -07:00
|
|
|
%li= link_to t('.footer.blog'), "https://blog.openneo.net/"
|
2013-01-11 09:46:14 -08:00
|
|
|
|
2010-11-05 15:45:05 -07:00
|
|
|
%div
|
2012-12-29 22:46:36 -08:00
|
|
|
#{t('.footer.contact')}:
|
2010-11-05 15:45:05 -07:00
|
|
|
%ul
|
2012-12-29 22:46:36 -08:00
|
|
|
%li= mail_to contact_email, t('.footer.email')
|
2013-01-11 09:46:14 -08:00
|
|
|
|
2012-12-29 22:46:36 -08:00
|
|
|
%p= t '.footer.copyright', :year => Date.today.year
|
2011-03-23 15:23:01 -07:00
|
|
|
|
2024-03-13 21:26:22 -07:00
|
|
|
-# For scripts that expect to get to just execute once every time the page
|
|
|
|
-# loads. For future JS, it would be advisable to write it such that it's
|
|
|
|
-# okay for Turbo to run it once at the start of the page, then listen to
|
|
|
|
-# `turbo:load` events or use inline scripts to actually _do_ things.
|
|
|
|
= yield :javascripts_body
|