Skip to content

Instantly share code, notes, and snippets.

@daniilgrigoryev
Created September 10, 2019 15:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daniilgrigoryev/10b10d1f82574b5d0d33c5712ce93e08 to your computer and use it in GitHub Desktop.
Save daniilgrigoryev/10b10d1f82574b5d0d33c5712ce93e08 to your computer and use it in GitHub Desktop.
SPA Ftutella promo on Angular.js 1.*
//= ../../bower_components/jquery/dist/jquery.min.js
//= ../../bower_components/jquery-ui/jquery-ui.min.js
//= ../../bower_components/angular/angular.min.js
//= ../../bower_components/angular-animate/angular-animate.min.js
//= ../../bower_components/angular-route/angular-route.min.js
//= ../../bower_components/angular-resource/angular-resource.min.js
//= ../../bower_components/angular-cookies/angular-cookies.min.js
//= ../../bower_components/angular-sanitize/angular-sanitize.min.js
//= ../../bower_components/angular-messages/angular-messages.min.js
//= ../../bower_components/angular-ui-mask/dist/mask.min.js
//= ../../bower_components/ng-file-upload/ng-file-upload-all.min.js
//= swiper.jquery.min.js
var app = angular.module('app', ['ngMessages', 'ui.mask', 'ngRoute', 'ngFileUpload']);
app.config(['$routeProvider', '$interpolateProvider', '$httpProvider', function($routeProvider, $interpolateProvider, $httpProvider) {
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
$httpProvider.defaults.transformRequest = [function(data) {
var param = function(obj) {
var query = '';
var name, value, fullSubName, subValue, innerObj, i;
for (name in obj) {
value = obj[name];
if (value instanceof Array) {
for (i = 0; i < value.length; ++i) {
subValue = value[i];
fullSubName = name + '[' + i + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
} else if (value instanceof Object) {
for (subName in value) {
subValue = value[subName];
fullSubName = name + '[' + subName + ']';
innerObj = {};
innerObj[fullSubName] = subValue;
query += param(innerObj) + '&';
}
} else if (value !== undefined && value !== null) {
query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
}
}
return query.length ? query.substr(0, query.length - 1) : query;
};
return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
}];
}]);
app.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'main.html',
controller: 'mainPageController'
})
.when('/lk', {
templateUrl: 'lk.html',
controller: 'loginPageController'
})
.otherwise({
redirectTo: '/'
});
});
app.controller('generalController', ['$scope', '$http', '$window', '$timeout','$location', function($scope, $http, $window, $timeout, $location){
$scope.global = {
inIconName: false,
inIconLastName: false,
};
$http({
method: 'GET',
url: 'http://api.fruittella.dreamdev.space/api/get-user',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
withCredentials: true
}).then(function success(response) {
if(response.data.result == "success"){
$scope.global.inIconName = response.data.data.first_name;
$scope.global.inIconLastName = response.data.data.last_name;
$scope.isUserBlocked = response.data.data.status.blocked;
$scope.blockedfromTime = response.data.data.status.from_time;
$scope.blockedtoTime = response.data.data.status.to_time;
if(response.data.data.status.blocked){
console.log("К сожалению вы заблокированы");
}else{
console.log("Вы не заблокированны!");
}
}else{
$location.path('/');
console.log(response, "не получил авторизированного юзера");
}
}, function error(response) {
});
$scope.logOut = function(){
$http({
method: 'GET',
url: 'http://api.fruittella.dreamdev.space/api/logout',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
withCredentials: true
}).then(function success(response) {
$scope.global.inIconName = false;
$scope.global.inIconLastName = false;
$window.location.href = '#/main';
}, function error(response) {
console.log(response);
});
};
setTimeout(function(){
$('body').on('click', '.logout-wr', function() {
$('.b-popup.b-popup--reg').addClass('b-popup--open');
$('.popup__tab-content div[data-tab="tab1"]').css({
"display": "none"
});
$('.popup__tab-content div[data-tab="tab2"]').css({
"display": "block"
});
$('div.popup__switch-btn[data-tab="tab2"]').addClass('popup__switch-btn--active');
$('div.popup__switch-btn[data-tab="tab1"]').removeClass('popup__switch-btn--active');
$('body').css('overflow', 'hidden');
});
$('.arrow-up-btn').on("click", function() {
$('html, body').animate({
scrollTop: $('.page-wrapper').offset().top
}, 500);
return false;
});
$('.contest-btn--login').on("click", function() {
$('html, body').animate({
scrollTop: $('.section-one').offset().top
}, 500);
return false;
});
$('.main-navigation__link-contest').on("click", function() {
$('html, body').animate({
scrollTop: $('.section-one').offset().top
}, 500);
return false;
});
$('.main-navigation__link-rules').on("click", function() {
$('html, body').animate({
scrollTop: $('.section-two').offset().top
}, 500);
return false;
});
$('.main-navigation__link-prize').on("click", function() {
$('html, body').animate({
scrollTop: $('.section-three').offset().top
}, 500);
return false;
});
$('.main-navigation__link-winners').on("click", function() {
$('html, body').animate({
scrollTop: $('.section-three__prize-wr').offset().top
}, 500);
return false;
});
$('.main-navigation__link-fruit').on("click", function() {
$('html, body').animate({
scrollTop: $('.section-five').offset().top
}, 500);
return false;
});
$('.popup__close').on("click", function() {
$('.popup').removeClass('show');
$('.popup-substrate').removeClass('popup-substrate--show');
$('.b-popup').removeClass('b-popup--open');
$('body').css('overflow', 'auto');
});
$('.btn-submit--main-reg').on("click", function() {
event.preventDefault();
$('.b-popup.b-popup--reg').addClass('b-popup--open');
$('body').css('overflow', 'hidden');
});
$('.contest-btn--logout').on("click", function() {
event.preventDefault();
$('.b-popup.b-popup--reg').addClass('b-popup--open');
$('body').css('overflow', 'hidden');
});
$('.login-btn').on("click", function() {
event.preventDefault();
$('.login-wr').addClass('disable');
$('.logout-wr').addClass('active');
});
$('.logout-ico').on("click", function() {
event.preventDefault();
$('.login-wr').removeClass('disable');
$('.logout-wr').removeClass('active');
});
$('.popup__tab-content>div:not(:first-child)').hide();
$('.popup__switch-btn').on("click", function() {
var dataTab = $(this).data('tab');
var getWrapper = $(this).closest('.popup');
getWrapper.find('.popup__switch-btn').removeClass('popup__switch-btn--active');
$(this).addClass('popup__switch-btn--active');
getWrapper.find('.popup__tab-content>div').hide();
getWrapper.find('.popup__tab-content>div[data-tab=' + dataTab + ']').show();
});
$(window).scroll(function(){
var scrollTop = $(window).scrollTop();
if (scrollTop > 49) {
$('.page-header').addClass('page-header--fixed');
$('.arrow-up-btn').addClass('arrow-up-btn--active');
} else {
$('.page-header').removeClass('page-header--fixed');
$('.arrow-up-btn').removeClass('arrow-up-btn--active');
}
});
}, 100);
}]);
app.controller('loginPageController', ['$scope', '$http', '$window', function($scope, $http, $window){
// форма получить подарок
// $scope.$watch('inIconName', function(newval, oldval) {
// if (newval || oldval) {
// console.log($scope.global.inIconName, $scope.global.inIconLastName);
// }
// });
$('.btn-submit--lk-reg').on("click", function() {
$('.b-popup.b-popup--prize').addClass('b-popup--open');
$('body').css('overflow', 'hidden');
});
$scope.lk = {
promoCode: null
};
$scope.codeFormSubmit = function() {
console.log($scope.lk.promoCode);
$http({
method: 'POST',
url: 'http://api.fruittella.dreamdev.space/api/activate-promo-code',
withCredentials: true,
data: {
promo_code: $scope.lk.promoCode,
},
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function success(response) {
if(response.data.result == "success"){
$scope.goodPromoCode = $scope.lk.promoCode;
$http({
method: 'GET',
url: 'http://api.fruittella.dreamdev.space/api/get-activated-promo-codes',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
withCredentials: true
}).then(function success(response) {
console.log(response);
}, function error(response) {
console.log(response);
});
}else{
console.log(response.data.errors);
}
}, function error(response) {
console.log(response, "error");
});
};
}]);
app.controller('mainPageController', ['$scope', '$window', '$http', 'Upload', '$timeout', '$location', function($scope, $window, $http, Upload, $timeout, $location) {
$http({
method: 'GET',
url: 'http://api.fruittella.dreamdev.space/api/get-winners',
withCredentials: true,
}).then(function success(response) {
$scope.winners = response.data.data;
$scope.today = new Date().toJSON().slice(0, 10);
var months = ["Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"];
var curr = new Date;
var count = 0;
for(var i = 0; i<7; i++){
for (var key in $scope.winners.weekly_winners) {
if(key == new Date(curr.setDate(curr.getDate() - curr.getDay()+i)).toJSON().slice(0, 10)){
$scope.winners.weekly_winner = {};
$scope.winners.weekly_winner.weeklyName = $scope.winners.weekly_winners[key][count].first_name;
$scope.winners.weekly_winner.weeklyLastName = $scope.winners.weekly_winners[key][count].last_name;
$scope.winners.weekly_winner.weeklyCity = $scope.winners.weekly_winners[key][count].city;
count++;
break;
}
}
}
for (var key in $scope.winners.daily_winners) {
$scope.winners.daily_winners[key].day = key.split("-")[2]
$scope.winners.daily_winners[key].month = months[key.split("-")[1].slice(-1)-1];
}
// jquery вставка
var swiper = new Swiper('.swiper-container', {
pagination: '.swiper-pagination',
paginationClickable: true,
nextButton: '.swiper-button-next',
prevButton: '.swiper-button-prev',
spaceBetween: 0,
observer: true
});
}, function error(response) {
console.log(response, "error");
});
$scope.registrationFormAge = "more"; // выбранная радиокнопка по умолчанию - 'больше 18'
$scope.$watch('registrationFormConfirmPassword', function (newValue, oldValue) {
if (newValue != oldValue && newValue != $scope.registrationFormNewPassword) // проверка на схожесть паролей
$scope.passwordError = true;
else {
$scope.passwordError = false;
}
});
// отправка данных на сервак
$scope.registrationSubmit = function() {
// если форма заполненна, то отправляють данные на сервер
if($scope.registrationForm.$valid && $scope.registrationFormNewPassword == $scope.registrationFormConfirmPassword){
$http({
method: 'POST',
url: 'http://api.fruittella.dreamdev.space/api/register-user',
withCredentials: true,
data: {
first_promo_code: $scope.registrationFirstPromoCode,
first_name
: $scope.registrationFormFirstName,
last_name: $scope.registrationFormLastName,
city: $scope.registrationFormResidingCity,
phone: $scope.registrationFormPhoneNumber,
email: $scope.registrationFormEmail,
password: $scope.registrationFormNewPassword
},
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function success(response) {
if(response.data.result == "success"){
console.log(response, "success");
$('.b-popup--reg').removeClass('b-popup--open');
alert("Регистрация выполненна успешно. Письмо активации прийдет вам на почту!");
}else{
console.log("Пользователь с таким email уже существует");
}
}, function error(response) {
console.log(response, "error");
});
}
else{
console.log("ошибки в форме, форма не заполненна, отправить не могу.");
alert("ошибки в форме, форма не заполненна, отправить не могу.");
}
};
$scope.loginSubmit = function() {
// если форма заполненна, то отправляють данные на сервер
if($scope.loginForm.$valid){
$http({
method: 'POST',
url: 'http://api.fruittella.dreamdev.space/api/auth-user',
withCredentials: true,
data: {
email: $scope.loginFormEmail,
password: $scope.loginFormPassword
},
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function success(response) {
if(response.data.result != "error"){
console.log("Авторизация выполнена успешно");
// запрос на получение данных авторизованного пользователя
$http({
method: 'GET',
url: 'http://api.fruittella.dreamdev.space/api/get-user',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
withCredentials: true
}).then(function success(response) {
// подстановка данных об авторизованном пользователе рядом с иконокой входа
$scope.global.inIconName = response.data.data.first_name;
$scope.global.inIconLastName = response.data.data.last_name;
// jquery вставка
$('.b-popup--reg').removeClass('b-popup--open'); // после получения данных, закрывает форму
$window.location.href = '#/lk/';
$location.path('/k/');
}, function error(response) {
console.log(response, "error");
});
}else{
console.log("Не верный email или пароль.");
}
}, function error(response) {
console.log(response, "error");
});
}
else{
console.log("ошибки в форме, форма не заполненна, отправить не могу.");
$window.location.href = '#/main/';
}
};
$http({
method: 'GET',
url: 'http://api.fruittella.dreamdev.space/api/get-feedback-topics',
withCredentials: true,
}).then(function success(response) {
$("select").selectmenu(); // jqeury
$scope.topics = response.data.data;
}, function error(response) {
console.log(response, "error");
});
$scope.feedbackSubmit = function() {
if($scope.feedback.$valid){
$http({
method: 'POST',
url: 'http://api.fruittella.dreamdev.space/api/add-feedback-request',
data: {
title: $scope.feedback.title,
name: $scope.feedback.name,
email: $scope.feedback.email,
question: $scope.feedback.message,
files: $scope.feedback.uploaded_file,
},
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function success(response) {
console.log(response, "success");
// if(response.data.result != "error"){
// console.log("Отправка обратной связи выполнена успешно", response);
// }else{
// console.log("Не верно заполненна форма.");
// }
}, function error(response) {
console.log(response, "error");
});
}
else{
console.log("ошибки в форме, форма не заполненна, отправить не могу.");
}
};
// // files
// $scope.$watch('files', function (newValue, oldValue) {
// console.log(newValue, oldValue);
// });
$scope.uploadFiles = function (files) {
// это функия прилагается с плагином ng-file-upload, хотя Миша сказал делать нужно с https://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs
$scope.files = files;
if (files && files.length) {
console.log($scope.files);
}
};
}]);
<div>
<div class="arrow-up-btn"></div>
<!-- page-header--log-out отвечает за размер шрифта в pos-f -->
<header class="page-header page-header--log-out">
<div class="page-header-inner container">
<div class="logo-page"></div>
<nav class="main-navigation">
<ul class="main-navigation__list">
<!--Если не залогинен элемент активен-->
<li class="main-navigation__list-item">
<a class="main-navigation__link" href="#/#section-two">Конкурс</a>
</li>
<!-- ========= -->
<li class="main-navigation__list-item">
<a class="main-navigation__link" href="#/#section-two">Правила</a>
</li>
<li class="main-navigation__list-item">
<a class="main-navigation__link" href="#/#section-three">Призы</a>
</li>
<li class="main-navigation__list-item">
<a class="main-navigation__link" href="#/#section-three__title-two">Победители</a>
</li>
<li class="main-navigation__list-item main-navigation__list-item">
<a class="main-navigation__link" href="#/#section-five">Fruit-tella</a>
</li>
<li class="main-navigation__list-item">
<!-- Если залогинен элемент активен -->
<!--<a class="contest-btn contest-btn--login" href="#">введи код</a> -->
<a class="contest-btn contest-btn--logout" href="#">Участвуй в конкурсе</a>
</li>
</ul>
</nav>
<div class="login-wr" ng-if="global.inIconName">
<a ng-href="#/lk" class="login-ico"></a>
<div class="login-name-wr">
<a ng-href="#/lk" class="login-name">{{global.inIconName}}</a>
<a ng-click="logOut();" class="login-btn">Выйти</a>
</div>
</div>
<div class="logout-wr" ng-if="!global.inIconName">
<a class="logout-ico"></a>
</div>
</div>
</header>
<article class="main-article">
<section class="section-one">
<div class="container">
<div class="section-one__logo"></div>
<div class="input-code-wr">
<div class="fruit-wr">
<div class="fruit-one"></div>
<div class="fruit-two"></div>
<div class="fruit-three"></div>
</div>
<form class="input-code-form">
<input class="input-code" ng-model="registrationFirstPromoCode" minlength="6" maxlength="6" placeholder="Введи код с пачки" type="text">
<input type="submit" class="btn-submit btn-submit--main-reg" value="зарегистрироваться">
</form>
</div>
<div class="social social--header">
<a class="social-item social-item--vk" href="#"></a>
<a class="social-item social-item--od" href="#"></a>
<a class="social-item social-item--last social-item--search" href="#"></a>
</div>
<div class="section-one__arrow"></div>
</div>
</section>
<section id="section-two" class="section-two">
<div class="container">
<h2 class="section-two__title">Три шага к победе</h2>
<div class="section-two__instructions-wr">
<div class="section-two__instructions">
<div class="section-two__instructions-title">Купи</div>
<p class="section-two__instructions-text">
Купи жевательный мармелад
<span class="section-two__instructions-text--bold">Fruit-tella</span>
в упаковке с промолентой в розничной сети Пятерочка.
</p>
</div>
<div class="section-two__instructions">
<div class="section-two__instructions-title">Найди</div>
<p class="section-two__instructions-text">
Найди код внутри пачки мармелада
<span class="section-two__instructions-text--bold">Fruit-tella</span>
</p>
</div>
<div class="section-two__instructions">
<div class="section-two__instructions-title">Введи</div>
<p class="section-two__instructions-text">
Вводи неограниченное количество найденных кодов на сайте
<span class="section-two__instructions-text--bold">www.frutella-promo.ru</span>
</p>
</div>
</div>
<div class="win-prize-wr">
<div class="win-prize__title">Получай призы!</div>
<p class="win-prize">
Следи за результатами конкурса в
<a href="lk.html">Личном кабинете!</a>
</p>
</div>
</div>
</section>
<section id="section-three" class="section-three">
<div class="container">
<p class="section-three__title">Крутые призы</p>
<div class="section-three__instructions-wr">
<div class="section-three__instructions">
<div class="flex space-between">
<p class="section-three__instructions-title section-three__instructions-title--prize-of">
<span class="section-three__instructions-title--big">приз</span>
недели
</p>
<img src="img/prize1.png" alt=""></div>
<div class="section-three__instructions-sub-title">Каждую неделю ма разыгрываем Ipone 6</div>
<p class="section-three__instructions-text">
Чем больше кодов ты зарегистрируешь, тем выше твои шансы на победу.
</p>
</div>
<div class="section-three__instructions">
<div class="flex space-between">
<p class="section-three__instructions-title section-three__instructions-title--prize-of">
<span class="section-three__instructions-title--big">приз</span>
дня
</p>
<img src="img/prize2.png" alt=""></div>
<div class="section-three__instructions-sub-title">Каждый день мы разыгрываем сертификат на 500 р.</div>
<p class="section-three__instructions-text">
Чем больше кодов ты зарегистрируешь, тем выше твои шансы на победу.
</p>
</div>
</div>
<div id="section-three__title-two" class="section-three__title-two"></div>
<div class="flex space-between">
<div class="section-three__mobile-img">
<div class="section-three__mobile-title-wr">
<p class="section-three__mobile-title">победитель</p>
<p class="section-three__mobile-title">недели</p>
<div class="section-three__mobile-pic"></div>
<div class="section-three__mobile-name-wr">
<p class="section-three__mobile-name">{{winners.weekly_winner.weeklyName}} {{winners.weekly_winner.weeklyLastName}}</p>
<p class="section-three__mobile-sity">{{winners.weekly_winner.weeklyCity}}</p>
</div>
</div>
</div>
<div class="section-three__winners-wr">
<p class="section-three__title section-three__title--winners">победители дня</p>
<div class="section-three__slider-wr">
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide" ng-repeat="winner in winners.daily_winners">
<!-- <div class="swiper-slide" ng-repeat="winner in winners.weekly_winners.date"> -->
<p class="section-three__slider">{{winner.day}} {{winner.month}}</p>
<div class="flex space-between">
<!-- ng-repeat="winer in winers" -->
<div class="section-three__names-block section-three__names-block" ng-repeat="win in winner">
<div class="section-three__names-block-img section-three__names-block-img--green"></div>
<p class="section-three__names">{{win.first_name}} {{win.last_name}}</p>
<p class="section-three__names-sity">{{win.city}}</p>
</div>
</div>
</div>
</div>
<!-- Add Arrows -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="section-fore">
<div class="container section-fore__in">
<div class="section-fore__frut-left"></div>
<div class="section-fore__frut-right"></div>
<h2 class="section-fore__title">Обратная связь</h2>
<form name="feedback" class="section-fore__form" ng-submit="feedbackSubmit()" novalidate>
<!-- {{feedback | json}} -->
<select class="section-fore__form-section" name="" id="">
<option>Выберете вашу тему</option>
<option ng-model="title" ng-repeat="topic in topics" ng-value=topic.id>{{topic.title}}</option>
</select>
<div class="popup__input-wr">
<input type="text" name="userName" ng-model="name" class="section-fore__form-input section-fore__form-input--name" placeholder="Твое имя" ng-class="{'has-error': feedback.userName.$invalid && feedback.userName.$touched}" required/>
<div class="error" ng-messages="feedback.userName.$error" ng-messages-multiple="ng-messages-multiple" ng-if="feedback.userName.$touched || feedback.$submitted">
<div class="error-message" ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__input-wr">
<input type="email" ng-model="email" class="section-fore__form-input section-fore__form-input--email" name="userEmail" placeholder="Твой email" ng-class="{'has-error': feedback.userEmail.$invalid && feedback.userEmail.$touched}" minlength="5" maxlength="30" required />
<div class="error" ng-messages="feedback.userEmail.$error" ng-if="feedback.userEmail.$touched || feedback.$submitted" ng-messages-multiple="ng-messages-multiple">
<div class="error-message" ng-message="required">Это обязательное поле</div>
<div ng-message="email">Введите правильный email адресс</div>
<div ng-message="maxlength">Поле не должно привышать 30 символов</div>
</div>
</div>
<div class="popup__input-wr">
<textarea type="text" ng-model="message" class="section-fore__form-textarea" name="userMessage" rows="4" ng-minlength="10" ng-class="{'has-error': feedback.userMessage.$invalid && feedback.userMessage.$touched}" ng-maxlength="300" required>Напиши, что ты хочешь у нас спросить</textarea>
<div class="error" ng-messages="feedback.userMessage.$error" ng-show="feedback.userMessage.$touched" >
<div class="error-message" ng-message="required">Это обязательное поле</div>
<div ng-message="minlength">Сообщение должно быть не меньше 10 символов</div>
<div ng-message="maxlength">Сообщение должно быть не больше 200 символов</div>
</div>
</div>
<label class="section-fore__file-dwnl-label" for="section-fore__file-dwnl"><span>+</span>Приложи файл</label>
<input class="section-fore__file-dwnl" ng-model="files" name="userUploadFile" id="section-fore__file-dwnl" type="file" ngf-select="uploadFiles($files)" multiple accept="image/*">
<ul>
<li ng-repeat="f in files" style="font:smaller">
{{f.name}}
</li>
</ul>
<p class="section-fore__confines">Не более 3-х файлов общим размером до 10 Мб</p>
<input class="btn-submit btn-submit--send" type="submit" value="отправить">
</form>
</div>
</section>
<section id="section-five" class="section-five">
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide swiper-slide--one">
<div class="container section-five__slider-wr">
<div class="section-five__slider">
<div class="section-five__slider-img"><div class="section-five__slider-img-in"> </div></div>
<div class="section-five__slider-text">
<p class="section-five__slider-title">Пеппа Пиг</p>
<p class="section-five__slider-paragraph">Друг точно оценит мармелад в форме свинки Пеппа!</p>
</div>
</div>
</div>
</div>
<div class="swiper-slide swiper-slide--two">
<div class="container section-five__slider-wr">
<div class="section-five__slider">
<div class="section-five__slider-img section-five__slider-img--two">
<div class="section-five__slider-img-in-two"></div>
</div>
<div class="section-five__slider-text">
<p class="section-five__slider-title">Медвежата</p>
<p class="section-five__slider-paragraph">
У друга апельсиновое настроение или клубничное? Поделись с ним фруктовым медвежонком!
</p>
</div>
</div>
</div>
</div>
<div class="swiper-slide swiper-slide--three">
<div class="container section-five__slider-wr">
<div class="section-five__slider">
<div class="section-five__slider-img section-five__slider-img--three">
<div class="section-five__slider-img-in-tree"> </div>
</div>
<div class="section-five__slider-text">
<p class="section-five__slider-title">Звери Микс</p>
<p class="section-five__slider-paragraph">Твой друг похож на лягушку, динозавра, червяка или медведя? Поделись с ним жевательной мармеладкой!</p>
</div>
</div>
</div>
</div>
</div>
<!-- Add Pagination -->
<div class="swiper-pagination"></div>
<!-- Add Arrows -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
</div>
</section>
</article>
<!-- форма регистрации и авторизации -->
<div class="b-popup b-popup--reg">
<div class="popup-wr">
<div class="popup-wr-in">
<div class="popup popup--reg">
<div class="popup__close"></div>
<div class="popup__switch-btn-wr">
<div data-tab="tab1" class="popup__switch-btn popup__switch-btn--active">Регистрация</div>
<div data-tab="tab2" class="popup__switch-btn">войти</div>
</div>
<div class="popup__tab-content">
<div data-tab="tab1">
<p class="popup__title popup__title--tender">Для участия в конкурсе тебе нужно зарегистрироваться</p>
<form name="registrationForm" novalidate ng-submit="registrationSubmit()">
<div class="popup__input-wr">
<input type="text" class="popup__input" name="userFirstName" placeholder="Твое имя" ng-model="registrationFormFirstName" ng-class="{'has-error': registrationForm.userFirstName.$invalid && registrationForm.userFirstName.$touched}" required />
<div class="error" ng-messages="registrationForm.userFirstName.$error" ng-messages-multiple="ng-messages-multiple" ng-if="registrationForm.userFirstName.$touched || registrationForm.$submitted">
<div class="error-message" ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__input-wr">
<input type="text" class="popup__input" name="userLastName" placeholder="Твоя фамилия" ng-model="registrationFormLastName" ng-class="{'has-error': registrationForm.userLastName.$invalid && registrationForm.userLastName.$touched}" required />
<div class="error" ng-messages="registrationForm.userLastName.$error" ng-messages-multiple="ng-messages-multiple" ng-if="registrationForm.userLastName.$touched || registrationForm.$submitted">
<div class="error-message" ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__input-wr">
<input type="text" class="popup__input" name="residingCity" placeholder="Твой город" ng-model="registrationFormResidingCity" ng-class="{'has-error': registrationForm.residingCity.$invalid && registrationForm.residingCity.$touched}" required />
<div class="error" ng-messages="registrationForm.residingCity.$error" ng-messages-multiple="ng-messages-multiple" ng-if="registrationForm.residingCity.$touched || registrationForm.$submitted">
<div class="error-message" ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__input-wr">
<input type="phone" class="popup__input" name="userPhoneNumber" ng-model="registrationFormPhoneNumber" ng-class="{'has-error': registrationForm.userPhoneNumber.$invalid && registrationForm.userPhoneNumber.$touched}" ng-pattern="/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/" ui-mask="+7 (999) 999-9999" required/>
<div class="error" ng-messages="registrationForm.userPhoneNumber.$error" ng-if="registrationForm.userPhoneNumber.$touched || registrationForm.$submitted" >
<div class="error-message" ng-message="required">Это обязательное поле</div>
<div ng-message="pattern">Должен быть в формате +7(999) 581 601 16</div>
</div>
</div>
<div class="popup__input-wr">
<input type="email" class="popup__input" name="userEmail" placeholder="Твой email" ng-model="registrationFormEmail" minlength="5" maxlength="30" ng-class="{'has-error': registrationForm.userEmail.$invalid && registrationForm.userEmail.$touched}" required />
<div class="error" ng-messages="registrationForm.userEmail.$error" ng-if="registrationForm.userEmail.$touched || registrationForm.$submitted" ng-messages-multiple="ng-messages-multiple">
<div class="error-message" ng-message="required">Это обязательное поле</div>
<div ng-message="email">Введите правильный email адресс</div>
<div ng-message="maxlength">Поле не должно привышать 30 символов</div>
</div>
</div>
<div class="popup__input-wr">
<input type="password" class="popup__input" name="userNewPassword" placeholder="Придумай пароль" ng-minlength="6" ng-maxlength="60" ng-model="registrationFormNewPassword" ng-class="{'has-error': registrationForm.userNewPassword.$invalid && registrationForm.userNewPassword.$touched}" required/>
<div class="error" ng-messages="registrationForm.userNewPassword.$error" ng-if="registrationForm.userNewPassword.$touched || registrationForm.$submitted" ng-messages-multiple="ng-messages-multiple">
<div class="error-message" ng-message="required">Это обязательное поле</div>
<div ng-message-exp="['minlength', 'maxlength']">Пароль должен быть не меньше 6 символов и не больше 60.</div>
</div>
</div>
<div class="popup__input-wr">
<input type="password" class="popup__input" name="userConfirmPassword" placeholder="Введи пароль еще раз" ng-model="registrationFormConfirmPassword" ng-class="{'has-error': registrationForm.userConfirmPassword.$invalid && registrationForm.userConfirmPassword.$touched}" required/>
<div class="error" ng-messages="registrationForm.userConfirmPassword.$error" ng-if="registrationForm.userConfirmPassword.$touched && passwordError" ng-messages-multiple="ng-messages-multiple">
<div class="error-message" ng-message="required">Это обязательное поле</div>
<div class="error-message">Пароли не совпадают</div>
</div>
</div>
<div class="popup__radio-wr">
<div class="popup__radio-in">
<input id="radio-age-more" class="popup__radio-input" name="userAge" type="radio" ng-model="registrationFormAge" value="more" required/>
<label class="popup__radio-label" for="radio-age-more">Мне<span> больше</span> 18 лет.</label>
</div>
<!-- adulthood -->
<div class="popup__radio-in">
<input id="radio-age-less" class="popup__radio-input" name="userAge" type="radio" ng-model="registrationFormAge" value="less" required/>
<label class="popup__radio-label" for="radio-age-less">Мне<span> больше</span> 18 лет.</label>
</div>
</div>
<div class="popup__checkbox-wr">
<input class="popup__checkbox-input" id="personal-data" name="userAgreePersonalData" type="checkbox" ng-model="registrationFormAgreePersonalData" required/>
<label class="popup__checkbox-label" for="personal-data">Даю разрешение на обработку персональных данных.</label>
<div class="error" ng-if="registrationForm.userAgreePersonalData.$touched || registrationForm.$submitted" ng-messages="registrationForm.userAgreePersonalData.$error" ng-messages-multiple="ng-messages-multiple">
<div class="error-message" ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__checkbox-wr">
<input class="popup__checkbox-input" id="regulations" name="userAgreeRules" type="checkbox" ng-model="registrationFormAgreeRules" required/>
<label class="popup__checkbox-label" for="regulations">С <a download href="doc/rules.docx" >правилами</a> ознакомлен</label>
<div class="error" ng-if="registrationForm.userAgreeRules.$touched || registrationForm.$submitted" ng-messages="registrationForm.userAgreeRules.$error" ng-messages-multiple="ng-messages-multiple">
<div class="error-message" ng-message="required">Это обязательное поле</div>
</div>
</div>
<input type="submit" class="btn-submit btn-submit--pop-up-enter" value="зарегистрироваться">
</form>
</div>
<div data-tab="tab2">
<form name="loginForm" ng-submit="loginSubmit()" novalidate>
<div class="popup__input-wr">
<!-- popup__input-wr--error -->
<input type="email" class="popup__input" name="userEmail" placeholder="Твой email" ng-model="loginFormEmail" minlength="5" maxlength="30" ng-class="{'has-error': loginForm.userEmail.$invalid && loginForm.userEmail.$touched}" required />
<div class="error" ng-messages="loginForm.userEmail.$error" ng-if="loginForm.userEmail.$touched || loginForm.$submitted" ng-messages-multiple="ng-messages-multiple">
<div class="error-message" ng-message="required">Это обязательное поле</div>
<div ng-message="email">Введите правильный email адресс</div>
<div ng-message="maxlength">Поле не должно привышать 30 символов</div>
</div>
</div>
<div class="popup__input-wr">
<input type="password" class="popup__input" name="userloginPassord" placeholder="Пароль" ng-model="loginFormPassword" ng-class="{'has-error': loginForm.userloginPassord.$invalid && loginForm.userloginPassord.$touched}" ng-minlength="6" ng-maxlength="60" required/>
<div class="error" ng-messages="loginForm.userloginPassord.$error" ng-if="loginForm.userloginPassord.$touched || loginForm.$submitted" ng-messages-multiple="ng-messages-multiple">
<div class="error-message" ng-message="required">Это обязательное поле</div>
<div ng-message-exp="['minlength', 'maxlength']">Пароль должен быть не меньше 6 символов и не больше 60.</div>
</div>
</div>
<input class="btn-submit btn-submit--pop-up-enter" type="submit" value="Войти">
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="page-buffer"></div>
<div>
<div class="arrow-up-btn"></div>
<!-- page-header--log-out отвечает за размер шрифта в pos-f -->
<header class="page-header page-header--green page-header--log-out">
<div class="page-header-inner container">
<div class="logo-page"></div>
<nav class="main-navigation">
<ul class="main-navigation__list">
<!--Если не залогинен элемент активен-->
<li class="main-navigation__list-item">
<a class="main-navigation__link" href="#/#section-two">Конкурс</a>
</li>
<!-- ========= -->
<li class="main-navigation__list-item">
<a class="main-navigation__link" href="#/#section-two">Правила</a>
</li>
<li class="main-navigation__list-item">
<a class="main-navigation__link" href="#/#section-three">Призы</a>
</li>
<li class="main-navigation__list-item">
<a class="main-navigation__link" href="#/#section-three__title-two">Победители</a>
</li>
<li class="main-navigation__list-item main-navigation__list-item">
<a class="main-navigation__link" href="#/#section-five">Fruit-tella</a>
</li>
<li class="main-navigation__list-item">
<!-- Если залогинен элемент активен -->
<!--<a class="contest-btn contest-btn--login" href="#">введи код</a> -->
<a class="contest-btn contest-btn--logout" href="#">Участвуй в конкурсе</a>
</li>
</ul>
</nav>
<div class="login-wr" ng-if="global.inIconName">
<a ng-href="#/lk" class="login-ico"></a>
<div class="login-name-wr">
<a ng-href="#/lk" class="login-name">{{global.inIconName}}</a>
<a ng-click="logOut();" class="login-btn">Выйти</a>
</div>
</div>
<div class="logout-wr" ng-if="!global.inIconName">
<a class="logout-ico"></a>
</div>
</div>
</header>
<article class="lk-article">
<section class="section-lk">
<div class="section-lk-wr">
<div class="section-one__logo"></div>
<div class="section-lk__input-codes-wr">
<div class="section-lk__input-codes-wr-left">
<p class="section-lk__input-codes-title">{{global.inIconName}} {{global.inIconLastName}}</p>
<div ng-if="!isUserBlocked"><!-- если пользователь заблокирован -->
<p class="section-lk__input-codes-label">Твои коды</p>
<div class="section-lk__input-code-wr">
<div class="section-lk__input-ico section-lk__input-ico--red"></div>
<input class="section-lk__input-code" type="text">
<p class="section-lk__not-meant">Этот код еще участвует в розыгрыше</p>
</div>
<div class="section-lk__input-code-wr">
<div class="section-lk__input-ico"></div>
<input class="section-lk__input-code" ng-value="goodPromoCode" type="text">
<a class="btn-submit btn-submit--lk btn-submit--lk-reg">получить подарок</a>
</div>
</div>
<div ng-if="isUserBlocked">
К сожалению вы заблокированны с {{blockedFromTime}} по {{blockedToTime}}. <br/>
За ввод большого количества кодов.
</div>
<!-- <div class="section-lk__input-code-wr">
<div class="section-lk__input-ico"></div>
<input class="section-lk__input-code" type="text">
<a class="btn-submit btn-submit--lk">получить подарок</a>
</div> -->
</div>
<!-- если пользователь заблокирован -->
<form class="section-lk__input-codes-wr-right" name="activatePromoCode" ng-submit="codeFormSubmit()" ng-if="!isUserBlocked" novalidate>
<input type="text" class="section-lk__input-pack-code" name="promoCode" ng-model="lk.promoCode" placeholder="Введи код с пачки">
<!-- ng-pattern="/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/" -->
<!-- ui-mask="000000" -->
<!-- minlength="6" maxlength="6" -->
<!-- ng-class="{'has-error': activatePromoCode.promoCode.$invalid && activatePromoCode.promoCode.$touched}" required -->
<div class="error" ng-messages="activatePromoCode.promoCode.$error" ng-if="activatePromoCode.promoCode.$touched || activatePromoCode.$submitted" >
<div class="error-message" ng-message="required">Это обязательное поле</div>
<div ng-message="pattern">Должен быть в формате +7(999) 581 601 16</div>
</div>
<input class="btn-submit btn-submit--lk-reg" type="submit" value="активировать">
</form>
</div>
</div>
</section>
</article>
<!-- Поздравляем, ты выиграл iPhone 6 -->
<div class="b-popup b-popup--prize">
<div class="popup-wr">
<div class="popup-wr-in">
<div class="popup popup--prize b-popup--open">
<div class="popup__close"></div>
<div class="prize-icon">
<img src="img/mobile-ico.png" alt=""></div>
<p class="popup__prise-title">Поздравляем, ты выиграл iPhone 6</p>
<div class="popup__switch-btn-wr">
<div class="popup__switch-btn popup__switch-btn--active">Мне уже есть 18 лет</div>
<div class="popup__switch-btn">мне еще нет 18 лет</div>
</div>
<p class="popup__title">Для получения подарка заполни поля ниже</p>
<form name="prizeForm" ng-submit="registrationSubmit()" novalidate>
<div class="popup__input-wr">
<input type="text" class="popup__input" name="userFirstName" placeholder="Твое имя" ng-model="firstName" required />
<div class="error" ng-messages="prizeForm.userLastName.$error" ng-messages-multiple="ng-messages-multiple" ng-if="prizeForm.userFirstName.$touched || prizeForm.$submitted">
<div ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__input-wr">
<input type="text" class="popup__input" name="userLastName" placeholder="Твоя фамилия" ng-model="lastName" required />
<div class="error" ng-messages="prizeForm.userLastName.$error" ng-messages-multiple="ng-messages-multiple" ng-if="prizeForm.userLastName.$touched || prizeForm.$submitted">
<div ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__input-wr">
<input type="text" class="popup__input" name="userMiddleName" placeholder="Отчество" ng-model="middleName" required />
<div class="error" ng-messages="prizeForm.userMiddleName.$error" ng-messages-multiple="ng-messages-multiple" ng-if="prizeForm.userMiddleName.$touched || prizeForm.$submitted">
<div ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__input-wr">
<input type="text" class="popup__input" name="userDateBirth" placeholder="Отчество" ng-model="dateBirth" ui-mask="MM/DD/YYYY" required />
<div class="error" ng-messages="prizeForm.userDateBirth.$error" placeholder="Дата, месяц и год рождения" ng-messages-multiple="ng-messages-multiple" ng-if="prizeForm.userDateBirth.$touched || prizeForm.$submitted">
<div ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__input-wr">
<input type="phone" class="popup__input" name="userPhoneNumber" ng-model="phoneNumber" ng-pattern="/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/" ui-mask="+7 (999) 999-9999" placeholder="Номер телефона" required/>
<div class="error" ng-messages="prizeForm.userPhoneNumber.$error" ng-if="prizeForm.userPhoneNumber.$touched || prizeForm.$submitted" >
<div ng-message="required">Это обязательное поле</div>
<div ng-message="pattern">Должен быть в формате +7(999) 581 601 16</div>
</div>
</div>
<div class="popup__input-wr">
<input type="text" class="popup__input" name="residingCity" placeholder="Город проживания" ng-model="residingCity" required />
<div class="error" ng-messages="prizeForm.residingCity.$error" ng-messages-multiple="ng-messages-multiple" ng-if="prizeForm.residingCity.$touched || prizeForm.$submitted">
<div ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__input-wr">
<input type="phone" class="popup__input" name="userPassport" placeholder="Серия и номер паспорта" ng-model="passport" placeholder="Номер телефона" required/>
<div class="error" ng-messages="prizeForm.userPassport.$error" ng-if="prizeForm.userPassport.$touched || prizeForm.$submitted" >
<div ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__input-wr">
<input type="phone" class="popup__input" name="userInn" placeholder="Серия и номер паспорта" ng-model="inn" placeholder="ИНН" required/>
<div class="error" ng-messages="prizeForm.userInn.$error" ng-if="prizeForm.userInn.$touched || prizeForm.$submitted" >
<div ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__input-wr">
<input type="phone" class="popup__input" name="userSnils" placeholder="СНИЛС" ng-model="snils" placeholder="СНИЛС" required/>
<div class="error" ng-messages="prizeForm.userSnils.$error" ng-if="prizeForm.userSnils.$touched || prizeForm.$submitted" >
<div ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__checkbox-wr">
<input class="popup__checkbox-input" id="personal-data-prize" name="userAgreePersonalData" type="checkbox" ng-model="agreePersonalData" required/>
<label class="popup__checkbox-label" for="personal-data-prize">Даю разрешение на обработку персональных данных.</label>
<div class="error" ng-if="prizeForm.userAgreePersonalData.$touched || prizeForm.$submitted" ng-messages="prizeForm.userAgreePersonalData.$error" ng-messages-multiple="ng-messages-multiple">
<div ng-message="required">Это обязательное поле</div>
</div>
</div>
<div class="popup__checkbox-wr">
<input class="popup__checkbox-input" id="regulations-prize" name="userAgreeRules" type="checkbox" ng-model="agreeRules" required/>
<label class="popup__checkbox-label" for="regulations-prize">С <a download href="doc/rules.docx">правилами</a> ознакомлен </label>
<div class="error" ng-if="prizeForm.userAgreeRules.$touched || prizeForm.$submitted" ng-messages="prizeForm.userAgreeRules.$error" ng-messages-multiple="ng-messages-multiple">
<div ng-message="required">Это обязательное поле</div>
</div>
</div>
<input class="btn-submit btn-submit--pop-up-enter" type="submit" value="отправить">
</form>
</div>
</div>
</div>
</div>
</div>
<div class="page-buffer"></div>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment