@ -312,12 +312,9 @@ if (EXPO.events.feed) {
}
return false ;
} ) ;
$ ( '#' + self . opt . deleteId ) . on ( 'click' , function ( ) {
$ ( '.' + self . opt . deleteTagClass , $modal ) . trigger ( 'click' ) ;
} ) ;
$ ( '.clear' , $modal ) . on ( 'click' , function ( ) {
self . resetList ( ) ;
return false ;
$ ( '.del-on-page' ) . on ( 'click' , function ( ) {
var dataCheckboxId = $ ( this ) . attr ( 'data-checkbox-id' ) ;
$ ( '.' + self . opt . deleteTagClass + '[data-checkbox-id="' + dataCheckboxId + '"]' , $modal ) . trigger ( 'click' ) ;
} ) ;
self . _autocompleteInit ( ) ;
$ ( '.' + applyBtnClass , $modal ) . on ( 'click' , function ( ) {
@ -326,8 +323,10 @@ if (EXPO.events.feed) {
} ) ;
// кнопка "очистить параметры"
$modalTrigger . siblings ( '.' + self . opt . clearAllButtonClass ) . on ( 'click' , function ( ) {
$ ( '.' + self . opt . clearAllButtonClass , $modal ) . on ( 'click' , function ( e ) {
e . preventDefault ( ) ;
self . resetList ( ) ;
return false ;
} ) ;
} ) ;
} ;
@ -665,14 +664,17 @@ if (EXPO.events.feed) {
var self = this ;
for ( var key in self . itemsSelected ) {
if ( self . itemsSelected . hasOwnProperty ( key ) ) {
$ ( '#' + key , self . $selfContainer ) . prop ( 'checked' , false ) . trigger ( 'chang e') ;
$ ( '#' + key , self . $selfContainer ) . prop ( 'checked' , false ) . closest ( '.custom-radio-check' ) . removeClass ( 'activ e') ;
dna . destroy ( self . itemsSelected [ key ] ) ;
dna . destroy ( self . tagsBoxItems [ key ] ) ;
}
}
$ ( '.sublist' , self . $modalInst ) . addClass ( 'hidden' ) ;
$ ( '.level' , self . $modalInst ) . removeClass ( 'active' ) ;
self . $selectedItemsWrap . removeClass ( 'visible' ) ;
$ ( '.level.active' , this . $modal ) . removeClass ( 'active' ) ;
this . _refreshLabel ( ) ;
this . $selectedItemsWrap . removeClass ( 'visible' ) ;
} ,
/ * *
* render label text , if there is no selected element then text will be default
@ -689,6 +691,7 @@ if (EXPO.events.feed) {
} ,
// кнопка применить
applyHandler : function ( it ) {
EXPO . events . feed . modalWindow . close ( ) ;
}
@ -827,39 +830,42 @@ if (EXPO.events.feed) {
DOMParentRow = com . closest ( this , itemClass ) ,
DOMParentItem = com . hasClass ( DOMParentRow , highestItemClass ) == false ? com . closest ( DOMParentRow . parentNode , itemClass ) : DOMParentRow ,
DOMParentCheckbox = DOMParentItem . querySelector ( '.' + checkboxClass ) ,
DOMSublist = DOMParentItem . querySelector ( '.' + sublistClass ) ,
DOMSublistInner = DOMParentRow . querySelector ( '.' + sublistClass ) ,
DOMParentItem = com . hasClass ( DOMParentRow , highestItemClass ) == false ? com . closest ( DOMParentRow . parentNode , itemClass ) : DOMParentRow ,
DOMParentCheckbox = DOMParentItem . querySelector ( '.' + checkboxClass ) ,
DOMSublist = DOMParentItem . querySelector ( '.' + sublistClass ) ,
DOMSublistInner = DOMParentRow . querySelector ( '.' + sublistClass ) ,
DOMHighestItem = com . closest ( this , highestItemClass ) ,
DOMHighestCheckbox = DOMHighestItem . querySelector ( '.' + checkboxClass ) ,
DOMHighestCheckbox = DOMHighestItem . querySelector ( '.' + checkboxClass ) ,
DOMHighestSublist = DOMHighestItem . querySelector ( '.' + sublistClass ) ,
selectSublist = function ( it ) {
var DOMParentItem = com . closest ( it , itemClass ) || this ,
DOMSublist = DOMParentItem . querySelector ( '.' + sublistClass ) ;
$ ( '.' + checkboxClass , DOMSublist ) . each ( function ( ) {
DOMSublist = DOMParentItem . querySelector ( '.' + sublistClass ) ;
$ ( '.' + checkboxClass , DOMSublist ) . each ( function ( ) {
selectItem ( this ) ;
} ) ;
} ,
unSelectSublist = function ( it ) {
var DOMParentItem = com . closest ( it , itemClass ) || this ,
DOMSublist = DOMParentItem . querySelector ( '.' + sublistClass ) ;
$ ( '.' + checkboxClass , DOMSublist ) . each ( function ( ) {
DOMSublist = DOMParentItem . querySelector ( '.' + sublistClass ) ;
$ ( '.' + checkboxClass , DOMSublist ) . each ( function ( ) {
unSelectItem ( this ) ;
} ) ;
} ,
selectParent = function ( it ) {
var DOMParentRow = com . closest ( it , itemClass ) ,
DOMParentItem ;
if ( com . hasClass ( DOMParentRow , 'level1' ) ) {
if ( com . hasClass ( DOMParentRow , 'level1' ) ) {
DOMParentItem = DOMParentRow ;
} else {
} else {
DOMParentItem = com . closest ( DOMParentRow . parentNode , itemClass ) ;
}
com . addClass ( DOMParentItem . querySelector ( '.' + fakeCheckboxClass ) , activeClass ) ;
DOMParentItem . querySelector ( '.' + checkboxClass ) . checked = true ;
com . addClass ( DOMParentItem . querySelector ( '.' + fakeCheckboxClass ) , activeClass ) ;
DOMParentItem . querySelector ( '.' + checkboxClass ) . checked = true ;
//it.selected = true;
@ -868,8 +874,8 @@ if (EXPO.events.feed) {
var DOMParentRow = com . closest ( it , itemClass ) ,
DOMParentItem = com . closest ( DOMParentRow . parentNode , itemClass ) || DOMParentRow ;
com . removeClass ( DOMParentItem . querySelector ( '.' + fakeCheckboxClass ) , activeClass ) ;
DOMParentItem . querySelector ( '.' + checkboxClass ) . checked = false ;
com . removeClass ( DOMParentItem . querySelector ( '.' + fakeCheckboxClass ) , activeClass ) ;
DOMParentItem . querySelector ( '.' + checkboxClass ) . checked = false ;
//it.checked = false;
} ,
@ -880,97 +886,110 @@ if (EXPO.events.feed) {
} ,
unSelectItem = function ( it ) {
var itFakeCheckbox = com . closest ( it , fakeCheckboxClass ) ;
var itFakeCheckbox = com . closest ( it , fakeCheckboxClass ) ,
DOMitem = com . closest ( it , itemClass ) ;
com . removeClass ( itFakeCheckbox , activeClass ) ;
it . checked = false ;
// if there is children items
if ( DOMitem . querySelector ( '.' + sublistClass ) && ! com . hasClass ( DOMitem , highestItemClass ) ) {
unSelectSublist ( it ) ;
}
} ,
allChildrenSelected = function ( ) {
//var DOMselected = DOMSublist.querySelectorAll('.'+checkboxClass+':checked'),
var DOMSublistParent = com . closest ( DOMSublist , sublistClass ) ,
$selected = $ ( DOMSublist ) . children ( 'li' ) . children ( '.' + fakeCheckboxClass ) . find ( '.' + checkboxClass + ':checked' ) ,
var DOMSublistParent = com . closest ( DOMSublist , sublistClass ) ,
$selected = $ ( DOMSublist ) . children ( 'li' ) . children ( '.' + fakeCheckboxClass ) . find ( '.' + checkboxClass + ':checked' ) ,
selectedCount = $selected . length ,
//allCount = DOMSublist.querySelectorAll('.'+checkboxClass).length;
allCount = $ ( DOMSublist ) . children ( 'li' ) . children ( '.' + fakeCheckboxClass ) . find ( '.' + checkboxClass ) . length ;
allCount = $ ( DOMSublist ) . children ( 'li' ) . children ( '.' + fakeCheckboxClass ) . find ( '.' + checkboxClass ) . length ;
if ( allCount == selectedCount && selectedCount != 0 ) {
if ( allCount == selectedCount && selectedCount != 0 ) {
return true ;
} else {
} else {
return false ;
}
} ,
parentSelected = function ( ) {
var parentCheckbox = DOMParentItem . querySelector ( '.' + checkboxClass ) ;
if ( parentCheckbox . checked ) {
var parentCheckbox = DOMParentItem . querySelector ( '.' + checkboxClass ) ;
if ( parentCheckbox . checked ) {
return true ;
} else {
} else {
return false ;
}
} ,
// Функционал добавления тегов: если есть в панели выбранный элемент либо его дочерние то удалить эти эдементы и разместить выбранный ; иначе разместить выбранные.
// Функционал добавления тегов: если есть в панели выбранный элемент либо его дочерние то удалить эти эдементы;
refreshTags = function ( it ) {
var DOMSublist = com . closest ( it , sublistClass ) ;
var DOMItem = com . closest ( it , itemClass ) ;
var DOMSublistInner = DOMItem . querySelector ( '.' + sublistClass ) ;
var DOMAllTags = DOMTagsWrapper . querySelectorAll ( '.' + tagClass ) ;
var DOMSublist = com . closest ( it , sublistClass ) ;
var DOMItem = com . closest ( it , itemClass ) ;
var DOMSublistInner = DOMItem . querySelector ( '.' + sublistClass ) ;
var DOMAllTags = DOMTagsWrapper . querySelectorAll ( '.' + tagClass ) ;
var ARRsublist ;
var ARRsublistChildren = DOMSublist . querySelector ( '.' + sublistClass ) ? $ ( '.' + checkboxClass + ':checked' , DOMSublist . querySelector ( '.' + sublistClass ) ) : null ;
var ARRsublistChildrenLength = ARRsublistChildren ? ARRsublistChildren . length : null ;
var ARRsublistChildren = DOMSublist . querySelector ( '.' + sublistClass ) ? $ ( '.' + checkboxClass + ':checked' , DOMSublist . querySelector ( '.' + sublistClass ) ) : null ;
var ARRsublistChildrenLength = ARRsublistChildren ? ARRsublistChildren . length : null ;
var ARRSublistIds = [ ] ;
var ARRAllTagsIds = [ ] ;
var allTagsLength = 0 ;
var sublistIdsLength = 0 ;
var itId = it . getAttribute ( 'id' ) ;
var i = 0 , j = 0 , t = 0 , tmp , k = 0 ;
var i = 0 , j = 0 , t = 0 , tmp , k = 0 ;
var tagId ;
var tagText = DOMParentRow . querySelector ( '.' + triggerClass ) . innerHTML ;
var tagText = DOMParentRow . querySelector ( '.' + triggerClass ) . innerHTML ;
// если есть дочерние элементы
if ( DOMSublistInner ) {
ARRsublist = $ ( DOMSublistInner ) . children ( 'li' ) . children ( '.' + fakeCheckboxClass ) . find ( '.' + checkboxClass + ':checked' )
if ( DOMSublistInner ) {
ARRsublist = $ ( DOMSublistInner ) . children ( 'li' ) . children ( '.' + fakeCheckboxClass ) . find ( '.' + checkboxClass + ':checked' )
//получаем массив id жлементовЮ для которых есть тег
for ( k ; k < ARRsublist . length ; k ++ ) {
for ( k ; k < ARRsublist . length ; k ++ ) {
tmp = ARRsublist [ k ] . getAttribute ( 'id' ) ;
ARRSublistIds . push ( tmp ) ;
}
//очистк
for ( t ; t < DOMAllTags . length ; t ++ ) {
tmp = DOMAllTags [ t ] . querySelector ( '.' + tagButtonClass ) . getAttribute ( tagIdAttribute ) ;
if ( tmp != '~~id~~' ) {
for ( t ; t < DOMAllTags . length ; t ++ ) {
tmp = DOMAllTags [ t ] . querySelector ( '.' + tagButtonClass ) . getAttribute ( tagIdAttribute ) ;
if ( tmp != '~~id~~' ) {
ARRAllTagsIds . push ( tmp ) ;
}
}
allTagsLength = ARRAllTagsIds . length ;
sublistIdsLength = ARRSublistIds . length ;
// добавить текущий тег
//если найден дочерний тег то он будет удален, либо текущий тег
for ( i = 0 ; i < allTagsLength ; i ++ ) {
for ( i = 0 ; i < allTagsLength ; i ++ ) {
tagId = ARRAllTagsIds [ i ] ;
for ( j = 0 ; j < sublistIdsLength ; j ++ ) {
if ( tagId == ARRSublistIds [ j ] ) {
for ( j = 0 ; j < sublistIdsLength ; j ++ ) {
if ( tagId == ARRSublistIds [ j ] ) {
deleteTag ( ARRsublist [ j ] ) ;
}
}
}
// удаление дубликатов текущего элемента
for ( i = 0 ; i < allTagsLength ; i ++ ) {
for ( i = 0 ; i < allTagsLength ; i ++ ) {
tagId = ARRAllTagsIds [ i ] ;
if ( tagId == itId ) {
if ( tagId == itId ) {
deleteTag ( it ) ;
}
}
} else {
// удаление дочерних тегов 2го уровня
if ( DOMSublistInner . querySelectorAll ( '.final-tire' ) ) {
$ ( '.' + fakeCheckboxClass + '.' + activeClass , DOMSublistInner . querySelectorAll ( '.final-tire' ) ) . each ( function ( ) {
deleteTag ( $ ( '.' + checkboxClass , this ) [ 0 ] ) ;
} ) ;
}
} else {
// удаление дубликатов текущего элемента
for ( i = 0 ; i < allTagsLength ; i ++ ) {
for ( i = 0 ; i < allTagsLength ; i ++ ) {
tagId = ARRAllTagsIds [ i ] ;
if ( tagId == itId ) {
if ( tagId == itId ) {
deleteTag ( itId ) ;
}
}
}
} ,
deleteTag = function ( it ) {
var id = it . getAttribute ( 'id' ) ;
@ -978,84 +997,111 @@ if (EXPO.events.feed) {
tagsPanelToggle ( ) ;
} ,
createTag = function ( it ) {
var item = com . closest ( it , itemClass ) ,
tagTrigger = item . querySelector ( '.' + triggerClass ) ,
var item = com . closest ( it , itemClass ) ,
tagTrigger = item . querySelector ( '.' + triggerClass ) ,
tagText = tagTrigger . innerHTML ,
id = it . getAttribute ( 'id' ) ,
tagObj = { 'id' : id , 'text' : tagText } ;
tagObj = { 'id' : id , 'text' : tagText } ;
self . _addTag ( id , tagObj ) ;
tagsPanelToggle ( ) ;
} ,
tagsPanelToggle = function ( ) {
if ( $selectedItemsWrap . children ( '.' + tagClass ) . length && $selectedItemsWrap . children ( '.' + tagClass ) [ 0 ] . getAttribute ( tagIdAttribute ) != "~~id~~" ) {
if ( $selectedItemsWrap . find ( '.' + tagButton Class ) . length && $selectedItemsWrap . find ( '.' + tagButton Class ) [ 0 ] . getAttribute ( tagIdAttribute ) != "~~id~~" ) {
$selectedItemsWrap . addClass ( 'visible' ) ;
} else {
} else {
$selectedItemsWrap . removeClass ( 'visible' ) ;
}
} ,
createTagList = function ( sublist ) {
var $selected = $ ( DOMS ublist) . children ( 'li' ) . children ( '.' + fakeCheckboxClass ) . find ( '.' + checkboxClass + ':checked' ) ;
var $selected = $ ( s ublist) . children ( 'li' ) . children ( '.' + fakeCheckboxClass ) . find ( '.' + checkboxClass + ':checked' ) ;
$selected . each ( function ( ) {
createTag ( this ) ;
} ) ;
} ,
deleteTagList = function ( ) {
var $selected = $ ( DOMSublist ) . children ( 'li' ) . children ( '.' + fakeCheckboxClass ) . find ( '.' + checkboxClass + ':checked' ) ;
var $selected = $ ( DOMSublist ) . children ( 'li' ) . children ( '.' + fakeCheckboxClass ) . find ( '.' + checkboxClass + ':checked' ) ;
$selected . each ( function ( ) {
deleteTag ( this ) ;
} ) ;
} ;
//make fake checkbox active\passive
if ( this . checked ) {
/ * *
* if modala is not in strict mode ( enable popping from children categories to parent )
* /
if ( ! self . strictMode ) {
//если выбраны все дочерние
if ( allChildrenSelected ( ) ) {
selectParent ( this ) ;
selectItem ( this ) ;
refreshTags ( DOMParentCheckbox ) ;
createTag ( DOMParentCheckbox ) ;
deleteTagList ( DOMSublist ) ;
if ( DOMParentCheckbox . getAttribute ( 'id' ) == DOMHighestCheckbox . getAttribute ( 'id' ) && ! DOMHighestCheckbox . checked ) {
selectItem ( DOMHighestCheckbox ) ;
refreshTags ( DOMHighestCheckbox ) ;
createTag ( DOMHighestCheckbox ) ;
if ( this . checked ) {
if ( $ ( DOMSublistInner ) . find ( '.' + checkboxClass ) [ 0 ] ) {
if ( DOMSublistInner && $ ( DOMSublistInner ) . find ( '.' + checkboxClass ) [ 0 ] . value != '~~id~~' ) {
refreshTags ( this ) ;
}
}
} else {
//если выбраны все дочерние
if ( allChildrenSelected ( ) ) {
selectParent ( this ) ;
selectItem ( this ) ;
refreshTags ( DOMParentCheckbox ) ;
createTag ( DOMParentCheckbox ) ;
deleteTagList ( DOMSublist ) ;
if ( DOMParentCheckbox . getAttribute ( 'id' ) == DOMHighestCheckbox . getAttribute ( 'id' ) && ! DOMHighestCheckbox . checked ) {
selectItem ( DOMHighestCheckbox ) ;
refreshTags ( DOMHighestCheckbox ) ;
createTag ( DOMHighestCheckbox ) ;
}
} else {
selectItem ( this ) ;
refreshTags ( this ) ;
createTag ( this ) ;
}
//выбрать все дочерние
if ( DOMSublistInner ) {
selectSublist ( this ) ;
}
} else {
//Если выбран родитель
if ( parentSelected ( ) ) {
unSelectParent ( this ) ;
unSelectItem ( this ) ;
refreshTags ( DOMParentCheckbox ) ;
deleteTag ( DOMParentCheckbox ) ;
createTagList ( DOMSublist ) ;
if ( DOMHighestCheckbox . checked ) {
unSelectItem ( DOMHighestCheckbox ) ;
deleteTag ( DOMHighestCheckbox ) ;
createTagList ( DOMHighestSublist ) ;
}
} else {
unSelectItem ( this ) ;
refreshTags ( this ) ;
deleteTag ( this ) ;
}
//убрать все дочерние
if ( DOMSublistInner ) {
unSelectSublist ( this ) ;
refreshTags ( this ) ;
}
}
} else {
if ( this . checked ) {
selectItem ( this ) ;
refreshTags ( this ) ;
createTag ( this ) ;
}
//выбрать все дочерние
if ( DOMSublistInner ) {
selectSublist ( this ) ;
}
} else {
//Если выбран родитель
if ( parentSelected ( ) ) {
unSelectParent ( this ) ;
unSelectItem ( this ) ;
refreshTags ( DOMParentCheckbox ) ;
deleteTag ( DOMParentCheckbox ) ;
createTagList ( DOMSublist ) ;
if ( DOMHighestCheckbox . checked ) {
unSelectItem ( DOMHighestCheckbox ) ;
refreshTags ( DOMHighestCheckbox ) ;
deleteTag ( DOMHighestCheckbox ) ;
}
} else {
} else {
unSelectItem ( this ) ;
refreshTags ( this ) ;
deleteTag ( this ) ;
}
//убрать все дочерние
if ( DOMSublistInner ) {
unSelectSublist ( this ) ;
}
}
triggerSetText ( ) ;
} ) ;
@ -1075,8 +1121,9 @@ if (EXPO.events.feed) {
}
return false ;
} ) ;
$ ( '#' + self . opt . deleteId ) . on ( 'click' , function ( ) {
$ ( '.' + self . opt . deleteTagClass , $modal ) . trigger ( 'click' ) ;
$ ( '.del-on-page' ) . on ( 'click' , function ( ) {
var dataCheckboxId = $ ( this ) . attr ( 'data-checkbox-id' ) ;
$ ( '.' + self . opt . deleteTagClass + '[data-checkbox-id="' + dataCheckboxId + '"]' , $modal ) . trigger ( 'click' ) ;
} ) ;
/ * *
* clear all button behavior
@ -1106,10 +1153,13 @@ if (EXPO.events.feed) {
self . applyHandler ( this ) ;
return false ;
} ) ;
$modalTrigger . siblings ( '.' + self . opt . clearAllButtonClass ) . on ( 'click' , function ( ) {
$ ( '.' + self . opt . clearAllButtonClass , $modal ) . on ( 'click' , function ( e ) {
e . preventDefault ( ) ;
self . resetList ( ) ;
return false ;
} ) ;
} ) ;
@ -1367,14 +1417,15 @@ if (EXPO.events.feed) {
var self = this ;
for ( var key in self . itemsSelected ) {
if ( self . itemsSelected . hasOwnProperty ( key ) ) {
$ ( '#' + key , self . $selfContainer ) . prop ( 'checked' , false ) . trigger ( 'chang e') ;
$ ( '#' + key , self . $selfContainer ) . prop ( 'checked' , false ) . closest ( '.custom-radio-check' ) . removeClass ( 'activ e') ;
dna . destroy ( self . itemsSelected [ key ] ) ;
dna . destroy ( self . tagsBoxItems [ key ] ) ;
}
}
$ ( '.sublist:not(.parent)' , self . $modal ) . addClass ( 'hidden ') ;
$ ( '.level' , self . $modal ) . removeClass ( 'active' ) ;
self . selectedWrap . removeClass ( 'visible' ) ;
$ ( '.level.active' , this . $modal ) . removeClass ( 'active ') ;
this . _refreshLabel ( ) ;
this . selectedWrap . removeClass ( 'visible' ) ;
} ,
/ * *
* initiliazing and setup autocomplete field for places list
@ -1575,6 +1626,7 @@ if (EXPO.events.feed) {
} ,
applyHandler : function ( it ) {
EXPO . events . feed . modalWindow . close ( ) ;
} ,
/ * *
* render label text , if there is no selected element then text will be default
@ -1641,14 +1693,6 @@ if (EXPO.events.feed) {
this . placesModal = new PlacesModal ( self . opt . place ) ;
this . subjModal = new SubjectModal ( self . opt . subject ) ;
this . placesModal . applyHandler = function ( ) {
self . modalWindow . close ( ) ;
$ ( self . DOMform ) . submit ( ) ;
} ;
this . subjModal . applyHandler = function ( ) {
self . modalWindow . close ( ) ;
$ ( self . DOMform ) . submit ( ) ;
} ;
// заполнение полей предыдущими значениями
$ ( function ( ) {
if ( self . previousSearch . inputs . length ) {