| 128856 | }; |
| 128857 | } |
| 128858 | function loggish(transform) { |
| 128859 | var scale = transform(transformLog, transformExp), domain = scale.domain, base = 10, logs, pows; |
| 128860 | function rescale() { |
| 128861 | logs = logp(base), pows = powp(base); |
| 128862 | if (domain()[0] < 0) { |
| 128863 | logs = reflect(logs), pows = reflect(pows); |
| 128864 | transform(transformLogn, transformExpn); |
| 128865 | } else transform(transformLog, transformExp); |
| 128866 | return scale; |
| 128867 | } |
| 128868 | scale.base = function(_) { |
| 128869 | return arguments.length ? (base = +_, rescale()) : base; |
| 128870 | }; |
| 128871 | scale.domain = function(_) { |
| 128872 | return arguments.length ? (domain(_), rescale()) : domain(); |
| 128873 | }; |
| 128874 | scale.ticks = function(count) { |
| 128875 | var d = domain(), u = d[0], v = d[d.length - 1], r; |
| 128876 | if (r = v < u) i = u, u = v, v = i; |
| 128877 | var i = logs(u), j = logs(v), p, k, t, n = count == null ? 10 : +count, z = []; |
| 128878 | if (!(base % 1) && j - i < n) { |
| 128879 | i = Math.floor(i), j = Math.ceil(j); |
| 128880 | if (u > 0) for(; i <= j; ++i)for(k = 1, p = pows(i); k < base; ++k){ |
| 128881 | t = p * k; |
| 128882 | if (t < u) continue; |
| 128883 | if (t > v) break; |
| 128884 | z.push(t); |
| 128885 | } |
| 128886 | else for(; i <= j; ++i)for(k = base - 1, p = pows(i); k >= 1; --k){ |
| 128887 | t = p * k; |
| 128888 | if (t < u) continue; |
| 128889 | if (t > v) break; |
| 128890 | z.push(t); |
| 128891 | } |
| 128892 | if (z.length * 2 < n) z = (0, _d3Array.ticks)(u, v, n); |
| 128893 | } else z = (0, _d3Array.ticks)(i, j, Math.min(j - i, n)).map(pows); |
| 128894 | return r ? z.reverse() : z; |
| 128895 | }; |
| 128896 | scale.tickFormat = function(count, specifier) { |
| 128897 | if (specifier == null) specifier = base === 10 ? ".0e" : ","; |
| 128898 | if (typeof specifier !== "function") specifier = (0, _d3Format.format)(specifier); |
| 128899 | if (count === Infinity) return specifier; |
| 128900 | if (count == null) count = 10; |
| 128901 | var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? |
| 128902 | return function(d) { |
| 128903 | var i = d / pows(Math.round(logs(d))); |
| 128904 | if (i * base < base - 0.5) i *= base; |
| 128905 | return i <= k ? specifier(d) : ""; |
| 128906 | }; |
| 128907 | }; |
| 128908 | scale.nice = function() { |
| 128909 | return domain((0, _niceJsDefault.default)(domain(), { |
| 128910 | floor: function(x) { |
| 128911 | return pows(Math.floor(logs(x))); |
| 128912 | }, |
| 128913 | ceil: function(x) { |
| 128914 | return pows(Math.ceil(logs(x))); |
| 128915 | } |