Michael Lange
ee079a1220
Test that the client is contacted correctly, and the server is used as a fallback
2019-08-07 17:35:43 -07:00
Michael Lange
ae8913910c
Always preload the alloc node so the client can be dialed first
2019-08-07 17:35:15 -07:00
Michael Lange
8cb6a20f8f
Include all client fs endpoints in the hosts block
2019-08-07 17:34:41 -07:00
Michael Lange
02c9ab1582
Add additional troublesome characters to the alloc-file name factory
2019-08-07 15:29:57 -07:00
Michael Lange
3dc7dec246
Make a dedicated fs-breadcrumbs component
2019-08-07 15:29:14 -07:00
Michael Lange
2ff4027496
Minor fixes from code review
2019-08-07 15:11:32 -07:00
Michael Lange
992fa8f741
Use a data-uri instead of an image for the image-file-test
2019-08-07 15:08:38 -07:00
Buck Doyle
2bfbc2b41b
Remove transition animation from sort arrows ( #6067 )
...
It may be an Ember bug: in some circumstances, the
ember-transitioning-in class was persisting in table
sort links even after the transition completed. This
changes the transition animations to be targeted only
for breadcrumbs and directory links.
2019-08-06 09:55:35 -05:00
Buck Doyle
88b708f188
Add page titles to filesystem routes ( #6024 )
2019-08-01 11:17:46 -05:00
Michael Lange
e84604fcdb
Update factory-based fs tests to sort properly
2019-07-31 01:41:00 -07:00
Michael Lange
7780713bfa
Remove errant server logging line
2019-07-31 01:40:39 -07:00
Michael Lange
951570e72a
fixup-integrate-file-component
2019-07-31 01:39:59 -07:00
Michael Lange
6f519c9037
Add file mocks to every mirage scenario
2019-07-30 17:25:50 -07:00
Michael Lange
fb0428fef3
Test coverage for task-file component
2019-07-30 17:25:49 -07:00
Michael Lange
fcbd92704a
Test coverage for streaming file component
2019-07-30 17:25:48 -07:00
Michael Lange
ed9982aa98
Integration tests for the image-file component
2019-07-30 17:25:47 -07:00
Michael Lange
e347d76c24
Refactor existing fs tests to use new mirage factories
2019-07-30 17:25:46 -07:00
Michael Lange
cae543bdbb
Add unsupported file type state
2019-07-30 17:25:45 -07:00
Michael Lange
ddd35edb19
Add hollow variation to empty-message
2019-07-30 17:25:44 -07:00
Michael Lange
6325c78b1e
cat, stream, and readat mocks for alloc fs
2019-07-30 17:25:44 -07:00
Michael Lange
e6d1314254
Use the alloc file factory for the fs stat and fs ls end points
2019-07-30 17:25:43 -07:00
Michael Lange
c8977c18ba
Mirage factory for file system fixtures
2019-07-30 17:25:42 -07:00
Michael Lange
290d967222
Fix a bug where tail calls for files weren't getting the correct params
2019-07-30 17:25:41 -07:00
Michael Lange
c110a4ab62
Integrate the task-file component with the fs explorer pages
2019-07-30 17:25:40 -07:00
Michael Lange
2a3806b4c1
Always escape < and > to avoid inadvertently rendering html
2019-07-30 17:22:54 -07:00
Michael Lange
2f2dca9212
Custom Log instance to deal with API quirks
2019-07-30 17:22:53 -07:00
Michael Lange
bd8770d175
Add a plainText mode
2019-07-30 17:22:53 -07:00
Michael Lange
f2d31fdf1a
Refactored and image support of the task-file component
2019-07-30 17:22:52 -07:00
Michael Lange
29dacd0c2a
Markup for the image-file component
2019-07-30 17:22:51 -07:00
Michael Lange
153218183b
Address WindowResizable refactor
2019-07-30 17:22:50 -07:00
Michael Lange
3ba05a7eb7
Styles for the image-file component
2019-07-30 17:22:49 -07:00
Michael Lange
30d61fc9fc
image-file component for showing an image and image metadata
2019-07-30 17:22:49 -07:00
Michael Lange
5bd9296194
Extract a streaming-file component from the task-log component
...
The new streaming-file component takes an arbitrary logger component
along with some mode flags and handles things like polling, DOM updates,
and scroll position.
2019-07-30 17:22:48 -07:00
Michael Lange
c5ff121981
New task-file component
...
Based on the task-log component. Commonalities will be refactored.
2019-07-30 17:22:47 -07:00
Michael Lange
4c064a8f72
Tweak log window math
2019-07-30 17:22:46 -07:00
Michael Lange
c3b33b8420
Use the stream decode util and never opt to use the plain query param
2019-07-30 17:22:45 -07:00
Michael Lange
862d6f6da6
Move common stream frame decoding to a util
2019-07-30 17:22:44 -07:00
Buck Doyle
34603b8bdf
UI: Add IPv6 bracket-wrapping to network serializer ( #6007 )
...
This addresses the issue raised by @pznamensky in #5966 .
2019-07-30 16:58:01 -05:00
Buck Doyle
9f3754b46b
Merge branch 'master' into f-ui/alloc-fs
...
# Conflicts:
# ui/app/templates/allocations/allocation/task/index.hbs
# ui/app/templates/allocations/allocation/task/logs.hbs
2019-07-26 14:49:36 -05:00
Buck Doyle
5efedb35d1
UI: Add allocation directory sorting ( #5914 )
...
When sorting by size, directories are sorted by name, as size
isn’t displayed.
This includes a change to the positioning of sort arrows for all tables,
moving them closer to the text, because in some cases, the arrows
for right-aligned columns were ambiguously positioned.
2019-07-23 15:37:34 -05:00
Buck Doyle
b2a4ee17de
UI: Remove unused route ( #5925 )
...
This is an extraneous addition from #4612 .
2019-07-23 14:48:39 -05:00
Buck Doyle
354b4c830f
UI: Remove ember-native-dom-helpers ( #5959 )
...
This also includes migration of some tests to async.
2019-07-23 14:40:32 -05:00
Buck Doyle
90c9b89b5e
UI: Add page titles ( #5924 )
...
This uses ember-page-title to add dynamic page titles throughout the
route hierarchy. When there’s more than one region, the current
current region is added before the final entry of “- Nomad”.
2019-07-17 15:02:58 -05:00
Buck Doyle
9322dfc46f
UI: Add copy button for client/allocation UUIDs ( #5926 )
...
The button shows a success icon and tooltip on click, and resets
after two seconds.
2019-07-15 12:14:32 -05:00
Buck Doyle
4edd1d78c1
Remove superfluous test attributes ( #5927 )
...
I found while working on #5926 that x-icon already adds
assertion-compatible selectors, so these wrappers are
unnecessary.
2019-07-08 10:36:56 -05:00
Michael Lange
1eb689aca9
Merge remote-tracking branch 'origin/master' into f-ui/alloc-fs
...
* origin/master: (32 commits)
Added additional test cases and fixed go test case
update changelog
Add Mirage-toggling via environment variable (#5899 )
changelog: Add entries for windows fixes
fifo: Safer access to Conn
run post-run/post-stop task runner hooks
Fail alloc if alloc runner prestart hooks fail
address review comments
changelog
Missed one revert of backwards compatibility for node drain
Improve test cases for detecting content type
Undo removal of node drain compat changes
Updated with suggestions.
fifo: Close connections and cleanup lock handling
logmon: Add windows compatibility test
client: defensive against getting stale alloc updates
Infer content type in alloc fs stat endpoint
appveyor: Run logmon tests
fifo: Require that fifos do not exist for create
vendor: Use dani fork of go-winio
...
2019-07-02 16:40:09 -07:00
Buck Doyle
595eb480ba
UI: Add allocation directory rendering ( #5873 )
...
This lets users navigate the allocation filesystem. It doesn’t
support viewing actual files yet.
2019-07-02 16:42:38 -05:00
Buck Doyle
100433b08a
Add Mirage-toggling via environment variable ( #5899 )
...
I’m finding myself having to revert my change to this
variable when I switch branches, so this would let me
affect the variable without code changes.
2019-07-02 08:58:43 -05:00
Michael Lange
aedeeadebd
Account for the search icon within the is-compact modifer
2019-06-27 12:32:26 -07:00
Buck Doyle
0907edf099
Merge branch 'master' into f-ui/alloc-fs
2019-06-27 12:25:07 -05:00
Buck Doyle
4aae981699
Add ember-qunit-nice-errors ( #5869 )
...
This shows the entire assertion that’s failing. This is
especially useful in combination with page objects.
For an assertion like this:
assert.equal(PageLayout.flashMessages.length, 1)
The failure displayed normally is just “failed” with the
expected of 1 and the result of undefined. With this addon,
the expected and result remain the same, but “failed” is
replaced with the text of the assertion.
The typical way to address this is to supply the optional
final argument to the assertion function that customises the
failure message. That still works with this addon, but most
of the time it becomes unnecessary.
2019-06-21 14:12:28 -05:00
Michael Lange
a29ed35811
Test support and coverage for fs routing
2019-06-20 15:20:15 -07:00
Michael Lange
e440edfea4
Some placeholder templates and routes for new feature
2019-06-20 15:20:01 -07:00
Michael Lange
7935527020
Add new menu item to the task subnav
2019-06-20 12:02:25 -07:00
Michael Lange
3e40fcf147
Add new routes to the router
2019-06-20 12:02:06 -07:00
Michael Lange
af6daf34d2
Give the allTheThings scenario a better name
2019-06-19 17:18:43 -07:00
Michael Lange
6201003f3f
New Mirage scenario for puppeteer script to use
2019-06-19 17:18:40 -07:00
Buck Doyle
a2b80bebe6
Update client list to combine statuses ( #5789 )
...
The draining, eligibility, and status fields now all show under a combined
state column. Draining takes precedence, then (in)eligibility; if neither of
those is true, the status displays.
2019-06-19 10:11:17 -07:00
Buck Doyle
2d96e37390
Change sort arrow to pass through pointer events ( #5833 )
...
Without this, clicking on the sort arrow didn’t change the
sort direction.
2019-06-13 16:14:35 -05:00
Michael Lange
b0d6517297
Include the _ prefix separator in both regexes
...
And include all prefix types in the test data
2019-05-21 14:20:40 -07:00
Michael Lange
b330321e44
Use the TwoStepButton page object for integration testing too
2019-05-21 09:24:19 -07:00
Michael Lange
c485bc64fb
Acceptance testing for allocation lifecycle
2019-05-21 09:24:19 -07:00
Michael Lange
d485c040e3
Restart a single task from the task detail page
2019-05-21 09:24:18 -07:00
Michael Lange
416e9895d6
Don't cancel watchers when transitioning to a sub-route
2019-05-21 09:24:18 -07:00
Michael Lange
e40a01456b
Watch the next allocation on the allocation index page
2019-05-21 09:24:17 -07:00
Michael Lange
8d31474fdc
Support task restarting in the allocation adapter
2019-05-21 09:24:17 -07:00
Michael Lange
ffadcf5a25
Add stop and restart buttons to the allocation index page
2019-05-21 09:24:16 -07:00
Michael Lange
a00bc8befc
Allocation methods for stopping and restarting
2019-05-21 09:24:16 -07:00
Michael Lange
d3e919a2c8
New with-headroom modifier for titles
2019-05-21 09:24:15 -07:00
Michael Lange
7933a41782
Add cancel on click outside and disabled behaviors to two-step-button
2019-05-21 09:24:14 -07:00
Michael Lange
96a1a5e812
Move addToPath to its own util
2019-05-20 11:52:47 -07:00
Michael Lange
084c4cc95f
Standardize on Abort over Cancel
2019-05-20 11:08:16 -07:00
Michael Lange
c9220cb929
Replace the adapter cancellation methods with a cancellation token system
2019-05-20 10:29:22 -07:00
Buck Doyle
e40197a7a5
Merge pull request #5715 from hashicorp/b-precommit-linting
...
Restore precommit linting
2019-05-15 16:44:19 -05:00
Buck Doyle
16ba41101b
Restore precommit linting
...
The two pairs of quotes were causing no files to match.
2019-05-15 14:48:16 -05:00
Buck Doyle
da65595db0
Change clients/jobs facets to always right-align
...
This changes the templates so the element that contains
the search box is always present, instead hiding only
the box itself when there’s nothing to search. Keeping
the empty element lets it take up its flexbox space so
the facets will no longer be in the centre.
2019-05-15 13:25:30 -05:00
Michael Lange
14dca3830a
Fixed flaky client-detail test
...
Since one allocation is preempted, the alloc factory creates a new alloc
that wasn't guaranteed to be running. When it is the first alloc row in
the table, then the alloc row detail test fails because non-running
allocs don't have metrics. The fix was to manually update all the alloc
clientStatuses.
2019-05-09 10:26:55 -07:00
Conor Mongey
49afa42af3
Return a htmlSafe string rather than use triple curlies
2019-05-02 21:47:24 +01:00
Conor Mongey
9ab4ef52c0
Converts ANSI terminal codes to HTML in logs
2019-05-02 21:47:23 +01:00
Michael Lange
f530c2f5c1
Updated serializer unit tests
2019-04-22 17:20:52 -07:00
Michael Lange
35e34fea8b
Test coverage for preemption on the client detail page
2019-04-22 16:40:10 -07:00
Michael Lange
b7860a9bca
Test coverage for preemption on the allocation detail page
2019-04-22 16:40:09 -07:00
Michael Lange
29ccd8bcc5
Preemption modeling as page objects
2019-04-22 16:40:08 -07:00
Michael Lange
5124dfe30f
Integration test for the alloc row icon
2019-04-22 16:40:07 -07:00
Michael Lange
000bfce30f
Add preemption properties to Mirage allocation factory
2019-04-22 16:40:07 -07:00
Michael Lange
4c7e350e84
Show which allocations an allocation preempted on the alloc page
2019-04-22 16:40:06 -07:00
Michael Lange
42a4793d9d
Show which alloc, if any, preempted an alloc on the alloc detail page
2019-04-22 16:40:05 -07:00
Michael Lange
a5a659a98a
Preemptions count and filtering on client detail page
...
Show the count in the allocations table next to the existing total alloc
count badge. Clicking either will filter by all or by preemptions.
2019-04-22 16:40:04 -07:00
Michael Lange
1266567098
Add preempted icon to alloc row
2019-04-22 16:40:04 -07:00
Michael Lange
e35139e453
Make sure tooltips show up over the top of the side bar
2019-04-22 16:40:03 -07:00
Michael Lange
d12d5f9163
Add wasPreempted bool to allocs
2019-04-22 16:40:02 -07:00
Michael Lange
dcc219fe73
Show preemptions on the job plan phase of job submission
2019-04-22 16:40:01 -07:00
Michael Lange
cb11f46ecf
Data modeling for preemptions
2019-04-22 16:40:00 -07:00
Michael Lange
9358713560
Speed up slow acceptance tests with shallow jobs and generally less models
2019-04-11 20:08:43 -07:00
Michael Lange
6988dc1b5c
Introduce the concept of 'shallow' job models in Mirage
2019-04-11 20:08:09 -07:00
Michael Lange
243adeb165
Reduce the number of task groups and task events that are made
2019-04-11 18:15:35 -07:00
Michael Lange
1816f02dd6
Upgrade to Node 10, latest LTS
2019-04-10 14:54:38 -07:00
Michael Lange
d29a66a0db
Don't remove viewBox from svgs as part of svgo
2019-04-10 14:54:38 -07:00
Michael Lange
12d7bab720
Upgrade ember-concurrency
2019-04-10 14:54:38 -07:00
Michael Lange
b27c088918
Major upgrade, ember-cli-sass; swiches to sass-dart
2019-04-10 14:54:38 -07:00
Michael Lange
2a11d2904f
Upgrade third party packages
2019-04-10 14:54:37 -07:00
Michael Lange
353a491527
Upgrade eslint to v5
2019-04-10 14:54:37 -07:00
Michael Lange
733fbb83b0
Upgrade ember addons
2019-04-10 14:54:37 -07:00
Michael Lange
c723f3f02b
Manually upgrade fringe dependencies
2019-04-10 14:54:37 -07:00
Michael Lange
fa90590462
Update everything to work with the mirage backwards incompat
2019-04-10 14:54:37 -07:00
Michael Lange
499435d7c7
Auto-upgrade packages
2019-04-10 14:54:36 -07:00
Michael Lange
4b87e216ab
Rethink the adapter job unit tests to avoid notifyPropertyChange
2019-04-10 14:54:36 -07:00
Michael Lange
4736803a24
ES5 getters codemod
2019-04-10 14:54:36 -07:00
Michael Lange
660906597f
Kind of address the sendAction deprecation
2019-04-10 14:54:35 -07:00
Michael Lange
346a55a093
Address the Ember.Logger deprecations
2019-04-10 14:54:35 -07:00
Michael Lange
b6b2fd2114
Address the copy/copyable deprecation
2019-04-10 14:54:35 -07:00
Michael Lange
96ef93ca5f
Commit the deprecation workflow to prevent fixed deprecations from creeping back in
2019-04-10 14:54:35 -07:00
Michael Lange
4636a9b612
Address inflector deprecations
2019-04-10 14:54:35 -07:00
Michael Lange
55ea01c1cc
Address test failures
2019-04-10 14:54:35 -07:00
Michael Lange
aeeca356bd
Address template linting issues
2019-04-10 14:54:34 -07:00
Michael Lange
f775fa564e
Override default template lintrc (borrowed this one from vault)
2019-04-10 14:54:34 -07:00
Michael Lange
3c51579498
Upgrade miscellaneous packages
2019-04-10 14:54:34 -07:00
Michael Lange
8d2ea9b03a
Update ember-data-model-fragments
2019-04-10 14:54:34 -07:00
Michael Lange
4dcc8aba3d
Upgrade to Ember 3.4
2019-04-10 14:54:34 -07:00
Michael Lange
064f126e14
Remove all andThen and .then usages (except for integration tests)
...
Since a future ember version does way with the need to manually
making runloop runs, I'm holding off on those tests
2019-04-10 14:54:34 -07:00
Michael Lange
fdcc99674d
Fix bug in the stats-tracker-frame-mising behavior
2019-04-10 14:54:33 -07:00
Michael Lange
c367fb186a
Fix integration tests that had test failures
2019-04-10 14:54:33 -07:00
Michael Lange
5008ab4b8d
Fix page object issues with acceptance tests that couldn't be codemodded
2019-04-10 14:54:33 -07:00
Michael Lange
ea3243569a
Adapt the codemirror helper for the hooks model
2019-04-10 14:54:33 -07:00
Michael Lange
a793235f6a
Fix scoping issue with the jobs list page object
2019-04-10 14:54:33 -07:00
Michael Lange
f68f13acbe
Update the test index.html file
2019-04-10 14:54:32 -07:00
Michael Lange
e17a12aba8
Upgrade ember-power-select
2019-04-10 14:54:32 -07:00
Michael Lange
e6b808f17a
Update serializer unit tests to use module instead of custom code
2019-04-10 14:54:32 -07:00
Michael Lange
3145f7ac32
Update adapter tests to use module instead of custom code
2019-04-10 14:54:32 -07:00
Michael Lange
8cf3e369f0
Update test-helper to new testing style
2019-04-10 14:54:32 -07:00
Michael Lange
3b2cdb426d
Update environment to 3.0 conventions
2019-04-10 14:54:32 -07:00
Michael Lange
3c31bbf393
Critical peer dependency upgrades
2019-04-10 14:54:31 -07:00
Michael Lange
e69d16b78d
Use mirage test hooks
2019-04-10 14:54:31 -07:00
Michael Lange
c1369c001d
Fix a bunch of snowflake situations the codemod missed
2019-04-10 14:54:31 -07:00
Michael Lange
517ef97343
Ember test-helpers codemod
2019-04-10 14:54:31 -07:00
Michael Lange
a356ab5477
Ember QUnit Codemod
2019-04-10 14:54:30 -07:00
Michael Lange
5befd8b85d
Modules codemod + prettier
2019-04-10 14:46:55 -07:00
Michael Lange
55924ec616
Fix eslint error and add lint script to package.json
2019-04-10 14:46:55 -07:00
Michael Lange
6dc560519d
Upgrade to Ember 3.0
2019-04-10 14:46:54 -07:00
Michael Lange
a9fd8517d1
Fix deprecations
2019-04-10 14:46:53 -07:00
Michael Lange
9a10780d47
Replaces .columns with .toolbar on the clients page
2019-04-10 10:34:10 -05:00
Michael Lange
09907078bd
Replace the columns pattern with the new toolbar pattern on the jobs page
2019-04-10 10:34:10 -05:00
Michael Lange
6e3a27f9e7
New toolbar CSS component
2019-04-10 10:34:10 -05:00
Michael Lange
e400698905
Make the search box more elastic
...
1. Set a higher max-width
2. Set a min-width
3. Remove the min-width on mobile, including the invisible size="20" in
the markup
2019-04-10 10:34:10 -05:00
Michael Lange
6a0f5b5a4d
Fixes a few minor issues with the multiselect dropdown
...
1. Label no longer bleeds into the downward arrow icon
2. The selection number no longer breaks onto its own line
3. Options have a min-width so short labels can't result in small click
targets
2019-04-10 10:34:10 -05:00
Michael Lange
e73add100c
Change breakpoints to match Nomad/Bulma widths
2019-04-10 10:34:10 -05:00
Michael Lange
602df55ae0
Add the ember-responsive addon
2019-04-10 10:34:10 -05:00
Michael Lange
afecab1071
Improve the search box component to make it fluid and iconed
2019-04-10 10:34:10 -05:00
Michael Lange
e52b6be10f
Test coverage for clients faceted search
2019-04-10 10:34:10 -05:00
Michael Lange
243982562a
Implement faceted search on the clients page
2019-04-10 10:34:10 -05:00
Michael Lange
4464c473e5
Add nodeClass to the node model
2019-04-10 10:34:10 -05:00
Michael Lange
ddc577ccca
Refactor qp helpers from the jobs faceted search
2019-04-10 10:34:10 -05:00
Michael Lange
ff98a744c1
Changes from code review
2019-04-10 10:34:10 -05:00
Michael Lange
06e718387c
Make the facet filter function clearer with more brackets
2019-04-10 10:34:10 -05:00
Michael Lange
80abb8d8a0
Simplify options and selection names
2019-04-10 10:34:10 -05:00
Michael Lange
5e05408ae3
Test coverage for job list facets
2019-04-10 10:34:10 -05:00
Michael Lange
3f6bbfa8ff
Model facets in the page object
2019-04-10 10:34:10 -05:00
Michael Lange
5ae2f38c4e
Introduce encode/decode for array query params
2019-04-10 10:34:10 -05:00
Michael Lange
40b1857632
Support for the no options case
2019-04-10 10:34:10 -05:00
Michael Lange
09ae9fbfa3
Implement the job list filtering based on facet selection
2019-04-10 10:34:10 -05:00
Michael Lange
8015605041
Implement the dynamic facet lists (datacenters and prefixes)
2019-04-10 10:34:10 -05:00
Michael Lange
46c6a3e4c2
Scaffold the facets and facet options for the jobs list page
2019-04-10 10:34:10 -05:00
Michael Lange
b93977f61f
Remove the includes helper in favor of the contains helper
2019-04-10 10:34:10 -05:00
Michael Lange
7a183b40ac
Harden dropdown styles to avoid accidental cascading
2019-04-10 10:34:10 -05:00
Michael Lange
22225b3436
Add the right-alignment case to freestyle
2019-04-10 10:34:10 -05:00
Michael Lange
573f03d8e9
Always left-align the dropdown position to the trigger
2019-04-10 10:34:10 -05:00
Michael Lange
fd34f7aa2c
Test coverage for the multi-select-dropdown component
2019-04-10 10:34:10 -05:00
Michael Lange
8a07ef2cc6
Tab and keyboard navigation for multi-select
2019-04-10 10:34:10 -05:00
Michael Lange
a2bcc59963
Round out the freestyle entry
2019-04-10 10:34:10 -05:00
Michael Lange
fa10e72e2b
Multi-select button-bar support
2019-04-10 10:34:10 -05:00
Michael Lange
cf5f77fe4c
Color alias for tags
2019-04-10 10:34:10 -05:00
Michael Lange
6160d8af84
Persistence and onSelect handler for the multi-select-dropdown
2019-04-10 10:34:10 -05:00
Michael Lange
17ab2c22cc
Templating and styling the multi-select-dropdown component
2019-04-10 10:34:10 -05:00
Michael Lange
8166e43e8c
Simple includes helper that works like Array#includes
2019-04-10 10:34:10 -05:00
Michael Lange
22ce6cfe36
Freestyle entry for the new multi-select-dropdown component
2019-04-10 10:34:10 -05:00
Michael Lange
5bfd1d0ddd
Reattach resources to stats trackers in the event they were destroyed
2019-03-29 16:09:14 -07:00
Jacek Jagiello
364f7acbb5
5303 make logs view full width to better support large screens
2019-03-06 23:29:24 +01:00
Michael Schurter
d74755900e
Generate files for 0.9.0-beta3 release
2019-02-26 09:44:49 -08:00
Michael Lange
91d8baa64e
Update tests that check time and date formatting
2019-02-01 09:19:28 -08:00
Michael Lange
dfd3b097d1
Apply new date and timestamp helpers e'rywhere
2019-02-01 09:19:28 -08:00
Michael Lange
50bf9d392a
New helpers to standardize date and timestamp formats
2019-02-01 09:19:28 -08:00
Michael Lange
c3eb0b2493
Always show an absolute timestamp tooltip when showing relative dates
2019-01-30 09:59:41 -08:00
Michael Lange
fa4333056c
Merge pull request #4981 from hashicorp/b-ui-hide-stats-graphs-for-non-running-resources
...
UI: Hide stats graphs for non running resources
2018-12-18 11:15:39 -08:00
Michael Lange
d83be97d78
Don't use Ember.get in conjunction with dynamic strings in the job-plan serializer
2018-12-13 07:53:37 -08:00
Michael Lange
5902842d6b
Don't use Ember.get in conjunction with dynamic strings in the allocation serializer
2018-12-13 07:53:37 -08:00
Michael Lange
7b466f9f60
Don't use Ember.get in conjunction with dynamic strings in the node serializer
2018-12-13 07:53:37 -08:00
Michael Lange
13b7434eca
Don't use Ember.get in conjunction with dynamic strings in the deployment serializer
2018-12-13 07:53:37 -08:00
Michael Lange
a00544e302
Don't use Ember.get in conjunction with dynamic strings in the job-summary serializer
2018-12-13 07:53:37 -08:00
Michael Lange
b5c11b4e43
Don't use Ember.get in conjunction with dynamic strings in the evaluation serializer
2018-12-13 07:53:37 -08:00
Michael Lange
7d76b6a59f
Test coverage for resource graph empty states
2018-12-13 07:53:17 -08:00
Michael Lange
6f2e5d49f0
Test coverage for allocation rows
2018-12-13 07:53:17 -08:00
Michael Lange
76a9d7ad7c
Conditionally show the utilization graphs on the allocation and task detail pages
2018-12-13 07:53:17 -08:00
Michael Lange
71a06a6b7f
Conditionally show utilization metrics on alloc and task rows
2018-12-13 07:53:17 -08:00
Michael Lange
0005b1fca2
Task isRunning is based on both the task state and the allocation state
2018-12-13 07:53:17 -08:00
Michael Lange
076ae5046b
Model isRunning based on the client status of the allocation
2018-12-13 07:53:17 -08:00
Michael Lange
3b044816ac
Always create a running allocation when testing task state
2018-12-13 07:39:16 -08:00
Michael Lange
795ea7eade
Grow the default 0 to 1 bounds to the domain of the data when necessary
2018-12-05 22:07:44 -08:00
Michael Lange
fd35d37f43
Merge pull request #4860 from hashicorp/b-ui-allocation-detail-empty-state
...
UI: Allocation detail empty state
2018-11-19 12:43:39 -08:00
Michael Lange
796967c58d
Add an empty state to the allocation detail task list
2018-11-19 12:18:14 -08:00
Michael Lange
b252ede5b6
Merge pull request #4850 from hashicorp/f-ui-links-on-error-pages
...
UI: Escape hatch links on error pages
2018-11-19 12:17:36 -08:00
Michael Lange
aa0cbadb30
Improve mirage modeling of allocations
...
Pending allocations never have tasks
2018-11-09 17:11:47 -08:00
Michael Lange
4e21366714
Merge pull request #4852 from hashicorp/b-ui-dispatched-job-page
...
UI: Show the correct template for dispatched jobs
2018-11-09 14:36:35 -08:00
Michael Lange
ec21bab24d
Merge pull request #4833 from hashicorp/b-ui-gracefully-handle-stat-errors
...
UI: Gracefully handle stat errors
2018-11-09 14:35:48 -08:00
Michael Lange
7c9c099bf0
Add missing module dependencies to the node adapter tests
2018-11-09 14:25:32 -08:00
Michael Lange
cf93e1a40c
Get error messages closer to Structure designs
2018-11-09 13:23:44 -08:00
Michael Lange
8e18903996
Show the correct template for parameterized job children
2018-11-07 21:04:27 -08:00
Michael Lange
5057574c69
Correctly mark parameterized children as parameterized: true
2018-11-07 17:07:40 -08:00
Michael Lange
f3110f978e
Test coverage for error page escape hatch links
2018-11-07 16:19:45 -08:00
Michael Lange
177a998b1d
Add escape hatch links to the error page
2018-11-07 16:09:23 -08:00
Michael Lange
738efdfb04
Fix a bug where with-watchers wasn't bubbling the willTransition event
...
The impact was the application error was no longer being nulled out,
causing the application error to continue to be shown after
transitioning.
This never happened in apps since it's not possible to transition away
from the error screen.
2018-11-07 16:08:26 -08:00
Michael Lange
777d693632
Add support for link in error containers
2018-11-07 16:08:05 -08:00
Michael Lange
ab06a22954
Merge pull request #4841 from hashicorp/f-ui-error-handling-on-all-pages
...
UI: Error handling on all pages
2018-11-07 11:16:06 -08:00
Michael Lange
46fd35c84c
Merge pull request #4801 from hashicorp/b-ui-proper-task-group-breadcrumb
...
UI: Proper task group breadcrumb on the allocation pages
2018-11-06 16:41:46 -08:00
Michael Lange
dbb9662dbe
Make your tests orders of magnitude faster with One Neat Trick™
2018-11-06 16:17:21 -08:00
Michael Lange
80ab0f56cf
Test coverage for frame misses
2018-11-06 16:17:21 -08:00
Michael Lange
19abb7b605
Clean up the remaining routes
2018-11-05 16:33:33 -08:00
Michael Lange
d4c6a698c3
Handle the job 404 error case on the other job sub pages
2018-11-05 16:06:08 -08:00
Michael Lange
af24546644
Handle the job 404 error case in versions
2018-11-05 15:42:04 -08:00
Michael Lange
2925285f00
Handle the job 404 case in the job definition route
2018-11-05 15:20:31 -08:00
Michael Lange
8ef22a06fe
Handle the job 404 case in task group routes
2018-11-02 19:25:50 -07:00
Michael Lange
964c93e07f
Guard against the element already being destroyed
...
Since DOM code is in a run.next, it's possible that between the DOM
code being queued and running the element is destroyed. So the DOM
code needs to guard against this using the isDestroyed API.
2018-11-02 17:08:02 -07:00
Michael Lange
174dc02025
Improve client stat simulation and add a chance for requests to error
2018-11-01 22:11:56 -07:00
Michael Lange
3d7d7310a1
Gracefully handle response errors in stat trackers
...
1. Check if the response is a 4xx/5xx
2. If it is, skip the append step and track a frame miss
3. If enough frame misses occur in a row, treat it as a pause
A "pause" is when a null data frame is added, which shows up as a
gap in line charts.
2018-11-01 22:08:57 -07:00
Michael Lange
36fed0919d
Move jsonWithDefault to a util
2018-11-01 22:07:58 -07:00
Michael Lange
00ba1412b8
Merge pull request #4829 from hashicorp/f-ui-build-perf
...
UI: build time performance improvements
2018-11-01 15:04:30 -07:00
Michael Lange
f4813d49ba
Remove unused bourbon dependency
2018-11-01 14:37:39 -07:00
Michael Lange
be77e3d981
Speed up builds by cutting corners given config and env
2018-11-01 14:19:22 -07:00
Michael Lange
7cd8179637
Test coverage for breadcrumb qp change
2018-10-31 13:27:35 -07:00
Michael Lange
0a4242eb13
Provide the namespace query param to the task group link
2018-10-31 12:50:39 -07:00
Michael Lange
b2acd381f9
Test coverage for resetPagination
2018-10-30 14:17:23 -07:00
Michael Lange
c6afcb4499
Add the resetPagination hook to search boxes across the app
2018-10-30 10:52:54 -07:00
Michael Lange
571e5c35c3
Add a resetPagination method to the searchable mixin
...
Searchable can be used without pagination, but reseting pagination
is more a function of search than pagination insofar as if you
add search to a page, you are also going to want automatic pagination
resetting.
2018-10-30 10:51:31 -07:00
Michael Lange
a82c9d4d6f
Add onChange hook to the search-box component
2018-10-30 10:50:24 -07:00
Michael Lange
42432bbb52
Merge pull request #4727 from hashicorp/f-ui-improved-stats-charts
...
UI: Improved stats charts
2018-10-17 10:55:54 -07:00
Michael Lange
aeea4076b7
Merge pull request #4718 from hashicorp/f-ui-a11y-line-chart
...
UI: Add some simple accessibility labels for line charts
2018-10-17 09:43:27 -07:00
Michael Lange
340f3f12d4
Add more documentation to the format-duration util
2018-10-17 08:10:16 -07:00
Michael Lange
154dc49205
Be consistent with "time series" instead of "time-series"
2018-10-17 07:37:45 -07:00
Michael Lange
1be400d18e
Add role="tooltip" to tooltips throughout the app
2018-10-17 07:17:24 -07:00
Michael Lange
ca631ee217
Override the a11y title and description for the stats time series chart
...
Since this is a use case specific chart, we can use use case specific
language in our labels.
2018-09-27 12:55:52 -07:00
Michael Lange
cdb1831ceb
Add a11y features to the line-chart component
...
- Treat it as an image
- Add a title and a description
- Hide the axes, just in case
2018-09-27 12:55:52 -07:00
Michael Lange
866b74be19
Add a longForm option to format-duration
2018-09-27 12:55:17 -07:00
Michael Lange
4a98bf989f
Make the global logo link to the jobs page (home page)
2018-09-26 11:19:24 -07:00
Michael Lange
ea87417d4f
Add utilization stats to the task rows on allocation detail
2018-09-26 10:59:26 -07:00
Michael Lange
5736b71f00
Remove no longer used allocation-stats class
2018-09-26 10:59:26 -07:00
Michael Lange
9b90683e6b
Use the StatsTracker method of getting alloc stats in alloc row
2018-09-26 10:59:26 -07:00
Michael Lange
c694fcb0ba
Update stat tracker unit tests
2018-09-19 19:30:18 -07:00
Michael Lange
09497b20b8
Acceptance test coverage for all the pages with resource utilization graphs
2018-09-19 16:33:51 -07:00
Michael Lange
f86347bc62
Always return valid dates for timestamps
2018-09-19 16:33:18 -07:00
Michael Lange
da06b48aaf
Handle the empty data cases
2018-09-19 16:32:53 -07:00
Michael Lange
46936b6091
Unit tests for the stats trackers service
2018-09-19 15:33:29 -07:00
Michael Lange
18b18da49f
Integration tests for the primary-metric component
2018-09-19 14:15:32 -07:00
Michael Lange
c93f6506dc
Add cancelation support to stats trackers
2018-09-17 16:59:09 -07:00
Michael Lange
bc5dbe2fb7
Gap support for line charts
2018-09-17 16:58:56 -07:00
Michael Lange
8900d5c138
Add request throttling to the abstract stats tracker
...
This is the best of three options
1. Users of stats trackers control polling (old method)
2. Stat tracker is stateful and has start/stop methods (like logging)
3. Stat trackers blindly throttle requests
This is the best option because it means N number of concurrent users of
a stats tracker can request polling without inundating the tracker with
redundant frames (or the network with redundant requests), but they also
don't have to coordinate amongst themselves to determine what state a
tracker should be in.
2018-09-17 15:58:28 -07:00
Michael Lange
ae161d75bc
Use the new stats tracker service to get stats trackers in primary metric
2018-09-17 15:57:58 -07:00
Michael Lange
bc3a76da04
Clean up old controller code
2018-09-17 15:57:23 -07:00
Michael Lange
fcf22fdbc4
New LRUMap dep
2018-09-17 15:55:48 -07:00
Michael Lange
b7169596c1
New service to manage stats trackers
...
This solves two problems:
1. redundant trackers making redundant requests
2. trackers being obliterated as soon as the primary metric component
is destroyed
It introduces a new problem where visiting more and more node and
allocation pages adds to an ever-growing list of trackers that can
assume lots of memory, but it solves the problem by using a
least-recently-used cache to limit the number of trackers tracked.
2018-09-17 15:53:59 -07:00
Michael Lange
b675919c76
Add resource utilization graphs to the task index page
2018-09-14 10:21:48 -07:00
Michael Lange
dace559442
Add resource utilization graphs to the allocation index page
2018-09-14 10:21:28 -07:00
Michael Lange
636d0c92fc
Use the appropriate methods and types in the stat trackers
2018-09-14 10:21:01 -07:00
Michael Lange
80fefcf369
Style the primary-metric pattern
2018-09-14 10:20:33 -07:00
Michael Lange
379b17acbd
Handle the length = 0 and length = 1 cases for activeDatum
2018-09-14 10:19:35 -07:00
Michael Lange
6a94ebc5fb
Use the prototype instead of "private" property backups
2018-09-14 09:38:17 -07:00
Michael Lange
a2db921c1f
Make rollingArray work with mutable array extension methods
2018-09-14 08:57:26 -07:00
Michael Lange
01429a9b78
Remove old stat tracking code from the client page
...
In favor of the new primary-metric components
2018-09-13 17:01:24 -07:00
Michael Lange
10b9017d84
Use the new primary-metric component on the client detail page
2018-09-13 17:01:24 -07:00
Michael Lange
768f67e336
New primary-metric component
...
It encapsulates all the tracker, polling, and markup for this style
of metric.
2018-09-13 17:01:24 -07:00
Michael Lange
54efa8ddd5
Full markup for time series metrics
2018-09-13 17:01:24 -07:00
Michael Lange
93cf97a47b
Add stat charts to the client page
2018-09-13 17:01:24 -07:00
Michael Lange
b6382fe7dc
Use percent for the y-axis binding
2018-09-13 17:01:24 -07:00
Michael Lange
7e431e8876
Use addObject to get kvo behaviors
2018-09-13 17:01:24 -07:00
Michael Lange
4a2b9cc153
Merge pull request #4661 from hashicorp/f-ui-line-chart
...
UI: line chart
2018-09-13 16:59:20 -07:00
Michael Lange
105d4aea79
Unit test coverage for the stats-time-series chart
2018-09-13 16:45:56 -07:00
Michael Lange
659e19303c
Unit test coverage for the line chart component
2018-09-13 16:45:56 -07:00
Michael Lange
63b89904f3
Split the line-chart and stats-time-series freestyle entries
2018-09-13 16:45:56 -07:00
Michael Lange
569ba3c48a
Updates to the styleguide
2018-09-13 16:45:56 -07:00
Michael Lange
f2bab4591d
Use "global" gradients via a clipping mask and a rect w/100% height
2018-09-13 16:45:54 -07:00
Michael Lange
05c7706487
Avoid race conditions around showing and hiding the line chart tooltip
2018-09-13 16:45:13 -07:00
Michael Lange
9008c48cd1
Stats time series
...
A use-case specific line-chart for showing utilization metrics by
percent
2018-09-13 16:45:13 -07:00
Michael Lange
7a8a4c32f4
Make the tooltip animation snappier for line charts
...
When data is coming in live, the tooltip can get bogged down by updates
causing the tooltip to never make it under the mouse, which looks like
either lag or a bug.
2018-09-13 16:45:13 -07:00
Michael Lange
46cceb2daa
Don't round numbers when the domain is between 0 and 1
2018-09-13 16:45:13 -07:00
Michael Lange
a74e6648b9
Styleguide entry for the line chart component
2018-09-13 16:45:13 -07:00
Michael Lange
d516daf83e
New line chart component
2018-09-13 16:45:08 -07:00
Michael Lange
f15e3ba0c2
Test coverage for NodeStatsTracker
2018-09-11 16:27:06 -07:00
Michael Lange
a97e0bcc5e
Add support for non-list tooltips in charts
2018-09-07 09:57:54 -07:00
Michael Lange
2711abc3ce
Add chart color swatches based on css colors
2018-09-07 09:57:33 -07:00
Michael Lange
1530eed9f7
Bring in new d3 dependencies
2018-09-07 09:55:39 -07:00
Michael Lange
fbfc5ecb16
Example usage of the NodeStatsTracker
2018-08-31 14:39:23 -07:00
Michael Lange
680ac6c9b0
A StatsTracker for client-level statistics
2018-08-31 14:39:23 -07:00
Michael Lange
3d761b7347
Unit Tests for AllocationStatsTracker
2018-08-31 14:39:22 -07:00
Michael Lange
416de6c32a
Unit tests for RollingArray
2018-08-31 14:39:22 -07:00
Michael Lange
f5fa5101b4
Example of usage of the AllocationsStatsTracker
2018-08-31 14:39:22 -07:00
Michael Lange
da4852a6cd
An implementation of StatsTracker for allocations
...
It accumulates CPU and Memory usage for the allocation as a whole as well
as by task.
2018-08-31 14:39:22 -07:00
Michael Lange
e1e89ce92f
An abstract class for capturing nomad stats
...
It follows the form of poll -> json parse -> append,
Where append is defined in subclasses to add data from the new frame
to long-lived rolling arrays of data.
2018-08-31 14:39:22 -07:00
Michael Lange
0c35f189e9
An array subclass that enforces a maxLength
...
The maxLength is enforced by removing elements from the head of the
list.
2018-08-31 14:39:22 -07:00
Michael Lange
33da5ed14f
Merge pull request #4600 from hashicorp/f-ui-job-writes
...
UI: Job Writes
2018-08-30 10:41:14 -07:00
Michael Lange
ebe0e97b1a
Merge pull request #4615 from hashicorp/f-ui-restart-stopped-job
...
UI: Restart stopped job
2018-08-30 09:49:14 -07:00
Michael Lange
3c2e7b7dd3
Merge pull request #4616 from hashicorp/f-ui-promote-canary
...
UI: Promote canary
2018-08-30 09:48:31 -07:00
Michael Lange
62e9cf268b
Test coverage for the promote canary feature
2018-08-30 09:38:29 -07:00
Michael Lange
182e020835
Fix the flickering issue with start/stop job
...
When the server doesn't respond immediately, there is a visible window
of time between the action being submitted and the blocking query coming
back with the new job status.
2018-08-28 11:27:00 -07:00
Michael Lange
37acc77c9c
Add a confirmation loading state to the two-step-button component
2018-08-28 11:27:00 -07:00
Michael Lange
c8492682e1
Switch stop/run job actions to EC tasks
2018-08-28 11:27:00 -07:00
Michael Lange
18d5efce1e
Test coverage for the Start Job behavior
2018-08-28 11:27:00 -07:00
Michael Lange
a4d951a757
Add Start Job action on the job overview page for when a job is dead
2018-08-28 11:27:00 -07:00
Michael Lange
0142f97069
Update the info message about token storage
2018-08-28 10:05:36 -07:00
Michael Lange
0eb5e61e36
Switch token storage to localStorage from sessionStorage
2018-08-28 10:05:15 -07:00
Michael Lange
bcbeac7f35
Change the latest deployment component to include a Promote Canary button
...
Before it would say the deployment required promotion, now it has a
button that triggers the promotion.
2018-08-24 16:41:47 -07:00
Michael Lange
c4cb0229d6
Support the promote deployment api action
2018-08-24 16:41:47 -07:00
Michael Lange
715e2ac82a
Simplify the data control flow around job.plan()
2018-08-23 15:40:42 -07:00
Michael Lange
0fb7fea825
Acceptance tests for the edit behaviors on the job definition page
2018-08-23 10:26:20 -07:00
Michael Lange
4484c28e07
Rewrite the job run acceptance tests to be about routing
2018-08-23 09:00:47 -07:00
Michael Lange
b5b4a979f9
Test coverage for the job-editor component
...
Most of this was ported over from the existing job run acceptance tests
2018-08-23 09:00:14 -07:00
Michael Lange
e60b16a7e0
Since registerHelper doesn't work in integration tests a new way is needed
...
This exports a function that returns the pertinent function when given a
container. This way it works in registerHelper and in integration tests
beforeEach hooks
2018-08-22 17:34:25 -07:00
Michael Lange
1f40ab5da5
Introduce job editing to the job definition page
2018-08-21 16:46:24 -07:00
Michael Lange
3ca2237b29
Support cancellation of editing in the job-editor
2018-08-21 16:45:53 -07:00
Michael Lange
772731ccd4
Fix bug where scrolling wasn't using the document
...
Instead it was using the page-layout is-right div
2018-08-21 16:44:59 -07:00
Michael Lange
ed763ad14f
Handle update job in the model
2018-08-21 16:44:31 -07:00
Michael Lange
a7cd7b39d6
fixup-job-editor
2018-08-21 16:43:46 -07:00
Michael Lange
902ec3e734
fixup-adapter
2018-08-21 16:43:30 -07:00
Michael Lange
527b5d5e97
Support different contexts for the job editor
2018-08-21 16:41:05 -07:00
Michael Lange
05a3238c37
Support job update in the adapter
2018-08-21 16:39:47 -07:00
Michael Lange
33499658a4
Use the same urlForFindRecord logic for urlForUpdateRecord
2018-08-21 16:38:35 -07:00
Michael Lange
cd6d4e41e5
Fix multiple highlight bug in the distribution-bar component
...
Caused by the re-indexing that occurs to remove zero-value bars.
2018-08-21 16:37:36 -07:00
Michael Lange
c81ba192dc
Fix a blocking queries bug
...
The lowest valid blocking query index is 1, but the API will return 0 if
there has yet to be an index set (no response). This in conjunction with
that 0 being stored as a string made the "fallback to 1" guard not work.
2018-08-21 13:47:01 -07:00
Michael Lange
b3c2538c68
Move the bulk of the new job page into a new job editor component
2018-08-21 12:07:45 -07:00
Michael Lange
55fca36bea
New job edit page
2018-08-21 12:06:43 -07:00
Michael Lange
3cee992a97
Test coverage for scheduler dry-run addition to the plan page
2018-08-20 16:44:37 -07:00
Michael Lange
063021081d
Fixed bug that prevented non verbose job diffs from printing changed leaf nodes
2018-08-20 16:44:37 -07:00
Michael Lange
9cab82146c
Show the scheduler dry-run output on the plan page
2018-08-20 16:44:37 -07:00
Michael Lange
8ed04e64fe
Specialized No Leader error page
2018-08-20 14:11:50 -07:00
Michael Lange
ee074e9ef5
Don't use the verbose diff for job run plan
2018-08-17 18:32:59 -07:00
Michael Lange
74248bc3f6
Spiff up the form buttons with type and disabled attributes
2018-08-17 18:20:15 -07:00
Michael Lange
2e35687a1d
Acceptance tests for job run page
2018-08-16 17:22:58 -07:00
Michael Lange
f53fb08144
Rework job parse mirage request to get the job ID out of the payload
2018-08-16 17:22:22 -07:00
Michael Lange
1d3bf6bdea
New Page Object component for common error formatting
2018-08-16 10:57:56 -07:00
Michael Lange
e634a98102
New PageObject helper for getting and setting CodeMirror values
2018-08-16 10:57:13 -07:00
Michael Lange
9fb8964c00
New test helper for getting the underlying CodeMirror instance from a dom selector
2018-08-16 10:56:37 -07:00
Michael Lange
a96c4508d6
Acceptance test for the jobs list page
2018-08-15 17:12:18 -07:00
Michael Lange
75124fdc9e
Use the job name as the job id
...
This has bit me more than once. It's best just to make Mirage consistent
with the API even if it currently means indeterminate job ids
2018-08-15 17:00:08 -07:00
Michael Lange
2239e3c8d7
Support parse, plan, and run endpoints in mirage
2018-08-15 16:59:42 -07:00
Michael Lange
f06da96c90
Move the Diff property read out of the template
2018-08-15 16:58:54 -07:00
Michael Lange
da46817289
Error messages for job submit
2018-08-15 15:18:38 -07:00
Michael Lange
e1e3d2c34d
Run job UI and API workflows
2018-08-14 18:26:26 -07:00
Michael Lange
87cbf1ddbe
Remove unused solarized theme configuration
2018-08-14 17:37:44 -07:00
Michael Lange
de4caacb6d
Fix no allocations error message layout for the recent allocations component
2018-08-14 17:37:15 -07:00
Michael Lange
4d656c7a31
Parse and Plan API and UI workflows
2018-08-14 17:29:51 -07:00
Michael Lange
b0939bde07
Add breadcrumb to the run job page
2018-08-14 13:06:26 -07:00
Michael Lange
c85c2a2932
New job run page and navigation to get there.
2018-08-14 12:54:54 -07:00
Michael Lange
fe9d0b8704
New layout helper for associating two elements vertically
...
By default, blocks have a margin of 1.5em to create a consistent
vertical rhythm. However, sometimes elements need to be associated with
the element above them. In this cases, the gap between elements needs to
be tighter. There are many ways to do this, but this approach asks the
latter content to be marked as associative. The implication is that the
association is with the previous block.
2018-08-14 12:47:28 -07:00