diff options
Diffstat (limited to 'core/js/js.js')
-rw-r--r-- | core/js/js.js | 408 |
1 files changed, 0 insertions, 408 deletions
diff --git a/core/js/js.js b/core/js/js.js index f82b7e9cec5..9b4114e400e 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -1312,39 +1312,6 @@ function initCore() { $(document).ready(initCore); /** - * Returns a human readable file size - * @param {number} size Size in bytes - * @param {boolean} skipSmallSizes return '< 1 kB' for small files - * @return {string} - */ -function humanFileSize(size, skipSmallSizes) { - var humanList = ['B', 'KB', 'MB', 'GB', 'TB']; - // Calculate Log with base 1024: size = 1024 ** order - var order = size > 0 ? Math.floor(Math.log(size) / Math.log(1024)) : 0; - // Stay in range of the byte sizes that are defined - order = Math.min(humanList.length - 1, order); - var readableFormat = humanList[order]; - var relativeSize = (size / Math.pow(1024, order)).toFixed(1); - if(skipSmallSizes === true && order === 0) { - if(relativeSize !== "0.0"){ - return '< 1 KB'; - } else { - return '0 KB'; - } - } - if(order < 2){ - relativeSize = parseFloat(relativeSize).toFixed(0); - } - else if(relativeSize.substr(relativeSize.length-2,2)==='.0'){ - relativeSize=relativeSize.substr(0,relativeSize.length-2); - } - else{ - relativeSize = parseFloat(relativeSize).toLocaleString(OC.getCanonicalLocale()); - } - return relativeSize + ' ' + readableFormat; -} - -/** * Format an UNIX timestamp to a human understandable format * @param {number} timestamp UNIX timestamp * @return {string} Human readable format @@ -1379,381 +1346,6 @@ function relative_modified_date(timestamp) { return OC.Util.relativeModifiedDate(timestamp * 1000); } -/** - * Utility functions - * @namespace - */ -OC.Util = { - // TODO: remove original functions from global namespace - humanFileSize: humanFileSize, - - /** - * Returns a file size in bytes from a humanly readable string - * Makes 2kB to 2048. - * Inspired by computerFileSize in helper.php - * @param {string} string file size in human readable format - * @return {number} or null if string could not be parsed - * - * - */ - computerFileSize: function (string) { - if (typeof string !== 'string') { - return null; - } - - var s = string.toLowerCase().trim(); - var bytes = null; - - var bytesArray = { - 'b' : 1, - 'k' : 1024, - 'kb': 1024, - 'mb': 1024 * 1024, - 'm' : 1024 * 1024, - 'gb': 1024 * 1024 * 1024, - 'g' : 1024 * 1024 * 1024, - 'tb': 1024 * 1024 * 1024 * 1024, - 't' : 1024 * 1024 * 1024 * 1024, - 'pb': 1024 * 1024 * 1024 * 1024 * 1024, - 'p' : 1024 * 1024 * 1024 * 1024 * 1024 - }; - - var matches = s.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i); - if (matches !== null) { - bytes = parseFloat(s); - if (!isFinite(bytes)) { - return null; - } - } else { - return null; - } - if (matches[5]) { - bytes = bytes * bytesArray[matches[5]]; - } - - bytes = Math.round(bytes); - return bytes; - }, - - /** - * @param timestamp - * @param format - * @returns {string} timestamp formatted as requested - */ - formatDate: function (timestamp, format) { - format = format || "LLL"; - return moment(timestamp).format(format); - }, - - /** - * @param timestamp - * @returns {string} human readable difference from now - */ - relativeModifiedDate: function (timestamp) { - var diff = moment().diff(moment(timestamp)); - if (diff >= 0 && diff < 45000 ) { - return t('core', 'seconds ago'); - } - return moment(timestamp).fromNow(); - }, - - /** - * Returns whether this is IE - * - * @return {bool} true if this is IE, false otherwise - */ - isIE: function() { - return $('html').hasClass('ie'); - }, - - /** - * Returns the width of a generic browser scrollbar - * - * @return {int} width of scrollbar - */ - getScrollBarWidth: function() { - if (this._scrollBarWidth) { - return this._scrollBarWidth; - } - - var inner = document.createElement('p'); - inner.style.width = "100%"; - inner.style.height = "200px"; - - var outer = document.createElement('div'); - outer.style.position = "absolute"; - outer.style.top = "0px"; - outer.style.left = "0px"; - outer.style.visibility = "hidden"; - outer.style.width = "200px"; - outer.style.height = "150px"; - outer.style.overflow = "hidden"; - outer.appendChild (inner); - - document.body.appendChild (outer); - var w1 = inner.offsetWidth; - outer.style.overflow = 'scroll'; - var w2 = inner.offsetWidth; - if(w1 === w2) { - w2 = outer.clientWidth; - } - - document.body.removeChild (outer); - - this._scrollBarWidth = (w1 - w2); - - return this._scrollBarWidth; - }, - - /** - * Remove the time component from a given date - * - * @param {Date} date date - * @return {Date} date with stripped time - */ - stripTime: function(date) { - // FIXME: likely to break when crossing DST - // would be better to use a library like momentJS - return new Date(date.getFullYear(), date.getMonth(), date.getDate()); - }, - - _chunkify: function(t) { - // Adapted from http://my.opera.com/GreyWyvern/blog/show.dml/1671288 - var tz = [], x = 0, y = -1, n = 0, code, c; - - while (x < t.length) { - c = t.charAt(x); - // only include the dot in strings - var m = ((!n && c === '.') || (c >= '0' && c <= '9')); - if (m !== n) { - // next chunk - y++; - tz[y] = ''; - n = m; - } - tz[y] += c; - x++; - } - return tz; - }, - /** - * Compare two strings to provide a natural sort - * @param a first string to compare - * @param b second string to compare - * @return -1 if b comes before a, 1 if a comes before b - * or 0 if the strings are identical - */ - naturalSortCompare: function(a, b) { - var x; - var aa = OC.Util._chunkify(a); - var bb = OC.Util._chunkify(b); - - for (x = 0; aa[x] && bb[x]; x++) { - if (aa[x] !== bb[x]) { - var aNum = Number(aa[x]), bNum = Number(bb[x]); - // note: == is correct here - if (aNum == aa[x] && bNum == bb[x]) { - return aNum - bNum; - } else { - // Note: This locale setting isn't supported by all browsers but for the ones - // that do there will be more consistency between client-server sorting - return aa[x].localeCompare(bb[x], OC.getLanguage()); - } - } - } - return aa.length - bb.length; - }, - /** - * Calls the callback in a given interval until it returns true - * @param {function} callback - * @param {integer} interval in milliseconds - */ - waitFor: function(callback, interval) { - var internalCallback = function() { - if(callback() !== true) { - setTimeout(internalCallback, interval); - } - }; - - internalCallback(); - }, - /** - * Checks if a cookie with the given name is present and is set to the provided value. - * @param {string} name name of the cookie - * @param {string} value value of the cookie - * @return {boolean} true if the cookie with the given name has the given value - */ - isCookieSetToValue: function(name, value) { - var cookies = document.cookie.split(';'); - for (var i=0; i < cookies.length; i++) { - var cookie = cookies[i].split('='); - if (cookie[0].trim() === name && cookie[1].trim() === value) { - return true; - } - } - return false; - } -}; - -/** - * Utility class for the history API, - * includes fallback to using the URL hash when - * the browser doesn't support the history API. - * - * @namespace - */ -OC.Util.History = { - _handlers: [], - - /** - * Push the current URL parameters to the history stack - * and change the visible URL. - * Note: this includes a workaround for IE8/IE9 that uses - * the hash part instead of the search part. - * - * @param {Object|string} params to append to the URL, can be either a string - * or a map - * @param {string} [url] URL to be used, otherwise the current URL will be used, - * using the params as query string - * @param {boolean} [replace=false] whether to replace instead of pushing - */ - _pushState: function(params, url, replace) { - var strParams; - if (typeof(params) === 'string') { - strParams = params; - } - else { - strParams = OC.buildQueryString(params); - } - if (window.history.pushState) { - url = url || location.pathname + '?' + strParams; - // Workaround for bug with SVG and window.history.pushState on Firefox < 51 - // https://bugzilla.mozilla.org/show_bug.cgi?id=652991 - var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; - if (isFirefox && parseInt(navigator.userAgent.split('/').pop()) < 51) { - var patterns = document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]'); - for (var i = 0, ii = patterns.length, pattern; i < ii; i++) { - pattern = patterns[i]; - pattern.style.fill = pattern.style.fill; - pattern.style.stroke = pattern.style.stroke; - pattern.removeAttribute("filter"); - pattern.setAttribute("filter", "url(#invert)"); - } - } - if (replace) { - window.history.replaceState(params, '', url); - } else { - window.history.pushState(params, '', url); - } - } - // use URL hash for IE8 - else { - window.location.hash = '?' + strParams; - // inhibit next onhashchange that just added itself - // to the event queue - this._cancelPop = true; - } - }, - - /** - * Push the current URL parameters to the history stack - * and change the visible URL. - * Note: this includes a workaround for IE8/IE9 that uses - * the hash part instead of the search part. - * - * @param {Object|string} params to append to the URL, can be either a string - * or a map - * @param {string} [url] URL to be used, otherwise the current URL will be used, - * using the params as query string - */ - pushState: function(params, url) { - return this._pushState(params, url, false); - }, - - /** - * Push the current URL parameters to the history stack - * and change the visible URL. - * Note: this includes a workaround for IE8/IE9 that uses - * the hash part instead of the search part. - * - * @param {Object|string} params to append to the URL, can be either a string - * or a map - * @param {string} [url] URL to be used, otherwise the current URL will be used, - * using the params as query string - */ - replaceState: function(params, url) { - return this._pushState(params, url, true); - }, - - /** - * Add a popstate handler - * - * @param handler function - */ - addOnPopStateHandler: function(handler) { - this._handlers.push(handler); - }, - - /** - * Parse a query string from the hash part of the URL. - * (workaround for IE8 / IE9) - */ - _parseHashQuery: function() { - var hash = window.location.hash, - pos = hash.indexOf('?'); - if (pos >= 0) { - return hash.substr(pos + 1); - } - if (hash.length) { - // remove hash sign - return hash.substr(1); - } - return ''; - }, - - _decodeQuery: function(query) { - return query.replace(/\+/g, ' '); - }, - - /** - * Parse the query/search part of the URL. - * Also try and parse it from the URL hash (for IE8) - * - * @return map of parameters - */ - parseUrlQuery: function() { - var query = this._parseHashQuery(), - params; - // try and parse from URL hash first - if (query) { - params = OC.parseQueryString(this._decodeQuery(query)); - } - // else read from query attributes - params = _.extend(params || {}, OC.parseQueryString(this._decodeQuery(location.search))); - return params || {}; - }, - - _onPopState: function(e) { - if (this._cancelPop) { - this._cancelPop = false; - return; - } - var params; - if (!this._handlers.length) { - return; - } - params = (e && e.state); - if (_.isString(params)) { - params = OC.parseQueryString(params); - } else if (!params) { - params = this.parseUrlQuery() || {}; - } - for (var i = 0; i < this._handlers.length; i++) { - this._handlers[i](params); - } - } -}; - // fallback to hashchange when no history support if (window.history.pushState) { window.onpopstate = _.bind(OC.Util.History._onPopState, OC.Util.History); |