@ -9,6 +9,7 @@ var STUB_IMAGE_URL = '/static/img/profile.jpg'
// Plugins init --------------------------------------------
$ ( '.datepicker' ) . datepicker ( )
$ ( '[data-tooltip]' ) . tooltip ( {
@ -25,14 +26,15 @@ $('[data-tooltip]').tooltip({
// Specialization select -----------------------------------
var specSelectOptions = {
; ( function ( ) {
var specSelectOptions = {
language : 'ru' ,
//minimumInputLength: 1, // Commented out to immediately load remote data
placeholder : 'Выберите специализацию' , // Required by `allowClear`
allowClear : true ,
ajax : {
url : '/api/specializations/' ,
url : null ,
dataType : 'json' ,
quietMillis : 250 ,
cache : true ,
@ -58,21 +60,12 @@ var specSelectOptions = {
}
} ,
} ,
initSelection : function ( element , callback ) {
var id = $ ( element ) . val ( )
if ( id !== '' ) {
$ . ajax ( { url : '/api/specializations/' + id + '/' , method : 'GET' , dataType : 'json' } )
. then ( function ( data ) { callback ( data ) } )
}
}
}
$ ( '.-spec-select-container' ) . each ( function ( i , container ) {
$ ( '.-spec-select-container' ) . each ( function ( i , container ) {
var $container = $ ( container )
var $specSelects = $ ( container ) . find ( '.-spec-select' )
var $specSelects = $container . find ( '.-spec-select' )
var $chosenSpecId = $container . find ( '.-chosen-spec-id' ) . first ( )
var $specSelect1 = $container . find ( '.-spec-select-level-1' ) . first ( )
@ -82,8 +75,7 @@ $('.-spec-select-container').each(function(i, container) {
var specSelects = [ $specSelect1 , $specSelect2 , $specSelect3 , $specSelect4 ]
$specSelects . select2 ( specSelectOptions )
reinitSpecializationsByWorkType ( $specSelects , null )
var chosenSpecId = $chosenSpecId . val ( )
@ -94,18 +86,23 @@ $('.-spec-select-container').each(function(i, container) {
var specId = $evt . added ? $evt . added . id : null
updateSpecializationWidgets ( specId , $container , $chosenSpecId , specSelects )
} )
} )
} )
function reinitSpecializationsByWorkType ( $specSelects , workTypeId ) {
$ . get ( '/api/specializations/?parent__name=_root' )
. then ( function ( res ) {
var rootSpecs = res . results
var rootSpec = workTypeId == null ? rootSpecs [ 0 ] : ( { 1 : rootSpecs [ 0 ] , 2 : rootSpecs [ 1 ] , 3 : rootSpecs [ 2 ] } ) [ workTypeId ]
$specSelects . select2 ( _ . merge ( specSelectOptions , {
ajax : { url : format ( '/api/specializations/?lft__gte=%s&rght__lte=%s' , rootSpec . lft , rootSpec . rght ) } ,
} ) )
} )
}
function updateSpecializationWidgets ( specId , $container , $chosenSpecId , specSelects ) {
function updateSpecializationWidgets ( specId , $container , $chosenSpecId , specSelects ) {
return getSpecializationTree ( specId ) . then ( function ( specs ) {
var specLevel1 = specs . specLevel1
var specLevel2 = specs . specLevel2
@ -119,9 +116,12 @@ function updateSpecializationWidgets(specId, $container, $chosenSpecId, specSele
$chosenSpecId . val ( specId )
} )
}
}
window . reinitSpecializationsByWorkType = reinitSpecializationsByWorkType
} ( ) )
@ -134,24 +134,34 @@ function updateSpecializationWidgets(specId, $container, $chosenSpecId, specSele
// Specialization select (simple) -------------------------------
var simpleSpecSelectsOptions = {
; ( function ( ) {
var simpleSpecSelectsOptions = {
language : 'ru' ,
placeholder : 'Выберите специализацию' , // Required by `allowClear`
allowClear : true ,
}
var $simpleSpecContainer = $ ( '#simpleSpecContainer' )
var $emptySimpleSpecWidget = $simpleSpecContainer . find ( '.-simple-spec-widget' ) . first ( )
//initSelection: function(element, callback) {
// var id = $(element).val()
//
// if (id !== '') {
// $.ajax({url: '/api/specializations/' + id + '/', method: 'GET', dataType: 'json'})
// .then(function(data) {callback(data)})
// }
//}
}
var $simpleSpecContainer = $ ( '#simpleSpecContainer' )
var $emptySimpleSpecWidget = $simpleSpecContainer . find ( '.-simple-spec-widget' ) . first ( )
$simpleSpecContainer . find ( '.-chosen-simple-spec-id' ) . each ( function ( i , el ) {
$simpleSpecContainer . find ( '.-chosen-simple-spec-id' ) . each ( function ( i , el ) {
var $el = $ ( el )
var specId = Number ( $el . val ( ) )
if ( specId )
initSimpleSpecSelect2 ( $el . closest ( '.-simple-spec-widget' ) . find ( '.-simple-spec-select' ) . first ( ) , specId )
} )
} )
$ ( '#addSpec' ) . on ( 'click' , function ( $evt ) {
$ ( '#addSpec' ) . on ( 'click' , function ( $evt ) {
var $newSimpleSpecWidget = $emptySimpleSpecWidget . clone ( )
$simpleSpecContainer . append ( $newSimpleSpecWidget )
var $newSimpleSpecSelect = $newSimpleSpecWidget . find ( '.-simple-spec-select' ) . first ( )
@ -159,16 +169,16 @@ $('#addSpec').on('click', function($evt) {
initSimpleSpecSelect2 ( $newSimpleSpecSelect ) . then ( function ( ) {
$newSimpleSpecWidget . css ( 'display' , 'block' )
} )
} )
} )
$simpleSpecContainer . on ( 'change' , '.-simple-spec-select' , function ( $evt ) {
$simpleSpecContainer . on ( 'change' , '.-simple-spec-select' , function ( $evt ) {
if ( $evt . added )
$ ( this ) . parent ( ) . children ( '.-chosen-simple-spec-id' ) . first ( ) . val ( $evt . added . id )
} )
} )
function initSimpleSpecSelect2 ( $select , specId ) {
function initSimpleSpecSelect2 ( $select , specId ) {
return $ . ajax ( { url : '/api/specializations/' , method : 'GET' , dataType : 'json' } )
. then ( function ( res ) {
var specs = res . results
@ -193,8 +203,8 @@ function initSimpleSpecSelect2($select, specId) {
} )
}
} )
}
}
} ( ) )
@ -208,7 +218,8 @@ function initSimpleSpecSelect2($select, specId) {
// Team invitation contractor select -------------------------------
var contractorSelectOptions = {
; ( function ( ) {
var contractorSelectOptions = {
language : 'ru' ,
placeholder : 'Выберите пользователя' , // Required by `allowClear`
allowClear : true ,
@ -241,13 +252,15 @@ var contractorSelectOptions = {
}
} ,
} ,
}
}
function initContractorSelect ( $select , excludeIds ) {
function initContractorSelect ( $select , excludeIds ) {
contractorSelectOptions . ajax . url = format ( '%s?id__in!=%s' , contractorSelectOptions . ajax . url , excludeIds . join ( ',' ) )
return $select . select2 ( contractorSelectOptions )
}
}
window . initContractorSelect = initContractorSelect
} ( ) )
@ -303,23 +316,24 @@ function initContractorSelect($select, excludeIds) {
// Location select ----------------------------------------------
var $locationSelects = $ ( '.-location-select' )
; ( function ( ) {
var $locationSelects = $ ( '.-location-select' )
var locationSelectOptions = {
var locationSelectOptions = {
language : 'ru' ,
placeholder : 'Выберите местоположение' , // Required by `allowClear`
allowClear : true ,
}
}
var $countrySelect = $ ( '.-location-select-country' )
var $regionSelect = $ ( '.-location-select-region' )
var $citySelect = $ ( '.-location-select-city' )
var $countrySelect = $ ( '.-location-select-country' )
var $regionSelect = $ ( '.-location-select-region' )
var $citySelect = $ ( '.-location-select-city' )
// Initialize:
// Initialize:
getLocationTree ( null ) . then ( function ( locs ) {
getLocationTree ( null ) . then ( function ( locs ) {
$countrySelect . select2 ( _ . merge ( locationSelectOptions , { data : locs . countries } ) )
$regionSelect . select2 ( _ . merge ( locationSelectOptions , { data : locs . regions } ) )
$citySelect . select2 ( _ . merge ( locationSelectOptions , { data : locs . cities } ) )
@ -328,15 +342,15 @@ getLocationTree(null).then(function(locs) {
if ( chosenLocId )
updateLocationWidgets ( chosenLocId )
} )
} )
$locationSelects . on ( 'change' , function ( $evt ) {
$locationSelects . on ( 'change' , function ( $evt ) {
updateLocationWidgets ( $evt . added ? $evt . added . id : null )
} )
} )
function updateLocationWidgets ( locId ) {
function updateLocationWidgets ( locId ) {
return getLocationTree ( locId ) . then ( function ( locs ) {
$countrySelect . select2 ( { data : locs . countries } )
$regionSelect . select2 ( { data : locs . regions } )
@ -358,11 +372,11 @@ function updateLocationWidgets(locId) {
if ( loc )
$ ( '#chosenLocationId' ) . val ( loc . id )
} )
}
}
$ ( '#realtyId' ) . on ( 'change' , function ( $evt ) {
$ ( '#realtyId' ) . on ( 'change' , function ( $evt ) {
var realtyId = Number ( $ ( this ) . val ( ) )
if ( realtyId ) {
@ -378,17 +392,17 @@ $('#realtyId').on('change', function($evt) {
$ ( '#realtyConstructionTypeId' ) . val ( '' ) . change ( )
updateLocationWidgets ( null )
}
} )
} )
function loadRealtyDetails ( realtyId ) {
function loadRealtyDetails ( realtyId ) {
return $ . ajax ( {
url : '/api/realties/' + realtyId + '/' ,
method : 'GET' ,
dataType : 'json' ,
} )
. then ( function ( res ) { return res } )
}
}
} ( ) )
@ -404,14 +418,14 @@ function loadRealtyDetails(realtyId) {
// TODO: Add file number and overall size limit support
; ( function ( ) {
var $fileUploadContainer = $ ( '#fileUploadContainer' )
var $fileUploadContainer = $ ( '#fileUploadContainer' )
$ ( '#fileUploadAddBtn' ) . on ( 'click' , function ( $evt ) {
$ ( '#fileUploadAddBtn' ) . on ( 'click' , function ( $evt ) {
$fileUploadContainer . find ( '.file-upload-widget' ) . last ( ) . find ( '.file-upload-input' ) . click ( )
} )
} )
$fileUploadContainer . on ( 'change' , '.file-upload-input' , function ( $evt ) {
$fileUploadContainer . on ( 'change' , '.file-upload-input' , function ( $evt ) {
var $fileInput = $ ( this )
var $fileUploadWidget = $fileInput . closest ( '.file-upload-widget' )
var filePath = $fileInput . val ( ) . replace ( /\\/g , '/' )
@ -429,18 +443,18 @@ $fileUploadContainer.on('change', '.file-upload-input', function($evt) {
$fileUploadWidget . css ( 'display' , 'block' )
}
} )
} )
$fileUploadContainer . on ( 'click' , '.file-upload-remove-btn' , function ( $evt ) {
$fileUploadContainer . on ( 'click' , '.file-upload-remove-btn' , function ( $evt ) {
var $btn = $ ( this )
$btn . closest ( '.file-upload-widget' ) . remove ( )
} )
} )
$fileUploadContainer . on ( 'click' , '.existing-file-remove-btn' , function ( $evt ) {
$fileUploadContainer . on ( 'click' , '.existing-file-remove-btn' , function ( $evt ) {
var $btn = $ ( this )
$btn . closest ( '.existing-file-widget' ) . remove ( )
} )
} )
} ( ) )