diff options
Diffstat (limited to 'web/src/js/utils.js')
| -rw-r--r-- | web/src/js/utils.js | 112 | 
1 files changed, 112 insertions, 0 deletions
diff --git a/web/src/js/utils.js b/web/src/js/utils.js new file mode 100644 index 00000000..40575692 --- /dev/null +++ b/web/src/js/utils.js @@ -0,0 +1,112 @@ +var $ = require("jquery"); +var _ = require("lodash"); +var actions = require("./actions.js"); + +window.$ = $; +window._ = _; +window.React = require("react"); + +var Key = { +    UP: 38, +    DOWN: 40, +    PAGE_UP: 33, +    PAGE_DOWN: 34, +    HOME: 36, +    END: 35, +    LEFT: 37, +    RIGHT: 39, +    ENTER: 13, +    ESC: 27, +    TAB: 9, +    SPACE: 32, +    BACKSPACE: 8, +    SHIFT: 16 +}; +// Add A-Z +for (var i = 65; i <= 90; i++) { +    Key[String.fromCharCode(i)] = i; +} + + +var formatSize = function (bytes) { +    if (bytes === 0) +        return "0"; +    var prefix = ["b", "kb", "mb", "gb", "tb"]; +    for (var i = 0; i < prefix.length; i++) { +        if (Math.pow(1024, i + 1) > bytes) { +            break; +        } +    } +    var precision; +    if (bytes % Math.pow(1024, i) === 0) +        precision = 0; +    else +        precision = 1; +    return (bytes / Math.pow(1024, i)).toFixed(precision) + prefix[i]; +}; + + +var formatTimeDelta = function (milliseconds) { +    var time = milliseconds; +    var prefix = ["ms", "s", "min", "h"]; +    var div = [1000, 60, 60]; +    var i = 0; +    while (Math.abs(time) >= div[i] && i < div.length) { +        time = time / div[i]; +        i++; +    } +    return Math.round(time) + prefix[i]; +}; + + +var formatTimeStamp = function (seconds) { +    var ts = (new Date(seconds * 1000)).toISOString(); +    return ts.replace("T", " ").replace("Z", ""); +}; + +// At some places, we need to sort strings alphabetically descending, +// but we can only provide a key function. +// This beauty "reverses" a JS string. +var end = String.fromCharCode(0xffff); +function reverseString(s) { +    return String.fromCharCode.apply(String, +            _.map(s.split(""), function (c) { +                return 0xffff - c.charCodeAt(0); +            }) +        ) + end; +} + +function getCookie(name) { +    var r = document.cookie.match(new RegExp("\\b" + name + "=([^;]*)\\b")); +    return r ? r[1] : undefined; +} +var xsrf = $.param({_xsrf: getCookie("_xsrf")}); + +//Tornado XSRF Protection. +$.ajaxPrefilter(function (options) { +    if (["post", "put", "delete"].indexOf(options.type.toLowerCase()) >= 0 && options.url[0] === "/") { +        if(options.url.indexOf("?") === -1){ +            options.url += "?" + xsrf; +        } else { +            options.url += "&" + xsrf; +        } +    } +}); +// Log AJAX Errors +$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) { +    if (thrownError === "abort") { +        return; +    } +    var message = jqXHR.responseText; +    console.error(thrownError, message, arguments); +    actions.EventLogActions.add_event(thrownError + ": " + message); +    alert(message); +}); + +module.exports = { +    formatSize: formatSize, +    formatTimeDelta: formatTimeDelta, +    formatTimeStamp: formatTimeStamp, +    reverseString: reverseString, +    Key: Key, +};
\ No newline at end of file  | 
