Commit Graph

634 Commits

Author SHA1 Message Date
Tom Byers
04ca620f46 Merge pull request #2726 from alphagov/fix-incorrect-use-of-inarray
$.inArray returns the same value as Array.indexOf
2019-02-04 15:23:40 +00:00
Chris Hill-Scott
ca6529dcdb Update app/assets/javascripts/templateFolderForm.js
Use native `Array.indexOf` instead.

Co-Authored-By: tombye <tombaromba@gmail.com>
2019-02-04 15:17:27 +00:00
Tom Byers
0e55521d8f $.inArray returns the same value as Array.indexOf 2019-02-04 14:56:18 +00:00
Pea Tyczynska
e85678fa69 Add link to edit postage to view_template page 2019-02-04 14:45:33 +00:00
Tom Byers
7ef32a6bd9 Replace native Array.includes with jQuery version
This was failing with a 'Object doesn't have
method' error on IE11. Assume Babel wasn't
polyfilling Array.includes so reverting to jQuery
version for now.
2019-02-04 11:23:41 +00:00
Chris Hill-Scott
6b02775927 Merge pull request #2718 from alphagov/sticky-footer-new-buttons
Add sticky footer on letter contact details, fix issues
2019-02-01 16:11:28 +00:00
Chris Hill-Scott
5597e63d44 Recalculate stickyness after API keys have rendered 2019-02-01 15:45:38 +00:00
Chris Hill-Scott
7632e6b9d3 Merge pull request #2717 from alphagov/sticky-footer-new-buttons
Make ‘Add new’ buttons sticky on more pages
2019-02-01 15:27:09 +00:00
Chris Hill-Scott
afdc749e36 Make ‘Add new’ buttons sticky on more pages
For consistency with the template management page.
2019-02-01 14:25:35 +00:00
Chris Hill-Scott
93df30d2df Normalise spacing of template breadcrumb heading
Removes the magic numbers, makes it visually look like it’s in the same
position as the 36px type size headings.
2019-02-01 12:22:36 +00:00
Chris Hill-Scott
e0d1f8e8ff Wrap, don’t truncate display of folder name in H1
This commit applies a carefully selected blend of `white-space`,
`display` and `background-position` to ensure that:
- you can always see the full name of the current folder in the heading
  (which is useful because people might have mutiple folders with the
  same name, differentiated by some king of suffix)
- the clickable are of a single folder or template in the list is 100%
  width, for the biggest possible hit area
- the name of a folder or template wraps underneath the folder icon (ie
  the folder icon is treated like a normal character, not like a bullet
  point)
2019-02-01 10:40:30 +00:00
Chris Hill-Scott
bba22b056f Remove unused assets 2019-02-01 10:28:29 +00:00
Chris Hill-Scott
88ad982bf7 Improve display of folder path when deeply nested
It’s a bit rudimentary to only show the current place in the hierarchy
and the parent. You lose a sense of how deep you are.

But we can’t just show the full path, because it can be arbitrarily
long. So what this commit does is show the full path, but truncates the
display of any items. Further-up than the current folder or its parent.

This also helps disambiguate between folders and templates, because
folders are always shown with the folder icon.

This probably won’t affect many teams, because we don’t anticipate a lot
of deep nesting.
2019-02-01 10:28:29 +00:00
Tom Byers
fd3ca31e44 Add adjustment for padding missed from previous
The work done to stack sticky elements closer
together only effected the stack when stuck to the
top/bottom edge:

707c426b9a

It should have included the same for when a stack
of sticky elements is stopped at the end of it's
scroll area. This adds code to deal with that.
2019-01-31 15:56:16 +00:00
Tom Byers
c89ad9635b Fix switch between modes and scrolling on adjust
The templateFolderForm JS was setting the mode to
'dialog' but not back when the state was changed
back to a normal sticky element. This caused
adjustments and scrolling when no adjustment
needed to be accommodated.

There were also problems with adjustForResize. It
was manipulating the same flag that resizing the
window did and returned a value never used.
2019-01-30 19:12:14 +00:00
Tom Byers
707c426b9a Remove padding between stickys when stacked 2019-01-30 14:59:30 +00:00
Tom Byers
f4d9c37940 Move setting of sticky mode out of recalculate
The `recalculate` method currently does three
things:
1. sync's the internal store with the DOM
2. updates the saved positional and dimensional
data from the new DOM
3. allows the mode to be set

The problem with using it as the way to set the
mode is that, every call to it is effectively
setting the mode but this isn't always the
intention.

