Skip to content

Commit 7df78c0

Browse files
committed
working on courses, migrations, refactor user photo
1 parent 6a2b3db commit 7df78c0

69 files changed

Lines changed: 1041 additions & 428 deletions

Some content is hidden

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

LICENSE.md

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
Код публикуется под открытой лицензией CC-BY-SA.
1+
Код публикуется под открытой лицензией CC-BY-NC-SA.
22

3-
Это означает, что вы можете свободно распространять, использовать и адаптировать этот код, на следующих условиях:
3+
Это означает, что вы можете свободно распространять, использовать и адаптировать этот код при выполнении следующих условий:
44

5-
- Результаты должны распространяться под такой же лицензией.
6-
- Должна быть ссылка на меня как автора исходного кода (Ilya Kantor, http://javascript.ru).
5+
- Аттрибуция: указать автора (Ilya Kantor) исходного кода и эту лицензию.
6+
- В некоммерческих целях.
7+
- Переделанные вами части должны быть доступны на этих же условиях.
8+
9+
Это было совсем краткое изложение лицензии,
10+
более полный текст которой находится на https://creativecommons.org/licenses/by-nc-sa/3.0/,
11+
а юридически оформленный -- на https://creativecommons.org/licenses/by-nc-sa/3.0/legalcode.
712

8-
Если вы подняли сайт на основе этого кода - в футере сайте укажите, что используете мой движок, со ссылкой на
9-
javascript.ru.
13+
Если для вашего проекта нужна другая лицензия - напишите мне: [email protected].
1014

11-
Вы имеете право извлекать прибыль, пользуясь этим кодом, и не делиться со мной, при соблюдении условий выше.
12-
13-
Полный текст лицензии находится на https://creativecommons.org/licenses/by-sa/3.0/, а юридически оформленный -- на https://creativecommons.org/licenses/by-sa/3.0/legalcode.
14-
15-
Успехов!

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
В опен-сорсе весь код, который будет заставлять двигаться эту штуку.
2626
Многие модули из него можно взять и выделить в отдельные проекты, было бы желание.
2727

28-
Также в опен-сорсе - учебник JavaScript. Правда, это в другом репозитарии, здесь только код.
28+
Также в опен-сорсе – учебник JavaScript. Правда, это в другом репозитарии, здесь только код.
2929

3030
Для установки dev-среды см. [INSTALL.md](https://github.com/iliakan/javascript-nodejs/blob/master/Install.md).
3131

client/angular/global403Interceptor.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ angular.module("global403Interceptor", []).factory("http403Interceptor", functio
1515
// do something on error
1616
if (rejection.status == 401) {
1717
new notification.Error("Нет авторизации: вы вышли с сайта?");
18-
} else if (rejection.status == 500) {
19-
new notification.Error("Ошибка на стороне сервера. Попытайтесь позднее.");
18+
} else if (rejection.status >= 500) {
19+
new notification.Error("Ошибка " + rejection.status + " на стороне сервера. Попытайтесь позднее.");
2020
} else if (!rejection.status) {
2121
new notification.Error("Сетевая ошибка. Нет связи?");
2222
}
@@ -25,4 +25,4 @@ angular.module("global403Interceptor", []).factory("http403Interceptor", functio
2525
};
2626

2727

28-
}).config(($provide, $httpProvider) => $httpProvider.interceptors.push('http403Interceptor'));
28+
}).config(($provide, $httpProvider) => $httpProvider.interceptors.push('http403Interceptor'));

gulpfile.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ gulp.task('db:load', lazyRequireTask('./tasks/dbLoad'));
4949
gulp.task('db:clear', lazyRequireTask('./tasks/dbClear'));
5050
gulp.task('migrate:play', lazyRequireTask('./tasks/migratePlay'));
5151

52+
gulp.task('migrate', lazyRequireTask('migrate/tasks/migrate'));
53+
gulp.task('migrate:create', lazyRequireTask('migrate/tasks/create'));
5254

