(function () { 'use strict'; // Source: src/html/scripts/search-forms/search-forms.js angular.module('searchForms', [ 'air', 'lodge', 'travel', 'ui.bootstrap', 'ngAnimate' ]); /*.constant('settings', { links: { airports: '/airports' }, destinations: { 'search': 'https://apollo.atlasvoyages.com/pois?lang=fr&limit=10&qt=byName&skip=0&str=:term&type=locality', 'index': 'https://apollo.atlasvoyages.com/pois?lang=fr&limit=10&qt=byName&skip=0&str=:term&type=locality' }, lodge: { standaloneSearchForm: true, salesApp: '/hotels' }, air: { standaloneSearchForm: true, salesApp: '/reservation-vols#/', airlinesSearch: 'https://apollo.atlasvoyages.com/airlines?qt=search&term=:term', airportsSearch: 'https://apollo.atlasvoyages.com/airports?qt=search&term=:term', airportsResolve: 'https://apollo.atlasvoyages.com/airports?qt=codes&codes=:codes', legs: [ { code: 1, label: 'Aller simple' }, { code: 2, label: 'Aller retour' }, { code: 3, label: 'Multi-segments' } ], // this should be refactored into: searchFlags: ['direct','airline',...etc] searchCriteria: { direct: true, flexDates: true, airline: true, budget: true, refundable: true } }, default: { countries: [{ "code": "TR", "name": "Turquie" }, { "code": "TH", "name": "Thailande" }, { "code": "RU", "name": "Russie" }, { "code": "IN", "name": "Inde" }, { "code": "CN", "name": "Chine" }, { "code": "HK", "name": "Hong Kong" }, { "code": "BR", "name": "Brésil" }, { "code": "VN", "name": "Vietnam" }, { "code": "GB", "name": "Grande Bretagne" }, { "code": "MY", "name": "Malaisie" }, { "code": "AE", "name": "Emirats Arabes Unis" }, { "code": "IT", "name": "Italie" }, { "code": "GR", "name": "Grèce" }, { "code": "SG", "name": "Singapour" }, { "code": "CV", "name": "Cap Vert" }, { "code": "ES", "name": "Espagne" }] }, travel: { standaloneSearchForm: true, }, routes: { airSales: 'ngapps/air-sales', lodgeSales: 'ngapps/lodge-sales', travelSales: 'ngapps/travel-sales' } });*/ angular.module('searchForms').controller('MainCtrl', [ '$scope', function ($scope) { var forms = { 'air': { name: 'air', form: 'air_form' }, 'lodge': { name: 'lodge', form: 'lodge_form' }, 'package': { name: 'package', form: 'travel_form' } }; function toggleForm(name) { $scope.current = forms[name]; } $scope.toggleForm = toggleForm; $scope.query = { dstart: '', dend: '', destination: null, adults: 1, children: 0, ages: [] }; //toggleForm('air'); } ]); // Source: src/html/scripts/search-forms/ui-datepicker-ext.js angular.module('ui.bootstrap.datepicker').controller('DatepickerController', [ '$scope', '$attrs', '$parse', '$interpolate', '$timeout', '$log', 'dateFilter', 'datepickerConfig', function ($scope, $attrs, $parse, $interpolate, $timeout, $log, dateFilter, datepickerConfig) { var self = this, ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl; // Modes chain this.modes = [ 'day', 'month', 'year' ]; // Configuration attributes angular.forEach([ 'formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle', 'minMode', 'maxMode', 'showWeeks', 'startingDay', 'yearRange' ], function (key, index) { self[key] = angular.isDefined($attrs[key]) ? index < 8 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key]) : datepickerConfig[key]; }); // Watchable date attributes angular.forEach([ 'minDate', 'maxDate' ], function (key) { if ($attrs[key]) { $scope.$parent.$watch($parse($attrs[key]), function (value) { self[key] = value ? new Date(value) : null; self.refreshView(); }); } else { self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null; } }); if (angular.isDefined($attrs.initDate)) { console.log($attrs.initDate, $parse($attrs.initDate)); $scope.$parent.$watch($parse('$parent.$parent.' + $attrs.initDate), function (value) { console.log('initdare ' + value); if (!ngModelCtrl.$modelValue) { self.activeDate = value ? new Date(value) : new Date(); self.refreshView(); } }); } $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode; $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000); this.activeDate = angular.isDefined($attrs.initDate) ? $scope.$parent.$eval($attrs.initDate) : new Date(); $scope.isActive = function (dateObject) { if (self.compare(dateObject.date, self.activeDate) === 0) { $scope.activeDateId = dateObject.uid; return true; } return false; }; this.init = function (ngModelCtrl_) { ngModelCtrl = ngModelCtrl_; ngModelCtrl.$render = function () { self.render(); }; }; this.render = function () { if (ngModelCtrl.$modelValue) { var date = new Date(ngModelCtrl.$modelValue), isValid = !isNaN(date); if (isValid) { this.activeDate = date; } else { $log.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'); } ngModelCtrl.$setValidity('date', isValid); } this.refreshView(); }; this.refreshView = function () { if (this.element) { this._refreshView(); var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null; ngModelCtrl.$setValidity('date-disabled', !date || this.element && !this.isDisabled(date)); } }; this.createDateObject = function (date, format) { var model = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null; return { date: date, label: dateFilter(date, format), selected: model && this.compare(date, model) === 0, disabled: this.isDisabled(date), current: this.compare(date, new Date()) === 0, classes: $attrs.dateClasses && $scope.dateClasses({ date: date, mode: $scope.datepickerMode }) || '' }; }; this.isDisabled = function (date) { return this.minDate && this.compare(date, this.minDate) < 0 || this.maxDate && this.compare(date, this.maxDate) > 0 || $attrs.dateDisabled && $scope.dateDisabled({ date: date, mode: $scope.datepickerMode }); }; // Split array into smaller arrays this.split = function (arr, size) { var arrays = []; while (arr.length > 0) { arrays.push(arr.splice(0, size)); } return arrays; }; $scope.select = function (date) { if ($scope.datepickerMode === self.minMode) { var dt = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : new Date(0, 0, 0, 0, 0, 0, 0); dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); ngModelCtrl.$setViewValue(dt); ngModelCtrl.$render(); } else { self.activeDate = date; $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) - 1]; } }; $scope.move = function (direction) { var year = self.activeDate.getFullYear() + direction * (self.step.years || 0), month = self.activeDate.getMonth() + direction * (self.step.months || 0); self.activeDate.setFullYear(year, month, 1); self.refreshView(); }; $scope.toggleMode = function (direction) { direction = direction || 1; if ($scope.datepickerMode === self.maxMode && direction === 1 || $scope.datepickerMode === self.minMode && direction === -1) { return; } $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) + direction]; }; // Key event mapper $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' }; var focusElement = function () { $timeout(function () { self.element[0].focus(); }, 0, false); }; // Listen for focus requests from popup directive $scope.$on('datepicker.focus', focusElement); $scope.keydown = function (evt) { var key = $scope.keys[evt.which]; if (!key || evt.shiftKey || evt.altKey) { return; } evt.preventDefault(); evt.stopPropagation(); if (key === 'enter' || key === 'space') { if (self.isDisabled(self.activeDate)) { return; // do nothing } $scope.select(self.activeDate); focusElement(); } else if (evt.ctrlKey && (key === 'up' || key === 'down')) { $scope.toggleMode(key === 'up' ? 1 : -1); focusElement(); } else { self.handleKeyDown(key, evt); self.refreshView(); } }; } ]); }());