{ "version": 3, "sources": ["../ui/app/components/mn_filters.js"], "sourcesContent": ["/*\n Copyright 2020-Present Couchbase, Inc.\n\n Use of this software is governed by the Business Source License included in\n the file licenses/BSL-Couchbase.txt. As of the Change Date specified in that\n file, in accordance with the Business Source License, use of this software will\n be governed by the Apache License, Version 2.0, included in the file\n licenses/APL2.txt.\n*/\n\nimport angular from 'angular';\nimport _ from 'lodash';\n\nimport mnPoolDefault from './mn_pool_default.js';\n\nexport default 'mnFilters';\n\nangular\n .module('mnFilters', [mnPoolDefault])\n .filter('mnCount', mnCount)\n .filter('removeEmptyValue', removeEmptyValue)\n .filter('formatProgressMessage', formatProgressMessage)\n .filter('mnCloneOnlyData', mnCloneOnlyData)\n .filter('$httpParamSerializerJQLike', [\"$httpParamSerializerJQLike\", httpParamSerializerJQLike])\n .filter('mnParseHttpDate', mnParseHttpDate)\n .filter('mnPrepareQuantity', mnPrepareQuantity)\n .filter('mnCalculatePercent', mnCalculatePercent)\n .filter('mnEllipsisiseOnLeft', mnEllipsisiseOnLeft)\n .filter('mnRescaleForSum', mnRescaleForSum)\n .filter('mnNaturalSorting', mnNaturalSorting)\n .filter('mnMakeSafeForCSS', mnMakeSafeForCSS)\n .filter('mnStripPortHTML', [\"mnPoolDefault\", mnStripPortHTML])\n .filter('mnTruncateTo3Digits', mnTruncateTo3Digits)\n .filter('mnFormatQuantity', [\"mnPrepareQuantityFilter\", \"mnTruncateTo3DigitsFilter\", mnFormatQuantity])\n .filter('mnFormatMemSize', [\"mnFormatQuantityFilter\", mnFormatMemSize])\n .filter('mnFormatUptime', mnFormatUptime)\n .filter('mnMBtoBytes', [\"IEC\", mnMBtoBytes])\n .filter('mnBytesToMB', [\"IEC\", mnBytesToMB])\n .filter('parseVersion', parseVersion)\n .filter('mnMajorMinorVersion', [\"parseVersionFilter\", mnMajorMinorVersion])\n .filter('getStringBytes', getStringBytes)\n .filter('mnFormatServices', mnFormatServices)\n .filter('mnOrderServices', mnOrderServices)\n .filter('mnPrettyVersion', [\"parseVersionFilter\", mnPrettyVersion])\n .filter('encodeURIComponent', encodeURIComponentFilter)\n .filter('mnTrustAsHtml', [\"$sce\", mnTrustAsHtml])\n .filter('mnMath', mnMath)\n .filter('lodash', mnLodash)\n .filter('isDisabled', isDisabled)\n .filter('mnIntegerToString', mnIntegerToString)\n .filter('mnFormatStorageMode', mnFormatStorageMode)\n .filter('mnLimitTo', mnLimitTo)\n .filter('jQueryLikeParamSerializer', jQueryLikeParamSerializer)\n .filter('decodeCompatVersion', decodeCompatVersion)\n .filter('mnMsToTime', mnMsToTime)\n .filter('mnServersListFilter', [\"$filter\", \"mnFormatServicesFilter\", mnServersListFilter])\n .filter(\"formatFailoverWarnings\", formatFailoverWarnings);\n\n\n\nfunction formatFailoverWarnings() {\n return function (warning) {\n switch (warning) {\n case 'rebalanceNeeded':\n return 'Rebalance required, some data is not currently replicated.';\n case 'hardNodesNeeded':\n return 'At least two servers with the data service are required to provide replication.';\n case 'softNodesNeeded':\n return 'Additional active servers or server groups required to provide the desired number of replicas.';\n case 'softRebalanceNeeded':\n return 'Rebalance recommended, some data does not have the desired replicas configuration.';\n case 'unbalancedServerGroups':\n return 'Server groups are unbalanced; this may result in uneven load distrubution.';\n default: return warning;\n }\n };\n}\n\n\n\n//filter by multiple strictly defined fields in the node\n//e.g filterField -> \"apple 0.0.0.0 data\"\n//will return all kv nodes which run on macos 0.0.0.0 host\nfunction mnServersListFilter($filter, mnFormatServicesFilter) {\n return function (nodes, searchValue, groupsByHostname) {\n return $filter('filter')(nodes, function (node) {\n if (searchValue === \"\" || searchValue === undefined) {\n return true;\n }\n\n var interestingFields = [\"hostname\", \"status\"];\n var l2 = interestingFields.length;\n var i2;\n var searchFiled;\n searchValue = searchValue.toLowerCase();\n var rv = false;\n\n //look in services\n if ($filter('orderBy')(node.services.map(function (node) {\n return mnFormatServicesFilter(node).toLowerCase();\n })).join(\" \").indexOf(searchValue) > -1) {\n rv = true;\n }\n\n //look in interestingFields\n loop2:\n for (i2 = 0; i2 < l2; i2++) {\n searchFiled = interestingFields[i2];\n if (node[searchFiled].toLowerCase().indexOf(searchValue) > -1) {\n rv = true;\n break loop2;\n }\n }\n\n //look in group name\n if (!rv && groupsByHostname && groupsByHostname[node.hostname] &&\n groupsByHostname[node.hostname].name.toLowerCase().indexOf(searchValue) > -1) {\n rv = true;\n }\n\n return rv;\n });\n }\n}\n\nfunction decodeCompatVersion() {\n return function (version) {\n var major = Math.floor(version / 0x10000);\n var minor = version - (major * 0x10000);\n return major.toString() + \".\" + minor.toString();\n }\n}\n\n//function is borrowed from the Angular source code because we want to\n//use $httpParamSerializerJQLik but with properly encoded params via\n//encodeURIComponent since it uses correct application/x-www-form-urlencoded\n//encoding algorithm, in accordance with\n//https://www.w3.org/TR/html5/forms.html#url-encoded-form-data\nfunction jQueryLikeParamSerializer() {\n return function (params) {\n if (!params) {\n return '';\n }\n var parts = [];\n serialize(params, '', true);\n return parts.join('&');\n\n function serializeValue(v) {\n if (angular.isObject(v)) {\n return angular.isDate(v) ? v.toISOString() : angular.toJson(v);\n }\n if (v === null || angular.isUndefined(v)) {\n return \"\";\n }\n return v;\n }\n\n function serialize(toSerialize, prefix, topLevel) {\n if (angular.isArray(toSerialize)) {\n angular.forEach(toSerialize, function (value, index) {\n serialize(value, prefix + (angular.isObject(value) ? '[' + index + ']' : ''));\n });\n } else if (angular.isObject(toSerialize) && !angular.isDate(toSerialize)) {\n angular.forEach(toSerialize, function (value, key) {\n serialize(value, prefix +\n (topLevel ? '' : '[') +\n key +\n (topLevel ? '' : ']'));\n });\n } else {\n parts.push(encodeURIComponent(prefix) + '=' + encodeURIComponent(serializeValue(toSerialize)));\n }\n }\n }\n}\n\n//angular limitTo uses slice in order to truncate sting\n//the method is very slow in case string is very big\n//therefore we use the substring method here\nfunction mnLimitTo() {\n return function (string, limit) {\n if (string === undefined) {\n return \"\";\n }\n return (angular.isString(string) ? string : angular.toJson(string)).substring(0, limit);\n }\n}\nfunction mnFormatStorageMode() {\n return function (value, isEnterprise) {\n switch (value) {\n case \"plasma\": return \"Standard GSI\";\n case \"forestdb\": return (isEnterprise ? \"Legacy\" : \"Standard\") + \" GSI\";\n case \"memory_optimized\": return \"Memory Optimized GSI\";\n default: return value;\n }\n };\n}\n\nfunction mnLodash() {\n return function (/*lodash medthod and args..*/) {\n var args = Array.prototype.slice.call(arguments, 0);\n var method = args.shift();\n return _[method].apply(_, args);\n };\n}\n\nfunction isDisabled() {\n //TODO implement this across entire app\n return function ($event) {\n return angular.element($event.currentTarget).hasClass(\"dynamic_disabled\");\n };\n}\n\nfunction mnMath() {\n return function () {\n var args = Array.prototype.slice.call(arguments, 0);\n var method = args.shift();\n return Math[method].apply(null, args);\n }\n}\n\nfunction mnTrustAsHtml($sce) {\n return function (html) {\n return $sce.trustAsHtml(html);\n };\n}\nvar basedigits = \"0123456789ABCDEF\";\nfunction mnIntegerToString() {\n return function (number, base) {\n var rv = [];\n var sign = '';\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n do {\n var r = number % base;\n number = (number / base) >> 0;\n rv.push(basedigits.charAt(r));\n } while (number != 0);\n rv.push(sign);\n rv.reverse();\n return rv.join('');\n }\n}\n\nfunction mnCount() {\n return function (count, text) {\n if (count == null) {\n return '?' + text + '(s)';\n }\n count = Number(count);\n if (count > 1) {\n var lastWord = text.split(/\\s+/).slice(-1)[0];\n var specialPluralizations = {\n 'copy': 'copies'\n };\n var specialCase = specialPluralizations[lastWord];\n if (specialCase) {\n text = specialCase;\n } else {\n text += 's';\n }\n }\n return [String(count), ' ', text].join('');\n };\n}\nfunction removeEmptyValue() {\n return function (object) {\n return _.transform(_.clone(object), function (result, n, key) {\n if (n === \"\") {\n return;\n }\n result[key] = n;\n });\n };\n}\nfunction addNodeCount(perNode) {\n var serversCount = (_.keys(perNode) || []).length;\n return serversCount + \" \" + (serversCount === 1 ? 'node' : 'nodes');\n}\nfunction formatProgressMessage() {\n return function (task, includeRebalance) {\n switch (task.type) {\n case \"indexer\":\n return \"building view index \" + task.bucket + \"/\" + task.designDocument;\n case \"global_indexes\":\n return \"building index \" + task.index + \" on bucket \" + task.bucket;\n case \"view_compaction\":\n return \"compacting view index \" + task.bucket + \"/\" + task.designDocument;\n case \"bucket_compaction\":\n return \"compacting bucket \" + task.bucket;\n case \"loadingSampleBucket\":\n return \"loading sample: \" + task.bucket;\n case \"orphanBucket\":\n return \"orphan bucket: \" + task.bucket;\n case \"clusterLogsCollection\":\n return \"collecting logs from \" + addNodeCount(task.perNode);\n case \"rebalance\":\n return !!includeRebalance;\n }\n };\n}\nfunction mnCloneOnlyData() {\n return function (data) {\n return JSON.parse(JSON.stringify(data));\n };\n}\nfunction httpParamSerializerJQLike($httpParamSerializerJQLike) {\n return $httpParamSerializerJQLike;\n}\nfunction mnParseHttpDate() {\n var rfc1123RE = /^\\s*[a-zA-Z]+, ([0-9][0-9]) ([a-zA-Z]+) ([0-9]{4,4}) ([0-9]{2,2}):([0-9]{2,2}):([0-9]{2,2}) GMT\\s*$/m;\n var rfc850RE = /^\\s*[a-zA-Z]+, ([0-9][0-9])-([a-zA-Z]+)-([0-9]{2,2}) ([0-9]{2,2}):([0-9]{2,2}):([0-9]{2,2}) GMT\\s*$/m;\n var asctimeRE = /^\\s*[a-zA-Z]+ ([a-zA-Z]+) ((?:[0-9]| )[0-9]) ([0-9]{2,2}):([0-9]{2,2}):([0-9]{2,2}) ([0-9]{4,4})\\s*$/m;\n\n var monthDict = {};\n\n (function () {\n var monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n\n for (var i = monthNames.length-1; i >= 0; i--) {\n var name = monthNames[i];\n var shortName = name.substring(0, 3);\n monthDict[name] = i;\n monthDict[shortName] = i;\n }\n })();\n\n var badDateException;\n (function () {\n try {\n throw {};\n } catch (e) {\n badDateException = e;\n }\n })();\n function parseMonth(month) {\n var number = monthDict[month];\n if (number === undefined)\n throw badDateException;\n return number;\n }\n function doParseHTTPDate(date) {\n var match;\n let day;\n let month;\n let year;\n let hour;\n let minute;\n let second;\n if ((match = rfc1123RE.exec(date)) || (match = rfc850RE.exec(date))) {\n day = parseInt(match[1], 10);\n month = parseMonth(match[2]);\n year = parseInt(match[3], 10);\n\n hour = parseInt(match[4], 10);\n minute = parseInt(match[5], 10);\n second = parseInt(match[6], 10);\n\n return new Date(Date.UTC(year, month, day, hour, minute, second));\n } else if ((match = asctimeRE.exec(date))) {\n month = parseMonth(match[1]);\n day = parseInt(match[2], 10);\n\n hour = parseInt(match[3], 10);\n minute = parseInt(match[4], 10);\n second = parseInt(match[5], 10);\n\n year = parseInt(match[6], 10);\n\n return new Date(Date.UTC(year, month, day, hour, minute, second));\n } else {\n throw badDateException;\n }\n }\n\n return function (date, badDate) {\n try {\n return doParseHTTPDate(date);\n } catch (e) {\n if (e === badDateException) {\n return badDate || (new Date());\n }\n throw e;\n }\n }\n}\nfunction mnPrepareQuantity() {\n return function (value, K) {\n K = K || 1024;\n\n var M = K*K;\n var G = M*K;\n var T = G*K;\n\n if (K !== 1024 && K !== 1000) {\n throw new Error(\"Unknown number system\");\n }\n\n var t = _.detect([[T,'T'],[G,'G'],[M,'M'],[K,'K']], function (t) {\n return value >= t[0];\n }) || [1, ''];\n\n if (K === 1024) {\n t[1] += t[1] ? 'iB' : 'B';\n }\n\n return t;\n };\n}\nfunction mnCalculatePercent() {\n return function (value, total) {\n return (value * 100 / total) >> 0;\n };\n}\nfunction mnEllipsisiseOnLeft() {\n return function (text, length) {\n if (length <= 3) {\n // asking for stupidly short length will cause this to do\n // nothing\n return text;\n }\n if (text.length > length) {\n return \"...\" + text.slice(3-length);\n }\n return text;\n };\n}\nfunction mnRescaleForSum() {\n // proportionaly rescales values so that their sum is equal to given\n // number. Output values need to be integers. This particular\n // algorithm tries to minimize total rounding error. The basic approach\n // is same as in Brasenham line/circle drawing algorithm.\n return function (newSum, values, oldSum) {\n if (oldSum == null) {\n oldSum = _.inject(values, function (a,v) {return a+v;}, 0);\n }\n // every value needs to be multiplied by newSum / oldSum\n var error = 0;\n var outputValues = new Array(values.length);\n for (var i = 0; i < outputValues.length; i++) {\n var v = values[i];\n v *= newSum;\n v += error;\n error = v % oldSum;\n outputValues[i] = Math.floor(v / oldSum);\n }\n return outputValues;\n };\n}\nfunction mnNaturalSorting() {\n /*\n * Natural Sort algorithm for Javascript - Version 0.6 - Released under MIT license\n * Author: Jim Palmer (based on chunking idea from Dave Koelle)\n * Contributors: Mike Grier (mgrier.com), Clint Priest, Kyle Adams, guillermo\n *\n * Alterations: removed date and hex parsing/sorting\n */\n return function naturalSort(a, b) {\n var re = /(^-?[0-9]+(\\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi,\n sre = /(^[ ]*|[ ]*$)/g,\n ore = /^0/,\n // convert all to strings and trim()\n x = a.toString().replace(sre, '') || '',\n y = b.toString().replace(sre, '') || '',\n // chunk/tokenize\n xN = x.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\n yN = y.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0');\n // natural sorting through split numeric strings and default strings\n for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {\n // find floats not starting with '0', string or 0 if not defined (Clint Priest)\n var oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;\n var oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;\n // handle numeric vs string comparison - number < string - (Kyle Adams)\n if (isNaN(oFxNcL) !== isNaN(oFyNcL)) return (isNaN(oFxNcL)) ? 1 : -1;\n // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\n else if (typeof oFxNcL !== typeof oFyNcL) {\n oFxNcL += '';\n oFyNcL += '';\n }\n if (oFxNcL < oFyNcL) return -1;\n if (oFxNcL > oFyNcL) return 1;\n }\n return 0;\n };\n}\nfunction mnMakeSafeForCSS() {\n return function (name) {\n return name.replace(/[^a-z0-9]/g, function (s) {\n var c = s.charCodeAt(0);\n if (c == 32) return '-';\n if (c >= 65 && c <= 90) return '_' + s.toLowerCase();\n return '__' + ('000' + c.toString(16)).slice(-4);\n });\n };\n}\nfunction mnStripPortHTML(mnPoolDefault) {\n return function (hostname) {\n if (mnPoolDefault.export.isStrippingPort) {\n return hostname.replace(/:8091$/, '');\n }\n return hostname;\n };\n}\nfunction mnTruncateTo3Digits() {\n return function (value, leastScale, roundMethod) {\n if (!value) {\n return 0;\n }\n var scale = _.detect([100, 10, 1, 0.1, 0.01, 0.001], function (v) {return value >= v;}) || 0.0001;\n if (leastScale != undefined && leastScale > scale) {\n scale = leastScale;\n }\n scale = 100 / scale;\n return Math[roundMethod || \"round\"](value*scale)/scale;\n };\n}\nfunction mnFormatQuantity(mnPrepareQuantityFilter, mnTruncateTo3DigitsFilter) {\n return function (value, numberSystem, spacing) {\n if (!value && !_.isNumber(value)) {\n return value;\n }\n if (!spacing) {\n spacing = '';\n }\n if (numberSystem === 1000 && value <= 1100 && value % 1 === 0) { // MB-11784\n return value;\n }\n\n var t = mnPrepareQuantityFilter(value, numberSystem);\n return [mnTruncateTo3DigitsFilter(value/t[0], undefined, \"floor\"), spacing, t[1]].join('');\n };\n}\nfunction mnFormatMemSize(mnFormatQuantityFilter) {\n return function (value) {\n return mnFormatQuantityFilter(value);\n };\n}\nfunction mnMsToTime() {\n return function (ms) {\n var h, m, s;\n s = Math.floor(ms / 1000);\n m = Math.floor(s / 60);\n s = s % 60;\n h = Math.floor(m / 60);\n m = m % 60;\n\n return (h ? (h + ':') : '') +\n ((m > 9) ? m : (\"0\" + m)) + \":\" + ((s > 9) ? s : (\"0\" + s));\n }\n}\nfunction mnFormatUptime() {\n return function (seconds, precision) {\n precision = precision || 8;\n\n var arr = [[86400, \"days\", \"day\"],\n [3600, \"hours\", \"hour\"],\n [60, \"minutes\", \"minute\"],\n [1, \"seconds\", \"second\"]];\n\n var rv = [];\n\n _.each(arr, function (item) {\n var period = item[0];\n var value = (seconds / period) >> 0;\n seconds -= value * period;\n if (value) {\n rv.push(String(value) + ' ' + (value > 1 ? item[1] : item[2]));\n }\n return !!--precision;\n });\n return rv.join(', ');\n };\n}\nfunction mnMBtoBytes(IEC) {\n return function (MB) {\n return MB * IEC.Mi;\n };\n}\nfunction mnBytesToMB(IEC) {\n return function (bytes) {\n return Math.floor(bytes / IEC.Mi);\n };\n}\nfunction parseVersion() {\n return function (str) {\n if (!str) {\n return;\n }\n // Expected string format:\n // {release version}-{build #}-{Release type or SHA}-{enterprise / community}\n // Example: \"1.8.0-9-ga083a1e-enterprise\"\n var a = str.split(/[-_]/);\n if (a.length === 3) {\n // Example: \"1.8.0-9-enterprise\"\n // {release version}-{build #}-{enterprise / community}\n a.splice(2, 0, undefined);\n }\n a[0] = (a[0].match(/[0-9]+\\.[0-9]+\\.[0-9]+/) || [\"0.0.0\"])[0];\n a[1] = a[1] || \"0\";\n // a[2] = a[2] || \"unknown\";\n // We append the build # to the release version when we display in the UI so that\n // customers think of the build # as a descriptive piece of the version they're\n // running (which in the case of maintenance packs and one-off's, it is.)\n a[3] = (a[3] && (a[3].substr(0, 1).toUpperCase() + a[3].substr(1))) || \"DEV\";\n return a; // Example result: [\"1.8.0-9\", \"9\", \"ga083a1e\", \"Enterprise\"]\n }\n}\nfunction mnMajorMinorVersion(parseVersionFilter) {\n return function (str) {\n let versionStr = parseVersionFilter(str);\n if (!versionStr || !versionStr.length) {\n return;\n }\n\n // Example result: {major}.{minor} - \"6.5\"\n return versionStr[0].split('.').splice(0,2).join('.');\n }\n}\nfunction getStringBytes() {\n return function (countMe) {\n if (!_.isString(countMe)) {\n return 0;\n }\n var escapedStr = encodeURI(countMe);\n var escapedStrLength = escapedStr.length;\n\n if (escapedStr.indexOf(\"%\") != -1) {\n var count = escapedStr.split(\"%\").length - 1 || 1;\n return count + (escapedStrLength - (count * 3));\n } else {\n return escapedStrLength;\n }\n }\n}\nfunction mnFormatServices() {\n return function (service) {\n switch (service) {\n case 'kv': return 'Data';\n case 'query':\n case 'n1ql': return 'Query';\n case 'index': return 'Index';\n case 'fts': return 'Search';\n case 'eventing': return 'Eventing';\n case 'cbas': return 'Analytics';\n case 'backup': return 'Backup';\n default: return service;\n }\n }\n}\n\nfunction mnOrderServices() {\n let order = [\"kv\", \"n1ql\", \"index\", \"fts\", \"cbas\", \"eventing\", \"backup\"];\n return function (services) {\n return services.slice().sort((a, b) =>\n order.indexOf(a) - order.indexOf(b));\n }\n}\n\nfunction mnPrettyVersion(parseVersionFilter) {\n\n return function (str, full) {\n if (!str) {\n return;\n }\n var a = parseVersionFilter(str);\n // Example default result: \"Enterprise Edition 1.8.0-7 build 7\"\n // Example full result: \"Enterprise Edition 1.8.0-7 build 7-g35c9cdd\"\n var suffix = \"\";\n if (full && a[2]) {\n suffix = '-' + a[2];\n }\n return [a[3], \"Edition\", a[0], \"build\", a[1] + suffix].join(' ');\n };\n}\nfunction encodeURIComponentFilter() {\n return encodeURIComponent;\n}\n"], "mappings": "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", "names": [] }