/* * Angular js */ angular.module('Rusbase', []) .config(function($interpolateProvider){ $interpolateProvider.startSymbol('{$').endSymbol('$}'); }) .config(function($sceDelegateProvider) { $sceDelegateProvider.resourceUrlWhitelist([ // Allow same origin resource loads. 'self', "http://" + location.host + "/**", "http://static." + location.host + "/**", ]); }) .config(function($httpProvider){ $httpProvider.defaults.headers.post['X-CSRFToken'] = getCookie('csrftoken'); delete $httpProvider.defaults.headers.common['X-Requested-With']; }) .filter('trust', ['$sce', function($sce) { return function(value, type) { return $sce.trustAs(type || 'html', value); } }]); angular.module('Rusbase').controller('B2bController', [ '$scope', '$http', '$timeout', function($scope, $http, $timeout) { $scope.config = { api_url : '/api/b2b/list/', limit:32, orphans:5 } $scope.is_loading = false; $scope.data = { 'cur_month': false, 'cards_list': [], 'next_page': 1, 'category_id': CATEGORY_ID, 'category_name' : CATEGORY_NAME, 'show_more_button': false, 'url':document.URL, } var prev_data; $scope.loadCards = function (add_to_current_list) { if ($scope.is_loading ) return; if (add_to_current_list===undefined) { add_to_current_list = true; } url = $scope.config.api_url; url += '?page='+$scope.data.next_page+'&limit='+$scope.config.limit+'&orphans='+$scope.config.orphans; if ($scope.data.category_id) { url += '&category='+$scope.data.category_id; } $scope.is_loading = true; $http .get(url) .success(function (data) { data.project_list = data.project_list.randomize(); if (!add_to_current_list) { $scope.data.cards_list = data.project_list; } else { $scope.data.cards_list = $scope.data.cards_list.concat(data.project_list); } $scope.data.next_page = data.next_page; $scope.is_loading = false; if (data.next_page!==false) { $scope.data.show_more_button = true; } else { $scope.data.show_more_button = false; } if (add_to_current_list) { // save set state on first load history.replaceState( angular.copy($scope.data), document.title, $scope.data.url ); } else { history.pushState( angular.copy($scope.data), document.title, $scope.data.url ); } }) .error(function(response){ //if error occured during loading category switch to previous category $scope.is_loading = false; $scope.data = prev_data; showMessage('Загрузка не удалась. Провертьте наличие активного интренет соединения.'); }); } $scope.loadCards(); $scope.onChangeCategoryClick = function($event,category_id,url,category_name) { $event.preventDefault(); if ($scope.data.category_id==category_id) return; prev_data = angular.copy($scope.data); $scope.data.url = url; $scope.data.category_id = category_id; $scope.data.category_name = category_name; $scope.data.cur_month = false; $scope.data.next_page = 1; $scope.data.show_more_button = false; $scope.loadCards(false); $scope.comactCategories.visible = false; } window.onpopstate = function(event) { $scope.data = event.state; $scope.comactCategories.visible = false; $scope.$apply(); } $scope.comactCategories = { visible:false, clickHandle: function() { this.visible = !this.visible; } } } ]); angular.module('Rusbase').controller('EduController', [ '$scope', '$http', '$timeout', '$locale', function($scope, $http, $timeout, $locale) { $locale.NUMBER_FORMATS.GROUP_SEP = ' '; $scope.config = { api_url : '/api/edu/list/', limit:32, orphans:4, month_names: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'] } $scope.is_loading = false; $scope.data = { 'cur_month': false, 'cards_list': [], 'next_page': 1, 'category_id': CATEGORY_ID, 'category_name' : CATEGORY_NAME, 'show_more_button': false, 'url':document.URL, } var prev_data; var cardNumInMonth = 1; $scope.loadCards = function (add_to_current_list) { if ($scope.is_loading ) return; if (add_to_current_list===undefined) { add_to_current_list = true; } url = $scope.config.api_url; url += '?page='+$scope.data.next_page+'&limit='+$scope.config.limit+'&orphans='+$scope.config.orphans; if ($scope.data.category_id) { url += '&category='+$scope.data.category_id; } $scope.is_loading = true; $http .get(url) .success(function (data) { if (!add_to_current_list) { $scope.data.cards_list = []; } $.each(data.cards_list, function() { if (this.start_dt) { dt = this.start_dt; this.start_dt = new Date(dt) } if (this.end_dt) { dt = this.end_dt; this.end_dt = new Date(dt) } if ($scope.data.cur_month === false || $scope.data.cur_month != this.start_dt.getMonth()) { this['is_first_in_month'] = true; $scope.data.cur_month = this.start_dt.getMonth(); cardNumInMonth = 1; } else { this['is_first_in_month'] = false; cardNumInMonth++; } if (cardNumInMonth % 2 == 0) { this['is_even'] = true; } else { this['is_even'] = false; } if (cardNumInMonth % 4 == 0) { this['is_4n'] = true; } else { this['is_4n'] = false; } $scope.data.cards_list.push(this); }); $scope.data.next_page = data.next_page; $scope.is_loading = false; if (data.next_page!==false) { $scope.data.show_more_button = true; } else { $scope.data.show_more_button = false; } if (add_to_current_list) { // save set state on first load history.replaceState( angular.copy($scope.data), document.title, $scope.data.url ); } else { history.pushState( angular.copy($scope.data), document.title, $scope.data.url ); } }) .error(function(response){ $scope.is_loading = false; $scope.data = prev_data; showMessage('Загрузка не удалась. Провертьте наличие активного интренет соединения.'); }); } $scope.loadCards(); $scope.renderMonth = function(dt) { return $scope.config.month_names[dt.getMonth()]; } $scope.onChangeCategoryClick = function($event,category_id,url,category_name) { $event.preventDefault(); if ($scope.data.category_id==category_id) return; prev_data = angular.copy($scope.data); $scope.data.url = url; $scope.data.category_id = category_id; $scope.data.category_name = category_name; $scope.data.cur_month = false; $scope.data.next_page = 1; $scope.data.show_more_button = false; $scope.loadCards(false); $scope.comactCategories.visible = false; } window.onpopstate = function(event) { $scope.data = event.state; $scope.comactCategories.visible = false; $scope.$apply(); } $scope.comactCategories = { visible:false, clickHandle: function() { this.visible = !this.visible; } } } ]); var MONTH_NAMES = [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря" ], WEEK_DAYS = [ "Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота" ], PERIOD_PRESETS = { today:{ label:"Сегодня", }, week:{ label:"На этой неделе", }, month:{ label:"Ближайший месяц" } }, SWITCH_CLM_COUNT_WIDTH = 650; angular.module('Rusbase') .controller('DatepickerController', [ '$scope', '$element', function($scope,$element) { var datepicker_el, popup_el, pickmeup_instance, current_range_strformat = [], clm_count; $scope.display_date = PERIOD_PRESETS.month.label; $scope.show = function() { $scope.visible = true; $(document).on('keydown', keyDownHandler); } $scope.close = function() { $scope.visible = false; $(document).off('keydown', keyDownHandler); } $scope.changeVisibility = function(){ if ($scope.visible) { $scope.close(); } else { $scope.show(); } } $scope.accept = function() { var dateRange = pickmeup_instance.get_date(); updateCurrentRange(dateRange); //check if date was not chaged don't need to call $scope.$parent.onChangeDate if ((current_range_strformat[0]!==current_range_strformat[1] && (current_range_strformat[0]!==$scope.$parent.data.start_dt || current_range_strformat[1]!==$scope.$parent.data.stop_dt)) || (current_range_strformat[0]==current_range_strformat[1] && current_range_strformat[0]!==$scope.$parent.data.start_dt)) { $scope.$parent.onChangeDate(dateRange); } $scope.close(); } $scope.cancel = function() { var dateRange = convertStrRangeToData(current_range_strformat); pickmeup_instance.set_date(dateRange); updateDisplayDate(dateRange); $scope.close(); } $scope.setPreset = function(preset_name) { $scope.display_date = PERIOD_PRESETS[preset_name].label; var dateRange = []; switch (preset_name) { case 'today': dateRange[0] = new Date; dateRange[1] = new Date; break; case 'week': var now = new Date; dateRange[0] = getMonday(now); dateRange[1] = getSunday(now); break; case 'month': var now = new Date(); var lastDay = new Date(now.getFullYear(), now.getMonth(), now.getDate()+21); dateRange[0] = now; dateRange[1] = getSunday(lastDay); break; } $scope.close(); // pickmeup_instance.set_date(dateRange); var current; if (clm_count==2) { current = new Date(dateRange[1].getFullYear(),dateRange[1].getMonth()+1,1); } pickmeup_instance.destroy(); pickmeup_instance = pickmeup(datepicker_el, { date:dateRange, current:current, mode:'range', calendars:clm_count, flat : true, locale:"ru" }); updateCurrentRange(dateRange); $scope.$parent.onChangeDate(dateRange); } init(); function init() { var now = new Date; datepicker_el = $element[0].querySelector('.js-pickerdate'); popup_el = $element[0].querySelector('.js-picker-popup'); if ($(window).width()>=SWITCH_CLM_COUNT_WIDTH) { clm_count = 2; } else { clm_count = 1; } pickmeup.defaults.locales['ru'] = { days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'], daysShort: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'], daysMin: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'], months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'], monthsShort: ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'] }; var current; if (clm_count==2) { current = new Date(now.getFullYear(),now.getMonth()+1,1); } pickmeup_instance = pickmeup(datepicker_el, { current: current, mode:'range', calendars:clm_count, flat : true, locale:"ru" }); datepicker_el.addEventListener('pickmeup-change', function (e) { updateDisplayDate(e.detail.date); $scope.$apply(); }); // if $scope.$parent.data was updated (by change url) set new range to widget $scope.$parent.$watch("data",function(data){ if (!data.start_dt && !data.stop_dt) { $scope.setPreset('month'); } if (data.start_dt!==current_range_strformat[0] || data.stop_dt!==current_range_strformat[1]) { var dateRange = convertStrRangeToData([data.start_dt,data.stop_dt]); current_range_strformat[0] = data.start_dt; current_range_strformat[1] = data.stop_dt; updateDisplayDate(dateRange); if (dateRange[0].getFullYear()===dateRange[1].getFullYear() && dateRange[0].getMonth()===dateRange[1].getMonth()){ var current; if (clm_count==2) { current = new Date(now.getFullYear(),now.getMonth()+1,1); } pickmeup_instance.destroy(); pickmeup_instance = pickmeup(datepicker_el, { date:dateRange, current:current, mode:'range', calendars:clm_count, flat : true, locale:"ru" }); } else { pickmeup_instance.set_date(dateRange); } } }); $(window).on("resize",function(){ if ($(window).width()>=SWITCH_CLM_COUNT_WIDTH && clm_count!==2) { clm_count = 2; updateDatapeackerClmCount(); } else if ($(window).width()