diff options
Diffstat (limited to '')
-rw-r--r-- | public/js/loadmore.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/public/js/loadmore.js b/public/js/loadmore.js new file mode 100644 index 0000000..964a7b5 --- /dev/null +++ b/public/js/loadmore.js @@ -0,0 +1,85 @@ +/* Icinga DB Web | (c) 2020 Icinga GmbH | GPLv2 */ + +;(function(Icinga, $) { + + 'use strict'; + + Icinga.Behaviors = Icinga.Behaviors || {}; + + /** + * Icinga DB Load More behavior. + * + * @param icinga {Icinga} The current Icinga Object + */ + var LoadMore = function(icinga) { + Icinga.EventListener.call(this, icinga); + + this.icinga = icinga; + + this.on('click', '.show-more[data-no-icinga-ajax] a', this.onClick, this); + this.on('keypress', '.show-more[data-no-icinga-ajax] a', this.onKeyPress, this); + }; + + LoadMore.prototype = new Icinga.EventListener(); + + LoadMore.prototype.onClick = function(event) { + var _this = event.data.self; + var $anchor = $(event.target); + var $showMore = $anchor.parent(); + + event.stopPropagation(); + event.preventDefault(); + + var progressTimer = _this.icinga.timer.register(function () { + var label = $anchor.html(); + + var dots = label.substr(-3); + if (dots.slice(0, 1) !== '.') { + dots = '. '; + } else { + label = label.slice(0, -3); + if (dots === '...') { + dots = '. '; + } else if (dots === '.. ') { + dots = '...'; + } else if (dots === '. ') { + dots = '.. '; + } + } + + $anchor.html(label + dots); + }, null, 250); + + var url = $anchor.attr('href'); + var req = _this.icinga.loader.loadUrl( + // Add showCompact, we don't want controls in paged results + _this.icinga.utils.addUrlFlag(url, 'showCompact'), + $showMore.parent(), + undefined, + undefined, + 'append', + false, + progressTimer + ); + req.addToHistory = false; + req.done(function () { + $showMore.remove(); + + // Set data-icinga-url to make it available for Icinga.History.getCurrentState() + req.$target.closest('.container').data('icingaUrl', url); + + _this.icinga.history.replaceCurrentState(); + }); + + return false; + }; + + LoadMore.prototype.onKeyPress = function(event) { + if (event.which === 32) { + event.data.self.onClick(event); + } + }; + + Icinga.Behaviors.LoadMore = LoadMore; + +})(Icinga, jQuery); |