diff --git a/CHANGELOG.md b/CHANGELOG.md index 2573badc..2daaa5dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ All notable changes to this project will be documented in this file. - Show the number of downtimes and total downtime minutes in "Check Details" page - Add the `pruneflips` management command +## Bug Fixes +- Fix javascript code to construct correct URLs when running from a subdirectory (#273) + ## 1.8.0 - 2019-07-08 diff --git a/hc/front/urls.py b/hc/front/urls.py index e23ba45a..a3c98d5e 100644 --- a/hc/front/urls.py +++ b/hc/front/urls.py @@ -10,7 +10,7 @@ check_urls = [ path("pause/", views.pause, name="hc-pause"), path("remove/", views.remove_check, name="hc-remove-check"), path("log/", views.log, name="hc-log"), - path("status/", views.status_single), + path("status/", views.status_single, name="hc-status-single"), path("last_ping/", views.ping_details, name="hc-last-ping"), path("transfer/", views.transfer, name="hc-transfer"), path( diff --git a/static/js/add_trello.js b/static/js/add_trello.js index 9ebbdf88..258bcadd 100644 --- a/static/js/add_trello.js +++ b/static/js/add_trello.js @@ -15,9 +15,10 @@ $(function() { $("integration-settings").text("Loading..."); token = tokenMatch[1]; + var base = document.getElementById("base-url").getAttribute("href").slice(0, -1); var csrf = $('input[name=csrfmiddlewaretoken]').val(); $.ajax({ - url: "/integrations/add_trello/settings/", + url: base + "/integrations/add_trello/settings/", type: "post", headers: {"X-CSRFToken": csrf}, data: {token: token}, diff --git a/static/js/checks.js b/static/js/checks.js index 4e7b96a0..ad77a96d 100644 --- a/static/js/checks.js +++ b/static/js/checks.js @@ -1,8 +1,9 @@ $(function () { + var base = document.getElementById("base-url").getAttribute("href").slice(0, -1); $(".my-checks-name").click(function() { var code = $(this).closest("tr.checks-row").attr("id"); - var url = "/checks/" + code + "/name/"; + var url = base + "/checks/" + code + "/name/"; $("#update-name-form").attr("action", url); $("#update-name-input").val(this.dataset.name); @@ -31,7 +32,7 @@ $(function () { var checkCode = $(this).closest("tr.checks-row").attr("id"); var channelCode = $("#ch-" + idx).data("code"); - var url = "/checks/" + checkCode + "/channels/" + channelCode + "/enabled"; + var url = base + "/checks/" + checkCode + "/channels/" + channelCode + "/enabled"; $.ajax({ url: url, @@ -52,12 +53,12 @@ $(function () { $('#ping-details-modal').modal("show"); var code = $(this).closest("tr.checks-row").attr("id"); - var lastPingUrl = "/checks/" + code + "/last_ping/"; + var lastPingUrl = base + "/checks/" + code + "/last_ping/"; $.get(lastPingUrl, function(data) { $("#ping-details-body" ).html(data); }); - var logUrl = "/checks/" + code + "/log/"; + var logUrl = base + "/checks/" + code + "/log/"; $("#ping-details-log").attr("href", logUrl); return false; @@ -79,7 +80,7 @@ $(function () { // Update hash if (window.history && window.history.replaceState) { - var url = $("#checks-table").data("list-url");; + var url = $("#checks-table").data("list-url"); if (qs.length) { url += "?" + $.param(qs); } @@ -132,7 +133,7 @@ $(function () { $(".show-log").click(function(e) { var code = $(this).closest("tr.checks-row").attr("id"); - var url = "/checks/" + code + "/details/"; + var url = base + "/checks/" + code + "/details/"; window.location = url; return false; }); diff --git a/static/js/collapse-native.js b/static/js/collapse-native.js deleted file mode 100644 index 2da5eee2..00000000 --- a/static/js/collapse-native.js +++ /dev/null @@ -1,204 +0,0 @@ -// Native Javascript for Bootstrap 3 | Collapse -// by dnp_theme - -(function(factory){ - - // CommonJS/RequireJS and "native" compatibility - if(typeof module !== "undefined" && typeof exports == "object") { - // A commonJS/RequireJS environment - if(typeof window != "undefined") { - // Window and document exist, so return the factory's return value. - module.exports = factory(); - } else { - // Let the user give the factory a Window and Document. - module.exports = factory; - } - } else { - // Assume a traditional browser. - window.Collapse = factory(); - } - -})(function(){ - - // COLLAPSE DEFINITION - // =================== - var Collapse = function( element, options ) { - options = options || {}; - - this.btn = typeof element === 'object' ? element : document.querySelector(element); - this.accordion = null; - this.collapse = null; - this.duration = 300; // default collapse transition duration - this.options = {}; - this.options.duration = /ie/.test(document.documentElement.className) ? 0 : (options.duration || this.duration); - this.init(); - } - - // COLLAPSE METHODS - // ================ - Collapse.prototype = { - - init : function() { - this.actions(); - this.btn.addEventListener('click', this.toggle, false); - - // allows the collapse to expand - // ** when window gets resized - // ** or via internal clicks handers such as dropwowns or any other - document.addEventListener('click', this.update, false); - window.addEventListener('resize', this.update, false) - }, - - actions : function() { - var self = this; - - this.toggle = function(e) { - self.btn = self.getTarget(e).btn; - self.collapse = self.getTarget(e).collapse; - - if (!/in/.test(self.collapse.className)) { - self.open(e) - } else { - self.close(e) - } - }, - this.close = function(e) { - e.preventDefault(); - self.btn = self.getTarget(e).btn; - self.collapse = self.getTarget(e).collapse; - self._close(self.collapse); - self.btn.className = self.btn.className.replace(' collapsed',''); - }, - this.open = function(e) { - e.preventDefault(); - self.btn = self.getTarget(e).btn; - self.collapse = self.getTarget(e).collapse; - self.accordion = self.btn.getAttribute('data-parent') && self.getClosest(self.btn, self.btn.getAttribute('data-parent')); - - self._open(self.collapse); - self.btn.className += ' collapsed'; - - if ( self.accordion !== null ) { - var active = self.accordion.querySelectorAll('.collapse.in'), al = active.length, i = 0; - for (i;i 1 ) { - return activeTabs[activeTabs.length-1] - } - }, - this.getActiveContent = function() { - var a = self.getActiveTab().getElementsByTagName('A')[0].getAttribute('href').replace('#',''); - return a && document.getElementById(a) - } - } - } - - - // TAB DATA API - // ================= - var Tabs = document.querySelectorAll("[data-toggle='tab'], [data-toggle='pill']"), tbl = Tabs.length, i=0; - for ( i;iUpdating...