5355
gulp.task("nodemon", lazyRequireTask('./tasks/nodemon', {
5456
// shared client/server code has require('template.jade) which precompiles template on run

handlers/auth/lib/authenticateByProfile.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const config = require('config');
33
const co = require('co');
44
const _ = require('lodash');
55
const request = require('koa-request');
6-
const imgur = require('imgur');
6+
const transload = require('imgur').transload;
77

88
function UserAuthError(message) {
99
this.message = message;
@@ -13,7 +13,7 @@ function* mergeProfile(user, profile) {
1313
if (!user.photo && profile.photos && profile.photos.length && profile.photos[0].type != 'default') {
1414
// assign an avatar unless it's default
1515
var photoUrl = profile.photos[0].value;
16-
user.photo = yield* imgur.transload(photoUrl);
16+
user.photo = yield* transload(photoUrl).link;
1717
}
1818

1919
if (!user.email && profile.emails && profile.emails.length) {
Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,15 @@
1-
var SignupWidget = require('./signupWidget');
2-
var prism = require('client/prism');
31
var newsletter = require('newsletter/client');
4-
var gaHitCallback = require('gaHitCallback');
52
var Spinner = require('client/spinner');
63
var xhr = require('client/xhr');
74

85
exports.init = function() {
96

10-
initSignupWidget();
11-
127
initNewsletterForm();
138

14-
prism.init();
15-
169
initSignupButton();
1710

1811
};
1912

20-
function initSignupWidget() {
21-
22-
var signupWidget = document.querySelector('[data-elem="signup"]');
23-
if (!signupWidget) return;
24-
25-
new SignupWidget({
26-
elem: signupWidget
27-
});
28-
}
29-
3013
function initNewsletterForm() {
3114

3215
var form = document.querySelector('[data-newsletter-subscribe-form]');
@@ -44,14 +27,13 @@ function initSignupButton() {
4427
var link = document.querySelector('[data-group-signup-link]');
4528
if (!link) return;
4629

47-
link.onclick = function(e) {
30+
link.onclick = function(event) {
4831

4932
if (window.currentUser) {
5033
return;
5134
}
5235

53-
e.preventDefault();
54-
36+
event.preventDefault();
5537

5638
var spinner = new Spinner({
5739
elem: link,
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
var thumb = require('client/image').thumb;
2+
var promptSquarePhoto = require('photoCut').promptSquarePhoto;
3+
var notification = require('client/notification');
4+
var xhr = require('client/xhr');
5+
var Spinner = require('client/spinner');
6+
7+
exports.init = function() {
8+
9+
initPhotoLoadWidget();
10+
11+
};
12+
13+
function initPhotoLoadWidget() {
14+
var photoWidgetElem = document.querySelector('[data-photo-load]');
15+
if (!photoWidgetElem) return;
16+
new PhotoLoadWidget({
17+
elem: photoWidgetElem
18+
});
19+
}
20+
21+
function PhotoLoadWidget({elem}) {
22+
var link = elem.querySelector('a');
23+
var photoDiv = elem.querySelector('div');
24+
var input = elem.querySelector('input');
25+
26+
link.onclick = function(e) {
27+
e.preventDefault();
28+
promptSquarePhoto({
29+
minSize: 160,
30+
onSuccess: uploadPhoto
31+
});
32+
};
33+
34+
35+
var spinner = new Spinner({
36+
elem: photoDiv,
37+
size: 'small'
38+
});
39+
40+
function uploadPhoto(file) {
41+
42+
var formData = new FormData();
43+
formData.append("photo", file);
44+
45+
var request = xhr({
46+
method: 'POST',
47+
url: '/imgur/upload',
48+
body: formData,
49+
normalStatuses: [200, 400]
50+
});
51+
52+
request.addEventListener('loadstart', onLoadStart);
53+
request.addEventListener('loadend', onLoadEnd);
54+
55+
request.addEventListener('fail', (event) => {
56+
new notification.Error("Ошибка загрузки: " + event.reason);
57+
});
58+
59+
request.addEventListener('success', (event) => {
60+
if (request.status == 400) {
61+
new notification.Error("Неверный тип файла или изображение повреждено.");
62+
} else {
63+
onSuccess(event.result);
64+
}
65+
});
66+
67+
}
68+
69+
70+
function onSuccess(imgurImage) {
71+
photoDiv.style.backgroundImage = `url('${thumb(imgurImage.link, 64, 64)}')`;
72+
input.value = imgurImage.imgurId;
73+
}
74+
75+
76+
function onLoadStart() {
77+
spinner.start();
78+
elem.classList.add('modal-overlay_light');
79+
}
80+
81+
function onLoadEnd() {
82+
spinner.stop();
83+
elem.classList.remove('modal-overlay_light');
84+
}
85+
}
86+
87+
88+
89+
File renamed without changes.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var SignupWidget = require('./signupWidget');
2+
3+
exports.init = function() {
4+
5+
initSignupWidget();
6+
7+
};
8+
9+
function initSignupWidget() {
10+
11+
var signupWidget = document.querySelector('[data-elem="signup"]');
12+
if (!signupWidget) return;
13+
14+
new SignupWidget({
15+
elem: signupWidget
16+
});
17+
}
18+

handlers/courses/client/participantsForm.js renamed to handlers/courses/client/signup/participantsForm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
var delegate = require('client/delegate');
2-
var participantsItem = require('../templates/blocks/participantsItem.jade');
2+
var participantsItem = require('../../templates/blocks/participantsItem.jade');
33
var notification = require('client/notification');
44

55
var clientRender = require('client/clientRender');

0 commit comments

Comments
 (0)