Prototype: Add Number.prototype.round/ceil/floor/abs as an aliases to the respective methods in Math. Refactor to seperate number extensions from base.js. [Thomas Fuchs]

This commit is contained in:
Thomas Fuchs 2007-06-06 16:10:16 +00:00
parent 0c7bac17f0
commit 86118c3cb5
6 changed files with 99 additions and 60 deletions

View File

@ -1,8 +1,8 @@
*SVN*
* Make Element#absolutize and Element#relativize properly use Element#getStyle. Closes #8580. [Christophe Porteneuve]
* Add Number.prototype.round/ceil/floor/abs as an aliases to the respective methods in Math. Refactor to seperate number extensions from base.js. [Thomas Fuchs]
* Add Number.prototype.round as an alias to Math.round(). [Thomas Fuchs]
* Make Element#absolutize and Element#relativize properly use Element#getStyle. Closes #8580. [Christophe Porteneuve]
* Test library fixes: make rake dist work on Windows, only teardown if a browser is supported. Closes #8463, #8498. [Mislav Marohnić, grant]

View File

@ -113,34 +113,6 @@ Object.extend(Function.prototype, {
Function.prototype.defer = Function.prototype.delay.curry(0.01);
Object.extend(Number.prototype, {
round: function() {
return Math.round(this);
},
toColorPart: function() {
return this.toPaddedString(2, 16);
},
succ: function() {
return this + 1;
},
times: function(iterator) {
$R(0, this, true).each(iterator);
return this;
},
toPaddedString: function(length, radix) {
var string = this.toString(radix || 10);
return '0'.times(length - string.length) + string;
},
toJSON: function() {
return isFinite(this) ? this.toString() : 'null';
}
});
Date.prototype.toJSON = function() {
return '"' + this.getFullYear() + '-' +
(this.getMonth() + 1).toPaddedString(2) + '-' +

27
src/number.js Normal file
View File

@ -0,0 +1,27 @@
Object.extend(Number.prototype, {
toColorPart: function() {
return this.toPaddedString(2, 16);
},
succ: function() {
return this + 1;
},
times: function(iterator) {
$R(0, this, true).each(iterator);
return this;
},
toPaddedString: function(length, radix) {
var string = this.toString(radix || 10);
return '0'.times(length - string.length) + string;
},
toJSON: function() {
return isFinite(this) ? this.toString() : 'null';
}
});
$w('abs round ceil floor').each(function(method){
Number.prototype[method] = function(){ return Math[method](this); }
});

2
src/prototype.js vendored
View File

@ -27,7 +27,7 @@ var Prototype = {
<%= include 'base.js', 'string.js' %>
<%= include 'enumerable.js', 'array.js', 'hash.js', 'range.js' %>
<%= include 'enumerable.js', 'array.js', 'number.js', 'hash.js', 'range.js' %>
<%= include 'ajax.js', 'dom.js', 'selector.js', 'form.js', 'event.js', 'deprecated.js' %>

View File

@ -218,35 +218,6 @@
}
},
testNumberRound: function() {with(this) {
assertEqual(1, (0.9).round());
assertEqual(-2, (-1.9).round());
assertEqual(Math.round(Math.PI), Math.PI.round());
}},
testNumberToColorPart: function() {with(this) {
assertEqual('00', (0).toColorPart());
assertEqual('0a', (10).toColorPart());
assertEqual('ff', (255).toColorPart());
}},
testNumberToPaddedString: function() {with(this) {
assertEqual('00', (0).toPaddedString(2, 16));
assertEqual('0a', (10).toPaddedString(2, 16));
assertEqual('ff', (255).toPaddedString(2, 16));
assertEqual('000', (0).toPaddedString(3));
assertEqual('010', (10).toPaddedString(3));
assertEqual('100', (100).toPaddedString(3));
assertEqual('1000', (1000).toPaddedString(3));
}},
testNumberToJSON: function() {with(this) {
assertEqual('null', Number.NaN.toJSON());
assertEqual('0', (0).toJSON());
assertEqual('-293', (-293).toJSON());
}},
testDateToJSON: function() {with(this) {
assertEqual('\"1969-12-31T19:00:00\"', new Date(1969, 11, 31, 19).toJSON());
}},

69
test/unit/number.html Normal file
View File

@ -0,0 +1,69 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Prototype Unit test file</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="../../dist/prototype.js" type="text/javascript"></script>
<script src="../lib/unittest.js" type="text/javascript"></script>
<link rel="stylesheet" href="../test.css" type="text/css" />
<style type="text/css" media="screen">
/* <![CDATA[ */
#testcss1 { font-size:11px; color: #f00; }
#testcss2 { font-size:12px; color: #0f0; display: none; }
/* ]]> */
</style>
</head>
<body>
<h1>Prototype Unit test file</h1>
<p>
Test of utility functions in number.js
</p>
<!-- Log output -->
<div id="testlog"> </div>
<!-- Tests follow -->
<script type="text/javascript" language="javascript" charset="utf-8">
// <![CDATA[
new Test.Unit.Runner({
testNumberMathMethods: function() {with(this) {
assertEqual(1, (0.9).round());
assertEqual(-2, (-1.9).floor());
assertEqual(-1, (-1.9).ceil());
$w('abs floor round ceil').each( function(method){
assertEqual(Math[method](Math.PI), Math.PI[method]());
});
}},
testNumberToColorPart: function() {with(this) {
assertEqual('00', (0).toColorPart());
assertEqual('0a', (10).toColorPart());
assertEqual('ff', (255).toColorPart());
}},
testNumberToPaddedString: function() {with(this) {
assertEqual('00', (0).toPaddedString(2, 16));
assertEqual('0a', (10).toPaddedString(2, 16));
assertEqual('ff', (255).toPaddedString(2, 16));
assertEqual('000', (0).toPaddedString(3));
assertEqual('010', (10).toPaddedString(3));
assertEqual('100', (100).toPaddedString(3));
assertEqual('1000', (1000).toPaddedString(3));
}},
testNumberToJSON: function() {with(this) {
assertEqual('null', Number.NaN.toJSON());
assertEqual('0', (0).toJSON());
assertEqual('-293', (-293).toJSON());
}}
}, 'testlog');
// ]]>
</script>
</body>
</html>