This splits off setting the mode so other modules
have to explicity set it and those that don't
intend to can just call `recalculate` to notify of
DOM changes.
2019-01-30 11:45:24 +00:00
Tom Byers
177f30248e Fix bug with DOM sync'ing
If a sticky element was already in the store, the
code for adding it would return early. This meant
dimensions and positions for it were not being
recalculated.
2019-01-30 11:35:31 +00:00
Chris Hill-Scott
7f202b026f Fix jumpy right position of selected items counter
The negative right margin counteracts the sticky footer being wider than
its containing column. This is only the case when it’s actually sticky.
2019-01-29 09:30:06 +00:00
Leo Hemsted
d5e95af446 make classes in folder dialog states consistent
make sure the class is applied to a child element, so that `$el.find`
will always find something for `js-will-stick-at-bottom-when-scrolling`.

Also, clean up code by treating all stickies on the template folder
form as dialogs - they all are after all all dialogs - modals that
expect your attention on top of the main page content.
2019-01-25 16:47:49 +00:00
Tom Byers
05c455250c Fix calculation of in-page position
When the screen resizes, the dimensions of our
elements may change so we run
`setElementDimensions` again to update our store
of those values.

This caused a bug with the stored position of
stuck elements. When stuck, elements are
'fixed' so their position is relative to the
window position. We need the value stored to be
from the position in the document flow, not the
'fixed' value.

This change means, when an element is stuck, we
check its shim for the position instead. The shim
occupies the space the element would do in the
page so it makes sense to use it for this.
2019-01-23 16:55:18 +00:00
Tom Byers
59b02e0fe0 Change when folder controls become sticky
The controls for the template folders are all
present in the page when it loads. The
templateFolderForm JS filters them so you only see
the one you need to for the thing you're trying to
do.

This changes when the controls are made sticky so
it happens after the templateFolderForm JS has
performed its filtering.
2019-01-23 16:55:18 +00:00
Tom Byers
98789c98c8 Reset onload flag when recalculate called
This ensures sticky elements don't fade in if
in a sticky position when the page loads.

The fade is there to show when an element is
becoming sticky. This has no use if it was already
sticky the first time you see it.

Because the same situation applies when
recalculate is called, we also want the flag to be
reset before this happens.
2019-01-23 16:55:18 +00:00
Tom Byers
a9b7a0d887 Add box shadow by JS
When mode === 'dialog', sticky elements are
stacked so we need to apply the box shadow to the
top (when sticking to the bottom edge) and bottom
(when sticking to the top edge) elements in the
stack.

From what I can see, we need the version of
`nth-child` that supports targeting by selector.
As of this date, support for this is only in
Safari:

https://caniuse.com/#feat=css-nth-child-of

Until we can use this version of `nth-child`, we
need to use JS to apply the styles.
2019-01-23 16:55:18 +00:00
Tom Byers
4e845c3125 Move setting of events into separate method 2019-01-23 16:55:18 +00:00
Tom Byers
1e8e8908ee Move sync'ing this._els with DOM into own method
We'll need to run this whenever recalculate runs
to ensure `this._els` matches the present state of
the DOM.
2019-01-23 16:55:18 +00:00
Tom Byers
a6a7057d64 Deal with elements no longer in the DOM
Instead of keeping references to nodes detached
from the DOM, remove them from the store.
Likewise, add node appended to the DOM.

This includes code to 'clean' DOM nodes when
removed. This is important because nodes can
retain classes and styles. If they are re-attached
in future this can cause problems with how the
state of the element is determined.
2019-01-23 16:55:18 +00:00
Tom Byers
03e38dfdef Add mode for grouping sticky elements as a dialog
We want a mode for when a single task is shared
between all sticky elements on the page and that
task has the highest priority on the page. In that
case:
- they should stack together into a single block,
  attached to the top/bottom of the viewport
- that block should adjust to the vertical space
  available

This should also adjust to the height of the
viewport, dropping whatever elements that don't
fit back into the page flow. When this happens, we
scroll the page so all the parts of the dialog are
seen together at the start of the task.
2019-01-23 16:55:12 +00:00
Tom Byers
ea675f45da Make the sticky states more robust
If the screen resizes, sticky elements can end up
moving from one part of the screen to another,
sometimes without passing through their different
states (in-page, stuck, stopped) in the normal
order.

