Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
84 lines
No EOL
2.3 KiB
JavaScript
84 lines
No EOL
2.3 KiB
JavaScript
(function (exports) {
|
|
'use strict';
|
|
function round(x) {
|
|
return Math.round(x * 100) / 100;
|
|
}
|
|
function MozSampleSize(n, scale) {
|
|
return Object.freeze({
|
|
dimensionScale: round(scale),
|
|
areaScale: round(scale * scale),
|
|
toString: function () {
|
|
return '#-moz-samplesize=' + n;
|
|
},
|
|
scale: function (x) {
|
|
return Math.ceil(x * scale);
|
|
}
|
|
});
|
|
}
|
|
var NONE = Object.freeze({
|
|
dimensionScale: 1,
|
|
areaScale: 1,
|
|
toString: function () {
|
|
return '';
|
|
},
|
|
scale: function (x) {
|
|
return x;
|
|
}
|
|
});
|
|
var fragments = [
|
|
NONE,
|
|
MozSampleSize(2, 1 / 2),
|
|
MozSampleSize(3, 3 / 8),
|
|
MozSampleSize(4, 1 / 4),
|
|
MozSampleSize(8, 1 / 8)
|
|
];
|
|
function sizeAtLeast(scale) {
|
|
scale = round(scale);
|
|
for (var i = 0; i < fragments.length; i++) {
|
|
var f = fragments[i];
|
|
if (f.dimensionScale <= scale) {
|
|
return f;
|
|
}
|
|
}
|
|
return fragments[fragments.length - 1];
|
|
}
|
|
function sizeNoMoreThan(scale) {
|
|
scale = round(scale);
|
|
for (var i = fragments.length - 1; i >= 0; i--) {
|
|
var f = fragments[i];
|
|
if (f.dimensionScale >= scale) {
|
|
return f;
|
|
}
|
|
}
|
|
return NONE;
|
|
}
|
|
function areaAtLeast(scale) {
|
|
scale = round(scale);
|
|
for (var i = 0; i < fragments.length; i++) {
|
|
var f = fragments[i];
|
|
if (f.areaScale <= scale) {
|
|
return f;
|
|
}
|
|
}
|
|
return fragments[fragments.length - 1];
|
|
}
|
|
function areaNoMoreThan(scale) {
|
|
scale = round(scale);
|
|
for (var i = fragments.length - 1; i >= 0; i--) {
|
|
var f = fragments[i];
|
|
if (f.areaScale >= scale) {
|
|
return f;
|
|
}
|
|
}
|
|
return NONE;
|
|
}
|
|
exports.Downsample = {
|
|
sizeAtLeast: sizeAtLeast,
|
|
sizeNoMoreThan: sizeNoMoreThan,
|
|
areaAtLeast: areaAtLeast,
|
|
areaNoMoreThan: areaNoMoreThan,
|
|
NONE: NONE,
|
|
MAX_SIZE_REDUCTION: 1 / fragments[fragments.length - 1].dimensionScale,
|
|
MAX_AREA_REDUCTION: 1 / fragments[fragments.length - 1].areaScale
|
|
};
|
|
}(window)); |