Download libs/jqplot/jqplot.sprintf.js from Leon4gr45/matomo: direct link, hf CLI and curl.
- Browser
- Download file 14.4 kB
-
https://huggingface.co/spaces/Leon4gr45/matomo/resolve/main/libs/jqplot/jqplot.sprintf.js
- Command line
-
hf download hf://spaces/Leon4gr45/matomo/libs/jqplot/jqplot.sprintf.js
-
curl -L -o jqplot.sprintf.js https://huggingface.co/spaces/Leon4gr45/matomo/resolve/main/libs/jqplot/jqplot.sprintf.js
14.4 kB
| /** | |
| * jqPlot | |
| * Pure JavaScript plotting plugin using jQuery | |
| * | |
| * Version: @VERSION | |
| * Revision: @REVISION | |
| * | |
| * Copyright (c) 2009-2013 Chris Leonello | |
| * jqPlot is currently available for use in all personal or commercial projects | |
| * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL | |
| * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can | |
| * choose the license that best suits your project and use it accordingly. | |
| * | |
| * Although not required, the author would appreciate an email letting him | |
| * know of any substantial use of jqPlot. You can reach the author at: | |
| * chris at jqplot dot com or see http://www.jqplot.com/info.php . | |
| * | |
| * If you are feeling kind and generous, consider supporting the project by | |
| * making a donation at: http://www.jqplot.com/donate.php . | |
| * | |
| * sprintf functions contained in jqplot.sprintf.js by Ash Searle: | |
| * | |
| * version 2007.04.27 | |
| * author Ash Searle | |
| * http://hexmen.com/blog/2007/03/printf-sprintf/ | |
| * http://hexmen.com/js/sprintf.js | |
| * The author (Ash Searle) has placed this code in the public domain: | |
| * "This code is unrestricted: you are free to use it however you like." | |
| * | |
| */ | |
| (function($) { | |
| /** | |
| * JavaScript printf/sprintf functions. | |
| * | |
| * This code has been adapted from the publicly available sprintf methods | |
| * by Ash Searle. His original header follows: | |
| * | |
| * This code is unrestricted: you are free to use it however you like. | |
| * | |
| * The functions should work as expected, performing left or right alignment, | |
| * truncating strings, outputting numbers with a required precision etc. | |
| * | |
| * For complex cases, these functions follow the Perl implementations of | |
| * (s)printf, allowing arguments to be passed out-of-order, and to set the | |
| * precision or length of the output based on arguments instead of fixed | |
| * numbers. | |
| * | |
| * See http://perldoc.perl.org/functions/sprintf.html for more information. | |
| * | |
| * Implemented: | |
| * - zero and space-padding | |
| * - right and left-alignment, | |
| * - base X prefix (binary, octal and hex) | |
| * - positive number prefix | |
| * - (minimum) width | |
| * - precision / truncation / maximum width | |
| * - out of order arguments | |
| * | |
| * Not implemented (yet): | |
| * - vector flag | |
| * - size (bytes, words, long-words etc.) | |
| * | |
| * Will not implement: | |
| * - %n or %p (no pass-by-reference in JavaScript) | |
| * | |
| * @version 2007.04.27 | |
| * @author Ash Searle | |
| * | |
| * You can see the original work and comments on his blog: | |
| * http://hexmen.com/blog/2007/03/printf-sprintf/ | |
| * http://hexmen.com/js/sprintf.js | |
| */ | |
| /** | |
| * @Modifications 2009.05.26 | |
| * @author Chris Leonello | |
| * | |
| * Added %p %P specifier | |
| * Acts like %g or %G but will not add more significant digits to the output than present in the input. | |
| * Example: | |
| * Format: '%.3p', Input: 0.012, Output: 0.012 | |
| * Format: '%.3g', Input: 0.012, Output: 0.0120 | |
| * Format: '%.4p', Input: 12.0, Output: 12.0 | |
| * Format: '%.4g', Input: 12.0, Output: 12.00 | |
| * Format: '%.4p', Input: 4.321e-5, Output: 4.321e-5 | |
| * Format: '%.4g', Input: 4.321e-5, Output: 4.3210e-5 | |
| * | |
| * Example: | |
| * >>> $.jqplot.sprintf('%.2f, %d', 23.3452, 43.23) | |
| * "23.35, 43" | |
| * >>> $.jqplot.sprintf("no value: %n, decimal with thousands separator: %'d", 23.3452, 433524) | |
| * "no value: , decimal with thousands separator: 433,524" | |
| */ | |
| $.jqplot.sprintf = function() { | |
| function pad(str, len, chr, leftJustify) { | |
| var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr); | |
| return leftJustify ? str + padding : padding + str; | |
| } | |
| function thousand_separate(value) { | |
| var value_str = new String(value); | |
| for (var i=10; i>0; i--) { | |
| if (value_str == (value_str = value_str.replace(/^(\d+)(\d{3})/, "$1"+$.jqplot.sprintf.thousandsSeparator+"$2"))) break; | |
| } | |
| return value_str; | |
| } | |
| function justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace) { | |
| var diff = minWidth - value.length; | |
| if (diff > 0) { | |
| var spchar = ' '; | |
| if (htmlSpace) { spchar = ' '; } | |
| if (leftJustify || !zeroPad) { | |
| value = pad(value, minWidth, spchar, leftJustify); | |
| } else { | |
| value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length); | |
| } | |
| } | |
| return value; | |
| } | |
| function formatBaseX(value, base, prefix, leftJustify, minWidth, precision, zeroPad, htmlSpace) { | |
| // Note: casts negative numbers to positive ones | |
| var number = value >>> 0; | |
| prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || ''; | |
| value = prefix + pad(number.toString(base), precision || 0, '0', false); | |
| return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace); | |
| } | |
| function formatString(value, leftJustify, minWidth, precision, zeroPad, htmlSpace) { | |
| if (precision != null) { | |
| value = value.slice(0, precision); | |
| } | |
| return justify(value, '', leftJustify, minWidth, zeroPad, htmlSpace); | |
| } | |
| var a = arguments, i = 0, format = a[i++]; | |
| return format.replace($.jqplot.sprintf.regex, function(substring, valueIndex, flags, minWidth, _, precision, type) { | |
| if (substring == '%%') { return '%'; } | |
| // parse flags | |
| var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false, htmlSpace = false, thousandSeparation = false; | |
| for (var j = 0; flags && j < flags.length; j++) switch (flags.charAt(j)) { | |
| case ' ': positivePrefix = ' '; break; | |
| case '+': positivePrefix = '+'; break; | |
| case '-': leftJustify = true; break; | |
| case '0': zeroPad = true; break; | |
| case '#': prefixBaseX = true; break; | |
| case '&': htmlSpace = true; break; | |
| case '\'': thousandSeparation = true; break; | |
| } | |
| // parameters may be null, undefined, empty-string or real valued | |
| // we want to ignore null, undefined and empty-string values | |
| if (!minWidth) { | |
| minWidth = 0; | |
| } | |
| else if (minWidth == '*') { | |
| minWidth = +a[i++]; | |
| } | |
| else if (minWidth.charAt(0) == '*') { | |
| minWidth = +a[minWidth.slice(1, -1)]; | |
| } | |
| else { | |
| minWidth = +minWidth; | |
| } | |
| // Note: undocumented perl feature: | |
| if (minWidth < 0) { | |
| minWidth = -minWidth; | |
| leftJustify = true; | |
| } | |
| if (!isFinite(minWidth)) { | |
| throw new Error('$.jqplot.sprintf: (minimum-)width must be finite'); | |
| } | |
| if (!precision) { | |
| precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0); | |
| } | |
| else if (precision == '*') { | |
| precision = +a[i++]; | |
| } | |
| else if (precision.charAt(0) == '*') { | |
| precision = +a[precision.slice(1, -1)]; | |
| } | |
| else { | |
| precision = +precision; | |
| } | |
| // grab value using valueIndex if required? | |
| var value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++]; | |
| switch (type) { | |
| case 's': { | |
| if (value == null) { | |
| return ''; | |
| } | |
| return formatString(String(value), leftJustify, minWidth, precision, zeroPad, htmlSpace); | |
| } | |
| case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad, htmlSpace); | |
| case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad,htmlSpace); | |
| case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace); | |
| case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace); | |
| case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace).toUpperCase(); | |
| case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace); | |
| case 'i': { | |
| var number = parseInt(+value, 10); | |
| if (isNaN(number)) { | |
| return ''; | |
| } | |
| var prefix = number < 0 ? '-' : positivePrefix; | |
| var number_str = thousandSeparation ? thousand_separate(String(Math.abs(number))): String(Math.abs(number)); | |
| value = prefix + pad(number_str, precision, '0', false); | |
| //value = prefix + pad(String(Math.abs(number)), precision, '0', false); | |
| return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace); | |
| } | |
| case 'd': { | |
| var number = Math.round(+value); | |
| if (isNaN(number)) { | |
| return ''; | |
| } | |
| var prefix = number < 0 ? '-' : positivePrefix; | |
| var number_str = thousandSeparation ? thousand_separate(String(Math.abs(number))): String(Math.abs(number)); | |
| value = prefix + pad(number_str, precision, '0', false); | |
| return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace); | |
| } | |
| case 'e': | |
| case 'E': | |
| case 'f': | |
| case 'F': | |
| case 'g': | |
| case 'G': | |
| { | |
| var number = +value; | |
| if (isNaN(number)) { | |
| return ''; | |
| } | |
| var prefix = number < 0 ? '-' : positivePrefix; | |
| var method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())]; | |
| var textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2]; | |
| var number_str = Math.abs(number)[method](precision); | |
| // Apply the decimal mark properly by splitting the number by the | |
| // decimalMark, applying thousands separator, and then placing it | |
| // back in. | |
| var parts = number_str.toString().split('.'); | |
| parts[0] = thousandSeparation ? thousand_separate(parts[0]) : parts[0]; | |
| number_str = parts.join($.jqplot.sprintf.decimalMark); | |
| value = prefix + number_str; | |
| var justified = justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform](); | |
| return justified; | |
| } | |
| case 'p': | |
| case 'P': | |
| { | |
| // make sure number is a number | |
| var number = +value; | |
| if (isNaN(number)) { | |
| return ''; | |
| } | |
| var prefix = number < 0 ? '-' : positivePrefix; | |
| var parts = String(Number(Math.abs(number)).toExponential()).split(/e|E/); | |
| var sd = (parts[0].indexOf('.') != -1) ? parts[0].length - 1 : String(number).length; | |
| var zeros = (parts[1] < 0) ? -parts[1] - 1 : 0; | |
| if (Math.abs(number) < 1) { | |
| if (sd + zeros <= precision) { | |
| value = prefix + Math.abs(number).toPrecision(sd); | |
| } | |
| else { | |
| if (sd <= precision - 1) { | |
| value = prefix + Math.abs(number).toExponential(sd-1); | |
| } | |
| else { | |
| value = prefix + Math.abs(number).toExponential(precision-1); | |
| } | |
| } | |
| } | |
| else { | |
| var prec = (sd <= precision) ? sd : precision; | |
| value = prefix + Math.abs(number).toPrecision(prec); | |
| } | |
| var textTransform = ['toString', 'toUpperCase']['pP'.indexOf(type) % 2]; | |
| return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform](); | |
| } | |
| case 'n': return ''; | |
| default: return substring; | |
| } | |
| }); | |
| }; | |
| $.jqplot.sprintf.thousandsSeparator = ','; | |
| // Specifies the decimal mark for floating point values. By default a period '.' | |
| // is used. If you change this value to for example a comma be sure to also | |
| // change the thousands separator or else this won't work since a simple String | |
| // replace is used (replacing all periods with the mark specified here). | |
| $.jqplot.sprintf.decimalMark = '.'; | |
| $.jqplot.sprintf.regex = /%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g; | |
| $.jqplot.getSignificantFigures = function(number) { | |
| var parts = String(Number(Math.abs(number)).toExponential()).split(/e|E/); | |
| // total significant digits | |
| var sd = (parts[0].indexOf('.') != -1) ? parts[0].length - 1 : parts[0].length; | |
| var zeros = (parts[1] < 0) ? -parts[1] - 1 : 0; | |
| // exponent | |
| var expn = parseInt(parts[1], 10); | |
| // digits to the left of the decimal place | |
| var dleft = (expn + 1 > 0) ? expn + 1 : 0; | |
| // digits to the right of the decimal place | |
| var dright = (sd <= dleft) ? 0 : sd - expn - 1; | |
| return {significantDigits: sd, digitsLeft: dleft, digitsRight: dright, zeros: zeros, exponent: expn} ; | |
| }; | |
| $.jqplot.getPrecision = function(number) { | |
| return $.jqplot.getSignificantFigures(number).digitsRight; | |
| }; | |
| })(jQuery); | |