blob: 53bef2a61c3477209fe328393bd830333b5ec596 [file] [log] [blame]
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
// This file creates a set of helper functions that will be loaded for all html
// templates. These functions should be self contained and not rely on any
// external dependencies as they are loaded prior to the application. We may
// want to change this later, but for now this should be thought of as a
// "purely functional" helper system.
import constants from "./constants";
import app from "./initialize";
import utils from "./core/utils";
import moment from "moment";
import url from "url";
import {get} from "./core/ajax";
import _ from 'lodash';
var Helpers = {};
Helpers.removeSpecialCharacters = utils.removeSpecialCharacters;
Helpers.safeURL = utils.safeURLName;
Helpers.imageUrl = function (path) {
// TODO: add dynamic path for different deploy targets
return path;
};
Helpers.getDocUrl = function (key) {
return (_.has(constants.DOC_URLS, key)) ? constants.DOC_URLS[key] : '#';
};
// File size pretty printing, taken from futon.format.js
Helpers.formatSize = function (size, decimals = 1) {
var jump = 512;
if (size < jump) return size + " bytes";
var units = ["KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
var i = 0;
while (size >= jump && i < units.length) {
i += 1;
size /= 1024;
}
return size.toFixed(decimals) + ' ' + units[i - 1];
};
Helpers.formatDate = function (timestamp) {
return moment(timestamp, 'X').format('MMM Do, h:mm:ss a');
};
Helpers.getDateFromNow = function (timestamp) {
return moment(timestamp, 'X').fromNow();
};
Helpers.escapeJQuerySelector = function (selector) {
return selector && selector.replace(/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g, "\\$&");
};
Helpers.getApiUrl = endpointRoute => {
if (app.host.endsWith('/') && endpointRoute.startsWith("/")) {
endpointRoute = endpointRoute.substr(1);
}
return url.resolve(window.location.href, app.host + endpointRoute);
};
Helpers.getServerUrl = endpointRoute => {
if (app.host.endsWith('/') && endpointRoute.startsWith("/")) {
endpointRoute = endpointRoute.substr(1);
}
return app.host + endpointRoute;
};
Helpers.getRootUrl = ({origin, pathname} = window.location) => {
return url.resolve(origin + pathname, app.host);
};
Helpers.getUUID = function (count = 1) {
const url = Helpers.getServerUrl(`/_uuids?count=${count}`);
return get(url);
};
/**
* Determine if the current application is running on IE10 or IE11
* @returns {boolean} True if on IE10 or IE11. Otherwise false.
*/
Helpers.isIE1X = function() {
return document.documentMode == 11 || document.documentMode == 10;
};
export default Helpers;