beautify_js
This commit is contained in:
parent
0febe4f5fd
commit
5c2f32e184
208 changed files with 3891 additions and 1474 deletions
|
@ -3,6 +3,6 @@ function pow(x, n) {
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = x * pow(x, n-1);
|
var result = x * pow(x, n - 1);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
|
@ -3,6 +3,6 @@ function pow(x, n) {
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = x * pow(x, n-1);
|
var result = x * pow(x, n - 1);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
|
@ -3,7 +3,7 @@ function pow(x, n) {
|
||||||
if (Math.round(n) != n) return NaN;
|
if (Math.round(n) != n) return NaN;
|
||||||
|
|
||||||
var result = 1;
|
var result = 1;
|
||||||
for(var i=0; i<n; i++) {
|
for (var i = 0; i < n; i++) {
|
||||||
result *= x;
|
result *= x;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* исправьте этот код */
|
/* исправьте этот код */
|
||||||
function pow(x, n) {
|
function pow(x, n) {
|
||||||
var result = 1;
|
var result = 1;
|
||||||
for(var i=0; i<n; i++) {
|
for (var i = 0; i < n; i++) {
|
||||||
result *= x;
|
result *= x;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -3,24 +3,24 @@ describe("pow", function() {
|
||||||
describe("возводит x в степень n", function() {
|
describe("возводит x в степень n", function() {
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
var expected = x*x*x;
|
var expected = x * x * x;
|
||||||
it("при возведении "+x+" в степень 3 результат: " + expected, function() {
|
it("при возведении " + x + " в степень 3 результат: " + expected, function() {
|
||||||
assert.equal( pow(x, 3), expected);
|
assert.equal(pow(x, 3), expected);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = 1; x <= 5; x++) {
|
for (var x = 1; x <= 5; x++) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в отрицательную степень результат NaN", function() {
|
it("при возведении в отрицательную степень результат NaN", function() {
|
||||||
assert( isNaN( pow(2, -1) ), "pow(2, -1) не NaN" );
|
assert(isNaN(pow(2, -1)), "pow(2, -1) не NaN");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в дробную степень результат NaN", function() {
|
it("при возведении в дробную степень результат NaN", function() {
|
||||||
assert( isNaN( pow(2, 1.5) ), "pow(2, -1.5) не NaN" );
|
assert(isNaN(pow(2, 1.5)), "pow(2, -1.5) не NaN");
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,10 +1,10 @@
|
||||||
function pow(x, n) {
|
function pow(x, n) {
|
||||||
if (n < 0) return NaN;
|
if (n < 0) return NaN;
|
||||||
if (Math.round(n) != n) return NaN;
|
if (Math.round(n) != n) return NaN;
|
||||||
if (n == 0 && x ==0) return NaN;
|
if (n == 0 && x == 0) return NaN;
|
||||||
|
|
||||||
var result = 1;
|
var result = 1;
|
||||||
for(var i=0; i<n; i++) {
|
for (var i = 0; i < n; i++) {
|
||||||
result *= x;
|
result *= x;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -3,7 +3,7 @@ function pow(x, n) {
|
||||||
if (Math.round(n) != n) return NaN;
|
if (Math.round(n) != n) return NaN;
|
||||||
|
|
||||||
var result = 1;
|
var result = 1;
|
||||||
for(var i=0; i<n; i++) {
|
for (var i = 0; i < n; i++) {
|
||||||
result *= x;
|
result *= x;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -3,42 +3,42 @@ describe("pow", function() {
|
||||||
describe("возводит x в степень n", function() {
|
describe("возводит x в степень n", function() {
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
var expected = x*x*x;
|
var expected = x * x * x;
|
||||||
it("при возведении "+x+" в степень 3 результат: " + expected, function() {
|
it("при возведении " + x + " в степень 3 результат: " + expected, function() {
|
||||||
assert.equal( pow(x, 3), expected);
|
assert.equal(pow(x, 3), expected);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = 1; x <= 5; x++) {
|
for (var x = 1; x <= 5; x++) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в отрицательную степень результат NaN", function() {
|
it("при возведении в отрицательную степень результат NaN", function() {
|
||||||
assert( isNaN( pow(2, -1) ), "pow(2, -1) не NaN" );
|
assert(isNaN(pow(2, -1)), "pow(2, -1) не NaN");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в дробную степень результат NaN", function() {
|
it("при возведении в дробную степень результат NaN", function() {
|
||||||
assert( isNaN( pow(2, 1.5) ), "pow(2, -1.5) не NaN" );
|
assert(isNaN(pow(2, 1.5)), "pow(2, -1.5) не NaN");
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("любое число, кроме нуля, в степени 0 равно 1", function() {
|
describe("любое число, кроме нуля, в степени 0 равно 1", function() {
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
it("при возведении " + x + " в степень 0 результат: 1", function() {
|
it("при возведении " + x + " в степень 0 результат: 1", function() {
|
||||||
assert.equal( pow(x, 0), 1);
|
assert.equal(pow(x, 0), 1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = -5; x <= 5; x+=2) {
|
for (var x = -5; x <= 5; x += 2) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("ноль в нулевой степени даёт NaN", function() {
|
it("ноль в нулевой степени даёт NaN", function() {
|
||||||
assert( isNaN( pow(0,0) ), "0 в степени 0 не NaN");
|
assert(isNaN(pow(0, 0)), "0 в степени 0 не NaN");
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,12 +1,24 @@
|
||||||
describe("Тест", function() {
|
describe("Тест", function() {
|
||||||
|
|
||||||
before(function() { alert("Начало всех тестов"); });
|
before(function() {
|
||||||
after(function() { alert("Окончание всех тестов"); });
|
alert("Начало всех тестов");
|
||||||
|
});
|
||||||
|
after(function() {
|
||||||
|
alert("Окончание всех тестов");
|
||||||
|
});
|
||||||
|
|
||||||
beforeEach(function() { alert("Вход в тест"); });
|
beforeEach(function() {
|
||||||
afterEach(function() { alert("Выход из теста"); });
|
alert("Вход в тест");
|
||||||
|
});
|
||||||
|
afterEach(function() {
|
||||||
|
alert("Выход из теста");
|
||||||
|
});
|
||||||
|
|
||||||
it('тест 1', function() { alert('1'); });
|
it('тест 1', function() {
|
||||||
it('тест 2', function() { alert('2'); });
|
alert('1');
|
||||||
|
});
|
||||||
|
it('тест 2', function() {
|
||||||
|
alert('2');
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,7 +1,7 @@
|
||||||
describe("pow", function() {
|
describe("pow", function() {
|
||||||
|
|
||||||
it("возводит в n-ю степень", function() {
|
it("возводит в n-ю степень", function() {
|
||||||
assert.equal( pow(2, 3), 8);
|
assert.equal(pow(2, 3), 8);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,11 +1,11 @@
|
||||||
describe("pow", function() {
|
describe("pow", function() {
|
||||||
|
|
||||||
it("при возведении 2 в 3ю степень результат 8", function() {
|
it("при возведении 2 в 3ю степень результат 8", function() {
|
||||||
assert.equal( pow(2, 3), 8);
|
assert.equal(pow(2, 3), 8);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении 3 в 4ю степень равен 81", function() {
|
it("при возведении 3 в 4ю степень равен 81", function() {
|
||||||
assert.equal( pow(3, 4), 81);
|
assert.equal(pow(3, 4), 81);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,13 +1,13 @@
|
||||||
describe("pow", function() {
|
describe("pow", function() {
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
var expected = x*x*x;
|
var expected = x * x * x;
|
||||||
it("при возведении "+x+" в степень 3 результат: " + expected, function() {
|
it("при возведении " + x + " в степень 3 результат: " + expected, function() {
|
||||||
assert.equal( pow(x, 3), expected);
|
assert.equal(pow(x, 3), expected);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = 1; x <= 5; x++) {
|
for (var x = 1; x <= 5; x++) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,13 +3,13 @@ describe("pow", function() {
|
||||||
describe("возводит x в степень n", function() {
|
describe("возводит x в степень n", function() {
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
var expected = x*x*x;
|
var expected = x * x * x;
|
||||||
it("при возведении "+x+" в степень 3 результат: " + expected, function() {
|
it("при возведении " + x + " в степень 3 результат: " + expected, function() {
|
||||||
assert.equal( pow(x, 3), expected);
|
assert.equal(pow(x, 3), expected);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = 1; x <= 5; x++) {
|
for (var x = 1; x <= 5; x++) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,42 +3,42 @@ describe("pow", function() {
|
||||||
describe("возводит x в степень n", function() {
|
describe("возводит x в степень n", function() {
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
var expected = x*x*x;
|
var expected = x * x * x;
|
||||||
it("при возведении "+x+" в степень 3 результат: " + expected, function() {
|
it("при возведении " + x + " в степень 3 результат: " + expected, function() {
|
||||||
assert.equal( pow(x, 3), expected);
|
assert.equal(pow(x, 3), expected);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = 1; x <= 5; x++) {
|
for (var x = 1; x <= 5; x++) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в отрицательную степень результат NaN", function() {
|
it("при возведении в отрицательную степень результат NaN", function() {
|
||||||
assert( isNaN( pow(2, -1) ), "pow(2, -1) не NaN" );
|
assert(isNaN(pow(2, -1)), "pow(2, -1) не NaN");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в дробную степень результат NaN", function() {
|
it("при возведении в дробную степень результат NaN", function() {
|
||||||
assert( isNaN( pow(2, 1.5) ), "pow(2, -1.5) не NaN" );
|
assert(isNaN(pow(2, 1.5)), "pow(2, -1.5) не NaN");
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("любое число, кроме нуля, в степени 0 равно 1", function() {
|
describe("любое число, кроме нуля, в степени 0 равно 1", function() {
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
it("при возведении " + x + " в степень 0 результат: 1", function() {
|
it("при возведении " + x + " в степень 0 результат: 1", function() {
|
||||||
assert.equal( pow(x, 0), 1);
|
assert.equal(pow(x, 0), 1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = -5; x <= 5; x+=2) {
|
for (var x = -5; x <= 5; x += 2) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("ноль в нулевой степени даёт NaN", function() {
|
it("ноль в нулевой степени даёт NaN", function() {
|
||||||
assert( isNaN( pow(0,0) ), "0 в степени 0 не NaN");
|
assert(isNaN(pow(0, 0)), "0 в степени 0 не NaN");
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,7 +1,7 @@
|
||||||
describe("pow", function() {
|
describe("pow", function() {
|
||||||
|
|
||||||
it("возводит в n-ю степень", function() {
|
it("возводит в n-ю степень", function() {
|
||||||
assert.equal( pow(2, 3), 8);
|
assert.equal(pow(2, 3), 8);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -3,24 +3,24 @@ describe("pow", function() {
|
||||||
describe("возводит x в степень n", function() {
|
describe("возводит x в степень n", function() {
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
var expected = x*x*x;
|
var expected = x * x * x;
|
||||||
it("при возведении "+x+" в степень 3 результат: " + expected, function() {
|
it("при возведении " + x + " в степень 3 результат: " + expected, function() {
|
||||||
assert.equal( pow(x, 3), expected);
|
assert.equal(pow(x, 3), expected);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = 1; x <= 5; x++) {
|
for (var x = 1; x <= 5; x++) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в отрицательную степень результат NaN", function() {
|
it("при возведении в отрицательную степень результат NaN", function() {
|
||||||
assert( isNaN( pow(2, -1) ), "pow(2, -1) не NaN" );
|
assert(isNaN(pow(2, -1)), "pow(2, -1) не NaN");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в дробную степень результат NaN", function() {
|
it("при возведении в дробную степень результат NaN", function() {
|
||||||
assert( isNaN( pow(2, 1.5) ), "pow(2, -1.5) не NaN" );
|
assert(isNaN(pow(2, 1.5)), "pow(2, -1.5) не NaN");
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -3,24 +3,24 @@ describe("pow", function() {
|
||||||
describe("возводит x в степень n", function() {
|
describe("возводит x в степень n", function() {
|
||||||
|
|
||||||
function makeTest(x) {
|
function makeTest(x) {
|
||||||
var expected = x*x*x;
|
var expected = x * x * x;
|
||||||
it("при возведении "+x+" в степень 3 результат: " + expected, function() {
|
it("при возведении " + x + " в степень 3 результат: " + expected, function() {
|
||||||
assert.equal( pow(x, 3), expected);
|
assert.equal(pow(x, 3), expected);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var x = 1; x <= 5; x++) {
|
for (var x = 1; x <= 5; x++) {
|
||||||
makeTest(x);
|
makeTest(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в отрицательную степень результат NaN", function() {
|
it("при возведении в отрицательную степень результат NaN", function() {
|
||||||
assert( isNaN( pow(2, -1) ) );
|
assert(isNaN(pow(2, -1)));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при возведении в дробную степень результат NaN", function() {
|
it("при возведении в дробную степень результат NaN", function() {
|
||||||
assert( isNaN( pow(2, 1.5) ) );
|
assert(isNaN(pow(2, 1.5)));
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,5 +1,5 @@
|
||||||
function getWeekDay(date) {
|
function getWeekDay(date) {
|
||||||
var days = ['вс','пн','вт','ср','чт','пт','сб'] ;
|
var days = ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'];
|
||||||
|
|
||||||
return days[ date.getDay() ];
|
return days[date.getDay()];
|
||||||
}
|
}
|
|
@ -1,29 +1,29 @@
|
||||||
describe("getWeekDay", function() {
|
describe("getWeekDay", function() {
|
||||||
it("3 января 2014 - пятница", function() {
|
it("3 января 2014 - пятница", function() {
|
||||||
assert.equal( getWeekDay(new Date(2014, 0, 3)), 'пт');
|
assert.equal(getWeekDay(new Date(2014, 0, 3)), 'пт');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("4 января 2014 - суббота", function() {
|
it("4 января 2014 - суббота", function() {
|
||||||
assert.equal( getWeekDay(new Date(2014, 0, 4)), 'сб');
|
assert.equal(getWeekDay(new Date(2014, 0, 4)), 'сб');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("5 января 2014 - воскресенье", function() {
|
it("5 января 2014 - воскресенье", function() {
|
||||||
assert.equal( getWeekDay(new Date(2014, 0, 5)), 'вс');
|
assert.equal(getWeekDay(new Date(2014, 0, 5)), 'вс');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("6 января 2014 - понедельник", function() {
|
it("6 января 2014 - понедельник", function() {
|
||||||
assert.equal( getWeekDay(new Date(2014, 0, 6)), 'пн');
|
assert.equal(getWeekDay(new Date(2014, 0, 6)), 'пн');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("7 января 2014 - вторник", function() {
|
it("7 января 2014 - вторник", function() {
|
||||||
assert.equal( getWeekDay(new Date(2014, 0, 7)), 'вт');
|
assert.equal(getWeekDay(new Date(2014, 0, 7)), 'вт');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("8 января 2014 - среда", function() {
|
it("8 января 2014 - среда", function() {
|
||||||
assert.equal( getWeekDay(new Date(2014, 0, 8)), 'ср');
|
assert.equal(getWeekDay(new Date(2014, 0, 8)), 'ср');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("9 января 2014 - четверг", function() {
|
it("9 января 2014 - четверг", function() {
|
||||||
assert.equal( getWeekDay(new Date(2014, 0, 9)), 'чт');
|
assert.equal(getWeekDay(new Date(2014, 0, 9)), 'чт');
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -2,7 +2,7 @@ function getLocalDay(date) {
|
||||||
|
|
||||||
var day = date.getDay();
|
var day = date.getDay();
|
||||||
|
|
||||||
if ( day == 0 ) { // день 0 становится 7
|
if (day == 0) { // день 0 становится 7
|
||||||
day = 7;
|
day = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,29 +1,29 @@
|
||||||
describe("getLocalDay возвращает день недели", function() {
|
describe("getLocalDay возвращает день недели", function() {
|
||||||
it("3 января 2014 - пятница", function() {
|
it("3 января 2014 - пятница", function() {
|
||||||
assert.equal( getLocalDay(new Date(2014, 0, 3)), 5);
|
assert.equal(getLocalDay(new Date(2014, 0, 3)), 5);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("4 января 2014 - суббота", function() {
|
it("4 января 2014 - суббота", function() {
|
||||||
assert.equal( getLocalDay(new Date(2014, 0, 4)), 6);
|
assert.equal(getLocalDay(new Date(2014, 0, 4)), 6);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("5 января 2014 - воскресенье", function() {
|
it("5 января 2014 - воскресенье", function() {
|
||||||
assert.equal( getLocalDay(new Date(2014, 0, 5)), 7);
|
assert.equal(getLocalDay(new Date(2014, 0, 5)), 7);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("6 января 2014 - понедельник", function() {
|
it("6 января 2014 - понедельник", function() {
|
||||||
assert.equal( getLocalDay(new Date(2014, 0, 6)), 1);
|
assert.equal(getLocalDay(new Date(2014, 0, 6)), 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("7 января 2014 - вторник", function() {
|
it("7 января 2014 - вторник", function() {
|
||||||
assert.equal( getLocalDay(new Date(2014, 0, 7)), 2);
|
assert.equal(getLocalDay(new Date(2014, 0, 7)), 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("8 января 2014 - среда", function() {
|
it("8 января 2014 - среда", function() {
|
||||||
assert.equal( getLocalDay(new Date(2014, 0, 8)), 3);
|
assert.equal(getLocalDay(new Date(2014, 0, 8)), 3);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("9 января 2014 - четверг", function() {
|
it("9 января 2014 - четверг", function() {
|
||||||
assert.equal( getLocalDay(new Date(2014, 0, 9)), 4);
|
assert.equal(getLocalDay(new Date(2014, 0, 9)), 4);
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,6 +1,6 @@
|
||||||
function getDateAgo(date, days) {
|
function getDateAgo(date, days) {
|
||||||
var dateCopy = new Date(date);
|
var dateCopy = new Date(date);
|
||||||
|
|
||||||
dateCopy.setDate( date.getDate() - days );
|
dateCopy.setDate(date.getDate() - days);
|
||||||
return dateCopy.getDate();
|
return dateCopy.getDate();
|
||||||
}
|
}
|
|
@ -1,20 +1,20 @@
|
||||||
describe("getDateAgo", function() {
|
describe("getDateAgo", function() {
|
||||||
|
|
||||||
it("1 день до 02.01.2015 -> число 1", function() {
|
it("1 день до 02.01.2015 -> число 1", function() {
|
||||||
assert.equal( getDateAgo(new Date(2015, 0, 2), 1), 1 );
|
assert.equal(getDateAgo(new Date(2015, 0, 2), 1), 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
it("2 день до 02.01.2015 -> число 31", function() {
|
it("2 день до 02.01.2015 -> число 31", function() {
|
||||||
assert.equal( getDateAgo(new Date(2015, 0, 2), 2), 31 );
|
assert.equal(getDateAgo(new Date(2015, 0, 2), 2), 31);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("100 дней от 02.01.2015 -> число 24", function() {
|
it("100 дней от 02.01.2015 -> число 24", function() {
|
||||||
assert.equal( getDateAgo(new Date(2015, 0, 2), 100), 24 );
|
assert.equal(getDateAgo(new Date(2015, 0, 2), 100), 24);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("365 дней от 02.01.2015 -> число 2", function() {
|
it("365 дней от 02.01.2015 -> число 2", function() {
|
||||||
assert.equal( getDateAgo(new Date(2015, 0, 2), 365), 2 );
|
assert.equal(getDateAgo(new Date(2015, 0, 2), 365), 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("не меняет переданный объект Date", function() {
|
it("не меняет переданный объект Date", function() {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
function getLastDayOfMonth(year, month) {
|
function getLastDayOfMonth(year, month) {
|
||||||
var date = new Date(year, month+1, 0);
|
var date = new Date(year, month + 1, 0);
|
||||||
return date.getDate();
|
return date.getDate();
|
||||||
}
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
describe("getLastDayOfMonth", function() {
|
describe("getLastDayOfMonth", function() {
|
||||||
it("последний день 01.01.2012 - 31", function() {
|
it("последний день 01.01.2012 - 31", function() {
|
||||||
assert.equal( getLastDayOfMonth(2012, 0), 31);
|
assert.equal(getLastDayOfMonth(2012, 0), 31);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("последний день 01.02.2012 - 29 (високосный год)", function() {
|
it("последний день 01.02.2012 - 29 (високосный год)", function() {
|
||||||
assert.equal( getLastDayOfMonth(2012, 1), 29);
|
assert.equal(getLastDayOfMonth(2012, 1), 29);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("последний день 01.02.2013 - 28", function() {
|
it("последний день 01.02.2013 - 28", function() {
|
||||||
assert.equal( getLastDayOfMonth(2013, 1), 28);
|
assert.equal(getLastDayOfMonth(2013, 1), 28);
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,13 +1,13 @@
|
||||||
function formatDate(date) {
|
function formatDate(date) {
|
||||||
|
|
||||||
var dd = date.getDate();
|
var dd = date.getDate();
|
||||||
if ( dd < 10 ) dd = '0' + dd;
|
if (dd < 10) dd = '0' + dd;
|
||||||
|
|
||||||
var mm = date.getMonth()+1;
|
var mm = date.getMonth() + 1;
|
||||||
if ( mm < 10 ) mm = '0' + mm;
|
if (mm < 10) mm = '0' + mm;
|
||||||
|
|
||||||
var yy = date.getFullYear() % 100;
|
var yy = date.getFullYear() % 100;
|
||||||
if ( yy < 10 ) yy = '0' + yy;
|
if (yy < 10) yy = '0' + yy;
|
||||||
|
|
||||||
return dd+'.'+mm+'.'+yy;
|
return dd + '.' + mm + '.' + yy;
|
||||||
}
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
describe("formatDate", function() {
|
describe("formatDate", function() {
|
||||||
it("правильно форматирует дату 30.01.14", function() {
|
it("правильно форматирует дату 30.01.14", function() {
|
||||||
assert.equal( formatDate(new Date(2014, 0, 30)), '30.01.14');
|
assert.equal(formatDate(new Date(2014, 0, 30)), '30.01.14');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("правильно форматирует дату 01.01.01", function() {
|
it("правильно форматирует дату 01.01.01", function() {
|
||||||
assert.equal( formatDate(new Date(2001, 0, 1)), '01.01.01');
|
assert.equal(formatDate(new Date(2001, 0, 1)), '01.01.01');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("правильно форматирует дату 01.01.00", function() {
|
it("правильно форматирует дату 01.01.00", function() {
|
||||||
assert.equal( formatDate(new Date(2000, 0, 1)), '01.01.00');
|
assert.equal(formatDate(new Date(2000, 0, 1)), '01.01.00');
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -5,13 +5,13 @@ function formatDate(date) {
|
||||||
return 'только что';
|
return 'только что';
|
||||||
}
|
}
|
||||||
|
|
||||||
var sec = Math.floor( diff / 1000 ); // округлить diff до секунд
|
var sec = Math.floor(diff / 1000); // округлить diff до секунд
|
||||||
|
|
||||||
if (sec < 60) {
|
if (sec < 60) {
|
||||||
return sec + ' сек. назад';
|
return sec + ' сек. назад';
|
||||||
}
|
}
|
||||||
|
|
||||||
var min = Math.floor( diff / 60000 ); // округлить diff до минут
|
var min = Math.floor(diff / 60000); // округлить diff до минут
|
||||||
if (min < 60) {
|
if (min < 60) {
|
||||||
return min + ' мин. назад';
|
return min + ' мин. назад';
|
||||||
}
|
}
|
||||||
|
@ -19,16 +19,16 @@ function formatDate(date) {
|
||||||
// форматировать дату, с учетом того, что месяцы начинаются с 0
|
// форматировать дату, с учетом того, что месяцы начинаются с 0
|
||||||
var d = date;
|
var d = date;
|
||||||
d = [
|
d = [
|
||||||
'0'+d.getDate(),
|
'0' + d.getDate(),
|
||||||
'0'+(d.getMonth()+1),
|
'0' + (d.getMonth() + 1),
|
||||||
''+d.getFullYear(),
|
'' + d.getFullYear(),
|
||||||
'0'+d.getHours(),
|
'0' + d.getHours(),
|
||||||
'0'+d.getMinutes()
|
'0' + d.getMinutes()
|
||||||
];
|
];
|
||||||
|
|
||||||
for(var i=0; i<d.length; i++) {
|
for (var i = 0; i < d.length; i++) {
|
||||||
d[i] = d[i].slice(-2);
|
d[i] = d[i].slice(-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return d.slice(0,3).join('.')+' '+d.slice(3).join(':');
|
return d.slice(0, 3).join('.') + ' ' + d.slice(3).join(':');
|
||||||
}
|
}
|
|
@ -1,18 +1,18 @@
|
||||||
describe("formatDate", function() {
|
describe("formatDate", function() {
|
||||||
it("выводит дату 1мс назад как \"только что\"", function() {
|
it("выводит дату 1мс назад как \"только что\"", function() {
|
||||||
assert.equal( formatDate( new Date(new Date - 1) ), 'только что' );
|
assert.equal(formatDate(new Date(new Date - 1)), 'только что');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('выводит дату "30 сек назад"', function() {
|
it('выводит дату "30 сек назад"', function() {
|
||||||
assert.equal( formatDate( new Date( new Date - 30*1000) ), "30 сек. назад" );
|
assert.equal(formatDate(new Date(new Date - 30 * 1000)), "30 сек. назад");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('выводит дату "5 мин назад"', function() {
|
it('выводит дату "5 мин назад"', function() {
|
||||||
assert.equal( formatDate( new Date( new Date- 5*60*1000) ), "5 мин. назад");
|
assert.equal(formatDate(new Date(new Date - 5 * 60 * 1000)), "5 мин. назад");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("выводит старую дату в формате дд.мм.гг чч:мм", function() {
|
it("выводит старую дату в формате дд.мм.гг чч:мм", function() {
|
||||||
assert.equal( formatDate( new Date(2014, 2, 1, 11, 22, 33) ), "01.03.14 11:22" );
|
assert.equal(formatDate(new Date(2014, 2, 1, 11, 22, 33)), "01.03.14 11:22");
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,12 +1,12 @@
|
||||||
function formatDate(date) {
|
function formatDate(date) {
|
||||||
if (typeof date == 'number') {
|
if (typeof date == 'number') {
|
||||||
// перевести секунды в миллисекунды и преобразовать к Date
|
// перевести секунды в миллисекунды и преобразовать к Date
|
||||||
date = new Date(date*1000);
|
date = new Date(date * 1000);
|
||||||
} else if(typeof date == 'string') {
|
} else if (typeof date == 'string') {
|
||||||
// разобрать строку и преобразовать к Date
|
// разобрать строку и преобразовать к Date
|
||||||
date = date.split('-');
|
date = date.split('-');
|
||||||
date = new Date(date[0], date[1]-1, date[2]);
|
date = new Date(date[0], date[1] - 1, date[2]);
|
||||||
} else if ( date.length ) { // есть длина, но не строка - значит массив
|
} else if (date.length) { // есть длина, но не строка - значит массив
|
||||||
date = new Date(date[0], date[1], date[2]);
|
date = new Date(date[0], date[1], date[2]);
|
||||||
}
|
}
|
||||||
// преобразования для поддержки полиморфизма завершены,
|
// преобразования для поддержки полиморфизма завершены,
|
||||||
|
@ -15,7 +15,7 @@ function formatDate(date) {
|
||||||
var day = date.getDate();
|
var day = date.getDate();
|
||||||
if (day < 10) day = '0' + day;
|
if (day < 10) day = '0' + day;
|
||||||
|
|
||||||
var month = date.getMonth()+1;
|
var month = date.getMonth() + 1;
|
||||||
if (month < 10) month = '0' + month;
|
if (month < 10) month = '0' + month;
|
||||||
|
|
||||||
// взять 2 последние цифры года
|
// взять 2 последние цифры года
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
describe("formatDate", function() {
|
describe("formatDate", function() {
|
||||||
it("читает дату вида гггг-мм-дд из строки", function() {
|
it("читает дату вида гггг-мм-дд из строки", function() {
|
||||||
assert.equal( formatDate( '2011-10-02' ), "02.10.11" );
|
assert.equal(formatDate('2011-10-02'), "02.10.11");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("читает дату из числа 1234567890 (миллисекунды)", function() {
|
it("читает дату из числа 1234567890 (миллисекунды)", function() {
|
||||||
assert.equal( formatDate( 1234567890 ), "14.02.09" );
|
assert.equal(formatDate(1234567890), "14.02.09");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("читает дату из массива вида [гггг, м, д]", function() {
|
it("читает дату из массива вида [гггг, м, д]", function() {
|
||||||
assert.equal( formatDate( [2014,0,1] ), "01.01.14" );
|
assert.equal(formatDate([2014, 0, 1]), "01.01.14");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("читает дату из объекта Date", function() {
|
it("читает дату из объекта Date", function() {
|
||||||
assert.equal( formatDate( new Date(2014,0,1) ), "01.01.14" );
|
assert.equal(formatDate(new Date(2014, 0, 1)), "01.01.14");
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -2,6 +2,6 @@ function getDecimal(num) {
|
||||||
var str = "" + num;
|
var str = "" + num;
|
||||||
var zeroPos = str.indexOf(".");
|
var zeroPos = str.indexOf(".");
|
||||||
if (zeroPos == -1) return 0;
|
if (zeroPos == -1) return 0;
|
||||||
str = str.slice( zeroPos );
|
str = str.slice(zeroPos);
|
||||||
return +str;
|
return +str;
|
||||||
}
|
}
|
|
@ -1,21 +1,21 @@
|
||||||
describe("getDecimal", function() {
|
describe("getDecimal", function() {
|
||||||
it("возвращает дробную часть 1.2 как 0.2", function() {
|
it("возвращает дробную часть 1.2 как 0.2", function() {
|
||||||
assert.equal( getDecimal(1.2), 0.2 );
|
assert.equal(getDecimal(1.2), 0.2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("возвращает дробную часть 1.3 как 0.3", function() {
|
it("возвращает дробную часть 1.3 как 0.3", function() {
|
||||||
assert.equal( getDecimal(1.3), 0.3 );
|
assert.equal(getDecimal(1.3), 0.3);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("возвращает дробную часть 12.345 как 0.345", function() {
|
it("возвращает дробную часть 12.345 как 0.345", function() {
|
||||||
assert.equal( getDecimal(12.345), 0.345 );
|
assert.equal(getDecimal(12.345), 0.345);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("возвращает дробную часть -1.2 как 0.2", function() {
|
it("возвращает дробную часть -1.2 как 0.2", function() {
|
||||||
assert.equal( getDecimal(-1.2), 0.2 );
|
assert.equal(getDecimal(-1.2), 0.2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("возвращает дробную часть 5 как 0", function() {
|
it("возвращает дробную часть 5 как 0", function() {
|
||||||
assert.equal( getDecimal(5), 0 );
|
assert.equal(getDecimal(5), 0);
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,9 +1,9 @@
|
||||||
describe("ucFirst", function() {
|
describe("ucFirst", function() {
|
||||||
it('делает первый символ заглавным', function() {
|
it('делает первый символ заглавным', function() {
|
||||||
assert.strictEqual( ucFirst("вася"), "Вася" );
|
assert.strictEqual(ucFirst("вася"), "Вася");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('для пустой строки возвращает пустую строку', function() {
|
it('для пустой строки возвращает пустую строку', function() {
|
||||||
assert.strictEqual( ucFirst(""), "" );
|
assert.strictEqual(ucFirst(""), "");
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,13 +1,13 @@
|
||||||
describe("checkSpam", function() {
|
describe("checkSpam", function() {
|
||||||
it('считает спамом "buy ViAgRA now"', function() {
|
it('считает спамом "buy ViAgRA now"', function() {
|
||||||
assert.isTrue( checkSpam('buy ViAgRA now') );
|
assert.isTrue(checkSpam('buy ViAgRA now'));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('считает спамом "free xxxxx"', function() {
|
it('считает спамом "free xxxxx"', function() {
|
||||||
assert.isTrue( checkSpam('free xxxxx') );
|
assert.isTrue(checkSpam('free xxxxx'));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('не считает спамом "innocent rabbit"', function() {
|
it('не считает спамом "innocent rabbit"', function() {
|
||||||
assert.isFalse( checkSpam('innocent rabbit') );
|
assert.isFalse(checkSpam('innocent rabbit'));
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,5 +1,5 @@
|
||||||
function isEmpty(obj) {
|
function isEmpty(obj) {
|
||||||
for(var key in obj) {
|
for (var key in obj) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
describe("isEmpty", function() {
|
describe("isEmpty", function() {
|
||||||
it("если объект пустой - возвращает true", function() {
|
it("если объект пустой - возвращает true", function() {
|
||||||
assert.isTrue( isEmpty({}) );
|
assert.isTrue(isEmpty({}));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("если у объекта есть любое свойство, не важно какое - возвращает false", function() {
|
it("если у объекта есть любое свойство, не важно какое - возвращает false", function() {
|
||||||
assert.isFalse( isEmpty({ anything: false }) );
|
assert.isFalse(isEmpty({
|
||||||
|
anything: false
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -3,8 +3,8 @@ function isNumeric(n) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function multiplyNumeric(obj) {
|
function multiplyNumeric(obj) {
|
||||||
for(var key in obj) {
|
for (var key in obj) {
|
||||||
if (isNumeric( obj[key] )) {
|
if (isNumeric(obj[key])) {
|
||||||
obj[key] *= 2;
|
obj[key] *= 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,8 @@ describe("multiplyNumeric", function() {
|
||||||
title: "Моё меню"
|
title: "Моё меню"
|
||||||
};
|
};
|
||||||
multiplyNumeric(menu);
|
multiplyNumeric(menu);
|
||||||
assert.equal( menu.width, 400 );
|
assert.equal(menu.width, 400);
|
||||||
assert.equal( menu.height, 600 );
|
assert.equal(menu.height, 600);
|
||||||
assert.equal( menu.title, "Моё меню" );
|
assert.equal(menu.title, "Моё меню");
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,10 +1,10 @@
|
||||||
function getMaxSubSum(arr) {
|
function getMaxSubSum(arr) {
|
||||||
var maxSum = 0, partialSum = 0;
|
var maxSum = 0,
|
||||||
for (var i=0; i<arr.length; i++) {
|
partialSum = 0;
|
||||||
|
for (var i = 0; i < arr.length; i++) {
|
||||||
partialSum += arr[i];
|
partialSum += arr[i];
|
||||||
maxSum = Math.max(maxSum, partialSum);
|
maxSum = Math.max(maxSum, partialSum);
|
||||||
if (partialSum < 0) partialSum = 0;
|
if (partialSum < 0) partialSum = 0;
|
||||||
}
|
}
|
||||||
return maxSum;
|
return maxSum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,33 +1,33 @@
|
||||||
describe("getMaxSubSum", function() {
|
describe("getMaxSubSum", function() {
|
||||||
it("максимальная подсумма [1, 2, 3] равна 6", function() {
|
it("максимальная подсумма [1, 2, 3] равна 6", function() {
|
||||||
assert.equal( getMaxSubSum([1, 2, 3]), 6);
|
assert.equal(getMaxSubSum([1, 2, 3]), 6);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("максимальная подсумма [-1, 2, 3, -9] равна 5", function() {
|
it("максимальная подсумма [-1, 2, 3, -9] равна 5", function() {
|
||||||
assert.equal( getMaxSubSum([-1, 2, 3, -9]), 5);
|
assert.equal(getMaxSubSum([-1, 2, 3, -9]), 5);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("максимальная подсумма [-1, 2, 3, -9, 11] равна 11", function() {
|
it("максимальная подсумма [-1, 2, 3, -9, 11] равна 11", function() {
|
||||||
assert.equal( getMaxSubSum([-1, 2, 3, -9, 11]), 11);
|
assert.equal(getMaxSubSum([-1, 2, 3, -9, 11]), 11);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("максимальная подсумма [-2, -1, 1, 2] равна 3", function() {
|
it("максимальная подсумма [-2, -1, 1, 2] равна 3", function() {
|
||||||
assert.equal( getMaxSubSum([-2, -1, 1, 2]), 3);
|
assert.equal(getMaxSubSum([-2, -1, 1, 2]), 3);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("максимальная подсумма [100, -9, 2, -3, 5] равна 100", function() {
|
it("максимальная подсумма [100, -9, 2, -3, 5] равна 100", function() {
|
||||||
assert.equal( getMaxSubSum([100, -9, 2, -3, 5]), 100);
|
assert.equal(getMaxSubSum([100, -9, 2, -3, 5]), 100);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("максимальная подсумма [] равна 0", function() {
|
it("максимальная подсумма [] равна 0", function() {
|
||||||
assert.equal( getMaxSubSum([]), 0);
|
assert.equal(getMaxSubSum([]), 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("максимальная подсумма [-1] равна 0", function() {
|
it("максимальная подсумма [-1] равна 0", function() {
|
||||||
assert.equal( getMaxSubSum([-1]), 0);
|
assert.equal(getMaxSubSum([-1]), 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("максимальная подсумма [-1, -2] равна 0", function() {
|
it("максимальная подсумма [-1, -2] равна 0", function() {
|
||||||
assert.equal( getMaxSubSum([-1, -2]), 0);
|
assert.equal(getMaxSubSum([-1, -2]), 0);
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -3,7 +3,7 @@ function find(array, value) {
|
||||||
return array.indexOf(value);
|
return array.indexOf(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var i=0; i<array.length; i++) {
|
for (var i = 0; i < array.length; i++) {
|
||||||
if (array[i] === value) return i;
|
if (array[i] === value) return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,25 +2,25 @@ describe("find", function() {
|
||||||
|
|
||||||
describe("возвращает позицию, на которой найден элемент", function() {
|
describe("возвращает позицию, на которой найден элемент", function() {
|
||||||
it("в массиве [1,2,3] находит 1 на позиции 0", function() {
|
it("в массиве [1,2,3] находит 1 на позиции 0", function() {
|
||||||
assert.equal( find([1, 2, 3], 1), 0);
|
assert.equal(find([1, 2, 3], 1), 0);
|
||||||
});
|
});
|
||||||
it("в массиве [1,2,3] находит 2 на позиции 1", function() {
|
it("в массиве [1,2,3] находит 2 на позиции 1", function() {
|
||||||
assert.equal( find([1, 2, 3], 2), 1);
|
assert.equal(find([1, 2, 3], 2), 1);
|
||||||
});
|
});
|
||||||
it("в массиве [1,2,3] находит 3 на позиции 2", function() {
|
it("в массиве [1,2,3] находит 3 на позиции 2", function() {
|
||||||
assert.equal( find([1, 2, 3], 3), 2);
|
assert.equal(find([1, 2, 3], 3), 2);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("если элемент не найден, возвращает -1", function() {
|
it("если элемент не найден, возвращает -1", function() {
|
||||||
assert.equal( find([1,2,3], 0), -1);
|
assert.equal(find([1, 2, 3], 0), -1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("отличает false или null от 0", function() {
|
it("отличает false или null от 0", function() {
|
||||||
assert.equal( find([false, true, null], 0), -1);
|
assert.equal(find([false, true, null], 0), -1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("отличает 1 от true", function() {
|
it("отличает 1 от true", function() {
|
||||||
assert.equal( find([1, 2, 3], true), -1);
|
assert.equal(find([1, 2, 3], true), -1);
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,7 +1,7 @@
|
||||||
function filterRange(arr, a, b) {
|
function filterRange(arr, a, b) {
|
||||||
var result = [];
|
var result = [];
|
||||||
|
|
||||||
for(var i=0; i<arr.length; i++) {
|
for (var i = 0; i < arr.length; i++) {
|
||||||
if (arr[i] >= a && arr[i] <= b) {
|
if (arr[i] >= a && arr[i] <= b) {
|
||||||
result.push(arr[i]);
|
result.push(arr[i]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,13 +3,13 @@ describe("filterRange", function() {
|
||||||
var arr = [5, 4, 3, 8, 0];
|
var arr = [5, 4, 3, 8, 0];
|
||||||
|
|
||||||
filterRange(arr, 0, 10);
|
filterRange(arr, 0, 10);
|
||||||
assert.deepEqual(arr, [5,4,3,8,0]);
|
assert.deepEqual(arr, [5, 4, 3, 8, 0]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("оставляет только значения указанного интервала", function() {
|
it("оставляет только значения указанного интервала", function() {
|
||||||
var arr = [5, 4, 3, 8, 0];
|
var arr = [5, 4, 3, 8, 0];
|
||||||
|
|
||||||
var result = filterRange(arr, 3, 5);
|
var result = filterRange(arr, 3, 5);
|
||||||
assert.deepEqual(result, [5,4,3]);
|
assert.deepEqual(result, [5, 4, 3]);
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,7 +1,7 @@
|
||||||
function addClass(obj, cls) {
|
function addClass(obj, cls) {
|
||||||
var classes = obj.className ? obj.className.split(' ') : [];
|
var classes = obj.className ? obj.className.split(' ') : [];
|
||||||
|
|
||||||
for(var i=0; i<classes.length; i++) {
|
for (var i = 0; i < classes.length; i++) {
|
||||||
if (classes[i] == cls) return; // класс уже есть
|
if (classes[i] == cls) return; // класс уже есть
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
describe("addClass", function() {
|
describe("addClass", function() {
|
||||||
|
|
||||||
it("добавляет класс, которого нет", function() {
|
it("добавляет класс, которого нет", function() {
|
||||||
var obj = { className: 'open menu' };
|
var obj = {
|
||||||
|
className: 'open menu'
|
||||||
|
};
|
||||||
addClass(obj, 'new');
|
addClass(obj, 'new');
|
||||||
assert.deepEqual(obj, {
|
assert.deepEqual(obj, {
|
||||||
className: 'open menu new'
|
className: 'open menu new'
|
||||||
|
@ -9,7 +11,9 @@ describe("addClass", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("не добавляет класс, который уже есть", function() {
|
it("не добавляет класс, который уже есть", function() {
|
||||||
var obj = { className: 'open menu' };
|
var obj = {
|
||||||
|
className: 'open menu'
|
||||||
|
};
|
||||||
addClass(obj, 'open');
|
addClass(obj, 'open');
|
||||||
assert.deepEqual(obj, {
|
assert.deepEqual(obj, {
|
||||||
className: 'open menu'
|
className: 'open menu'
|
||||||
|
@ -17,7 +21,9 @@ describe("addClass", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("не добавляет лишних пробелов, который уже есть", function() {
|
it("не добавляет лишних пробелов, который уже есть", function() {
|
||||||
var obj = { className: '' };
|
var obj = {
|
||||||
|
className: ''
|
||||||
|
};
|
||||||
addClass(obj, 'open');
|
addClass(obj, 'open');
|
||||||
assert.deepEqual(obj, {
|
assert.deepEqual(obj, {
|
||||||
className: 'open'
|
className: 'open'
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
function aclean(arr) {
|
function aclean(arr) {
|
||||||
var obj = {};
|
var obj = {};
|
||||||
|
|
||||||
for(var i=0; i<arr.length; i++) {
|
for (var i = 0; i < arr.length; i++) {
|
||||||
var sorted = arr[i].toLowerCase().split("").sort().join("");
|
var sorted = arr[i].toLowerCase().split("").sort().join("");
|
||||||
obj[sorted] = arr[i];
|
obj[sorted] = arr[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = [];
|
var result = [];
|
||||||
|
|
||||||
for(var key in obj) {
|
for (var key in obj) {
|
||||||
result.push(obj[key]);
|
result.push(obj[key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ describe("aclean", function() {
|
||||||
|
|
||||||
it("не различает регистр символов", function() {
|
it("не различает регистр символов", function() {
|
||||||
var arr = ["воз", "ЗОВ"];
|
var arr = ["воз", "ЗОВ"];
|
||||||
assert.equal( aclean(arr).length, 1 );
|
assert.equal(aclean(arr).length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,7 +1,7 @@
|
||||||
function unique(arr) {
|
function unique(arr) {
|
||||||
var obj = {};
|
var obj = {};
|
||||||
|
|
||||||
for(var i=0; i<arr.length; i++) {
|
for (var i = 0; i < arr.length; i++) {
|
||||||
var str = arr[i];
|
var str = arr[i];
|
||||||
obj[str] = true; // запомнить строку в виде свойства объекта
|
obj[str] = true; // запомнить строку в виде свойства объекта
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
describe("unique", function() {
|
describe("unique", function() {
|
||||||
it("убирает неуникальные элементы из массива", function() {
|
it("убирает неуникальные элементы из массива", function() {
|
||||||
var strings = ["кришна", "кришна", "харе", "харе",
|
var strings = ["кришна", "кришна", "харе", "харе",
|
||||||
"харе", "харе", "кришна", "кришна", "8-()"];
|
"харе", "харе", "кришна", "кришна", "8-()"
|
||||||
|
];
|
||||||
|
|
||||||
assert.deepEqual( unique(strings), ["кришна", "харе", "8-()"] );
|
assert.deepEqual(unique(strings), ["кришна", "харе", "8-()"]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("не изменяет исходный массив", function() {
|
it("не изменяет исходный массив", function() {
|
||||||
var strings = ["кришна", "кришна", "харе", "харе"];
|
var strings = ["кришна", "кришна", "харе", "харе"];
|
||||||
unique(strings);
|
unique(strings);
|
||||||
assert.deepEqual( strings, ["кришна", "кришна", "харе", "харе"] );
|
assert.deepEqual(strings, ["кришна", "кришна", "харе", "харе"]);
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,7 +1,7 @@
|
||||||
function camelize(str) {
|
function camelize(str) {
|
||||||
var arr = str.split('-');
|
var arr = str.split('-');
|
||||||
|
|
||||||
for(var i=1; i<arr.length; i++) {
|
for (var i = 1; i < arr.length; i++) {
|
||||||
// преобразовать: первый символ с большой буквы
|
// преобразовать: первый символ с большой буквы
|
||||||
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
|
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
describe("camelize", function() {
|
describe("camelize", function() {
|
||||||
|
|
||||||
it("оставляет пустую строку \"как есть\"", function() {
|
it("оставляет пустую строку \"как есть\"", function() {
|
||||||
assert.equal( camelize(""), "");
|
assert.equal(camelize(""), "");
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("делает заглавным первый символ после дефиса", function() {
|
describe("делает заглавным первый символ после дефиса", function() {
|
||||||
|
|
||||||
it("превращает background-color в backgroundColor", function() {
|
it("превращает background-color в backgroundColor", function() {
|
||||||
assert.equal( camelize("background-color"), "backgroundColor");
|
assert.equal(camelize("background-color"), "backgroundColor");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("превращает list-style-image в listStyleImage", function() {
|
it("превращает list-style-image в listStyleImage", function() {
|
||||||
assert.equal( camelize("list-style-image"), "listStyleImage");
|
assert.equal(camelize("list-style-image"), "listStyleImage");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("превращает -webkit-transition в WebkitTransition", function() {
|
it("превращает -webkit-transition в WebkitTransition", function() {
|
||||||
assert.equal( camelize("-webkit-transition"), "WebkitTransition");
|
assert.equal(camelize("-webkit-transition"), "WebkitTransition");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
function removeClass(obj, cls) {
|
function removeClass(obj, cls) {
|
||||||
var classes = obj.className.split(' ');
|
var classes = obj.className.split(' ');
|
||||||
|
|
||||||
for(i=0; i<classes.length; i++) {
|
for (i = 0; i < classes.length; i++) {
|
||||||
if (classes[i] == cls) {
|
if (classes[i] == cls) {
|
||||||
classes.splice(i, 1); // удалить класс
|
classes.splice(i, 1); // удалить класс
|
||||||
i--;
|
i--;
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
describe("removeClass", function() {
|
describe("removeClass", function() {
|
||||||
|
|
||||||
it("ничего не делает, если класса нет", function() {
|
it("ничего не делает, если класса нет", function() {
|
||||||
var obj = { className: 'open menu' };
|
var obj = {
|
||||||
|
className: 'open menu'
|
||||||
|
};
|
||||||
removeClass(obj, 'new');
|
removeClass(obj, 'new');
|
||||||
assert.deepEqual(obj, {
|
assert.deepEqual(obj, {
|
||||||
className: 'open menu'
|
className: 'open menu'
|
||||||
|
@ -9,7 +11,9 @@ describe("removeClass", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("не меняет пустое свойство", function() {
|
it("не меняет пустое свойство", function() {
|
||||||
var obj = { className: '' };
|
var obj = {
|
||||||
|
className: ''
|
||||||
|
};
|
||||||
removeClass(obj, 'new');
|
removeClass(obj, 'new');
|
||||||
assert.deepEqual(obj, {
|
assert.deepEqual(obj, {
|
||||||
className: ""
|
className: ""
|
||||||
|
@ -17,7 +21,9 @@ describe("removeClass", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("удаляет класс, не оставляя лишних пробелов", function() {
|
it("удаляет класс, не оставляя лишних пробелов", function() {
|
||||||
var obj = { className: 'open menu' };
|
var obj = {
|
||||||
|
className: 'open menu'
|
||||||
|
};
|
||||||
removeClass(obj, 'open');
|
removeClass(obj, 'open');
|
||||||
assert.deepEqual(obj, {
|
assert.deepEqual(obj, {
|
||||||
className: "menu"
|
className: "menu"
|
||||||
|
@ -25,7 +31,9 @@ describe("removeClass", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("если класс один и он удалён, то результат - пустая строка", function() {
|
it("если класс один и он удалён, то результат - пустая строка", function() {
|
||||||
var obj = { className: "menu" };
|
var obj = {
|
||||||
|
className: "menu"
|
||||||
|
};
|
||||||
removeClass(obj, 'menu');
|
removeClass(obj, 'menu');
|
||||||
assert.deepEqual(obj, {
|
assert.deepEqual(obj, {
|
||||||
className: ""
|
className: ""
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
function filterRangeInPlace(arr, a, b) {
|
function filterRangeInPlace(arr, a, b) {
|
||||||
|
|
||||||
for(var i = 0; i<arr.length; i++) {
|
for (var i = 0; i < arr.length; i++) {
|
||||||
var val = arr[i];
|
var val = arr[i];
|
||||||
if (val < a || val > b) {
|
if (val < a || val > b) {
|
||||||
arr.splice(i--, 1);
|
arr.splice(i--, 1);
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
describe("getSums", function() {
|
describe("getSums", function() {
|
||||||
|
|
||||||
it("частичные суммы [1,2,3,4,5] равны [1,3,6,10,15]", function() {
|
it("частичные суммы [1,2,3,4,5] равны [1,3,6,10,15]", function() {
|
||||||
assert.deepEqual( getSums([1,2,3,4,5]), [1,3,6,10,15]);
|
assert.deepEqual(getSums([1, 2, 3, 4, 5]), [1, 3, 6, 10, 15]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("частичные суммы [-2,-1,0,1] равны [-2,-3,-3,-2]", function() {
|
it("частичные суммы [-2,-1,0,1] равны [-2,-3,-3,-2]", function() {
|
||||||
assert.deepEqual( getSums([-2,-1,0,1]), [-2,-3,-3,-2]);
|
assert.deepEqual(getSums([-2, -1, 0, 1]), [-2, -3, -3, -2]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("частичные суммы [] равны []", function() {
|
it("частичные суммы [] равны []", function() {
|
||||||
assert.deepEqual( getSums([]), [] );
|
assert.deepEqual(getSums([]), []);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("частичные суммы [1] равны [1]", function() {
|
it("частичные суммы [1] равны [1]", function() {
|
||||||
assert.deepEqual( getSums([1]), [1] );
|
assert.deepEqual(getSums([1]), [1]);
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -4,19 +4,18 @@ beforeEach(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("возвращает пустую строку по умолчанию", function() {
|
it("возвращает пустую строку по умолчанию", function() {
|
||||||
assert.strictEqual( buffer(), "");
|
assert.strictEqual(buffer(), "");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("добавляет аргументы в буффер", function() {
|
it("добавляет аргументы в буффер", function() {
|
||||||
buffer('Замыкания');
|
buffer('Замыкания');
|
||||||
buffer(' Использовать');
|
buffer(' Использовать');
|
||||||
buffer(' Нужно!');
|
buffer(' Нужно!');
|
||||||
assert.equal( buffer(), 'Замыкания Использовать Нужно!');
|
assert.equal(buffer(), 'Замыкания Использовать Нужно!');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("приводит всё к строке", function() {
|
it("приводит всё к строке", function() {
|
||||||
buffer(null);
|
buffer(null);
|
||||||
buffer(false);
|
buffer(false);
|
||||||
assert.equal( buffer(), "nullfalse");
|
assert.equal(buffer(), "nullfalse");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -5,20 +5,20 @@ beforeEach(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("возвращает пустую строку по умолчанию", function() {
|
it("возвращает пустую строку по умолчанию", function() {
|
||||||
assert.strictEqual( buffer(), "");
|
assert.strictEqual(buffer(), "");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("добавляет аргументы в буффер", function() {
|
it("добавляет аргументы в буффер", function() {
|
||||||
buffer('Замыкания');
|
buffer('Замыкания');
|
||||||
buffer(' Использовать');
|
buffer(' Использовать');
|
||||||
buffer(' Нужно!');
|
buffer(' Нужно!');
|
||||||
assert.equal( buffer(), 'Замыкания Использовать Нужно!');
|
assert.equal(buffer(), 'Замыкания Использовать Нужно!');
|
||||||
});
|
});
|
||||||
|
|
||||||
it("приводит всё к строке", function() {
|
it("приводит всё к строке", function() {
|
||||||
buffer(null);
|
buffer(null);
|
||||||
buffer(false);
|
buffer(false);
|
||||||
assert.equal( buffer(), "nullfalse");
|
assert.equal(buffer(), "nullfalse");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("очищает буфер вызовом clear", function() {
|
it("очищает буфер вызовом clear", function() {
|
||||||
|
@ -26,5 +26,5 @@ it("очищает буфер вызовом clear", function() {
|
||||||
buffer.clear();
|
buffer.clear();
|
||||||
buffer("первый");
|
buffer("первый");
|
||||||
buffer("второй");
|
buffer("второй");
|
||||||
assert.equal( buffer(), "первыйвторой");
|
assert.equal(buffer(), "первыйвторой");
|
||||||
});
|
});
|
|
@ -1,7 +1,7 @@
|
||||||
function filter(arr, func) {
|
function filter(arr, func) {
|
||||||
var result = [];
|
var result = [];
|
||||||
|
|
||||||
for(var i=0; i<arr.length; i++) {
|
for (var i = 0; i < arr.length; i++) {
|
||||||
var val = arr[i];
|
var val = arr[i];
|
||||||
if (func(val)) {
|
if (func(val)) {
|
||||||
result.push(val);
|
result.push(val);
|
||||||
|
@ -19,6 +19,6 @@ function inArray(arr) {
|
||||||
|
|
||||||
function inBetween(a, b) {
|
function inBetween(a, b) {
|
||||||
return function(x) {
|
return function(x) {
|
||||||
return x >=a && x <= b;
|
return x >= a && x <= b;
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -9,4 +9,3 @@ function inBetween(a, b) {
|
||||||
function inArray(arr) {
|
function inArray(arr) {
|
||||||
// ...ваш код...
|
// ...ваш код...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,8 @@ describe("inArray", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("возвращает фильтр для значений в массиве", function() {
|
it("возвращает фильтр для значений в массиве", function() {
|
||||||
assert.isTrue( checkInArr(5) );
|
assert.isTrue(checkInArr(5));
|
||||||
assert.isFalse( checkInArr(0) );
|
assert.isFalse(checkInArr(0));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -26,8 +26,8 @@ describe("inBetween", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("возвращает фильтрa для значений в промежутке", function() {
|
it("возвращает фильтрa для значений в промежутке", function() {
|
||||||
assert.isTrue( checkBetween36(5) );
|
assert.isTrue(checkBetween36(5));
|
||||||
assert.isFalse( checkBetween36(0) );
|
assert.isFalse(checkBetween36(0));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -35,20 +35,24 @@ describe("inBetween", function() {
|
||||||
describe("filter", function() {
|
describe("filter", function() {
|
||||||
|
|
||||||
it("фильтрует через func", function() {
|
it("фильтрует через func", function() {
|
||||||
assert.deepEqual( filter(arr, function(a) { return a % 2 == 0; }), [2,4,6] );
|
assert.deepEqual(filter(arr, function(a) {
|
||||||
|
return a % 2 == 0;
|
||||||
|
}), [2, 4, 6]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("не модифицирует исходный массив", function() {
|
it("не модифицирует исходный массив", function() {
|
||||||
filter(arr, function(a) { return a % 2 == 0; });
|
filter(arr, function(a) {
|
||||||
assert.deepEqual( arr, [1, 2, 3, 4, 5, 6, 7] );
|
return a % 2 == 0;
|
||||||
|
});
|
||||||
|
assert.deepEqual(arr, [1, 2, 3, 4, 5, 6, 7]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("поддерживает фильтр inBetween", function() {
|
it("поддерживает фильтр inBetween", function() {
|
||||||
assert.deepEqual( filter(arr,inBetween(3,6)), [3,4,5,6]);
|
assert.deepEqual(filter(arr, inBetween(3, 6)), [3, 4, 5, 6]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("поддерживает фильтр inArray", function() {
|
it("поддерживает фильтр inArray", function() {
|
||||||
assert.deepEqual( filter(arr, inArray([1,2,3])), [1,2,3]);
|
assert.deepEqual(filter(arr, inArray([1, 2, 3])), [1, 2, 3]);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -2,12 +2,12 @@ function makeArmy() {
|
||||||
|
|
||||||
var shooters = [];
|
var shooters = [];
|
||||||
|
|
||||||
for(var i=0; i<10; i++) {
|
for (var i = 0; i < 10; i++) {
|
||||||
|
|
||||||
var shooter = (function(x) {
|
var shooter = (function(x) {
|
||||||
|
|
||||||
return function() {
|
return function() {
|
||||||
alert( x );
|
alert(x);
|
||||||
};
|
};
|
||||||
|
|
||||||
})(i);
|
})(i);
|
||||||
|
|
|
@ -2,7 +2,7 @@ function makeArmy() {
|
||||||
|
|
||||||
var shooters = [];
|
var shooters = [];
|
||||||
|
|
||||||
for(var i=0; i<10; i++) {
|
for (var i = 0; i < 10; i++) {
|
||||||
var shooter = function() { // функция-стрелок
|
var shooter = function() { // функция-стрелок
|
||||||
alert(i); // выводит свой номер
|
alert(i); // выводит свой номер
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,4 +12,3 @@ var calculator = {
|
||||||
this.b = +prompt('b?', 0);
|
this.b = +prompt('b?', 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,11 +9,11 @@ describe("calculator", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при вводе 2 и 3 сумма равна 5", function() {
|
it("при вводе 2 и 3 сумма равна 5", function() {
|
||||||
assert.equal( calculator.sum(), 5 );
|
assert.equal(calculator.sum(), 5);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при вводе 2 и 3 произведение равно 6", function() {
|
it("при вводе 2 и 3 произведение равно 6", function() {
|
||||||
assert.equal( calculator.mul(), 6 );
|
assert.equal(calculator.mul(), 6);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -11,11 +11,11 @@ describe("calculator", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при вводе 2 и 3 сумма равна 5", function() {
|
it("при вводе 2 и 3 сумма равна 5", function() {
|
||||||
assert.equal( calculator.sum(), 5 );
|
assert.equal(calculator.sum(), 5);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при вводе 2 и 3 произведение равно 6", function() {
|
it("при вводе 2 и 3 произведение равно 6", function() {
|
||||||
assert.equal( calculator.mul(), 6 );
|
assert.equal(calculator.mul(), 6);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -13,25 +13,25 @@ describe("Accumulator(1)", function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("начальное значение 1", function() {
|
it("начальное значение 1", function() {
|
||||||
assert.equal( accumulator.value, 1 );
|
assert.equal(accumulator.value, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("после ввода 0 значение 1", function() {
|
it("после ввода 0 значение 1", function() {
|
||||||
prompt.returns("0");
|
prompt.returns("0");
|
||||||
accumulator.read();
|
accumulator.read();
|
||||||
assert.equal( accumulator.value, 1 );
|
assert.equal(accumulator.value, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("после ввода 1 значение 2", function() {
|
it("после ввода 1 значение 2", function() {
|
||||||
prompt.returns("1");
|
prompt.returns("1");
|
||||||
accumulator.read();
|
accumulator.read();
|
||||||
assert.equal( accumulator.value, 2 );
|
assert.equal(accumulator.value, 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("после ввода 2 значение 4", function() {
|
it("после ввода 2 значение 4", function() {
|
||||||
prompt.returns("2");
|
prompt.returns("2");
|
||||||
accumulator.read();
|
accumulator.read();
|
||||||
assert.equal( accumulator.value, 4 );
|
assert.equal(accumulator.value, 4);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -16,7 +16,7 @@ function Calculator() {
|
||||||
op = split[1],
|
op = split[1],
|
||||||
b = +split[2]
|
b = +split[2]
|
||||||
|
|
||||||
if(!methods[op] || isNaN(a) || isNaN(b)) {
|
if (!methods[op] || isNaN(a) || isNaN(b)) {
|
||||||
return NaN;
|
return NaN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,23 +4,23 @@ before(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("calculate(12 + 34) = 46", function() {
|
it("calculate(12 + 34) = 46", function() {
|
||||||
assert.equal( calculator.calculate("12 + 34"), 46 );
|
assert.equal(calculator.calculate("12 + 34"), 46);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("calculate(34 - 12) = 22", function() {
|
it("calculate(34 - 12) = 22", function() {
|
||||||
assert.equal( calculator.calculate("34 - 12"), 22 );
|
assert.equal(calculator.calculate("34 - 12"), 22);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("добавили умножение: calculate(2 * 3) = 6", function() {
|
it("добавили умножение: calculate(2 * 3) = 6", function() {
|
||||||
calculator.addMethod("*", function(a, b) {
|
calculator.addMethod("*", function(a, b) {
|
||||||
return a * b;
|
return a * b;
|
||||||
});
|
});
|
||||||
assert.equal( calculator.calculate("2 * 3"), 6 );
|
assert.equal(calculator.calculate("2 * 3"), 6);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("добавили возведение в степень: calculate(2 ** 3) = 8", function() {
|
it("добавили возведение в степень: calculate(2 ** 3) = 8", function() {
|
||||||
calculator.addMethod("**", function(a, b) {
|
calculator.addMethod("**", function(a, b) {
|
||||||
return Math.pow(a, b);
|
return Math.pow(a, b);
|
||||||
});
|
});
|
||||||
assert.equal( calculator.calculate("2 ** 3"), 8 );
|
assert.equal(calculator.calculate("2 ** 3"), 8);
|
||||||
});
|
});
|
|
@ -15,7 +15,7 @@ describe("Article.showStats", function() {
|
||||||
new Article();
|
new Article();
|
||||||
Article.showStats();
|
Article.showStats();
|
||||||
|
|
||||||
assert( alert.calledWith('Всего: 2, Последняя: ' + new Date() ) );
|
assert(alert.calledWith('Всего: 2, Последняя: ' + new Date()));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("и ещё одна статья...", function() {
|
it("и ещё одна статья...", function() {
|
||||||
|
@ -23,6 +23,6 @@ describe("Article.showStats", function() {
|
||||||
new Article();
|
new Article();
|
||||||
Article.showStats();
|
Article.showStats();
|
||||||
|
|
||||||
assert( alert.calledWith('Всего: 3, Последняя: ' + new Date() ) );
|
assert(alert.calledWith('Всего: 3, Последняя: ' + new Date()));
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,3 +1,3 @@
|
||||||
function applyAll(func) {
|
function applyAll(func) {
|
||||||
return func.apply(this, [].slice.call(arguments, 1) );
|
return func.apply(this, [].slice.call(arguments, 1));
|
||||||
}
|
}
|
|
@ -2,14 +2,14 @@ describe("applyAll", function() {
|
||||||
|
|
||||||
it("применяет функцию ко всем аргументам, начиная со 2го", function() {
|
it("применяет функцию ко всем аргументам, начиная со 2го", function() {
|
||||||
var min = applyAll(Math.min, 1, 2, 3);
|
var min = applyAll(Math.min, 1, 2, 3);
|
||||||
assert.equal( min, 1 );
|
assert.equal(min, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("при отсутствии аргументов просто вызывает функцию", function() {
|
it("при отсутствии аргументов просто вызывает функцию", function() {
|
||||||
var spy = sinon.spy();
|
var spy = sinon.spy();
|
||||||
applyAll(spy);
|
applyAll(spy);
|
||||||
assert( spy.calledOnce );
|
assert(spy.calledOnce);
|
||||||
assert.equal( spy.firstCall.args.length, 0 );
|
assert.equal(spy.firstCall.args.length, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -4,27 +4,27 @@ describe("makeLogging", function() {
|
||||||
|
|
||||||
var log = [];
|
var log = [];
|
||||||
work = makeLogging(work, log);
|
work = makeLogging(work, log);
|
||||||
assert.deepEqual( log, []);
|
assert.deepEqual(log, []);
|
||||||
|
|
||||||
work(1);
|
work(1);
|
||||||
assert.deepEqual( log, [1]);
|
assert.deepEqual(log, [1]);
|
||||||
|
|
||||||
work(2);
|
work(2);
|
||||||
assert.deepEqual( log, [1, 2]);
|
assert.deepEqual(log, [1, 2]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("передаёт вызов функции, возвращает её результат", function() {
|
it("передаёт вызов функции, возвращает её результат", function() {
|
||||||
var log = [];
|
var log = [];
|
||||||
|
|
||||||
function work(x) {
|
function work(x) {
|
||||||
return x*2;
|
return x * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
work = sinon.spy(work);
|
work = sinon.spy(work);
|
||||||
var spy = work;
|
var spy = work;
|
||||||
work = makeLogging(work, log);
|
work = makeLogging(work, log);
|
||||||
|
|
||||||
assert.equal( work(1), 2 );
|
assert.equal(work(1), 2);
|
||||||
assert(spy.calledWith(1));
|
assert(spy.calledWith(1));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -33,14 +33,16 @@ describe("makeLogging", function() {
|
||||||
var log = [];
|
var log = [];
|
||||||
|
|
||||||
var calculator = {
|
var calculator = {
|
||||||
double: function(x) { return x*2; }
|
double: function(x) {
|
||||||
|
return x * 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
calculator.double = sinon.spy(calculator.double);
|
calculator.double = sinon.spy(calculator.double);
|
||||||
var spy = calculator.double;
|
var spy = calculator.double;
|
||||||
calculator.double = makeLogging(calculator.double, log);
|
calculator.double = makeLogging(calculator.double, log);
|
||||||
|
|
||||||
assert.equal( calculator.double(1), 2 );
|
assert.equal(calculator.double(1), 2);
|
||||||
assert(spy.calledWith(1));
|
assert(spy.calledWith(1));
|
||||||
assert(spy.calledOn(calculator));
|
assert(spy.calledOn(calculator));
|
||||||
});
|
});
|
||||||
|
|
|
@ -7,9 +7,3 @@ function makeLogging(f, log) {
|
||||||
|
|
||||||
return wrapper;
|
return wrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,21 @@
|
||||||
|
|
||||||
describe("makeLogging", function() {
|
describe("makeLogging", function() {
|
||||||
it("записывает вызовы в массив log", function() {
|
it("записывает вызовы в массив log", function() {
|
||||||
var work = sinon.spy();
|
var work = sinon.spy();
|
||||||
|
|
||||||
var log = [];
|
var log = [];
|
||||||
work = makeLogging(work, log);
|
work = makeLogging(work, log);
|
||||||
assert.deepEqual( log, []);
|
assert.deepEqual(log, []);
|
||||||
|
|
||||||
work(1, 2);
|
work(1, 2);
|
||||||
assert.deepEqual( log, [[1, 2]]);
|
assert.deepEqual(log, [
|
||||||
|
[1, 2]
|
||||||
|
]);
|
||||||
|
|
||||||
work(3, 4);
|
work(3, 4);
|
||||||
assert.deepEqual( log, [[1, 2], [3,4]]);
|
assert.deepEqual(log, [
|
||||||
|
[1, 2],
|
||||||
|
[3, 4]
|
||||||
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("передаёт вызов функции, возвращает её результат", function() {
|
it("передаёт вызов функции, возвращает её результат", function() {
|
||||||
|
@ -25,7 +29,7 @@ describe("makeLogging", function() {
|
||||||
var spy = sum;
|
var spy = sum;
|
||||||
sum = makeLogging(sum, log);
|
sum = makeLogging(sum, log);
|
||||||
|
|
||||||
assert.equal( sum(1, 2), 3 );
|
assert.equal(sum(1, 2), 3);
|
||||||
assert(spy.calledWith(1, 2));
|
assert(spy.calledWith(1, 2));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -34,14 +38,16 @@ describe("makeLogging", function() {
|
||||||
var log = [];
|
var log = [];
|
||||||
|
|
||||||
var calculator = {
|
var calculator = {
|
||||||
sum: function(a, b) { return a + b; }
|
sum: function(a, b) {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
calculator.sum = sinon.spy(calculator.sum);
|
calculator.sum = sinon.spy(calculator.sum);
|
||||||
var spy = calculator.sum;
|
var spy = calculator.sum;
|
||||||
calculator.sum = makeLogging(calculator.sum, log);
|
calculator.sum = makeLogging(calculator.sum, log);
|
||||||
|
|
||||||
assert.equal( calculator.sum(1, 2), 3 );
|
assert.equal(calculator.sum(1, 2), 3);
|
||||||
assert(spy.calledWith(1, 2));
|
assert(spy.calledWith(1, 2));
|
||||||
assert(spy.calledOn(calculator));
|
assert(spy.calledOn(calculator));
|
||||||
});
|
});
|
||||||
|
|
|
@ -2,7 +2,7 @@ describe("makeCaching", function() {
|
||||||
|
|
||||||
it("запоминает предыдущее значение функции с таким аргументом", function() {
|
it("запоминает предыдущее значение функции с таким аргументом", function() {
|
||||||
function f(x) {
|
function f(x) {
|
||||||
return Math.random()*x;
|
return Math.random() * x;
|
||||||
}
|
}
|
||||||
|
|
||||||
f = makeCaching(f);
|
f = makeCaching(f);
|
||||||
|
@ -13,7 +13,7 @@ describe("makeCaching", function() {
|
||||||
|
|
||||||
var anotherValue = f(2);
|
var anotherValue = f(2);
|
||||||
// почти наверняка другое значение
|
// почти наверняка другое значение
|
||||||
assert.notEqual( a, anotherValue );
|
assert.notEqual(a, anotherValue);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("сохраняет контекст вызова", function() {
|
it("сохраняет контекст вызова", function() {
|
||||||
|
@ -24,8 +24,8 @@ describe("makeCaching", function() {
|
||||||
var spy = obj.spy;
|
var spy = obj.spy;
|
||||||
obj.spy = makeCaching(obj.spy);
|
obj.spy = makeCaching(obj.spy);
|
||||||
obj.spy(123);
|
obj.spy(123);
|
||||||
assert( spy.calledWith(123) );
|
assert(spy.calledWith(123));
|
||||||
assert( spy.calledOn(obj) );
|
assert(spy.calledOn(obj));
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -9,6 +9,7 @@ describe("delay", function() {
|
||||||
|
|
||||||
it("вызывает функцию через указанный таймаут", function() {
|
it("вызывает функцию через указанный таймаут", function() {
|
||||||
var start = Date.now();
|
var start = Date.now();
|
||||||
|
|
||||||
function f(x) {
|
function f(x) {
|
||||||
assert.equal(Date.now() - start, 1000);
|
assert.equal(Date.now() - start, 1000);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,9 @@ function debounce(f, ms) {
|
||||||
|
|
||||||
state = COOLDOWN;
|
state = COOLDOWN;
|
||||||
|
|
||||||
setTimeout(function() { state = null }, ms);
|
setTimeout(function() {
|
||||||
|
state = null
|
||||||
|
}, ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -9,16 +9,25 @@ describe("debounce", function() {
|
||||||
|
|
||||||
it("вызывает функцию не чаще чем раз в ms миллисекунд", function() {
|
it("вызывает функцию не чаще чем раз в ms миллисекунд", function() {
|
||||||
var log = '';
|
var log = '';
|
||||||
function f(a) { log += a; }
|
|
||||||
|
function f(a) {
|
||||||
|
log += a;
|
||||||
|
}
|
||||||
|
|
||||||
f = debounce(f, 1000);
|
f = debounce(f, 1000);
|
||||||
|
|
||||||
f(1); // выполнится сразу же
|
f(1); // выполнится сразу же
|
||||||
f(2); // игнор
|
f(2); // игнор
|
||||||
|
|
||||||
setTimeout(function() { f(3) }, 100); // игнор (рановато)
|
setTimeout(function() {
|
||||||
setTimeout(function() { f(4) }, 1100); // выполнится (таймаут прошёл)
|
f(3)
|
||||||
setTimeout(function() { f(5) }, 1500); // игнор
|
}, 100); // игнор (рановато)
|
||||||
|
setTimeout(function() {
|
||||||
|
f(4)
|
||||||
|
}, 1100); // выполнится (таймаут прошёл)
|
||||||
|
setTimeout(function() {
|
||||||
|
f(5)
|
||||||
|
}, 1500); // игнор
|
||||||
|
|
||||||
this.clock.tick(5000);
|
this.clock.tick(5000);
|
||||||
assert.equal(log, "14");
|
assert.equal(log, "14");
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
describe("throttle(f, 1000)", function() {
|
describe("throttle(f, 1000)", function() {
|
||||||
var f1000;
|
var f1000;
|
||||||
var log = "";
|
var log = "";
|
||||||
function f(a) { log += a; }
|
|
||||||
|
function f(a) {
|
||||||
|
log += a;
|
||||||
|
}
|
||||||
|
|
||||||
before(function() {
|
before(function() {
|
||||||
f1000 = throttle(f, 1000);
|
f1000 = throttle(f, 1000);
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
function Clock(options) {
|
function Clock(options) {
|
||||||
this._template = options.template;
|
this._template = options.template;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
function Clock(options) {
|
function Clock(options) {
|
||||||
this._template = options.template;
|
this._template = options.template;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
|
|
||||||
|
|
||||||
function ExtendedClock(options) {
|
function ExtendedClock(options) {
|
||||||
Clock.apply(this, arguments);
|
Clock.apply(this, arguments);
|
||||||
this._precision = +options.precision || 1000;
|
this._precision = +options.precision || 1000;
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
function Clock(options) {
|
function Clock(options) {
|
||||||
this._template = options.template;
|
this._template = options.template;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
|
|
||||||
|
|
||||||
function ExtendedClock(options) {
|
function ExtendedClock(options) {
|
||||||
Clock.apply(this, arguments);
|
Clock.apply(this, arguments);
|
||||||
this._precision = +options.precision || 1000;
|
this._precision = +options.precision || 1000;
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
function Clock(options) {
|
function Clock(options) {
|
||||||
this._template = options.template;
|
this._template = options.template;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ function extend(Child, Parent) {
|
||||||
Child.prototype.constructor = Child;
|
Child.prototype.constructor = Child;
|
||||||
Child.parent = Parent.prototype;
|
Child.parent = Parent.prototype;
|
||||||
}
|
}
|
||||||
|
|
||||||
function inherit(proto) {
|
function inherit(proto) {
|
||||||
function F() {}
|
function F() {}
|
||||||
F.prototype = proto;
|
F.prototype = proto;
|
||||||
|
|
|
@ -14,7 +14,7 @@ Menu.prototype.close = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
Menu.prototype._stateAsString = function() {
|
Menu.prototype._stateAsString = function() {
|
||||||
switch(this._state) {
|
switch (this._state) {
|
||||||
case this.STATE_OPEN:
|
case this.STATE_OPEN:
|
||||||
return 'открыто';
|
return 'открыто';
|
||||||
|
|
||||||
|
@ -24,5 +24,5 @@ Menu.prototype._stateAsString = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
Menu.prototype.showState = function() {
|
Menu.prototype.showState = function() {
|
||||||
alert( this._stateAsString() );
|
alert(this._stateAsString());
|
||||||
}
|
}
|
|
@ -14,7 +14,7 @@ Menu.prototype.close = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
Menu.prototype._stateAsString = function() {
|
Menu.prototype._stateAsString = function() {
|
||||||
switch(this._state) {
|
switch (this._state) {
|
||||||
case Menu.STATE_OPEN:
|
case Menu.STATE_OPEN:
|
||||||
return 'открыто';
|
return 'открыто';
|
||||||
|
|
||||||
|
@ -24,5 +24,5 @@ Menu.prototype._stateAsString = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
Menu.prototype.showState = function() {
|
Menu.prototype.showState = function() {
|
||||||
alert( this._stateAsString() );
|
alert(this._stateAsString());
|
||||||
};
|
};
|
|
@ -1,24 +1,27 @@
|
||||||
if (!window.setImmediate) window.setImmediate = (function() {
|
if (!window.setImmediate) window.setImmediate = (function() {
|
||||||
var head = { }, tail = head; // очередь вызовов, 1-связный список
|
var head = {},
|
||||||
|
tail = head; // очередь вызовов, 1-связный список
|
||||||
|
|
||||||
var ID = Math.random(); // уникальный идентификатор
|
var ID = Math.random(); // уникальный идентификатор
|
||||||
|
|
||||||
function onmessage(e) {
|
function onmessage(e) {
|
||||||
if(e.data != ID) return; // не наше сообщение
|
if (e.data != ID) return; // не наше сообщение
|
||||||
head = head.next;
|
head = head.next;
|
||||||
var func = head.func;
|
var func = head.func;
|
||||||
delete head.func;
|
delete head.func;
|
||||||
func();
|
func();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(window.addEventListener) { // IE9+, другие браузеры
|
if (window.addEventListener) { // IE9+, другие браузеры
|
||||||
window.addEventListener('message', onmessage);
|
window.addEventListener('message', onmessage);
|
||||||
} else { // IE8
|
} else { // IE8
|
||||||
window.attachEvent( 'onmessage', onmessage );
|
window.attachEvent('onmessage', onmessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
return window.postMessage ? function(func) {
|
return window.postMessage ? function(func) {
|
||||||
tail = tail.next = { func: func };
|
tail = tail.next = {
|
||||||
|
func: func
|
||||||
|
};
|
||||||
window.postMessage(ID, "*");
|
window.postMessage(ID, "*");
|
||||||
} :
|
} :
|
||||||
function(func) { // IE7-
|
function(func) { // IE7-
|
||||||
|
|
|
@ -9,79 +9,85 @@
|
||||||
* @param {window object} [win] Optional prameter. You could send an IFrame.contentWindow too.
|
* @param {window object} [win] Optional prameter. You could send an IFrame.contentWindow too.
|
||||||
*/
|
*/
|
||||||
function fixIERangeObject(range, win) { //Only for IE8 and below.
|
function fixIERangeObject(range, win) { //Only for IE8 and below.
|
||||||
win=win || window;
|
win = win || window;
|
||||||
|
|
||||||
if(!range) return null;
|
if (!range) return null;
|
||||||
if(!range.startContainer && win.document.selection) { //IE8 and below
|
if (!range.startContainer && win.document.selection) { //IE8 and below
|
||||||
|
|
||||||
var _findTextNode=function(parentElement,text) {
|
var _findTextNode = function(parentElement, text) {
|
||||||
//Iterate through all the child text nodes and check for matches
|
//Iterate through all the child text nodes and check for matches
|
||||||
//As we go through each text node keep removing the text value (substring) from the beginning of the text variable.
|
//As we go through each text node keep removing the text value (substring) from the beginning of the text variable.
|
||||||
var container=null,offset=-1;
|
var container = null,
|
||||||
for(var node=parentElement.firstChild; node; node=node.nextSibling) {
|
offset = -1;
|
||||||
if(node.nodeType==3) {//Text node
|
for (var node = parentElement.firstChild; node; node = node.nextSibling) {
|
||||||
var find=node.nodeValue;
|
if (node.nodeType == 3) { //Text node
|
||||||
var pos=text.indexOf(find);
|
var find = node.nodeValue;
|
||||||
if(pos==0 && text!=find) { //text==find is a special case
|
var pos = text.indexOf(find);
|
||||||
text=text.substring(find.length);
|
if (pos == 0 && text != find) { //text==find is a special case
|
||||||
|
text = text.substring(find.length);
|
||||||
} else {
|
} else {
|
||||||
container=node;
|
container = node;
|
||||||
offset=text.length-1; //Offset to the last character of text. text[text.length-1] will give the last character.
|
offset = text.length - 1; //Offset to the last character of text. text[text.length-1] will give the last character.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Debug Message
|
//Debug Message
|
||||||
//alert(container.nodeValue);
|
//alert(container.nodeValue);
|
||||||
return {node: container,offset: offset}; //nodeInfo
|
return {
|
||||||
|
node: container,
|
||||||
|
offset: offset
|
||||||
|
}; //nodeInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
var rangeCopy1=range.duplicate(), rangeCopy2=range.duplicate(); //Create a copy
|
var rangeCopy1 = range.duplicate(),
|
||||||
var rangeObj1=range.duplicate(), rangeObj2=range.duplicate(); //More copies :P
|
rangeCopy2 = range.duplicate(); //Create a copy
|
||||||
|
var rangeObj1 = range.duplicate(),
|
||||||
|
rangeObj2 = range.duplicate(); //More copies :P
|
||||||
|
|
||||||
rangeCopy1.collapse(true); //Go to beginning of the selection
|
rangeCopy1.collapse(true); //Go to beginning of the selection
|
||||||
rangeCopy1.moveEnd('character',1); //Select only the first character
|
rangeCopy1.moveEnd('character', 1); //Select only the first character
|
||||||
rangeCopy2.collapse(false); //Go to the end of the selection
|
rangeCopy2.collapse(false); //Go to the end of the selection
|
||||||
rangeCopy2.moveStart('character',-1); //Select only the last character
|
rangeCopy2.moveStart('character', -1); //Select only the last character
|
||||||
|
|
||||||
//Debug Message
|
//Debug Message
|
||||||
// alert(rangeCopy1.text); //Should be the first character of the selection
|
// alert(rangeCopy1.text); //Should be the first character of the selection
|
||||||
var parentElement1=rangeCopy1.parentElement(), parentElement2=rangeCopy2.parentElement();
|
var parentElement1 = rangeCopy1.parentElement(),
|
||||||
|
parentElement2 = rangeCopy2.parentElement();
|
||||||
|
|
||||||
//If user clicks the input button without selecting text, then moveToElementText throws an error.
|
//If user clicks the input button without selecting text, then moveToElementText throws an error.
|
||||||
if(parentElement1 instanceof HTMLInputElement || parentElement2 instanceof HTMLInputElement) {
|
if (parentElement1 instanceof HTMLInputElement || parentElement2 instanceof HTMLInputElement) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
rangeObj1.moveToElementText(parentElement1); //Select all text of parentElement
|
rangeObj1.moveToElementText(parentElement1); //Select all text of parentElement
|
||||||
rangeObj1.setEndPoint('EndToEnd',rangeCopy1); //Set end point to the first character of the 'real' selection
|
rangeObj1.setEndPoint('EndToEnd', rangeCopy1); //Set end point to the first character of the 'real' selection
|
||||||
rangeObj2.moveToElementText(parentElement2);
|
rangeObj2.moveToElementText(parentElement2);
|
||||||
rangeObj2.setEndPoint('EndToEnd',rangeCopy2); //Set end point to the last character of the 'real' selection
|
rangeObj2.setEndPoint('EndToEnd', rangeCopy2); //Set end point to the last character of the 'real' selection
|
||||||
|
|
||||||
var text1=rangeObj1.text; //Now we get all text from parentElement's first character upto the real selection's first character
|
var text1 = rangeObj1.text; //Now we get all text from parentElement's first character upto the real selection's first character
|
||||||
var text2=rangeObj2.text; //Here we get all text from parentElement's first character upto the real selection's last character
|
var text2 = rangeObj2.text; //Here we get all text from parentElement's first character upto the real selection's last character
|
||||||
|
|
||||||
var nodeInfo1=_findTextNode(parentElement1,text1);
|
var nodeInfo1 = _findTextNode(parentElement1, text1);
|
||||||
var nodeInfo2=_findTextNode(parentElement2,text2);
|
var nodeInfo2 = _findTextNode(parentElement2, text2);
|
||||||
|
|
||||||
//Finally we are here
|
//Finally we are here
|
||||||
range.startContainer=nodeInfo1.node;
|
range.startContainer = nodeInfo1.node;
|
||||||
range.startOffset=nodeInfo1.offset;
|
range.startOffset = nodeInfo1.offset;
|
||||||
range.endContainer=nodeInfo2.node;
|
range.endContainer = nodeInfo2.node;
|
||||||
range.endOffset=nodeInfo2.offset+1; //End offset comes 1 position after the last character of selection.
|
range.endOffset = nodeInfo2.offset + 1; //End offset comes 1 position after the last character of selection.
|
||||||
}
|
}
|
||||||
return range;
|
return range;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRangeObject(win) { //Gets the first range object
|
function getRangeObject(win) { //Gets the first range object
|
||||||
win=win || window;
|
win = win || window;
|
||||||
if (win.getSelection) { // Firefox/Chrome/Safari/Opera/IE9
|
if (win.getSelection) { // Firefox/Chrome/Safari/Opera/IE9
|
||||||
try {
|
try {
|
||||||
return win.getSelection().getRangeAt(0); //W3C DOM Range Object
|
return win.getSelection().getRangeAt(0); //W3C DOM Range Object
|
||||||
} catch(e) {/*If no text is selected an exception might be thrown*/}
|
} catch (e) { /*If no text is selected an exception might be thrown*/ }
|
||||||
}
|
} else if (win.document.selection) { // IE8
|
||||||
else if(win.document.selection) { // IE8
|
var range = win.document.selection.createRange(); //Microsoft TextRange Object
|
||||||
var range=win.document.selection.createRange(); //Microsoft TextRange Object
|
return fixIERangeObject(range, win);
|
||||||
return fixIERangeObject(range,win);
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
|
@ -5,9 +5,9 @@ var dragManager = new function() {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
function onMouseDown(e){
|
function onMouseDown(e) {
|
||||||
|
|
||||||
if (e.which != 1 ) { // не левой кнопкой
|
if (e.which != 1) { // не левой кнопкой
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,8 +27,8 @@ var dragManager = new function() {
|
||||||
function onMouseMove(e) {
|
function onMouseMove(e) {
|
||||||
if (!dragZone) return; // элемент не зажат
|
if (!dragZone) return; // элемент не зажат
|
||||||
|
|
||||||
if ( !avatar ) { // элемент нажат, но пока не начали его двигать
|
if (!avatar) { // элемент нажат, но пока не начали его двигать
|
||||||
if ( Math.abs(e.pageX-downX) < 3 && Math.abs(e.pageY-downY) < 3 ) {
|
if (Math.abs(e.pageX - downX) < 3 && Math.abs(e.pageY - downY) < 3) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// попробовать захватить элемент
|
// попробовать захватить элемент
|
||||||
|
@ -63,7 +63,7 @@ var dragManager = new function() {
|
||||||
|
|
||||||
function onMouseUp(e) {
|
function onMouseUp(e) {
|
||||||
|
|
||||||
if (e.which != 1 ) { // не левой кнопкой
|
if (e.which != 1) { // не левой кнопкой
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ var dragManager = new function() {
|
||||||
|
|
||||||
function findDragZone(event) {
|
function findDragZone(event) {
|
||||||
var elem = event.target;
|
var elem = event.target;
|
||||||
while(elem != document && !elem.dragZone) {
|
while (elem != document && !elem.dragZone) {
|
||||||
elem = elem.parentNode;
|
elem = elem.parentNode;
|
||||||
}
|
}
|
||||||
return elem.dragZone;
|
return elem.dragZone;
|
||||||
|
@ -99,7 +99,7 @@ var dragManager = new function() {
|
||||||
// получить элемент под аватаром
|
// получить элемент под аватаром
|
||||||
var elem = avatar.getTargetElem();
|
var elem = avatar.getTargetElem();
|
||||||
|
|
||||||
while(elem != document && !elem.dropTarget) {
|
while (elem != document && !elem.dropTarget) {
|
||||||
elem = elem.parentNode;
|
elem = elem.parentNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,5 +37,3 @@ DragZone.prototype.onDragStart = function(downX, downY, event) {
|
||||||
|
|
||||||
return avatar;
|
return avatar;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -74,8 +74,7 @@ DropTarget.prototype.onDragEnd = function(avatar, event) {
|
||||||
/**
|
/**
|
||||||
* Вход аватара в DropTarget
|
* Вход аватара в DropTarget
|
||||||
*/
|
*/
|
||||||
DropTarget.prototype.onDragEnter = function(fromDropTarget, avatar, event) {
|
DropTarget.prototype.onDragEnter = function(fromDropTarget, avatar, event) {};
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Выход аватара из DropTarget
|
* Выход аватара из DropTarget
|
||||||
|
@ -84,5 +83,3 @@ DropTarget.prototype.onDragLeave = function(toDropTarget, avatar, event) {
|
||||||
this._hideHoverIndication();
|
this._hideHoverIndication();
|
||||||
this._targetElem = null;
|
this._targetElem = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
function TreeDragAvatar(dragZone, dragElem) {
|
function TreeDragAvatar(dragZone, dragElem) {
|
||||||
DragAvatar.apply(this, arguments);
|
DragAvatar.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
@ -42,4 +41,3 @@ TreeDragAvatar.prototype.onDragCancel = function() {
|
||||||
TreeDragAvatar.prototype.onDragEnd = function() {
|
TreeDragAvatar.prototype.onDragEnd = function() {
|
||||||
this._destroy();
|
this._destroy();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
function TreeDragZone(elem) {
|
function TreeDragZone(elem) {
|
||||||
DragZone.apply(this, arguments);
|
DragZone.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,18 @@
|
||||||
|
function TreeDropTarget(elem) {
|
||||||
function TreeDropTarget(elem) {
|
|
||||||
TreeDropTarget.parent.constructor.apply(this, arguments);
|
TreeDropTarget.parent.constructor.apply(this, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
extend(TreeDropTarget, DropTarget);
|
extend(TreeDropTarget, DropTarget);
|
||||||
|
|
||||||
TreeDropTarget.prototype._showHoverIndication = function() {
|
TreeDropTarget.prototype._showHoverIndication = function() {
|
||||||
this._targetElem && this._targetElem.classList.add('hover');
|
this._targetElem && this._targetElem.classList.add('hover');
|
||||||
};
|
};
|
||||||
|
|
||||||
TreeDropTarget.prototype._hideHoverIndication = function() {
|
TreeDropTarget.prototype._hideHoverIndication = function() {
|
||||||
this._targetElem && this._targetElem.classList.remove('hover');
|
this._targetElem && this._targetElem.classList.remove('hover');
|
||||||
};
|
};
|
||||||
|
|
||||||
TreeDropTarget.prototype._getTargetElem = function(avatar, event) {
|
TreeDropTarget.prototype._getTargetElem = function(avatar, event) {
|
||||||
var target = avatar.getTargetElem();
|
var target = avatar.getTargetElem();
|
||||||
if (target.tagName != 'SPAN') {
|
if (target.tagName != 'SPAN') {
|
||||||
return;
|
return;
|
||||||
|
@ -23,15 +22,15 @@ TreeDropTarget.prototype._getTargetElem = function(avatar, event) {
|
||||||
var elemToMove = avatar.getDragInfo(event).dragZoneElem.parentNode;
|
var elemToMove = avatar.getDragInfo(event).dragZoneElem.parentNode;
|
||||||
|
|
||||||
var elem = target;
|
var elem = target;
|
||||||
while(elem) {
|
while (elem) {
|
||||||
if (elem == elemToMove) return; // попытка перенести родителя в потомка
|
if (elem == elemToMove) return; // попытка перенести родителя в потомка
|
||||||
elem = elem.parentNode;
|
elem = elem.parentNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
return target;
|
return target;
|
||||||
};
|
};
|
||||||
|
|
||||||
TreeDropTarget.prototype.onDragEnd = function(avatar, event) {
|
TreeDropTarget.prototype.onDragEnd = function(avatar, event) {
|
||||||
|
|
||||||
if (!this._targetElem) {
|
if (!this._targetElem) {
|
||||||
// перенос закончился вне подходящей точки приземления
|
// перенос закончился вне подходящей точки приземления
|
||||||
|
@ -59,7 +58,7 @@ TreeDropTarget.prototype.onDragEnd = function(avatar, event) {
|
||||||
|
|
||||||
// вставить новый узел в нужное место среди потомков, в алфавитном порядке
|
// вставить новый узел в нужное место среди потомков, в алфавитном порядке
|
||||||
var li = null;
|
var li = null;
|
||||||
for(var i=0; i < ul.children.length; i++) {
|
for (var i = 0; i < ul.children.length; i++) {
|
||||||
li = ul.children[i];
|
li = ul.children[i];
|
||||||
var childTitle = li.children[0].innerHTML;
|
var childTitle = li.children[0].innerHTML;
|
||||||
if (childTitle > title) {
|
if (childTitle > title) {
|
||||||
|
@ -70,4 +69,4 @@ TreeDropTarget.prototype.onDragEnd = function(avatar, event) {
|
||||||
ul.insertBefore(elemToMove, li);
|
ul.insertBefore(elemToMove, li);
|
||||||
|
|
||||||
this._targetElem = null;
|
this._targetElem = null;
|
||||||
};
|
};
|
|
@ -5,9 +5,9 @@ var dragManager = new function() {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
function onMouseDown(e){
|
function onMouseDown(e) {
|
||||||
|
|
||||||
if (e.which != 1 ) { // не левой кнопкой
|
if (e.which != 1) { // не левой кнопкой
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,8 +27,8 @@ var dragManager = new function() {
|
||||||
function onMouseMove(e) {
|
function onMouseMove(e) {
|
||||||
if (!dragZone) return; // элемент не зажат
|
if (!dragZone) return; // элемент не зажат
|
||||||
|
|
||||||
if ( !avatar ) { // элемент нажат, но пока не начали его двигать
|
if (!avatar) { // элемент нажат, но пока не начали его двигать
|
||||||
if ( Math.abs(e.pageX-downX) < 3 && Math.abs(e.pageY-downY) < 3 ) {
|
if (Math.abs(e.pageX - downX) < 3 && Math.abs(e.pageY - downY) < 3) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// попробовать захватить элемент
|
// попробовать захватить элемент
|
||||||
|
@ -63,7 +63,7 @@ var dragManager = new function() {
|
||||||
|
|
||||||
function onMouseUp(e) {
|
function onMouseUp(e) {
|
||||||
|
|
||||||
if (e.which != 1 ) { // не левой кнопкой
|
if (e.which != 1) { // не левой кнопкой
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ var dragManager = new function() {
|
||||||
|
|
||||||
function findDragZone(event) {
|
function findDragZone(event) {
|
||||||
var elem = event.target;
|
var elem = event.target;
|
||||||
while(elem != document && !elem.dragZone) {
|
while (elem != document && !elem.dragZone) {
|
||||||
elem = elem.parentNode;
|
elem = elem.parentNode;
|
||||||
}
|
}
|
||||||
return elem.dragZone;
|
return elem.dragZone;
|
||||||
|
@ -99,7 +99,7 @@ var dragManager = new function() {
|
||||||
// получить элемент под аватаром
|
// получить элемент под аватаром
|
||||||
var elem = avatar.getTargetElem();
|
var elem = avatar.getTargetElem();
|
||||||
|
|
||||||
while(elem != document && !elem.dropTarget) {
|
while (elem != document && !elem.dropTarget) {
|
||||||
elem = elem.parentNode;
|
elem = elem.parentNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,5 +37,3 @@ DragZone.prototype.onDragStart = function(downX, downY, event) {
|
||||||
|
|
||||||
return avatar;
|
return avatar;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue