Skip to content

Commit 2f1eb4e

Browse files
author
Anton Vernigor
committed
Merge branch 'master' of https://github.com/iliakan/javascript-nodejs into new-pages
1 parent 1c89344 commit 2f1eb4e

100 files changed

Lines changed: 1189 additions & 376 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,3 @@ public/*
4646
# Bower stuff.
4747
bower_components/
4848

49-
# for tutorial import
50-
javascript-tutorial

.travis.yml

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,60 @@
11
language: node_js
22
node_js:
3-
- 0.10
43
- 0.11
4+
git:
5+
# custom init submodules with token
6+
submodules: false
7+
depth: 50
8+
9+
install:
10+
- source ./travis/install.sh
11+
12+
script:
13+
- source ./travis/test.sh
14+
515
services:
616
- mongodb
17+
18+
env:
19+
global: # not a build matrix, but variables for every build
20+
- NODE_ENV=test
21+
- E2E_BROWSER=firefox
22+
# id_rsa (by travis_key.sh)
23+
- secure: "jXxCMfeJGuoQomJr/BzXtAnpjz6DVBRHsQqGLS5jky5KvQAaxwsC4MSOMCEPiTCUSRZ0/dTBhwzHeiFQ9c3m83NIwBmb27b/IkTbVUz8g515kHu1greDFWtdlVCwUOyTlc6bET84QDjMHnwmSTXHJw02j7D44mbOyvP07P1akAE="
24+
- secure: "JzmDqycU+E+3MFG6iSW5+yZ9wPns4a1vC3i2/SVhLUvOAQpi/NNiNZQjcRkLmOiiV2Z9ykm4Tw0inYRmGR1LyXTFDyukjrfd9SiZ2o8iSuP3bIACyB2uGwJcRdTt0RFXEFvjE9l7O8fiQxPo8Fa3ZMF5Vx9zDGV+JGudycbGfMQ="
25+
- secure: "cdqo9zt5EfTnEfHTl4BZi9eI3/V3F+piYS0W1yCe3YazgfOL4dk6SMm3nPvfrH1GafbKWDWH+PP79btqKuS27cBycRyBFyE9cOJ5KMqQZOxgtlwvoPRToxNuGkMf+K2mIaL3xLt+ydphWsoOndhBvuef5U9viGhZGiSy+v4AWGE="
26+
- secure: "YvntZ1dqChna300Q2M4eHArwfxC7r5Ds+dGb3rokigszU8+orpKzNj9Ryv2v5w5TwtYV/IfdR1q+oabD0nrJzZ8iiQZVMjktfK9wWAIM7LqSN08vWeZVEV8XC9dLAjsMFAyLzm7+f3ReDcxyWeRIiq8HWdGEGqZS7adhvJhl18w="
27+
- secure: "Sa2gtWs+1It2txzWkqJybNh/4q8l/owYuJgph40axFtUJt34XDJGVWIIr2uo4DUhyDt7pwI+UuiyLBC031kUNogKKm3k8W/Y3dUQUoTWTSxM9mdtMmirg8RS/C0HLp7w5d81zyJj8hzT5C0axSvNAsCLu9aXn9L4mgLlL9yb7o0="
28+
- secure: "Fzy6mZQcLbsYEKiPCpTPGSfzn0eJ/ma5Bjw4t0/po3PHjnX9TTqryMp68ca7yMN7cXVE2cEgjXL1uE3DJygF+8BVmx7bt3vfHqxqhxjVTBvOcD64IPXOjoH0jkj0kX1kP72Cu7IQelPqpDToKn8HzlGwTayGG6HYcoMK6Vksd5g="
29+
- secure: "c3sWfOvzmhfaaVqBc8MO2I0j2sjEB7yCtDmejza5NM/fh8NtOOmC58dEbaGmjTTdPmH5Ci0rwXBLm9JCZq62/PrLao2pLjIqGJLnEcmV51iwO0NREmX98xIjb5jWPMbppgJzf9huZfaKaC2opYzWtH5/oX2ti7mUGwBGysUM+mM="
30+
- secure: "G7GYb5ARiMm8lOsvub3CGUqsLuWCg55Dh+c5CW971TXV26ZNi1l2ubLf5bdnoRueSvOMo3EmzhCBGXoXrnHnCuai5Z4srvtqTgPAf1k/9gfPAugMEf/SO13lazJs1aJsDaOtTmVf5j6yJBRDbLJexvBigsHPbTYA6qL+g6lo4Ug="
31+
- secure: "B6qRlAwxo55nDxNDhIkTaPx6tgWK8wXjUK32kETQ/LZ5RWs1eb0TuvHon53WOhVYg+Sc6etbQw/Hf9w0dVTCZtKXrmCMLOjLpawnFWmmhGNQHrrXMXVsYYZZ2s1JNZYENi6m/KD1d4keL6ZRcxIY9UBJ28hwPGw7DLlaIZbh2ZM="
32+
- secure: "fl65/grTfH39r9/N73yA8lByYQS/m6LUYRCCF+Y13/U7A9q2JzRhSbVkDqosT69cuvJAsGyyqyGstQQkldf9uGw7egwMepwRp4AWY/eV1jSsQYIlpCyl50BlC7FhNvVJmiXepo3yEgJGYhIlKNU9SkkLbJr4sIh3qgsRFz5Lpa8="
33+
- secure: "c24KmkcbSbtc3WD6qSzU++oI+GItEFd1sjKydxTA7ZpIHQDtZADNh5XUByt1mbJ8a11xqPihzMIi3dulrVLMQM2L42oGxxDabOf7Y8qY362m32efrodvMyLf0rpHa4eJbYOn2nfxWS0HsQUt9HntES6yk15YLUzwxbzYKx7wpHc="
34+
- secure: "aW9Y8WyAAj2Z+Xn1uy/wKSwDmf2G4XEOFibXzAAZFs0MwsNQHcMjY7+2UKD0BIio14XpQIgxxlxNbNZrSb/ushx3ON3SP+hzOA+tybO0a65PD1vpqUIyz5lHCY9/H7SCxdrBFqDT3pkAaQnCejvUKnQWyR4GKJtwyzZrVhuUj8A="
35+
- secure: "pbQRrvcJjqfDr6XNR87XQ+KCnqhhFA1/sojHjgUziNQBf24pVHyBadGVwi243iiqTfWspDklLT8VSZe+Q/HYGm/aINLEs4w5jJ3cu3MzlWRn4kjE7/5K0QE+ZnbfCdgolIkTmxECVBFrqqMmDl/p2oys3PM3cTLjNvPGv6c5JqE="
36+
- secure: "Rb3VPzv8zfSsmLXJuZpwRNiYop4Iz7wgS/Cu96oM1840LiKSoufFtKpB6Y2yoAYhkyDYdgOP9LgYQxT6P9n8PYpaN38l7JIewnkM4tfB0SU0wo5nauMiIUE1Y58QLebe0xvnzk1GvPm76SuZRPU3rg1XmCxT5M7ovGI5Zrd2cXM="
37+
- secure: "Vt4Lclq4fAWRf1nkeY54osLKasJvCC6GKDvSFP7lFKcHCmArw9yvkVhlH/w2iegV1iO/Hqqggmxtq0EIu+Tqfmkkjvd1wMsH5+iOJMXvP9soINuN+wwDJwsn93mriJGaNwv2z4tRMl5klPFPgFDEZkqKDbBiuMUyG8XtWsmcAR0="
38+
- secure: "OMIGENvQus8ukVIekuhK768gx/8P3xbmY2kCaDIEndo2sRNriZynsJ4WkXbM/Ov9jxPb1kmdHpjv6ChOoIjcComclld+lKMoh6AAR8dcz3PZfT0FEY7a6N0XKel6V2stF7LXgJlDbKZvCuylEESjbVRIYuZBRwni9+UmUpxcI7w="
39+
- secure: "Wsg2SsZN7wsJ6FnytVZIM/+iz0Ufr96A39x9D07OjjYTdLowYxE1jU1b/25uc5Wy6V5cWddkCjjiECyKtK3qe+OVPDYDR1R+W1QvLC2XLy/PmGGhuf8EBRBaVrwgUgqAcjB53UPviVBgOpMTuu/qVzQHpehpAcJ0DDbYMBzyG/A="
40+
- secure: "glTBrJyC6Trrj17ud2wmjj4pDDBEyKWEgz+m4e2xRWZ+/Y3PAf43XBWTrp3UpS0isADvoxhsN+IzYoyGfW66X7+KNS4spT43wbaT/1GrNUZDQxNP1k7rLC++tk3/6QMvUFtn/+wkCCMtQS70cZVhSTynxNa51fiXACl0oxJcUNU="
41+
- secure: "DPN/qQ58H9qH/rX4YZlVUUzoK4wKTBE1dW9ROE164kazZ2DLfbLAyuUn54buFB2Xh+i2vufzvGpsUNqCh4Rk7cqznmD5YeR0Z3bp57bbFHUolxqzdg4X5Tu7IbplU4YElc12775doKviDFI5LVRjHtkbLDqVXb5u9rOQCiwLbxQ="
42+
- secure: "CmpJyG4xjIPQCxdfrsl8hZ3lRyAoAk9U3WekNqcu5m85EyLbnUuC8IRdrIJ8WPTpEqO8JA6loavAGuc8Ek/NgaMKNFq/NLS7eVe9XfHvOrMHl7YplmwtTcy+a7pMyP8mHUcWZddIQO1VBG2lmEg0/mI2fVWGDhIO02/Ma2XqJtE="
43+
- secure: "Uq2jBQj3+X3uec5Y5TIsZqwKOQ90xAAtwaZBEM6aSd8d6Mpo9CmmT7xtiBViZkbmAHhXYybKI9j5S5TtbGfbd66pYIDQWu5aOQq+2yIVHQnt4TsyLxDYlEW9263rdklKFcfvc3Q8aMggz8ShKCLyCPeCDm9LCSCRGsPFgYAzdM4="
44+
- secure: "o6HD1f3TS/OFmAA4nuCeo9UqeZfDLcxXgI7aUu8kUe3WB1RqiFscZmi8oP4c+x+nf6D3CRq9W5t0UrifSSP0HLHumf9SJsJW8NAZuEBSBMtAlLxN4SlsE6Q65hJGIy5/VxqYbfA6nfmWf6Hzanxd5cb+4nD8nP8Rb5yhUK/WnLg="
45+
- secure: "l6IO9z+QLwR8jSp8qkx72ZIpOzcGwLJopYgsPkipT/RhmDCRZiLZtqQ6+kohG1IDt0XFc9ZkyK3f5IeFA6laLrCb/6GuWCyXNtBGrP8jhOO52k2iCHrTJcr4e9NR0wldOGbuhY57ipFVs2xmFCJjIjOBEwsBNwmBxeApYlZeHxg="
46+
# id_rsa.pub (by travis_key.sh)
47+
- secure: "U3hGgFIvhaBxRkFTsFvOdIcUYKJHpXd6J8RWf5PrdfKJ26XDwDCrS9cYahPiBZjYzB7NhMbhfIMFxKzujxeDWx86Utw8jNpQ69U1ge+C2zhRezzDzBECLE2AAh3EvLOI6DZa5r2tWkeBUoBeGuZlBXASGLpje2kzZT3r3ggGBbA="
48+
- secure: "H0xIXyYrVkLXMlH6OAkIdudwA+aaj5N+YNNruhR3WqKFaiLQkiU2OptpuN2jL+bMHyOxGGSxbHMoweVUryjX3DcBsfrNbhsRccryBC35MDrZACB2lUnwh+VJUgoHTqhVAcdIeQz1ALVlhvEgTx2+Xwe05fLjtrvkdOPtj2KZ9Ck="
49+
- secure: "LlUZS83kfwVWaDD1ahw/z8hYKVvRF1lp3Y3BTCH1qPHBluqrBmg1+/kbcVAzmIaBe3/f4M3fQgQvt7rlwgKzkDfS22Z52bMqj9cSv5Am1XdDAYlomldwJpV291Rt/qG7VajlTYqKXCua2zCSGgnlybIIshca5K0OxYGLwKjHO+0="
50+
- secure: "ns1sdmT8ZYr2w55/6n7AWgs0yK9XsaLPvmwYuPVcubnA12BdobtehYUNCqyjfIz6wtsUmiQHLDvFFOq5tic4c9qD217B2c8mP5fxuf9v5V2TBX8fL2RxmvPYDxi9nl5i4tSoNJjyfMWzlQLDaBiGw0Q2X6XKHZDqjg1JBWJK3Ww="
51+
- secure: "PFlzNIBId1aCj6htuWqnklVPqZzc7Kb50ubpwZSXjD08txj6y9WwKyI/4aT/Qc4/g+xedBP8t6xal4qP4yd2GqWA6T3IoFusHGyjguqu08BvYad+O6ri92ZcnegmGkfAMiIlbtBjdPD3JkbtEr9+opVGfPFfd+56smZEzBZWO/M="
52+
- secure: "P4Tg2Sb/TYwXx9rQsDbQ38f8bgjjNog7/6qsT2KfZsCrATk5g1vd4BaGS8G3GyVINFQTy1ozISfwEgM/SZEeDIUx9hkr9aAKqIwnQROn8FS+CIP2YO6vPHRIxBwCA49+e6wCkeeu7GMM/aHxH7O9JU9E73Dr03QRlQ2b0OQJ3SE="
53+
54+
notifications:
55+
email: false
56+
57+
# blacklist
58+
branches:
59+
except:
60+
- production

Install.md

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11

22
# Как поднять сайт локально
33

4+
## 0. Операционная система
5+
6+
Сайт работает под MacOS, Unix (протестировано на Ubuntu, Debian), но не Windows.
7+
8+
Под Windows криво работают некоторые сторонние модули, создатели которых не удосуживаются поддерживать эту ОС.
9+
410
## 1. Поставьте Node.JS 0.11
511

612
Нужна именно последняя версия.
@@ -13,9 +19,12 @@
1319

1420
## 2. Поставьте и запустите MongoDB.
1521

16-
Самый простой способ описан здесь на [http://www.mkyong.com/mongodb/how-to-install-mongodb-on-mac-os-x/]().
22+
Если у вас Mac, то проще всего сделать это через [MacPorts](http://www.macports.org/install.php) или [Homebrew](http://brew.sh), чтобы было проще ставить дополнительные пакеты.
1723

18-
Лучше сделать это через [MacPorts](http://www.macports.org/install.php) или [Homebrew](http://brew.sh), чтобы было проще ставить дополнительные пакеты.
24+
```
25+
sudo port install mongodb
26+
sudo port load mondogb
27+
```
1928

2029
## 3. Клонируйте репозитарий
2130

@@ -28,35 +37,65 @@
2837
Поставьте глобальные модули:
2938

3039
```
31-
npm install -g mocha karma-cli bunyan gulp nodemon
40+
npm install -g mocha bunyan gulp nodemon
3241
```
3342

34-
## 5. `npm install`
43+
## 5. Системные пакеты
44+
45+
Для работы нужны Nginx, GraphicsMagick, ImageMagick (обычно используется GM, он лучше, но иногда IM).
46+
47+
```
48+
sudo port install ImageMagick GraphicsMagick
49+
sudo port install nginx +debug+gzip_static+realip
50+
51+
sudo port load nginx
52+
```
53+
54+
## 6. Конфигурация Nginx
55+
56+
Если в системе уже был nginx и есть ценные конфиги для него, то нужно их аккуратно объединить с конфигами сайта, см. директорию `nginx` в корне и `sites-enabled/*`.
57+
58+
Если же в системе нет ценных конфигов (или они забекаплены), то ставим настройки для сайта:
59+
60+
Например:
61+
```
62+
./gulp config:nginx --prefix /opt/local/etc/nginx --root /js/javascript-nodejs --env development
63+
```
64+
65+
Здесь `--prefix` -- место для конфигов nginx, обычно `/etc/nginx`, в случае MacPorts это `/opt/local/etc/nginx`.
66+
В параметр `--root` запишите место установки сайта.
67+
68+
Чтобы полностью удалить старые конфиги, добавьте опцию `--clear`.
69+
70+
## 7. `npm install`
3571

3672
В директории, в которую клонировали, запустите:
3773

3874
```
3975
npm install
4076
```
4177

42-
## 6. База
78+
## 8. База
4379

44-
Начальная база данных импортируется командой:
80+
Репозитарий учебника импортируется командой
81+
4582
```
46-
./db
83+
./gulp tutorial:import --root /js/javascript-tutorial
4784
```
85+
Репозитарий до окончания работы над первым релизом сайта приватный, доступ предоставлю по запросу.
86+
Сайт поднимется и без учебника, конечно, но статей на нём не будет.
4887

49-
## 7. Запуск сайта
88+
## 9. Запуск сайта
5089

5190
Запуск сайта в режиме разработки:
5291
```
5392
./dev
5493
```
5594

56-
Это поднимет сразу и сайт и механизмы автосборки спрайтов-стилей-скриптов и livereload.
95+
Это поднимет сразу и сайт и механизмы автосборки стилей-скриптов и livereload.
5796

5897
# TroubleShooting
5998

60-
Если что-то не работает -- пишите issue.
99+
Если что-то не работает -- [пишите issue](https://github.com/iliakan/javascript-nodejs/issues/new).
61100

62101

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
# Новый javascript.ru
32

43
## powered by Node.js
@@ -7,6 +6,8 @@
76

87
А это исходный код для нового движка сайта http://javascript.ru.
98

9+
[![Build Status](https://travis-ci.org/iliakan/javascript-nodejs.svg?branch=master)](https://travis-ci.org/iliakan/javascript-nodejs)
10+
1011
## Что делаем?
1112

1213
* Сайт по JavaScript и смежным технологиям (AJAX, COMET, Browser APIs...)

bin/server

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,36 @@ co(function*() {
88

99
yield* app.waitBootAndListen();
1010

11-
})(function(err) {
12-
if (err) throw err;
11+
console.log("app is listening");
12+
13+
}).catch(function(err) {
14+
throw err;
1315
});
1416

1517
process.on('message', function(msg) {
1618
if (msg == 'shutdown') { // PM2 sends this on graceful reload
17-
// The process is going to be reloaded
18-
// Have to close all database/socket.io/* connections
19-
20-
co(function*() {
21-
yield app.close();
22-
})(function(err) {
23-
if (err) {
24-
console.error(err);
25-
}
26-
process.exit(0);
27-
});
28-
29-
// I have 4000ms to close all connections
30-
setTimeout(function() {
31-
console.error("App stopping is taking too long!");
32-
}, 3500);
33-
19+
shutdown();
3420
}
3521
});
22+
23+
function shutdown() {
24+
// The process is going to be reloaded
25+
// Have to close all database/socket.io/* connections
26+
27+
co(function*() {
28+
console.log("Closing the app...");
29+
yield* app.close();
30+
console.log("App closed");
31+
}).then(function() {
32+
process.exit(0);
33+
}, function(err) {
34+
console.error(err);
35+
});
36+
37+
var dieDelay = process.env.PM2_GRACEFUL_TIMEOUT || 4000;
38+
// I have 4000ms to close all connections
39+
setTimeout(function() {
40+
console.error("App is stopping for too long! Will be killed now!");
41+
}, dieDelay - 100);
42+
43+
}

client/dom/findClosest.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require('client/polyfill/dom4');
2+
13
// find the nearest ancestor matching selector
24
module.exports = function(elem, selector) {
35

client/dom/getDocumentHeight.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ function getDocumentHeight(doc) {
1717
}
1818

1919
return height;
20-
};
20+
}
2121

2222
module.exports = getDocumentHeight;
2323

client/head/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ require('./unready');
44
exports.init = require('./init');
55
exports.login = require('./login');
66

7-
exports.logout = require('./logout');
7+
require('./logout');
88
exports.Modal = require('./modal');
99
exports.fontTest = require('./fontTest');
1010
exports.resizeOnload = require('./resizeOnload');

client/head/logout.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ document.addEventListener('click', function(e) {
1010

1111
function logout() {
1212
var form = document.createElement('form');
13-
form.innerHTML = '<input name="_csrf" value="' + window.csrf + '">';
13+
form.innerHTML = '<input type="hidden" name="_csrf" value="' + window.csrf + '">';
1414
form.method = 'POST';
1515
form.action = '/auth/logout';
16+
document.body.appendChild(form);
1617
form.submit();
1718
}
1819

db

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)