@@ -6,8 +6,8 @@ this.ckan.module('resource-view-filters-override', function (jQuery) {
66 resourceId = self . options . resourceId ,
77 fields = self . options . fields ,
88 dropdownTemplate = self . options . dropdownTemplate ,
9- addFilterTemplate = '<a class="btn btn-primary" href="#">' + self . _ ( 'Add Filter' ) + '</a>' ,
10- filtersDiv = $ ( '<div></div>' ) ;
9+ addFilterTemplate = '<a class="btn btn-primary btn-add-filter " href="#">' + self . _ ( 'Add Filter' ) + '</a>' ,
10+ filtersDiv = $ ( '<div class="resource-view-filters-container" ></div>' ) ;
1111
1212 var filters = ckan . views . filters . get ( ) ;
1313 _appendDropdowns ( filtersDiv , resourceId , dropdownTemplate , fields , filters ) ;
@@ -19,11 +19,12 @@ this.ckan.module('resource-view-filters-override', function (jQuery) {
1919 filters [ evt . val ] = [ ] ;
2020
2121 $ ( this ) . select2 ( 'destroy' ) ;
22+ $ ( this ) . parent ( ) . remove ( ) ;
2223 _appendDropdowns ( filtersDiv , resourceId , dropdownTemplate , fields , filters ) ;
2324 evt . preventDefault ( ) ;
2425 } ) ;
25- self . el . append ( filtersDiv ) ;
2626 self . el . append ( addFilterButton ) ;
27+ self . el . append ( filtersDiv ) ;
2728 }
2829
2930 function _buildAddFilterButton ( self , el , template , fields , filters , onChangeCallback ) {
@@ -44,33 +45,47 @@ this.ckan.module('resource-view-filters-override', function (jQuery) {
4445 // FIXME: Move this class name to some external variable to keep it DRY
4546
4647 // check if we already have filters without fields
47- let current_filters = $ ( '.resource-view-filter' ) ;
48+ let current_fields = $ ( '.resource-view-filter-field ' ) ;
4849 let ok_to_add = true ;
49- // if .resource-view-filter-values exists it's ok
50+
51+ if ( current_fields . length > 0 ) {
52+ ok_to_add = false ;
53+ for ( var i = 0 , l = current_fields . length ; i < l ; i ++ ) {
54+ let elem = $ ( current_fields [ i ] ) ;
55+ elem . hide ( 400 ) . show ( 200 ) ;
56+ }
57+ }
58+
59+ // if .resource-view-filter-values exists, check if it has at least one value
60+ let current_filters = $ ( '.resource-view-filter' ) ;
5061 for ( var i = 0 , l = current_filters . length ; i < l ; i ++ ) {
5162
63+ let hasValue = false ;
5264 let elems = $ ( current_filters [ i ] ) . find ( '.resource-view-filter-values' ) ;
53- if ( elems . length > 0 ) {
54- // OK
55- //console.log('OK')
56- } else {
65+ $ . each ( elems , function ( i , elem ) {
66+ let input = $ ( elem ) . children ( 'input' ) ;
67+ if ( $ ( input ) . attr ( 'value' ) ) {
68+ hasValue = true ;
69+ }
70+ } ) ;
71+
72+ if ( hasValue == false ) {
5773 ok_to_add = false ;
5874 let elem = $ ( current_filters [ i ] ) ;
5975 elem . hide ( 400 ) . show ( 200 ) ;
6076 }
6177
6278 }
63-
79+
6480 if ( ok_to_add ) {
65- var addFilterDiv = $ ( '<div class="resource-view-filter"><input type="hidden"></input></div>' ) ,
81+ var addFilterDiv = $ ( '<div class="resource-view-filter-field "><input type="hidden"></input></div>' ) ,
6682 addFilterInput = addFilterDiv . find ( 'input' ) ;
6783 el . append ( addFilterDiv ) ;
6884
6985 // TODO: Remove element from "data" when some select selects it.
7086 addFilterInput . select2 ( {
7187 data : data ,
7288 placeholder : self . _ ( 'Select a field' ) ,
73- width : '350px' ,
7489 } ) . on ( 'change' , onChangeCallback ) ;
7590 }
7691 evt . preventDefault ( ) ;
@@ -80,12 +95,13 @@ this.ckan.module('resource-view-filters-override', function (jQuery) {
8095 }
8196
8297 function _appendDropdowns ( dropdowns , resourceId , template , fields , filters ) {
98+
8399 $ . each ( fields , function ( i , field ) {
84100 if ( filters . hasOwnProperty ( field ) ) {
85101 dropdowns . append ( _buildDropdown ( self . el , template , field ) ) ;
86102 }
87103 } ) ;
88-
104+
89105 return dropdowns ;
90106
91107 function _buildDropdown ( el , template , filterName ) {
@@ -100,11 +116,9 @@ this.ckan.module('resource-view-filters-override', function (jQuery) {
100116 theseFilters = theseFilters . concat ( [ undefined ] ) ;
101117 theseFilters . forEach ( function ( value , i ) {
102118 var dropdown = $ ( '<input type="hidden" name="' + filterName + '"></input>' ) ;
103-
104119 if ( value !== undefined ) {
105120 dropdown . val ( value ) ;
106121 }
107-
108122 dropdowns . append ( dropdown ) ;
109123 } ) ;
110124
@@ -207,8 +221,8 @@ this.ckan.module('resource-view-filters-override', function (jQuery) {
207221 options : {
208222 dropdownTemplate : [
209223 '<div class="resource-view-filter">' ,
210- ' { filter}: ' ,
211- ' <div class="text-left"> ' ,
224+ ' <div class="resource-view- filter-header"> ' ,
225+ ' {filter} ' ,
212226 ' <button type="button" class="close" aria-label="Close Filter">' ,
213227 ' <span aria-hidden="true">×</span>' ,
214228 ' </button>' ,
0 commit comments