@ -12,17 +12,17 @@ function sendForm () {
} )
} )
}
}
// Выбор тем
// Выбор тем
( function ( ) {
( function ( ) {
var $themes _modal = $ ( '.popup-window.themes' ) ,
var $themes _modal = $ ( '.popup-window.themes' ) ,
$autocomplete = $ ( '#autocomplete_themes' , $themes _modal ) ,
$autocomplete _results = $ ( '#autocomplete_themes_results' , $themes _modal ) ,
$themes _select = $ ( '#id_th' ) ,
$themes _select = $ ( '#id_th' ) ,
$tags _select = $ ( '#id_tg' ) ,
$tags _select = $ ( '#id_tg' ) ,
$selected _themes = $ ( '#selected_themes' ) ,
$selected _themes = $ ( '.selected_themes' ) ,
$selected _tags = $ ( '#selected_tags' ) ,
timer ,
user _choice = {
tags _ids = [ ] ,
th : { } ,
tg : { }
} ,
renderSublistItem = function ( data ) {
renderSublistItem = function ( data ) {
return '<li>' +
return '<li>' +
@ -43,48 +43,97 @@ function sendForm () {
$ . each ( data , function ( i ) {
$ . each ( data , function ( i ) {
var $sub _item = $ ( renderSublistItem ( data [ i ] ) ) ;
var $sub _item = $ ( renderSublistItem ( data [ i ] ) ) ;
if ( tags _ids . indexOf ( data [ i ] [ 'id' ] ) >= 0 ) {
$sub _item . find ( 'input' ) . prop ( 'checked' , true ) ;
}
$sub _list
$sub _list
. addClass ( 'has_items' )
. addClass ( 'has_items' )
. append ( $sub _item ) ;
. append ( $sub _item ) ;
// $tags_select.find('option').each(function () {
// $themes_modal.find('.sub.has_items input[name="tg"][value="' + $(this).val() + '"]').prop('checked', true);
// });
for ( var id in user _choice [ 'tg' ] ) {
$themes _modal . find ( '.sub.has_items input[name="tg"][value="' + id + '"]' ) . prop ( 'checked' , true ) ;
}
} ) ;
} ) ;
$loader . hide ( ) ;
$loader . hide ( ) ;
}
}
} ) ;
} ) ;
} ,
} ,
renderSelectedThemes = function ( id , name , text ) {
renderSelectedThemes = function ( obj ) {
return '<li>' +
return '<li>' +
'<input type="hidden" name="' + name + '" value="' + id + '">' +
'<input type="hidden" name="' + obj [ ' name' ] + '" value="' + obj [ ' id' ] + '">' +
text +
obj [ ' text' ] +
'<a href="#">×</a>' +
'<a href="#">×</a>' +
'</li>'
'</li>'
} ,
getAutocompleteResults = function ( ) {
var term = $autocomplete . val ( ) ;
if ( $ . trim ( term ) . length >= 3 ) {
$ . get (
$autocomplete . data ( 'url' ) ,
{
form : $autocomplete . data ( 'form' ) ,
term : term
} ,
function ( response ) {
var results = '' ;
response . forEach ( function ( obj ) {
results += '<li data-type="' + obj . name + '" data-id="' + obj . id + '" data-text="' + obj . text + '">' + obj . text + ' <span>(' + obj . cat + ')</span></li>'
} ) ;
$autocomplete _results
. html ( results )
. show ( ) ;
}
)
}
} ,
deleteSelectedItem = function ( obj ) {
$selected _themes
. find ( 'input[name="' + obj [ 'name' ] + '"][value="' + obj [ 'id' ] + '"]' )
. parents ( 'li' )
. remove ( ) ;
$themes _modal
. find ( '.selected' )
. find ( 'input[name="' + obj [ 'name' ] + '"][value="' + obj [ 'id' ] + '"]' )
. parents ( 'li' )
. remove ( ) ;
$ ( '#id_' + obj [ 'name' ] ) . find ( 'option[value="' + obj [ 'id' ] + '"]' ) . remove ( ) ;
} ;
} ;
// Записываем данные в user_chice при инициализации
// Генерируем выбранные темы при загрузке страницы
$themes _select . find ( 'option' ) . each ( function ( ) {
$themes _select . find ( 'option' ) . each ( function ( ) {
$themes _modal . find ( 'input[name="th"][value="' + $ ( this ) . val ( ) + '"]' ) . prop ( 'checked' , true ) ;
$themes _modal . find ( 'input[name="th"][value="' + $ ( this ) . val ( ) + '"]' ) . prop ( 'checked' , true ) ;
user _choice [ 'th' ] [ $ ( this ) . val ( ) ] = $ ( this ) . text ( ) ;
var item = {
id : $ ( this ) . val ( ) ,
name : 'th' ,
text : $ ( this ) . text ( )
} ,
theme _item = renderSelectedThemes ( item ) ;
$selected _themes . append ( theme _item ) ;
var $theme = $ ( renderSelectedThemes ( $ ( this ) . val ( ) , 'th' , $ ( this ) . text ( ) ) ) ;
$themes _modal . find ( '.selected_values' ) . show ( ) ;
$selected _themes . append ( $theme ) ;
} ) ;
} ) ;
// Записываем данные в user_chice при инициализации
// Генерируем выбранные теги при загрузке страницы
$tags _select . find ( 'option' ) . each ( function ( ) {
$tags _select . find ( 'option' ) . each ( function ( ) {
user _choice [ 'tg' ] [ $ ( this ) . val ( ) ] = $ ( this ) . text ( ) ;
tags _ids . push ( $ ( this ) . val ( ) * 1 ) ;
var $tag = $ ( renderSelectedThemes ( $ ( this ) . val ( ) , 'tg' , $ ( this ) . text ( ) ) ) ;
$selected _tags . append ( $tag ) ;
var item = {
id : $ ( this ) . val ( ) ,
name : 'tg' ,
text : $ ( this ) . text ( )
} ,
tag _item = renderSelectedThemes ( item ) ;
$selected _themes . append ( tag _item ) ;
$themes _modal . find ( '.selected_values' ) . show ( ) ;
} ) ;
} ) ;
@ -107,48 +156,72 @@ function sendForm () {
$themes _modal . on ( 'change' , 'input[type="checkbox"]' , function ( e ) {
$themes _modal . on ( 'change' , 'input[type="checkbox"]' , function ( e ) {
e . preventDefault ( ) ;
e . preventDefault ( ) ;
var $checkbox = $ ( this ) ;
var $checkbox = $ ( this ) ,
item = {
id : $checkbox . val ( ) ,
name : $checkbox . attr ( 'name' ) ,
text : $checkbox . parent ( ) . find ( '.label' ) . text ( )
} ;
// записываем(удаляем) в объект user_choice отмеченные темы(теги)
if ( $checkbox . is ( ':checked' ) ) {
if ( $checkbox . is ( ':checked' ) ) {
user _choice [ $checkbox . attr ( 'name' ) ] [ $checkbox . val ( ) ] = $checkbox . parent ( ) . find ( '.label' ) . text ( ) ;
var selected _item = renderSelectedThemes ( item ) ;
$selected _themes . append ( selected _item ) ;
$themes _modal . find ( '.selected_values' ) . show ( ) ;
} else {
} else {
delete user _choice [ $checkbox . attr ( 'name' ) ] [ $checkbox . val ( ) ] ;
deleteSelectedItem ( item ) ;
}
if ( $themes _modal . find ( '.selected_values li' ) . length == 0 ) {
$themes _modal . find ( '.selected_values' ) . hide ( ) ;
}
}
sendForm ( ) ;
} ) ;
} ) ;
// Подтверждение выбранных тем
// Input автокомплита
$themes _modal . on ( 'click' , '.modal-approve' , function ( e ) {
$autocomplete . on ( 'keyup' , function ( ) {
e . preventDefault ( ) ;
$autocomplete _results . html ( '' ) ;
clearTimeout ( timer ) ;
timer = setTimeout ( getAutocompleteResults , 500 ) ;
} ) ;
$selected _themes . html ( '' ) ;
$selected _tags . html ( '' ) ;
for ( var theme _id in user _choice [ 'th' ] ) {
// Выбор из автокомплита
var $theme = $ ( renderSelectedThemes ( theme _id , 'th' , user _choice [ 'th' ] [ theme _id ] ) ) ;
$autocomplete _results . on ( 'click' , 'li' , function ( ) {
$selected _themes . append ( $theme ) ;
var $this = $ ( this ) ,
}
item = {
id : $this . data ( 'id' ) ,
name : $this . data ( 'type' ) ,
text : $this . data ( 'text' )
} ;
for ( var tag _id in user _choice [ 'tg' ] ) {
// Проверяем или такой пункт уже выбран
var $tag = $ ( renderSelectedThemes ( tag _id , 'tg' , user _choice [ 'tg' ] [ tag _id ] ) ) ;
if ( $selected _themes . find ( '[value=' + item [ 'id' ] + ']' ) . length == 0 ) {
$selected _tags . append ( $tag ) ;
var selected _item = renderSelectedThemes ( item ) ;
}
$selected _themes . append ( selected _item ) ;
$ . fancybox . close ( ) ;
$themes _modal . find ( '.selected_values' ) . show ( ) ;
sendForm ( ) ;
$ ( '.modal_checkboxes' ) . find ( 'input[name="' + item [ 'name' ] + '"][value="' + item [ 'id' ] + '"]' ) . prop ( 'checked' , true ) ;
} ) ;
sendForm ( ) ;
var removeCheckbox = function ( type , id ) {
if ( item [ 'name' ] == 'tg' ) {
delete user _choice [ type ] [ id ] ;
if ( tags _ids . indexOf ( item [ 'id' ] * 1 ) >= 0 ) {
$ ( '.modal_checkboxes' ) . find ( 'input[name="' + type + '"][value="' + id + '"]' ) . prop ( 'checked' , false ) ;
tags _ids . splice ( tags _ids . indexOf ( item [ 'id' ] * 1 ) , 1 )
console . log ( '#id_' + type ) ;
} else {
console . log ( 'option[value="' + id + '"]' ) ;
tags _ids . push ( item [ 'id' ] * 1 ) ;
$ ( '#id_' + type ) . find ( 'option[value="' + id + '"]' ) . remove ( ) ;
}
} ;
}
}
$autocomplete _results
. html ( '' )
. hide ( ) ;
$autocomplete . val ( '' ) ;
} ) ;
// Удаление выбранной темы
// Удаление выбранной темы
$selected _themes . on ( 'click' , 'a' , function ( event ) {
$selected _themes . on ( 'click' , 'a' , function ( event ) {
@ -156,25 +229,39 @@ function sendForm () {
var $input = $ ( this ) . siblings ( 'input' ) ;
var $input = $ ( this ) . siblings ( 'input' ) ;
removeCheckbox ( $input . attr ( 'name' ) , $input . val ( ) ) ;
var item = {
id : $input . val ( ) ,
$ ( this ) . parent ( 'li' ) . remove ( ) ;
name : $input . attr ( 'name' )
sendForm ( ) ;
} ;
} ) ;
if ( item [ 'name' ] == 'tg' ) {
if ( tags _ids . indexOf ( item [ 'id' ] * 1 ) >= 0 ) {
tags _ids . splice ( tags _ids . indexOf ( item [ 'id' ] * 1 ) , 1 )
} else {
tags _ids . push ( item [ 'id' ] * 1 ) ;
}
}
// Удаление выбранного тега
deleteSelectedItem ( item ) ;
$selected _tags . find ( 'a' ) . on ( 'click' , function ( event ) {
$ ( '.modal_checkboxes' ) . find ( 'input[name="' + item [ 'name' ] + '"][value="' + item [ 'id' ] + '"]' ) . prop ( 'checked' , false ) ;
event . preventDefault ( ) ;
var $input = $ ( this ) . siblings ( 'input' ) ;
$ ( this ) . parent ( 'li' ) . remove ( ) ;
removeCheckbox ( $input . attr ( 'name' ) , $input . val ( ) ) ;
if ( $themes _modal . find ( '.selected_values li' ) . length == 0 ) {
$themes _modal . find ( '.selected_values' ) . hide ( ) ;
}
$ ( this ) . parent ( 'li' ) . remove ( ) ;
sendForm ( ) ;
sendForm ( ) ;
} ) ;
} ) ;
$ ( 'body' ) . on ( 'click' , function ( e ) {
if ( $autocomplete _results . is ( ':visible' ) && $ ( e . target ) . parents ( '.autocomplete_block' ) . length == 0 ) {
$autocomplete _results
. html ( '' )
. hide ( ) ;
}
} ) ;
} ) ( ) ;
} ) ( ) ;
@ -185,12 +272,23 @@ function sendForm () {
$cities _select = $ ( '#id_r_cities' ) ,
$cities _select = $ ( '#id_r_cities' ) ,
selected _cities = { } ,
selected _cities = { } ,
renderSelectedCities = function ( id , text ) {
renderSelectedCountry = function ( id , text ) {
return '<li>' +
return '<li>' +
'<input type="hidden" name="r_cities" value="' + id + '">' +
'<input type="hidden" name="r_cities" value="' + id + '">' +
text +
text +
'<a href="#">×</a>' +
'<a href="#">×</a>' +
'</li>'
'</li>'
} ,
renderSelectedCities = function ( ) {
$selected _cities . html ( '' ) ;
for ( var city _id in selected _cities ) {
var $city = $ ( renderSelectedCountry ( city _id , selected _cities [ city _id ] ) ) ;
$selected _cities . append ( $city ) ;
}
sendForm ( ) ;
} ;
} ;
// Записываем данные в user_chice при инициализации
// Записываем данные в user_chice при инициализации
@ -199,7 +297,7 @@ function sendForm () {
selected _cities [ $ ( this ) . val ( ) ] = $ ( this ) . text ( ) ;
selected _cities [ $ ( this ) . val ( ) ] = $ ( this ) . text ( ) ;
var $city = $ ( renderSelectedCities ( $ ( this ) . val ( ) , $ ( this ) . text ( ) ) ) ;
var $city = $ ( renderSelectedCountry ( $ ( this ) . val ( ) , $ ( this ) . text ( ) ) ) ;
$selected _cities . append ( $city ) ;
$selected _cities . append ( $city ) ;
} ) ;
} ) ;
@ -212,22 +310,10 @@ function sendForm () {
selected _cities [ $checkbox . val ( ) ] = $checkbox . parent ( ) . find ( '.label' ) . text ( ) ;
selected _cities [ $checkbox . val ( ) ] = $checkbox . parent ( ) . find ( '.label' ) . text ( ) ;
} else {
} else {
delete selected _cities [ $checkbox . val ( ) ] ;
delete selected _cities [ $checkbox . val ( ) ] ;
$ ( '#id_' + $checkbox . attr ( 'name' ) ) . find ( 'option[value="' + $checkbox . val ( ) + '"]' ) . remove ( ) ;
}
}
} ) ;
// Подтверждение выбранных городов
renderSelectedCities ( ) ;
$cities _modal . on ( 'click' , '.modal-approve' , function ( e ) {
e . preventDefault ( ) ;
$selected _cities . html ( '' ) ;
for ( var city _id in selected _cities ) {
var $city = $ ( renderSelectedCities ( city _id , selected _cities [ city _id ] ) ) ;
$selected _cities . append ( $city ) ;
}
$ . fancybox . close ( ) ;
sendForm ( ) ;
} ) ;
} ) ;
@ -246,6 +332,7 @@ function sendForm () {
} ) ;
} ) ;
} ) ( ) ;
} ) ( ) ;
// Выбор стран
// Выбор стран
( function ( ) {
( function ( ) {
var $countries _modal = $ ( '.popup-window.countries' ) ,
var $countries _modal = $ ( '.popup-window.countries' ) ,
@ -276,13 +363,13 @@ function sendForm () {
$ . each ( data , function ( i ) {
$ . each ( data , function ( i ) {
var $sub _item = $ ( renderSublistItem ( data [ i ] ) ) ;
var $sub _item = $ ( renderSublistItem ( data [ i ] ) ) ;
if ( data [ i ] [ 'id' ] in user _countries [ 'co' ] ) {
$sub _item . find ( 'input' ) . prop ( 'checked' , true ) ;
}
$sub _list
$sub _list
. addClass ( 'has_items' )
. addClass ( 'has_items' )
. append ( $sub _item ) ;
. append ( $sub _item ) ;
for ( var id in user _countries [ 'co' ] ) {
$countries _modal . find ( '.sub.has_items input[name="co"][value="' + id + '"]' ) . prop ( 'checked' , true ) ;
}
} ) ;
} ) ;
$loader . hide ( ) ;
$loader . hide ( ) ;
@ -290,7 +377,7 @@ function sendForm () {
} ) ;
} ) ;
} ,
} ,
renderSelectedThemes = function ( id , name , text ) {
renderSelectedCountry = function ( id , name , text ) {
return '<li>' +
return '<li>' +
'<input type="hidden" name="' + name + '" value="' + id + '">' +
'<input type="hidden" name="' + name + '" value="' + id + '">' +
text +
text +
@ -298,6 +385,24 @@ function sendForm () {
'</li>'
'</li>'
} ,
} ,
renderSelectedCountries = function ( ) {
$selected _co . html ( '' ) ;
$selected _areas . html ( '' ) ;
for ( var area _id in user _countries [ 'area' ] ) {
var $area = $ ( renderSelectedCountry ( area _id , 'area' , user _countries [ 'area' ] [ area _id ] ) ) ;
$selected _areas . append ( $area ) ;
}
for ( var co _id in user _countries [ 'co' ] ) {
var $co = $ ( renderSelectedCountry ( co _id , 'co' , user _countries [ 'co' ] [ co _id ] ) ) ;
$selected _co . append ( $co ) ;
}
sendForm ( ) ;
} ,
removeCheckbox = function ( type , id ) {
removeCheckbox = function ( type , id ) {
delete user _countries [ type ] [ id ] ;
delete user _countries [ type ] [ id ] ;
$ ( '.modal_checkboxes' ) . find ( 'input[name="' + type + '"][value="' + id + '"]' ) . prop ( 'checked' , false ) ;
$ ( '.modal_checkboxes' ) . find ( 'input[name="' + type + '"][value="' + id + '"]' ) . prop ( 'checked' , false ) ;
@ -310,14 +415,14 @@ function sendForm () {
user _countries [ 'area' ] [ $ ( this ) . val ( ) ] = $ ( this ) . text ( ) ;
user _countries [ 'area' ] [ $ ( this ) . val ( ) ] = $ ( this ) . text ( ) ;
var $area = $ ( renderSelectedThemes ( $ ( this ) . val ( ) , 'area' , $ ( this ) . text ( ) ) ) ;
var $area = $ ( renderSelectedCountry ( $ ( this ) . val ( ) , 'area' , $ ( this ) . text ( ) ) ) ;
$selected _areas . append ( $area ) ;
$selected _areas . append ( $area ) ;
} ) ;
} ) ;
$co _select . find ( 'option[selected]' ) . each ( function ( ) {
$co _select . find ( 'option[selected]' ) . each ( function ( ) {
user _countries [ 'co' ] [ $ ( this ) . val ( ) ] = $ ( this ) . text ( ) ;
user _countries [ 'co' ] [ $ ( this ) . val ( ) ] = $ ( this ) . text ( ) ;
var $co = $ ( renderSelectedThemes ( $ ( this ) . val ( ) , 'co' , $ ( this ) . text ( ) ) ) ;
var $co = $ ( renderSelectedCountry ( $ ( this ) . val ( ) , 'co' , $ ( this ) . text ( ) ) ) ;
$selected _co . append ( $co ) ;
$selected _co . append ( $co ) ;
} ) ;
} ) ;
@ -334,11 +439,6 @@ function sendForm () {
$sub _list . slideToggle ( 100 ) ;
$sub _list . slideToggle ( 100 ) ;
} else {
} else {
renderSublist ( $link . attr ( 'href' ) , $sub _list ) ;
renderSublist ( $link . attr ( 'href' ) , $sub _list ) ;
for ( var city _id in user _countries [ 'co' ] ) {
console . log ( city _id ) ;
}
}
}
} ) ;
} ) ;
@ -352,32 +452,13 @@ function sendForm () {
user _countries [ $checkbox . attr ( 'name' ) ] [ $checkbox . val ( ) ] = $checkbox . parent ( ) . find ( '.label' ) . text ( ) ;
user _countries [ $checkbox . attr ( 'name' ) ] [ $checkbox . val ( ) ] = $checkbox . parent ( ) . find ( '.label' ) . text ( ) ;
} else {
} else {
delete user _countries [ $checkbox . attr ( 'name' ) ] [ $checkbox . val ( ) ] ;
delete user _countries [ $checkbox . attr ( 'name' ) ] [ $checkbox . val ( ) ] ;
$ ( '#id_' + $checkbox . attr ( 'name' ) ) . find ( 'option[value="' + $checkbox . val ( ) + '"]' ) . removeAttr ( 'selected' ) ;
}
}
} ) ;
// Подтверждение выбранных тем
$countries _modal . on ( 'click' , '.modal-approve' , function ( e ) {
e . preventDefault ( ) ;
$selected _co . html ( '' ) ;
renderSelectedCountries ( ) ;
$selected _areas . html ( '' ) ;
for ( var area _id in user _countries [ 'area' ] ) {
var $area = $ ( renderSelectedThemes ( area _id , 'area' , user _countries [ 'area' ] [ area _id ] ) ) ;
$selected _areas . append ( $area ) ;
}
for ( var co _id in user _countries [ 'co' ] ) {
var $co = $ ( renderSelectedThemes ( co _id , 'co' , user _countries [ 'co' ] [ co _id ] ) ) ;
$selected _co . append ( $co ) ;
}
$ . fancybox . close ( ) ;
sendForm ( ) ;
} ) ;
} ) ;
// Удаление выбранного континента
// Удаление выбранного континента
$selected _areas . on ( 'click' , 'a' , function ( event ) {
$selected _areas . on ( 'click' , 'a' , function ( event ) {
event . preventDefault ( ) ;
event . preventDefault ( ) ;
@ -404,6 +485,8 @@ function sendForm () {
} ) ;
} ) ;
} ) ( ) ;
} ) ( ) ;
$ ( function ( ) {
$ ( function ( ) {
$ ( '.modal_trigger' ) . fancybox ( {
$ ( '.modal_trigger' ) . fancybox ( {
padding : 0
padding : 0