quixote
Version:
CSS unit and integration testing
59 lines (48 loc) • 1.81 kB
JavaScript
// Copyright (c) 2014 Titanium I.T. LLC. All rights reserved. For license, see "README" or "LICENSE" file.
;
var ensure = require("../util/ensure.js");
var Descriptor = require("./descriptor.js");
var SizeDescriptor = require("./size_descriptor.js");
var Size = require("../values/size.js");
var Me = module.exports = function SizeMultiple(relativeTo, multiple) {
ensure.signature(arguments, [ Descriptor, Number ]);
this.should = this.createShould();
this._relativeTo = relativeTo;
this._multiple = multiple;
};
SizeDescriptor.extend(Me);
Me.create = function create(relativeTo, multiple) {
return new Me(relativeTo, multiple);
};
Me.prototype.value = function value() {
ensure.signature(arguments, []);
return this._relativeTo.value().times(this._multiple);
};
Me.prototype.toString = function toString() {
ensure.signature(arguments, []);
var multiple = this._multiple;
var base = this._relativeTo.toString();
if (multiple === 1) return base;
var desc;
switch(multiple) {
case 1/2: desc = "half of "; break;
case 1/3: desc = "one-third of "; break;
case 2/3: desc = "two-thirds of "; break;
case 1/4: desc = "one-quarter of "; break;
case 3/4: desc = "three-quarters of "; break;
case 1/5: desc = "one-fifth of "; break;
case 2/5: desc = "two-fifths of "; break;
case 3/5: desc = "three-fifths of "; break;
case 4/5: desc = "four-fifths of "; break;
case 1/6: desc = "one-sixth of "; break;
case 5/6: desc = "five-sixths of "; break;
case 1/8: desc = "one-eighth of "; break;
case 3/8: desc = "three-eighths of "; break;
case 5/8: desc = "five-eighths of "; break;
case 7/8: desc = "seven-eighths of "; break;
default:
if (multiple > 1) desc = multiple + " times ";
else desc = (multiple * 100) + "% of ";
}
return desc + base;
};