From eddb79d97d72a63fc3af6741567077e3e59b2871 Mon Sep 17 00:00:00 2001
From: hmhealey <harrisonmhealey@gmail.com>
Date: Wed, 22 Jul 2015 17:18:33 -0400
Subject: Add an info box next to image thumbnails which provides the name,
 type, and size of a file.

---
 web/react/utils/utils.jsx | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

(limited to 'web/react/utils/utils.jsx')

diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx
index 8a4d92b85..aa59201cb 100644
--- a/web/react/utils/utils.jsx
+++ b/web/react/utils/utils.jsx
@@ -557,6 +557,23 @@ module.exports.splitFileLocation = function(fileLocation) {
     return {'ext': ext, 'name': filename, 'path': filePath};
 }
 
+// Asynchronously gets the size of a file by requesting its headers. If successful, it calls the
+// provided callback with the file size in bytes as the argument.
+module.exports.getFileSize = function(url, callback) {
+    var request = new XMLHttpRequest();
+
+    request.open('HEAD', url, true);
+    request.onreadystatechange = function() {
+        if (request.readyState == 4 && request.status == 200) {
+            if (callback) {
+                callback(parseInt(request.getResponseHeader("content-length")));
+            }
+        }
+    };
+
+    request.send();
+};
+
 module.exports.toTitleCase = function(str) {
     return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
 }
@@ -847,4 +864,20 @@ module.exports.getWindowLocationOrigin = function() {
         windowLocationOrigin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
     }
     return windowLocationOrigin;
+}
+
+// Converts a file size in bytes into a human-readable string of the form "123MB".
+module.exports.fileSizeToString = function(bytes) {
+    // it's unlikely that we'll have files bigger than this
+    if (bytes > 1024 * 1024 * 1024 * 1024) {
+        return Math.floor(bytes / (1024 * 1024 * 1024 * 1024)) + "TB";
+    } else if (bytes > 1024 * 1024 * 1024) {
+        return Math.floor(bytes / (1024 * 1024 * 1024)) + "GB";
+    } else if (bytes > 1024 * 1024) {
+        return Math.floor(bytes / (1024 * 1024)) + "MB";
+    } else if (bytes > 1024) {
+        return Math.floor(bytes / 1024) + "KB";
+    } else {
+        return bytes + "B";
+    }
 };
-- 
cgit v1.2.3-1-g7c22


From b8a69f767c768d3ca0cebc73553a2b37e68e9347 Mon Sep 17 00:00:00 2001
From: hmhealey <harrisonmhealey@gmail.com>
Date: Fri, 24 Jul 2015 17:04:02 -0400
Subject: Added preview images for non-image files

---
 web/react/utils/utils.jsx | 13 +++++++++++++
 1 file changed, 13 insertions(+)

(limited to 'web/react/utils/utils.jsx')

diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx
index aa59201cb..e48ffed9a 100644
--- a/web/react/utils/utils.jsx
+++ b/web/react/utils/utils.jsx
@@ -533,6 +533,19 @@ module.exports.getFileType = function(ext) {
     return "other";
 };
 
+module.exports.getPreviewImagePathForFileType = function(fileType) {
+    fileType = fileType.toLowerCase();
+
+    var icon;
+    if (fileType in Constants.ICON_FROM_TYPE) {
+        icon = Constants.ICON_FROM_TYPE[fileType];
+    } else {
+        icon = Constants.ICON_FROM_TYPE["other"];
+    }
+
+    return "/static/images/icons/" + icon + ".png";
+};
+
 module.exports.getIconClassName = function(fileType) {
     fileType = fileType.toLowerCase();
 
-- 
cgit v1.2.3-1-g7c22


From f66cd5e9773a38cca635d33d91f0ef3b056d94a0 Mon Sep 17 00:00:00 2001
From: hmhealey <harrisonmhealey@gmail.com>
Date: Tue, 28 Jul 2015 11:30:22 -0400
Subject: Added utility function to get a file attachment's url

---
 web/react/utils/utils.jsx | 13 +++++++++++++
 1 file changed, 13 insertions(+)

(limited to 'web/react/utils/utils.jsx')

diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx
index e48ffed9a..d1513dea9 100644
--- a/web/react/utils/utils.jsx
+++ b/web/react/utils/utils.jsx
@@ -894,3 +894,16 @@ module.exports.fileSizeToString = function(bytes) {
         return bytes + "B";
     }
 };
+
+// Converts a filename (like those attached to Post objects) to a url that can be used to retrieve attachments from the server.
+module.exports.getFileUrl = function(filename) {
+    var url = filename;
+
+    // This is a temporary patch to fix issue with old files using absolute paths
+    if (url.indexOf("/api/v1/files/get") != -1) {
+        url = filename.split("/api/v1/files/get")[1];
+    }
+    url = module.exports.getWindowLocationOrigin() + "/api/v1/files/get" + url;
+
+    return url;
+};
-- 
cgit v1.2.3-1-g7c22


From af246bb44b7968b9f880d819e3aa04342846fccc Mon Sep 17 00:00:00 2001
From: hmhealey <harrisonmhealey@gmail.com>
Date: Tue, 28 Jul 2015 16:41:57 -0400
Subject: Updated ViewImage modal dialog to include details about non-image
 files

---
 web/react/utils/utils.jsx | 6 ++++++
 1 file changed, 6 insertions(+)

(limited to 'web/react/utils/utils.jsx')

diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx
index d1513dea9..09240bf06 100644
--- a/web/react/utils/utils.jsx
+++ b/web/react/utils/utils.jsx
@@ -907,3 +907,9 @@ module.exports.getFileUrl = function(filename) {
 
     return url;
 };
+
+// Gets the name of a file (including extension) from a given url or file path.
+module.exports.getFileName = function(path) {
+    var split = path.split('/');
+    return split[split.length - 1];
+};
-- 
cgit v1.2.3-1-g7c22

