Commit Graph

885 Commits

Author SHA1 Message Date
Johannes Meyer 6197d5f0af form.js: Only track real value changes and reset upon reverts 2021-01-13 17:19:18 +01:00
Johannes Meyer ca74e14812 ui.js: Don't require jQuery objects in `getUniqueContainerId` 2021-01-13 17:18:55 +01:00
Johannes Meyer fbf3a1f757 loader.js: Don't add form submits other than `GET`s to the history
This has previously not been an issue, as form submits seem to have
never targeted another url than their container's current one.
Though any form that did this, was pushed to history upon submit.
This happens now only for `GET` forms.
2021-01-13 17:17:48 +01:00
Johannes Meyer e346c1c88c events.js: Also accept `$autoSubmittedBy` from `event.detail` 2021-01-13 17:17:18 +01:00
Johannes Meyer 3e29fba052 js: Transmit `X-Icinga-Autorefresh=1` with autorefresh requests 2021-01-13 17:16:53 +01:00
Johannes Meyer 2c7b2330a7 loader.js: Support behaviors as well as multipart update targets 2021-01-13 17:16:30 +01:00
Johannes Meyer f05f905d14 history.js: Set `lastPushUrl` in method `replaceCurrentState()`
Without this, any subsequent call to `pushCurrentState()` has
no effect in case the same url is used that was replaced.
2021-01-13 17:15:58 +01:00
Johannes Meyer 5a38977906 js: Add `define.js` 2020-11-18 13:21:33 +01:00
Johannes Meyer d918d6c86f
Merge pull request #4235 from Icinga/fix/sparkline-js-performance
Drop sparkline.js and render inline-pies as SVG
2020-11-18 09:37:31 +01:00
Johannes Meyer 0b94489c7e loader.js: Introduce new header `X-Icinga-Location-Query`
This header is only used in case the response includes
multipart content. It's meant to provide a new query
string that replaces the one of the targeted container
and the resulting change also replaces the current
history entry.
2020-11-06 11:26:05 +01:00
Johannes Meyer 70c3023f3c loader.js: Also match newlines when interpreting multipart content 2020-11-06 11:21:33 +01:00
Johannes Meyer e68e8c8e9c loader.js: Only discard content if a renderHook returns null
Previously any false value had this effect, though empty strings
were also discarded due to this. However, in case an empty string
is the content in the first place, the content must be updated.
2020-11-06 11:21:33 +01:00
Johannes Meyer 4ce9165f77 js: Don't force focus in multipart updates if focus isn't affected 2020-11-06 11:20:28 +01:00
Johannes Meyer 37fb455977 js: Drop sparkline lib and behavior 2020-09-28 16:39:54 +02:00
Johannes Meyer 2a64a97302 js: Don't add class `impact` to already finished targets 2020-06-08 10:49:02 +02:00
Johannes Meyer a59977f181 js: Properly parse/build url query values
fixes #4167
2020-06-05 08:57:30 +02:00
Johannes Meyer 74a9a8edf0 modal.js: Request compact content with `showCompact` 2020-06-04 08:50:41 +02:00
Alexander A. Klimov 4232a344b7 Icinga.Loader#onFailure(): treat 5xx response as connection failure
... not to break the container with the reverse proxy's response not fitting into our layout.

refs #4133
2020-04-24 08:39:23 +02:00
Johannes Meyer 344598e845 loader.js: Wait for cols being painted prior adding class `impact`
Allows for the new loading effect's transition to play correctly
also for columns which get opened the first time.
2020-04-14 10:40:23 +02:00
Johannes Meyer 969c1615c7 history.js: Don't load location bar as if it's an autorefresh 2020-02-28 14:37:46 +01:00
Yonas Habteab 0432b7d50d Revert "JS: Do not apply 'menu-hovered' on #layout"
This reverts commit 5443bfe9fa.
2020-02-28 11:36:04 +01:00
nmartini 1cf2f767a2 Make sure that class container has its container 2020-02-28 08:30:23 +01:00
Johannes Meyer fd97e8b056 actiontable.js: Properly handle encoded filter values 2020-01-30 08:31:06 +01:00
Johannes Meyer 5a031bf659 utils.js: Fix method `removeUrlParams()` 2020-01-28 15:23:41 +01:00
Johannes Meyer 3464455021 js: Preserve scroll position if focus is forced to a particular element 2020-01-16 15:54:17 +01:00
Johannes Meyer 8bc84a5f9e js: Teach the url parsing a final lesson about query strings
`utils.parseParams()` now returns an array instead of an object.
This may require some changes in modules using this directly or
by `utils.parseUrl().params`

