diff --git a/dns/dns.js b/dns/dns.js
index 780f7a9..e9af334 100644
--- a/dns/dns.js
+++ b/dns/dns.js
@@ -63,9 +63,10 @@ import { settings, elements, apiGet, parseParams, setupHeader } from "/global.js
type.innerHTML = domain.type;
row.appendChild(type);
- var email = document.createElement("td");
- email.innerHTML = domain.soa_email;
- row.appendChild(email);
+ var modified = document.createElement("td");
+ var modifiedDate = new Date(domain.updated + "Z");
+ modified.innerHTML = modifiedDate.toLocaleString();
+ row.appendChild(modified);
var status = document.createElement("td");
status.innerHTML = domain.status.charAt(0).toUpperCase() + domain.status.slice(1).replace(/_/g, " ");
@@ -84,9 +85,14 @@ import { settings, elements, apiGet, parseParams, setupHeader } from "/global.js
var removeLink = document.createElement("a");
removeLink.href = "/dns/domain_delete?did=" + domain.id;
removeLink.innerHTML = "Remove";
+ var zoneFileLink = document.createElement("a");
+ zoneFileLink.href = "/dns/domain_zonefile?did=" + domain.id;
+ zoneFileLink.innerHTML = "Zone file";
options.appendChild(editLink);
options.appendChild(separator);
options.appendChild(removeLink);
+ options.appendChild(separator.cloneNode(true));
+ options.appendChild(zoneFileLink);
row.appendChild(options);
return row;
@@ -107,7 +113,7 @@ import { settings, elements, apiGet, parseParams, setupHeader } from "/global.js
title.innerHTML = tag;
headRow1.appendChild(title);
var headRow2 = document.createElement("tr");
- var cells = ["Domain Zone", "Type", "SOA Email", "Status", "Options"];
+ var cells = ["Domain Zone", "Type", "Last Modified", "Status", "Options"];
title.colspan = cells.length;
for (var i = 0; i < cells.length; i++) {
var cell = document.createElement("td");
diff --git a/dns/domain_zonefile/domain_zonefile.css b/dns/domain_zonefile/domain_zonefile.css
new file mode 100644
index 0000000..5afbdab
--- /dev/null
+++ b/dns/domain_zonefile/domain_zonefile.css
@@ -0,0 +1,22 @@
+/*
+ * This file is part of Linode Manager Classic.
+ *
+ * Linode Manager Classic is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Linode Manager Classic is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Linode Manager Classic. If not, see .
+ */
+
+@import url('/global.css');
+
+#domain-zonefile {
+ padding: 0px 15px 15px;
+}
diff --git a/dns/domain_zonefile/domain_zonefile.js b/dns/domain_zonefile/domain_zonefile.js
new file mode 100644
index 0000000..6b7e422
--- /dev/null
+++ b/dns/domain_zonefile/domain_zonefile.js
@@ -0,0 +1,92 @@
+/*
+ * This file is part of Linode Manager Classic.
+ *
+ * Linode Manager Classic is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Linode Manager Classic is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Linode Manager Classic. If not, see .
+ */
+
+import { settings, elements, apiGet, parseParams, setupHeader } from "/global.js";
+
+(function()
+{
+ // Element names specific to this page
+ elements.domainLabel = "domain-label";
+ elements.domainTag = "domain-tag";
+ elements.domainTagLink = "domain-tag-link";
+ elements.zoneFile = "zonefile";
+
+ // Data recieved from API calls
+ var data = {};
+ data.domain = {};
+
+ // Static references to UI elements
+ var ui = {};
+ ui.domainLabel = {};
+ ui.domainTag = {};
+ ui.domainTagLink = {};
+ ui.zoneFile = {};
+
+ // Callback for domain details API call
+ var displayDetails = function(response)
+ {
+ data.domain = response;
+
+ // Set page title and header stuff
+ document.title += " // " + data.domain.domain;
+ ui.domainLabel.innerHTML = data.domain.domain;
+ if (data.domain.tags.length == 1) {
+ ui.domainTagLink.href = "/dns?tag=" + data.domain.tags[0];
+ ui.domainTagLink.innerHTML = "(" + data.domain.tags[0] + ")";
+ ui.domainTag.style.display = "inline";
+ }
+ };
+
+ // Display zonefile contents
+ var displayZoneFile = function(response)
+ {
+ ui.zoneFile.innerHTML = response.zone_file.join("\n");
+ };
+
+ // Initial setup
+ var setup = function()
+ {
+ // Parse URL parameters
+ data.params = parseParams();
+
+ // We need a domain ID, so die if we don't have it
+ if (!data.params.did) {
+ alert("No domain ID supplied!");
+ return;
+ }
+
+ setupHeader();
+
+ // Update links on page to include proper domain ID
+ var anchors = document.getElementsByTagName("a");
+ for (var i = 0; i < anchors.length; i++)
+ anchors[i].href = anchors[i].href.replace("did=0", "did=" + data.params.did);
+
+ // Get element references
+ ui.domainLabel = document.getElementById(elements.domainLabel);
+ ui.domainTag = document.getElementById(elements.domainTag);
+ ui.domainTagLink = document.getElementById(elements.domainTagLink);
+ ui.zoneFile = document.getElementById(elements.zoneFile);
+
+ // Get data from API
+ apiGet("/domains/" + data.params.did, displayDetails, null);
+ apiGet("/domains/" + data.params.did + "/zone-file", displayZoneFile, null);
+ };
+
+ // Attach onload handler
+ window.addEventListener("load", setup);
+})();
diff --git a/dns/domain_zonefile/index.shtml b/dns/domain_zonefile/index.shtml
new file mode 100644
index 0000000..1c43fa3
--- /dev/null
+++ b/dns/domain_zonefile/index.shtml
@@ -0,0 +1,35 @@
+
+
+
+