"); - $("#schedule").val(schedule); - $("#tz").selectpicker("val", tz); - var minutes = parseInt(grace / 60); - $("#update-timeout-grace-cron").val(minutes); - updateCronPreview(); - - kind == "simple" ? showSimple() : showCron(); - $('#update-timeout-modal').modal({"show":true, "backdrop":"static"}); - return false; - - } - - var MINUTE = {name: "minute", nsecs: 60}; var HOUR = {name: "hour", nsecs: MINUTE.nsecs * 60}; var DAY = {name: "day", nsecs: HOUR.nsecs * 24}; @@ -166,7 +142,7 @@ $(function () { var token = $('input[name=csrfmiddlewaretoken]').val(); $.ajax({ - url: "/checks/cron_preview/", + url: base + "/checks/cron_preview/", type: "post", headers: {"X-CSRFToken": token}, data: {schedule: schedule, tz: tz}, diff --git a/templates/base.html b/templates/base.html index 899ee573..460bcc85 100644 --- a/templates/base.html +++ b/templates/base.html @@ -67,7 +67,7 @@ - + {% if request.user.is_authenticated and project %} {{ project }} diff --git a/templates/front/details.html b/templates/front/details.html index 34042088..f78cfc00 100644 --- a/templates/front/details.html +++ b/templates/front/details.html @@ -153,6 +153,7 @@ id="edit-timeout" class="btn btn-sm btn-default timeout-grace" data-code="{{ check.code }}" + data-status-url="{% url 'hc-status-single' check.code %}" data-kind="{{ check.kind }}" data-timeout="{{ check.timeout.total_seconds }}" data-grace="{{ check.grace.total_seconds }}" diff --git a/templates/front/my_checks_desktop.html b/templates/front/my_checks_desktop.html index 8561e5ec..14716ff7 100644 --- a/templates/front/my_checks_desktop.html +++ b/templates/front/my_checks_desktop.html @@ -112,7 +112,7 @@ -
+
{% include "front/last_ping_cell.html" with check=check %}