refs #4056
2020-01-16 13:45:10 +01:00
Eric Lippmann 0355b20da0 JS: Respect container in Icinga.Ui.focusElement()
Though IDs should be unique across the whole page, focusElement() must
not fail if there is the same anchor in the left and right column.
focusElement() now also respects the container when searching the
element to focus by ID.
2020-01-16 10:47:28 +01:00
Johannes Meyer 8d4e0126ca
Merge pull request #4055 from Icinga/feature/js-history-replace-state
JS: Introduce Icinga.History.replaceCurrentState()
2020-01-16 08:54:49 +01:00
Johannes Meyer 4c39772667
Merge pull request #4053 from Icinga/feature/js-addUrlFlag
JS: Introduce Icinga.Utils.addUrlFlag()
2020-01-16 08:14:20 +01:00
Johannes Meyer 477649900c js: Also adjust `utils.removeUrlParams()`..
..and properly handle flags in `utils.addUrlParams()`

refs #4056
2020-01-16 08:13:11 +01:00
Johannes Meyer fdd14c96b1 js: Only encode new params in `utils.addUrlParams()` 2020-01-15 16:47:30 +01:00
Johannes Meyer 3db65d79c6 js: Fix improper parsing in `utils.parseParams()` 2020-01-15 16:46:46 +01:00
Eric Lippmann 71b8ab9b68 JS: Introuce Icinga.History.replaceCurrentState()
Before, we only had pushCurrentState() to add a new URL to the history
stack. But some actions, e.g. "load more" in history views require to
replace the current state instead of pushing. This is what
replaceCurrentState() supports now.
2020-01-15 09:57:30 +01:00
Eric Lippmann 97006973d8 JS: Introduce Icinga.History.getCurrentState()
Before, Icinga.History.pushCurrentState() had this functionality
enclosed. Now it is usable from other functions as well.
2020-01-15 09:55:39 +01:00
Johannes Meyer db69f23c20 modal.js: Don't push form submits to the history 2020-01-15 08:41:34 +01:00
Johannes Meyer 844cb911a4 loader.js: Use `utils.addUrlFlag` instead of the now deprecated one 2020-01-15 08:00:04 +01:00
Johannes Meyer e45c18c833 utils.js: Use a regex to identify the uri fragment 2020-01-15 07:58:49 +01:00
Eric Lippmann 7f8ee4f94d JS: Deprecate Icinga.Loader.addUrlFlag() in favor of Icinga.Utils.addUrlFlag() 2020-01-14 14:58:34 +01:00
Eric Lippmann 4d02d8f6d6 JS: Introduce Icinga.Utils.addUrlFlag() 2020-01-14 14:58:34 +01:00
Johannes Meyer b85360449b js: Ignore anchors without href in `events.linkClicked()` 2019-12-13 16:13:55 +01:00
Johannes Meyer 63452ba250 js: Enhance scroll location detection in `ui.focusElement()` 2019-12-13 16:13:13 +01:00
Johannes Meyer f5ce5d42ef js: Add jQuery plugin `offsetTopRelativeTo($ancestor)` 2019-12-13 16:12:40 +01:00
ValeDaRold 5edd267f2a Refresh container if X-Icinga-Extra-Updates with length 1 is defined (#3970)
* Refresh container if X-Icinga-Extra-Updates with length 1 is defined
2019-12-12 13:50:03 +01:00
Johannes Meyer d6677bfb66 loader.js: Also preserve scroll position of `display:flex` containers 2019-12-11 15:27:03 +01:00
Johannes Meyer 55b9b44be9 js: Fix error when focusing navigation anchors 2019-12-11 09:27:18 +01:00
Johannes Meyer 60dfbcbad9 Remove remaining usages of `#menu-container` 2019-12-06 15:39:14 +01:00
Johannes Meyer e61eb6f160 ui: Fix sidebar issues in minimal layout
Was completely broken even prior the removal of `ui.fixControls()`..
2019-12-06 15:39:14 +01:00
Johannes Meyer 4af48c797d js: Remove `ui.fixControls()` and `ui.initializeControls()`
Hooray!
2019-12-06 15:39:14 +01:00
Johannes Meyer 83d6a258ec application-state.js: Remove redundant rendered callback 2019-12-06 15:39:14 +01:00
Florian Strohmaier 5443bfe9fa JS: Do not apply 'menu-hovered' on #layout
refs #3904
2019-12-06 15:36:34 +01:00
Florian Strohmaier 7864150054 JS: Fix navigation flyout not fading out after mouseout
refs #3904
2019-12-06 15:36:34 +01:00
Florian Strohmaier c6c77aa411 JS: Remove unused code 2019-12-06 15:36:34 +01:00
Florian Strohmaier 516bbc1ef0 JS: Fix sidebar animating out 2019-12-06 15:36:34 +01:00
Florian Strohmaier 0da89bb977 JS: Reinstate mobile menu 2019-12-06 15:36:34 +01:00
Florian Strohmaier c06aec0471 Remove unused code 2019-12-06 15:36:34 +01:00
Florian Strohmaier cfbeb26354 JS: Disable fixControls() 2019-12-06 15:36:34 +01:00
Johannes Meyer cc065b949b js: Use custom event `icinga-init` to trigger initial render events
The `load` event is not really only fired *after all shared resources are loaded*.
Just Chromium ensures this event is fired only after `ready` and `DOMContentLoaded`.
FF, IE and Safari don't so we need our own post-init event: `icinga-init`
2019-11-26 16:00:21 +01:00
Johannes Meyer 48098a2830 js: Don't initialize modules using a `beforerender` event
`beforerender` is already too late. Module initialization
done using an event handler is wrong anyway. It's some
kind of bootstrapping after all and should be performed
by parts of the code which is directly responsible for
DOM content handling of modules. (i.e. loader.js)

This change though introduces a side-effect which was
not the case previously: Nested `.container` elements
trigger `rendered` events now. I've introduced this to
ensure we're also lazy loading modules and let them
handle their `rendered` events right after a redirect
which rerendered the layout. (Only `#layout` got a
`rendered` event then prior to this change)
2019-11-21 09:55:20 +01:00
Johannes Meyer 7f78c1a8a8 js: Properly initialize modules and don't trigger `rendered` events twice
Cleans up how our JS initializes module javascript. Previously the `rendered`
event only got fired upon page load if a module got loaded as well. This is
now decoupled and `rendered` events fire for all containers and the entire
layout upon page load.

Notable changes:
* A `load` event initializes modules and triggers `rendered` on `.container` and `#layout` elements
* Module javascript (module.js) is still lazy loaded but with a `beforerender` event, not `rendered`
* Previously `#layout` received a `rendered` event during bootstrapping, this is not the case anymore
* Initial search value preservation now got its own handler `events.onRenderedMenu()`
* Initial dashlet loading now git its own handler `events.loadDashlets()`
2019-11-20 16:22:56 +01:00
Johannes Meyer 47c2a8bdc1 js: Utilize `utils.objectsEqual()` in `actiontable.select()` 2019-11-20 16:22:56 +01:00
Johannes Meyer 2dbf9ca8ab js: Properly parse/decode query params in `utils.parseParams()` 2019-11-20 16:22:56 +01:00
Johannes Meyer 5f739deea3 loader.js: Enhance __BACK__ handling 2019-11-05 15:04:23 +01:00
Johannes Meyer da565f4d16 loader.js: Refresh left twice in case right has been closed..
..if the redirect target is `__BACK__`
2019-11-04 17:25:05 +01:00
Johannes Meyer 42e596f457 loader.js: Navigate back if redirect target is `__BACK__` 2019-11-04 16:03:54 +01:00
Johannes Meyer a13d2b1e48 js: Introduce behavior modal.js 2019-11-04 12:46:30 +01:00
Johannes Meyer c0cac6fe3c loader.js: Allow to use a separate target for redirections 2019-11-04 12:46:30 +01:00
Johannes Meyer 0e5e046ae5 js: Split event handling and processing of form submits 2019-11-04 12:46:30 +01:00
Johannes Meyer 50bf126d36 js: Move function events.getLinkTargetFor to loader.js 2019-11-04 12:46:30 +01:00
Johannes Meyer 2896cbd781 loader.js: Avoid named capture groups to parse multipart content
fixes #3975
2019-10-07 14:35:49 +02:00
Johannes Meyer a8dc609b62 loader.js: Add support for multipart content
refs #3953
2019-09-25 10:34:24 +02:00
Johannes Meyer dda49b5ff1 loader.js: Drop redundant method `cacheLoadedIcons` 2019-09-25 10:34:24 +02:00
Johannes Meyer da513a746d loader.js: Add support for extra updates
refs #3953
2019-09-25 10:34:24 +02:00
Johannes Meyer 329f54cc96 ui.js: Don't generate a container id if its parent is #col1
refs #3953
2019-09-25 10:34:24 +02:00
Johannes Meyer b15c012671 loader.js: Only pre-wrap a search response's html with a div
It's not required for all responses anymore.

refs #3953
2019-09-25 10:34:24 +02:00
Johannes Meyer f98f988aff Remove tristate form element 2019-09-23 08:36:24 +02:00
Johannes Meyer 5333bbf04d loader.js: Also set title directly if layout is base target 2019-08-02 15:42:58 +02:00
Johannes Meyer b31dd77812
Merge pull request #3676 from Icinga/feature/form-styling
Improve look of our forms
2019-07-30 08:26:08 +02:00
Johannes Meyer 5849c06314 storage.js: Don't try and allow to register events for non-local backends 2019-07-30 08:17:29 +02:00
Eric Lippmann 62d4e73d5a Use session storage for sidebar state
The sidebar state is now maintained per tab/window because users view
different things in different tabs/windows. E.g. users work with a
specific module constantly clicking through the menu while having
other tabs/windows with some important dashboards open.
When the sidebar is closed in one tab/widnow, it should not close
the sidebar in the other tabs/windows.
2019-07-30 08:14:49 +02:00
Eric Lippmann a1a18feb04 js/storage: Allow to set the storage backend 2019-07-30 08:14:49 +02:00
Johannes Meyer eb0d808aec collapsible.js: Enhance height calculations
`data-visible-height` now only covers the actual content height
2019-07-29 16:02:48 +02:00
Johannes Meyer 27cd34dd2d js: Add new jQuery plugin `getData()` 2019-07-29 16:02:48 +02:00
Johannes Meyer 8cd6a46388 collapsible.js: Add support for custom control elements 2019-07-29 10:19:29 +02:00
Johannes Meyer d0eca387ee js: Also handle spinner elements which are not direct descendants of an element 2019-07-29 10:17:59 +02:00
Johannes Meyer 23590c5e20 js: Remove redundant vendor libraries 2019-07-29 09:52:52 +02:00
Johannes Meyer a4848803c8 collapsible.js: Listen on `#layout` for rendered events 2019-07-26 16:23:18 +02:00
Johannes Meyer 91a8bdf786 collapsible.js: Don't collapse until at least twice the visible space is required 2019-07-26 07:36:17 +02:00
Johannes Meyer 74cb0ef3c9 collapsible.js: Don't enforce `data-visible-rows` for tables and lists 2019-07-26 07:36:17 +02:00
Johannes Meyer 2179518904 storage.js: Properly check if we have any keys left before clearing the storage 2019-07-26 07:36:17 +02:00
Johannes Meyer f1db972cc5 ui.js: Only set tabindex=-1 on elements which are otherwise not focusable 2019-07-22 13:41:52 +02:00
Johannes Meyer dd4cfaba50 navigation.js: Store and load sidebar collapse state from localStorage
resolves #3628
2019-07-18 09:43:22 +02:00
Johannes Meyer 3310bbc680 js: Patch vendor library sparkline to ensure compatibility with jQuery v3 2019-07-18 07:57:14 +02:00
Johannes Meyer f8d3f43965 js: Drop vendor library tipsy 2019-07-18 07:57:14 +02:00
Johannes Meyer c100654412 js: Integrate vendor library jquery-migrate 2019-07-18 07:57:14 +02:00
Johannes Meyer ec3a6b0572 ui.js: Don't use jquery blur shorthand but the element's native method 2019-07-18 07:57:14 +02:00
Johannes Meyer b168c3d7db js: Don't use jquery.focus shorthand anymore, but icinga.ui.focusElement 2019-07-18 07:57:14 +02:00
Johannes Meyer f844094475 ui.js: Don't use deprecated .size() method but property .length 2019-07-18 07:57:14 +02:00
Johannes Meyer 6323a065ea loader.js: Keep using the promise interface for complete callbacks 2019-07-18 07:57:14 +02:00
Johannes Meyer 5cf71c9bbd js: Drop iframe-upload fallback for IE 2019-07-18 07:57:14 +02:00
Johannes Meyer 97d5b39662 helpers.js: Drop polyfills for IE8 and IE9 2019-07-18 07:57:14 +02:00