Skip to content

Commit ce07d5c

Browse files
committed
init
0 parents  commit ce07d5c

File tree

684 files changed

+117748
-0
lines changed

Some content is hidden

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

684 files changed

+117748
-0
lines changed

.gitignore

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
*.diff
2+
*.err
3+
*.orig
4+
*.log
5+
*.rej
6+
*.swo
7+
*.swp
8+
*.vi
9+
*~
10+
*.sass-cache
11+
12+
# OS or Editor folders
13+
.DS_Store
14+
.idea
15+
.cache
16+
.project
17+
.settings
18+
.tmproj
19+
.nvmrc
20+
sftp-config.json
21+
Thumbs.db
22+
23+
# private downloads
24+
download/
25+
archive/
26+
27+
# database dump for tutorial export
28+
dump/
29+
30+
# extra handlers are not in the repo
31+
extra
32+
33+
# NPM packages folder.
34+
node_modules/
35+
36+
# TMP folder (run-time tmp)
37+
tmp/
38+
39+
# Manifest (build-generated content, versions)
40+
manifest/
41+
42+
43+
# contains v8 executable for linux-tick-processor (run from project root)
44+
out/*
45+
46+
# Generated content
47+
public/*

.jshintrc

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"maxerr": 25,
3+
"latedef": "nofunc",
4+
"browser": true,
5+
"node": true, // for browserify require etc
6+
"globals": ["$", "Prism", "describe", "it", "before", "after", "beforeEach", "afterEach", "context"],
7+
"indent": 2,
8+
"camelcase": true,
9+
"newcap": true,
10+
"undef": true,
11+
"multistr": true,
12+
"esnext": true,
13+
"noyield": true,
14+
"devel": true,
15+
"loopfunc": true,
16+
"-W004": true,
17+
"-W030": true, // for yield* ...
18+
"-W078": true // allow setter w/o getter
19+
}

.travis.yml

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
language: node_js
2+
node_js:
3+
- "5"
4+
git:
5+
# javascipt-turorial submodule is checked out manually with token,
6+
# in install hook
7+
submodules: false
8+
# Don't need history to do tests
9+
# But depth: 1 would be too small
10+
# The problem with using git clone depth 1 is that if the contributer
11+
# pushes multiple commits in short succession before Travis is able to
12+
# kick off a build. The build will fail due to being unable to find the
13+
#commit. This is because Travis checks out a branch and then checks out
14+
# the exact commit. So it is possible to get into a situation where the
15+
# latest branch is newer than the commit Travis is trying to build
16+
# against.
17+
depth: 10
18+
19+
install:
20+
- source ./scripts/travis/install.sh
21+
22+
script:
23+
- source ./scripts/travis/test.sh
24+
25+
env:
26+
global: # not a build matrix, but variables for every build
27+
#- TRAVIS_DEBUG=1
28+
- NODE_ENV=test
29+
- E2E_BROWSER=firefox
30+
# id_rsa (by travis_key.sh)
31+
- secure: "jXxCMfeJGuoQomJr/BzXtAnpjz6DVBRHsQqGLS5jky5KvQAaxwsC4MSOMCEPiTCUSRZ0/dTBhwzHeiFQ9c3m83NIwBmb27b/IkTbVUz8g515kHu1greDFWtdlVCwUOyTlc6bET84QDjMHnwmSTXHJw02j7D44mbOyvP07P1akAE="
32+
- secure: "JzmDqycU+E+3MFG6iSW5+yZ9wPns4a1vC3i2/SVhLUvOAQpi/NNiNZQjcRkLmOiiV2Z9ykm4Tw0inYRmGR1LyXTFDyukjrfd9SiZ2o8iSuP3bIACyB2uGwJcRdTt0RFXEFvjE9l7O8fiQxPo8Fa3ZMF5Vx9zDGV+JGudycbGfMQ="
33+
- secure: "cdqo9zt5EfTnEfHTl4BZi9eI3/V3F+piYS0W1yCe3YazgfOL4dk6SMm3nPvfrH1GafbKWDWH+PP79btqKuS27cBycRyBFyE9cOJ5KMqQZOxgtlwvoPRToxNuGkMf+K2mIaL3xLt+ydphWsoOndhBvuef5U9viGhZGiSy+v4AWGE="
34+
- secure: "YvntZ1dqChna300Q2M4eHArwfxC7r5Ds+dGb3rokigszU8+orpKzNj9Ryv2v5w5TwtYV/IfdR1q+oabD0nrJzZ8iiQZVMjktfK9wWAIM7LqSN08vWeZVEV8XC9dLAjsMFAyLzm7+f3ReDcxyWeRIiq8HWdGEGqZS7adhvJhl18w="
35+
- secure: "Sa2gtWs+1It2txzWkqJybNh/4q8l/owYuJgph40axFtUJt34XDJGVWIIr2uo4DUhyDt7pwI+UuiyLBC031kUNogKKm3k8W/Y3dUQUoTWTSxM9mdtMmirg8RS/C0HLp7w5d81zyJj8hzT5C0axSvNAsCLu9aXn9L4mgLlL9yb7o0="
36+
- secure: "Fzy6mZQcLbsYEKiPCpTPGSfzn0eJ/ma5Bjw4t0/po3PHjnX9TTqryMp68ca7yMN7cXVE2cEgjXL1uE3DJygF+8BVmx7bt3vfHqxqhxjVTBvOcD64IPXOjoH0jkj0kX1kP72Cu7IQelPqpDToKn8HzlGwTayGG6HYcoMK6Vksd5g="
37+
- secure: "c3sWfOvzmhfaaVqBc8MO2I0j2sjEB7yCtDmejza5NM/fh8NtOOmC58dEbaGmjTTdPmH5Ci0rwXBLm9JCZq62/PrLao2pLjIqGJLnEcmV51iwO0NREmX98xIjb5jWPMbppgJzf9huZfaKaC2opYzWtH5/oX2ti7mUGwBGysUM+mM="
38+
- secure: "G7GYb5ARiMm8lOsvub3CGUqsLuWCg55Dh+c5CW971TXV26ZNi1l2ubLf5bdnoRueSvOMo3EmzhCBGXoXrnHnCuai5Z4srvtqTgPAf1k/9gfPAugMEf/SO13lazJs1aJsDaOtTmVf5j6yJBRDbLJexvBigsHPbTYA6qL+g6lo4Ug="
39+
- secure: "B6qRlAwxo55nDxNDhIkTaPx6tgWK8wXjUK32kETQ/LZ5RWs1eb0TuvHon53WOhVYg+Sc6etbQw/Hf9w0dVTCZtKXrmCMLOjLpawnFWmmhGNQHrrXMXVsYYZZ2s1JNZYENi6m/KD1d4keL6ZRcxIY9UBJ28hwPGw7DLlaIZbh2ZM="
40+
- secure: "fl65/grTfH39r9/N73yA8lByYQS/m6LUYRCCF+Y13/U7A9q2JzRhSbVkDqosT69cuvJAsGyyqyGstQQkldf9uGw7egwMepwRp4AWY/eV1jSsQYIlpCyl50BlC7FhNvVJmiXepo3yEgJGYhIlKNU9SkkLbJr4sIh3qgsRFz5Lpa8="
41+
- secure: "c24KmkcbSbtc3WD6qSzU++oI+GItEFd1sjKydxTA7ZpIHQDtZADNh5XUByt1mbJ8a11xqPihzMIi3dulrVLMQM2L42oGxxDabOf7Y8qY362m32efrodvMyLf0rpHa4eJbYOn2nfxWS0HsQUt9HntES6yk15YLUzwxbzYKx7wpHc="
42+
- secure: "aW9Y8WyAAj2Z+Xn1uy/wKSwDmf2G4XEOFibXzAAZFs0MwsNQHcMjY7+2UKD0BIio14XpQIgxxlxNbNZrSb/ushx3ON3SP+hzOA+tybO0a65PD1vpqUIyz5lHCY9/H7SCxdrBFqDT3pkAaQnCejvUKnQWyR4GKJtwyzZrVhuUj8A="
43+
- secure: "pbQRrvcJjqfDr6XNR87XQ+KCnqhhFA1/sojHjgUziNQBf24pVHyBadGVwi243iiqTfWspDklLT8VSZe+Q/HYGm/aINLEs4w5jJ3cu3MzlWRn4kjE7/5K0QE+ZnbfCdgolIkTmxECVBFrqqMmDl/p2oys3PM3cTLjNvPGv6c5JqE="
44+
- secure: "Rb3VPzv8zfSsmLXJuZpwRNiYop4Iz7wgS/Cu96oM1840LiKSoufFtKpB6Y2yoAYhkyDYdgOP9LgYQxT6P9n8PYpaN38l7JIewnkM4tfB0SU0wo5nauMiIUE1Y58QLebe0xvnzk1GvPm76SuZRPU3rg1XmCxT5M7ovGI5Zrd2cXM="
45+
- secure: "Vt4Lclq4fAWRf1nkeY54osLKasJvCC6GKDvSFP7lFKcHCmArw9yvkVhlH/w2iegV1iO/Hqqggmxtq0EIu+Tqfmkkjvd1wMsH5+iOJMXvP9soINuN+wwDJwsn93mriJGaNwv2z4tRMl5klPFPgFDEZkqKDbBiuMUyG8XtWsmcAR0="
46+
- secure: "OMIGENvQus8ukVIekuhK768gx/8P3xbmY2kCaDIEndo2sRNriZynsJ4WkXbM/Ov9jxPb1kmdHpjv6ChOoIjcComclld+lKMoh6AAR8dcz3PZfT0FEY7a6N0XKel6V2stF7LXgJlDbKZvCuylEESjbVRIYuZBRwni9+UmUpxcI7w="
47+
- secure: "Wsg2SsZN7wsJ6FnytVZIM/+iz0Ufr96A39x9D07OjjYTdLowYxE1jU1b/25uc5Wy6V5cWddkCjjiECyKtK3qe+OVPDYDR1R+W1QvLC2XLy/PmGGhuf8EBRBaVrwgUgqAcjB53UPviVBgOpMTuu/qVzQHpehpAcJ0DDbYMBzyG/A="
48+
- secure: "glTBrJyC6Trrj17ud2wmjj4pDDBEyKWEgz+m4e2xRWZ+/Y3PAf43XBWTrp3UpS0isADvoxhsN+IzYoyGfW66X7+KNS4spT43wbaT/1GrNUZDQxNP1k7rLC++tk3/6QMvUFtn/+wkCCMtQS70cZVhSTynxNa51fiXACl0oxJcUNU="
49+
- secure: "DPN/qQ58H9qH/rX4YZlVUUzoK4wKTBE1dW9ROE164kazZ2DLfbLAyuUn54buFB2Xh+i2vufzvGpsUNqCh4Rk7cqznmD5YeR0Z3bp57bbFHUolxqzdg4X5Tu7IbplU4YElc12775doKviDFI5LVRjHtkbLDqVXb5u9rOQCiwLbxQ="
50+
- secure: "CmpJyG4xjIPQCxdfrsl8hZ3lRyAoAk9U3WekNqcu5m85EyLbnUuC8IRdrIJ8WPTpEqO8JA6loavAGuc8Ek/NgaMKNFq/NLS7eVe9XfHvOrMHl7YplmwtTcy+a7pMyP8mHUcWZddIQO1VBG2lmEg0/mI2fVWGDhIO02/Ma2XqJtE="
51+
- secure: "Uq2jBQj3+X3uec5Y5TIsZqwKOQ90xAAtwaZBEM6aSd8d6Mpo9CmmT7xtiBViZkbmAHhXYybKI9j5S5TtbGfbd66pYIDQWu5aOQq+2yIVHQnt4TsyLxDYlEW9263rdklKFcfvc3Q8aMggz8ShKCLyCPeCDm9LCSCRGsPFgYAzdM4="
52+
- secure: "o6HD1f3TS/OFmAA4nuCeo9UqeZfDLcxXgI7aUu8kUe3WB1RqiFscZmi8oP4c+x+nf6D3CRq9W5t0UrifSSP0HLHumf9SJsJW8NAZuEBSBMtAlLxN4SlsE6Q65hJGIy5/VxqYbfA6nfmWf6Hzanxd5cb+4nD8nP8Rb5yhUK/WnLg="
53+
- secure: "l6IO9z+QLwR8jSp8qkx72ZIpOzcGwLJopYgsPkipT/RhmDCRZiLZtqQ6+kohG1IDt0XFc9ZkyK3f5IeFA6laLrCb/6GuWCyXNtBGrP8jhOO52k2iCHrTJcr4e9NR0wldOGbuhY57ipFVs2xmFCJjIjOBEwsBNwmBxeApYlZeHxg="
54+
# id_rsa.pub (by travis_key.sh)
55+
- secure: "U3hGgFIvhaBxRkFTsFvOdIcUYKJHpXd6J8RWf5PrdfKJ26XDwDCrS9cYahPiBZjYzB7NhMbhfIMFxKzujxeDWx86Utw8jNpQ69U1ge+C2zhRezzDzBECLE2AAh3EvLOI6DZa5r2tWkeBUoBeGuZlBXASGLpje2kzZT3r3ggGBbA="
56+
- secure: "H0xIXyYrVkLXMlH6OAkIdudwA+aaj5N+YNNruhR3WqKFaiLQkiU2OptpuN2jL+bMHyOxGGSxbHMoweVUryjX3DcBsfrNbhsRccryBC35MDrZACB2lUnwh+VJUgoHTqhVAcdIeQz1ALVlhvEgTx2+Xwe05fLjtrvkdOPtj2KZ9Ck="
57+
- secure: "LlUZS83kfwVWaDD1ahw/z8hYKVvRF1lp3Y3BTCH1qPHBluqrBmg1+/kbcVAzmIaBe3/f4M3fQgQvt7rlwgKzkDfS22Z52bMqj9cSv5Am1XdDAYlomldwJpV291Rt/qG7VajlTYqKXCua2zCSGgnlybIIshca5K0OxYGLwKjHO+0="
58+
- secure: "ns1sdmT8ZYr2w55/6n7AWgs0yK9XsaLPvmwYuPVcubnA12BdobtehYUNCqyjfIz6wtsUmiQHLDvFFOq5tic4c9qD217B2c8mP5fxuf9v5V2TBX8fL2RxmvPYDxi9nl5i4tSoNJjyfMWzlQLDaBiGw0Q2X6XKHZDqjg1JBWJK3Ww="
59+
- secure: "PFlzNIBId1aCj6htuWqnklVPqZzc7Kb50ubpwZSXjD08txj6y9WwKyI/4aT/Qc4/g+xedBP8t6xal4qP4yd2GqWA6T3IoFusHGyjguqu08BvYad+O6ri92ZcnegmGkfAMiIlbtBjdPD3JkbtEr9+opVGfPFfd+56smZEzBZWO/M="
60+
- secure: "P4Tg2Sb/TYwXx9rQsDbQ38f8bgjjNog7/6qsT2KfZsCrATk5g1vd4BaGS8G3GyVINFQTy1ozISfwEgM/SZEeDIUx9hkr9aAKqIwnQROn8FS+CIP2YO6vPHRIxBwCA49+e6wCkeeu7GMM/aHxH7O9JU9E73Dr03QRlQ2b0OQJ3SE="
61+
62+
notifications:
63+
email: false
64+
65+
# blacklist
66+
branches:
67+
only:
68+
- master

CONTRIBUTORS.md

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
В этом файле перечислены (в алфавитном порядке) люди, которые внесли весомый вклад в учебник или код проекта:
3+
4+
<ul>
5+
<li>Алексей Максимов @amaxcz</li>
6+
<li>Алексей Шистеров</li>
7+
<li>Антон Вернигор @smmurf</li>
8+
<li>Артём Безценный @bezart</li>
9+
<li>Илья Кантор @iliakan</li>
10+
<li>Юрий Ткаченко @tyv</li>
11+
</ul>
12+
13+
Проект существует давно, а список создан совсем недавно.
14+
15+
Наверняка я кого-то забыл.
16+
17+
Если вы должны быть в этом списке, но вас нет — обязательно напишите мне на mk@javascript.ru.

INSTALL.md

+168
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
2+
Документация на русском - см. INSTALL.ru.md (Russian docs -- see INSTALL.ru.md).
3+
4+
# Up and running locally
5+
6+
## 1. OS
7+
8+
The site works under MacOS and Unix systems, but not on Windows, because many 3rd party modules are not compatible with Windows.
9+
10+
## 2. Create the folder
11+
12+
Create a folder `/js` for the project. You can use any other directory as well, just adjust the paths below.
13+
14+
## 3. Install and run Node.JS and MongoDB
15+
16+
Node.JS – the last version from [https://nodejs.org](https://nodejs.org).
17+
18+
MongoDB - can be either 2.6+ or newer.
19+
20+
Use packages for Linux, [MacPorts](http://www.macports.org/install.php) or [Homebrew](http://brew.sh) for Mac.
21+
22+
Если через MacPorts, то:
23+
```
24+
sudo port install mongodb
25+
sudo port load mongodb
26+
```
27+
28+
## 3. Клонируйте репозитарий
29+
30+
Предположу, что Git у вас уже стоит и вы умеете им пользоваться.
31+
32+
Клонируйте только ветку `master` движка:
33+
```
34+
cd /js
35+
git clone -b master --single-branch https://github.com/iliakan/javascript-nodejs
36+
```
37+
38+
39+
## 4. Глобальные модули
40+
41+
Поставьте глобальные модули:
42+
43+
```
44+
npm install -g mocha bunyan gulp nodemon
45+
```
46+
47+
Чтобы автоматически ставилась переменная `NODE_PATH`, для запуска `gulp` далее используется команда: `npm --silent run gulp --`.
48+
49+
На практике для удобства используется alias:
50+
```
51+
alias glp="npm --silent run gulp -- "
52+
```
53+
54+
Или же можно запускать gulp как: `NODE_PATH=./handlers:./modules gulp`.
55+
56+
## 5. Системные пакеты
57+
58+
Для работы также нужны Nginx, GraphicsMagick и ImageMagick (обычно используется GM, он лучше, но иногда IM).
59+
60+
Под Macports команды такие:
61+
62+
```
63+
sudo port install ImageMagick GraphicsMagick
64+
sudo port install nginx +debug+gzip_static+realip+geoip
65+
66+
sudo port load nginx
67+
```
68+
69+
## 6. npm install
70+
71+
В директории, в которую клонировали, запустите:
72+
73+
```
74+
npm install
75+
```
76+
77+
## 7. Конфигурация Nginx с нуля
78+
79+
Если в системе ранее не стоял nginx, то поставьте его.
80+
81+
Логи nginx пишет в директорию `/var/log/nginx`.
82+
83+
Если её нет, то нужно создать и поставить пермишны/владельца. Например, если компьютер – ваш личный, то запустить от рута:
84+
```
85+
mkdir /var/log/nginx
86+
chmod 777 /var/log/nginx
87+
```
88+
89+
Cтавим настройки для сайта запуском:
90+
```
91+
npm --silent run gulp -- config:nginx --prefix /opt/local/etc/nginx --root /js/javascript-nodejs --env development --clear
92+
```
93+
94+
Здесь `--prefix` -- место для конфигов nginx, обычно `/etc/nginx`, в случае MacPorts это `/opt/local/etc/nginx`.
95+
В параметр `--root` запишите место установки сайта.
96+
97+
В `--root` находится путь к движку: если вы использовали другой путь для сайта, вместо `/js/javascript-nodejs`, то измените его.
98+
99+
Опция `--clear` полностью удалит старые конфиги nginx.
100+
101+
Также рекомендуется в `/etc/hosts` добавить строку:
102+
```
103+
127.0.0.1 javascript.in
104+
```
105+
106+
Такое имя хоста стоит в конфигурации Nginx.
107+
108+
## 7.1. Если Nginx у вас уже стоит
109+
110+
Если уже есть nginx, то сделайте резервную копию всех его конфигов.
111+
112+
После этого выполните предыдущую секцию без `--clear` в команде:
113+
114+
```
115+
npm --silent run gulp -- config:nginx --prefix /opt/local/etc/nginx --root /js/javascript-nodejs --env development
116+
```
117+
118+
Такая команда скопирует файлы из директории `/js/javascript-nodejs/nginx` в указанную директорию `--prefix`, но без перезаписывания.
119+
При копировании используется небольшая шаблонизация конфигов, т.е. это не просто `cp`, но структура файлов остаётся такой же.
120+
121+
Основные конфиги будут перезаписаны, но в `sites-enabled` останутся и будут подключены и другие сайты.
122+
123+
Перезапустите Nginx. Проверьте, что ваши предыдущие проекты работают.
124+
125+
126+
## 8. База
127+
128+
Инициализуйте базу сайта командой:
129+
130+
```
131+
npm --silent run gulp -- db:load --from fixture/init
132+
```
133+
134+
135+
Клонируйте ветку учебника, например `ru`:
136+
```
137+
cd /js
138+
git clone -b ru --single-branch https://github.com/iliakan/javascript-tutorial
139+
```
140+
141+
После клонирования импортируйте учебник в базу командой:
142+
```
143+
PLUNK_REMOTE_OFF=1 npm --silent run gulp -- tutorial:import --root /js/javascript-tutorial
144+
```
145+
146+
Здесь `/js/javascript-tutorial` -- директория с репозитарием учебника.
147+
148+
`PLUNK_REMOTE_OFF=1` отключает автоматическую загрузку примеров из учебников на сервис plnkr.co.
149+
Она требует настройки сессии на plnkr.co и нужна при публикации учебника.
150+
Для запуска проекта она не нужна, особенно если вас интересуют другие модули.
151+
152+
## 9. Запуск сайта
153+
154+
Запуск сайта в режиме разработки:
155+
```
156+
./ru
157+
```
158+
159+
Это поднимет сразу и сайт и механизмы автосборки стилей-скриптов и livereload.
160+
161+
Обратите внимание: ходить на сайт нужно через Nginx (обычно порт 80), не напрямую в Node.JS (не будет статики).
162+
163+
Если в `/etc/hosts` есть строка `127.0.0.1 javascript.in`, то адрес будет `http://javascript.in/`.
164+
165+
# TroubleShooting
166+
167+
Если что-то не работает -- [пишите issue](https://github.com/iliakan/javascript-nodejs/issues/new).
168+

0 commit comments

Comments
 (0)