This makes the methods that change their states
better at dealing with those state changes.
2019-01-23 16:33:32 +00:00
Tom Byers
c0706b9cef Split move_to forms into separate sticky elements 2019-01-23 15:30:28 +00:00
Tom Byers
7b3ac55103 Add method for adding a sticky element 2019-01-23 15:30:28 +00:00
Chris Hill-Scott
509a9e861d Use sticky footer on edit template page
If you have a long template it’s annoying to have to scroll all the
way to the bottom to click save, when you’ve only changed a small thing
near the staert of the content.
2019-01-14 15:05:04 +00:00
Chris Hill-Scott
30886c3cdb Merge pull request #2626 from alphagov/empty-service-state-folders
Use grey buttons to add templates when service is new
2019-01-09 10:26:43 +00:00
Chris Hill-Scott
f5321346c4 Add left padding to nested radios
This makes them align horizontally with the label of their parent, so
that the layout is a bit calmer.
2019-01-04 15:30:39 +00:00
Chris Hill-Scott
3be03072a7 Reflect expanded scope of radio SASS file 2019-01-04 15:15:59 +00:00
Chris Hill-Scott
4aa4970fc9 Add grey lines to visually show level of nesting
Uses some CSS to draw some grey lines to show which radios descend from
which.

I don’t feel like the intentation is enough, and it looks a bit messy
because the circles of the radio buttons don’t have straight edges
easily suggest visual alignment.

Copies the design from conditionally revealing content in the design
system:
https://design-system.service.gov.uk/components/radios/#conditionally-revealing-content

Implementation is done with pseudo elements, because borders can’t be
positionned exactly enough.
2019-01-04 15:15:59 +00:00
Tom Byers
33800c5f27 Add styles for nested lists of radios
Assumes lists that are descendants of a radio
control should be indented at the same amount as
their label text.
2019-01-04 11:59:25 +00:00
Chris Hill-Scott
a9baa36005 Hide ‘nothing selected’ if nothing to select
It’s doesn’t make sense to show the state if the state can’t change.
This is especially true when you’re in a brand new, empty service.
2019-01-03 11:16:56 +00:00
Chris Hill-Scott
6487273ced Fix sticky with find as you type
It was losing its position because filtering the list of templates with
find as you type was causing the height of the page to change.
2018-12-21 14:37:01 +00:00
Chris Hill-Scott
bf75fec5ae Remove unused CSS
This is from when we used to show the email logos inside the label of
the radio buttons.

Changing the CSS will also change its hash, will will cache-bust
CloudFront. Which is why I’m doing this now.
2018-12-21 12:42:08 +00:00
Leo Hemsted
1bcee4c1b0 render if currentState is defined
(this fixes bug where on error, it would show all states)
2018-12-19 15:25:43 +00:00
Tom Byers
f6a6de41aa Merge pull request #2590 from alphagov/fix-sticky-init
Fix issues with JS for sticky elements
2018-12-17 13:29:19 +00:00
Chris Hill-Scott
c30af92050 Merge pull request #2574 from alphagov/selected-template-counter
Add counter of selected templates and folders
2018-12-17 10:34:45 +00:00
Tom Byers
573d2d1d65 Fix code for sticky JS when window resizes
Includes:
- change .stopped method to .isStopped() for
  consistency
- replace code in checkResize that adjusts
  dimensions for setElementDimensions
- add code that deals with the window size being
  too small to run whenever positions are calculated
- add reset method for when screen is too small
  for sticking behaviour
- move guard out of methods for stopping and
  sticking (it hid info that was useful at the
  point they were called)
2018-12-14 16:33:00 +00:00
Tom Byers
b55acc4981 Add comments 2018-12-14 16:33:00 +00:00
Tom Byers
108cec7938 Remove fixedTop property from sticky elements
It's no longer used by this code.
2018-12-14 16:33:00 +00:00
Tom Byers
030701ab1b Make folder controls update sticky JS on change
Also removes a call the `render` method which
duplicates one already made by the
`selectActionButtons` method on load.
2018-12-14 16:33:00 +00:00
Tom Byers
9823ff831f Add publich recalculate method
Allows other JS to tell sticky elements to
recalculate their dimensions and then position
(and then check to see if their state needs
changing).

We need this because we change the content of our
element so its dimensions change.

The recalculation code also updates the shim for
elements that are 'stuck' so the horizontal space
the element would occupy in the flow of the page
is correct.
2018-12-14 16:30:07 +00:00
Tom Byers
6fb2d14cc3 Move shim handling to StickyElement
Includes other code that splits the height
StickyElement stores into two properties:
1. `verticalSpace`
2. `height`

`verticalSpace` is the vertical space the element
occupies in the document flow when not stuck.

`height` is the visual space of the element,
including padding and border.
2018-12-14 16:16:40 +00:00
Pea (Malgorzata Tyczynska)
1e3be7d640 Merge pull request #2577 from alphagov/disable_ajax_if_inactive
Page stops auto-refreshing when it's not active
2018-12-12 12:32:52 +00:00