summaryrefslogtreecommitdiffstats
path: root/public/js/loadmore.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--public/js/loadmore.js85
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);