@@ -34,28 +34,45 @@ var OperatorHandlers = function($) {
3434 }
3535 self . val_input . css ( { display : 'none' } ) ;
3636
37- $ ( ".hasDatepicker" ) . datepicker ( "destroy" ) ;
37+ try {
38+ $ ( ".hasDatepicker" ) . datepicker ( "destroy" ) ;
39+ } catch ( e ) {
40+ console . warn ( "Can't destroy datepicker" ) ;
41+ }
3842 $from . addClass ( 'vDateField' ) ;
3943 $to . addClass ( 'vDateField' ) ;
40- grappelli . initDateAndTimePicker ( ) ;
44+ try {
45+ grappelli . initDateAndTimePicker ( ) ;
46+ } catch ( e ) {
47+ console . warn ( "Can't ini datepicker with grappelli.initDateAndTimePicker" ) ;
48+ }
4149 } ;
4250
4351 self . remove_datepickers = function ( ) {
4452 self . val_input . css ( { display : 'block' } ) ;
4553 if ( self . val_input . parent ( ) . find ( 'input.vDateField' ) . length > 0 ) {
4654 var datefields = self . val_input . parent ( ) . find ( 'input.vDateField' ) ;
4755 datefields . each ( function ( ) {
48- $ ( this ) . datepicker ( "destroy" ) ;
56+ try {
57+ $ ( this ) . datepicker ( "destroy" ) ;
58+ } catch ( e ) {
59+ console . warn ( "Can't destroy datepicker" ) ;
60+ }
4961 } ) ;
5062 datefields . remove ( ) ;
5163 }
5264 } ;
5365
5466 self . modify_widget = function ( elm ) {
5567 // pick a widget for the value field according to operator
68+
69+ list = [ 'istrue' , 'isfalse' , 'isnull' ] ;
70+
5671 self . value = $ ( elm ) . val ( ) ;
5772 self . val_input = $ ( elm ) . parents ( 'tr' ) . find ( '.query-value' ) ;
5873 console . log ( "selected operator: " + self . value ) ;
74+ var field = $ ( elm ) . parents ( 'tr' ) . find ( '.query-field' ) ;
75+ self . initialize_select2 ( field ) ;
5976
6077 if ( self . value == "range" ) {
6178 self . add_datepickers ( ) ;
@@ -69,27 +86,60 @@ var OperatorHandlers = function($) {
6986 self . remove_datepickers ( ) ;
7087 }
7188
72- if ( $ . inArray ( self . value , [ "istrue" , "isnull" , "isfalse" ] ) > - 1 ) {
73- self . val_input . hide ( ) ;
89+ var input = $ ( elm ) . parents ( 'tr' ) . find ( 'input.query-value' ) ;
90+ if ( list . includes ( self . value ) ) {
91+ input . prop ( 'readonly' , true ) ;
92+ input . css ( 'pointer-events' , 'none' ) ;
93+ input . css ( 'color' , '#ccc' ) ;
7494 } else {
75- self . val_input . show ( ) ;
95+ input . prop ( 'readonly' , false ) ;
96+ input . css ( 'pointer-events' , 'all' ) ;
97+ input . css ( 'color' , 'black' ) ;
7698 }
7799 } ;
78100
79101 self . initialize_select2 = function ( elm ) {
80102 // initialize select2 widget and populate field choices
81103 var field = $ ( elm ) . val ( ) ;
82- var choices_url = ADVANCED_FILTER_CHOICES_LOOKUP_URL + ( FORM_MODEL ||
104+ var op = $ ( elm ) . parents ( 'tr' ) . find ( '.query-operator' ) . val ( ) ;
105+
106+ if ( $ . inArray ( op , [ "iexact" , "icontains" , "iregex" ] ) > - 1 ) {
107+ var choices_url = ADVANCED_FILTER_CHOICES_LOOKUP_URL + ( FORM_MODEL ||
83108 MODEL_LABEL ) + '/' + field ;
84- var input = $ ( elm ) . parents ( 'tr' ) . find ( 'input.query-value' ) ;
85- input . select2 ( "destroy" ) ;
86- $ . get ( choices_url , function ( data ) {
87- input . select2 ( { 'data' : data , 'createSearchChoice' : function ( term ) {
88- return { 'id' : term , 'text' : term } ;
89- } } ) ;
90- } ) ;
109+ var input = $ ( elm ) . parents ( 'tr' ) . find ( 'input.query-value' ) ;
110+ input . select2 ( "destroy" ) ;
111+ $ . get ( choices_url , function ( data ) {
112+ input . select2 ( { 'data' : data , 'multiple' : op == "iregex" , 'createSearchChoice' : function ( term ) {
113+ return { 'id' : term , 'text' : term } ;
114+ } } ) ;
115+ } ) ;
116+ } else {
117+ var input = $ ( elm ) . parents ( 'tr' ) . find ( 'input.query-value' ) ;
118+ input . select2 ( "destroy" ) ;
119+ }
91120 } ;
92121
122+ // self.initialize_select2 = function(elm) {
123+ // // initialize select2 widget and populate field choices
124+ // var field = $(elm).val();
125+ // var op = $(elm).parents('tr').find('.query-operator');
126+ // if (field.includes('__') && op.val() == 'iexact') {
127+ // var choices_url = ADVANCED_FILTER_CHOICES_LOOKUP_URL + (FORM_MODEL ||
128+ // MODEL_LABEL) + '/' + field;
129+ // var input = $(elm).parents('tr').find('input.query-value');
130+ // input.select2("destroy");
131+ // $.get(choices_url, function(data) {
132+ // input.select2({'data': data, 'createSearchChoice': function(term) {
133+ // return { 'id': term, 'text': term };
134+ // }});
135+ // });
136+ // }
137+ // else {
138+ // var input = $(elm).parents('tr').find('input.query-value');
139+ // input.select2("destroy");
140+ // }
141+ // };
142+
93143 self . field_selected = function ( elm ) {
94144 self . selected_field_elm = elm ;
95145 var row = $ ( elm ) . parents ( 'tr' ) ;
@@ -123,13 +173,13 @@ var OperatorHandlers = function($) {
123173 }
124174 $ ( '.form-row select.query-operator' ) . each ( function ( ) {
125175 $ ( this ) . off ( "change" ) ;
126- $ ( this ) . data ( 'pre_change' , $ ( this ) . val ( ) ) ;
176+ // $(this).data('pre_change', $(this).val());
127177 $ ( this ) . on ( "change" , function ( ) {
128178 var before_change = $ ( this ) . data ( 'pre_change' ) ;
129179 if ( $ ( this ) . val ( ) != before_change ) self . modify_widget ( this ) ;
130180 $ ( this ) . data ( 'pre_change' , $ ( this ) . val ( ) ) ;
131181 } ) . change ( ) ;
132- self . modify_widget ( this ) ;
182+ // self.modify_widget(this);
133183 } ) ;
134184 $ ( '.form-row select.query-field' ) . each ( function ( ) {
135185 $ ( this ) . off ( "change" ) ;
@@ -140,18 +190,18 @@ var OperatorHandlers = function($) {
140190 $ ( this ) . data ( 'pre_change' , $ ( this ) . val ( ) ) ;
141191 } ) . change ( ) ;
142192 } ) ;
143- self . field_selected ( $ ( '.form-row select.query-field' ) . first ( ) ) ;
193+ // self.field_selected($('.form-row select.query-field').first());
144194
145195 } ;
146196
147197 self . destroy = function ( ) {
148- $ ( '.form-row select.query-operator' ) . each ( function ( ) {
198+ $ ( '.form-row select.query-operator:last ' ) . each ( function ( ) {
149199 $ ( this ) . off ( "change" ) ;
150200 } ) ;
151- $ ( '.form-row select.query-field' ) . each ( function ( ) {
201+ $ ( '.form-row select.query-field:last ' ) . each ( function ( ) {
152202 $ ( this ) . off ( "change" ) ;
153203 } ) ;
154- $ ( '.form-row input.query-value' ) . each ( function ( ) {
204+ $ ( '.form-row input.query-value:last ' ) . each ( function ( ) {
155205 $ ( this ) . select2 ( "destroy" ) ;
156206 } ) ;
157207 } ;
@@ -166,4 +216,4 @@ var OperatorHandlers = function($) {
166216 _af_handlers . init ( ) ;
167217 }
168218 } ) ;
169- } ) ( window . _jq || jQuery ) ;
219+ } ) ( window . _jq || jQuery ) ;
0 commit comments