PageSourceSearch

https://www.fquadrat-systemberatung.de/valhalla-js-3.6/lib/selectable.js

js fquadrat-systemberatung.de collected 2026-10-07 04:58:58 UTC 16,552 bytes, 427 lines download raw bytes

1//# sourceURL=selectable.js
2//# COPYRIGHT Kraneburg Productions
3
4
5(function ( $ ) {
6    makeSelectableManager = function( params, managerObject ) {          
7        //  ENHANCES OBJECT WITH SELECTABLES FUNCTIONALITY 
8        //  OR CREATES A NEW OBJECT IF NONE GIVEN.
9
10        // ACCEPTS PARAMS.FIELD FOR SELECTION SYNC        
11        //  managerObject CAN BE GIVEN OR IS CREATED.
12
13        console.log(params);
14
15        if ( jQuery.type( managerObject ) === 'undefined' ) {
16            managerObject = { 
17//                onSelectableSelected: params.onSelectableSelected,
18//                onSelectableDeselected: params.onSelectableDeselected
19            };
20        }        
21
22        if ( managerObject instanceof jQuery) managerObject = { element: managerObject };
23        if ( managerObject instanceof Element) managerObject = { element: $(managerObject) };
24
25        var manager = managerObject;
26   
27
28        if ( typeof params === 'undefined'  || params == false || params == 'none' || params.type == 'none' )  {
29            // ++ deactivate selector functionallity of object
30//            alert('Deactivate SelectableManager');
31            return;            
32        }
33        
34        if ($.type(params) === 'string') {
35            params = { type: params };
36        }
37        
38        // CHECK FOR ERROR DUAL CREATION
39        if ( jQuery.type( manager.selectableParams ) !== 'undefined' ) {
40            alert('DOUBLE CREATION OF SELECTABLEMANAGER');
41            debugger;
42        }
43        
44
45        manager.selectableParams =   {
46            type : 'single',
47            selector: 'self',    // SELECT FULL ELEMENT
48            
49            hotspotSelector: '.btnSelectable',        // 'this' for full element, '' for nothing
50            iconSelected: ('<span class="iconSelected" data-icon="&#xf046;"></span>'),
51            iconDeselected: ('<span class="iconDeselected" data-icon="&#xf096;"></span>'),      
52                       
53            
54            updateSelectionVisual: function( selectable ){
55                if (selectable.selectableParams.selected){
56                    $(selectable.selectableElement).addClass('selected');
57                    selectable.hotspot.addClass('selected');
58                    selectable.button.addClass('selected');
59                }
60                else  {
61                    $(selectable.selectableElement).removeClass('selected');
62                    selectable.hotspot.removeClass('selected');
63                    selectable.button.removeClass('selected');
64                }
65            },
66
67            makeInitialize: function( selectable ){
68                $(selectable.selectableElement).addClass('selectable');
69                selectable.button = $('<span class="btnSelectable"></span>');
70                selectable.button.append( manager.selectableParams.iconSelected);
71                selectable.button.append( manager.selectableParams.iconDeselected);
72                $(selectable.selectableElement).prepend( selectable.button );
73            },
74
75            handleSelectionValidation: function( selectable ){
76                return selectable.selectableParams.newSelectedStatus;
77            }
78            
79        }        
80
81        console.log( 'params', params);
82        $.extend( manager.selectableParams, params );
83
84        if (typeof params.handleSelect === 'function' ) manager.select = params.handleSelect;
85        if (typeof params.handleDeselect === 'function' ) manager.deselect = params.handleDeselect;
86        
87        
88        manager.selectables = [ ] ;
89        
90        manager.getSelection = function(){
91            var result = []
92            $.each( manager.selectables, function(){
93                if (this.selectableParams.selected) result.push( this );
94            });
95            return result;
96        }
97        
98        manager.getDeselection = function(){
99            var result = []
100            $.each( manager.selectables, function(){
101                if (this.selectableParams.selected == false) result.push( this );
102            });
103            return result;            
104        }
105        
106        
107        // SEARCH FOR SUB ELEMENTS AND ENHANCE
108        if (manager instanceof DisplaySet){            
109            var displaySet = manager;
110            displaySet.treatAllDisplays( function( display ){
111                // Validate selectable Filter to see if display can become selectable
112                if( display.entity.validate( manager.selectableParams.filter ) ) manager.addSelectable( display.element, display );            
113            });
114            
115            displaySet.element.attr('data-selectable', manager.selectableParams.type );
116        }  
117        
118        if (typeof manager.select === 'undefined') manager.select = function( object, quiet ){
119            console.log('select');
120            if ( jQuery.type( quiet ) === 'undefined' ) quiet = false;
121            
122            if  (manager.selectableParams.type == 'single') {
123                $.each(manager.selectables, function(){
124                   if (object != this &&  this.selectableParams.selected) manager.deselect(this, true); 
125                });
126            }            
127            object.selectableParams.newSelectedStatus = true;
128
129            if ( object.hotspot.get(0).tagName == 'INPUT' ) object.hotspot.get(0).checked = true;
130            
131            object.isSelected( quiet );
132            
133            
134            
135            
136            
137            /*
138            if ( object.selectableParams.selected == false ){
139                object.selectableParams.selected = true;
140                if (quiet == false) {
141                    object.selectableParams.onSelected( object );
142                    if (typeof manager.onSelectableSelected === 'function') manager.onSelectableSelected( object );
143                    $(object).triggerHandler('selected');
144                    $(manager).triggerHandler('selectionChanged');                    
145                    $(manager).triggerHandler('selectableSelected', object);                    
146//                    $(manager).triggerHandler('displaySelected', object);       // LEGACY, use 'selected';             
147                }
148                manager.selectableParams.updateSelectionVisual( object );  
149                
150            }
151            */
152        }
153        
154        if (typeof manager.deselect === 'undefined') manager.deselect = function( object, quiet ){     
155                        console.log('deselect');
156
157            if ( jQuery.type( quiet ) === 'undefined' ) quiet = false;
158            
159            object.selectableParams.newSelectedStatus = false;
160            if ( object.hotspot.get(0).tagName == 'INPUT' ) object.hotspot.get(0).checked = false;
161
162            object.isSelected( quiet );
163        }
164        
165        manager.toggleSelect = function( object, quiet ){
166            
167            console.log('toggle');
168            console.log(quiet);
169            console.log( object.selectableParams );
170            
171            if  (object.selectableParams.selected) 
172                manager.deselect( object, quiet );
173            else manager.select( object, quiet );                    
174        }
175        
176        
177        
178        
179        
180        
181        
182        // -----------------  SELECTABLE ---------------------------------------
183        manager.addSelectable = function( element, objectWithParams ) {    
184//            console.log(i);
185            //  ENHANCES objectWithParams WITH SELECTABLES FUNCTIONALITY 
186            //  Additional Params come from manager
187        
188            var object = objectWithParams;
189
190            //  OBJECT CAN BE GIVEN OR IS CREATED.
191            if ( jQuery.type( object ) === 'undefined' ) {
192                object = { };
193            }        
194
195            if ( jQuery.type( element ) === 'undefined' ) {
196                alert('Error: Selectable element must be given');
197                return;
198            }        
199
200            if ( jQuery.type( manager ) === 'undefined' ) {
201                alert('Error: Selectable needs Manager');
202                return;
203            } 
204
205            element = $(element);
206
207/*
208            if ( typeof params === 'undefined'  || params == false )  {
209                // ++ deactivate selector functionallity of object
210    //            alert('Deactivate SelectableManager');
211                return;            
212            }
213*/
214
215
216/*
217            // CHECK FOR ERROR DUAL CREATION
218            if ( jQuery.type( object.selectableParams ) !== 'undefined' ) {
219                alert('DOUBLE CREATION OF SELECTABLE');
220                debugger;
221            }
222*/
223            
224            manager.selectables.push( object );
225
226
227            if ($.type(params) === 'string') {
228                params = { type: params };
229            }
230
231
232
233            var params =   {
234//                type : 'single',
235                selected: false,            // Last selection state. Use isSelected() to validate
236                newSelectedStatus: false,         // New selection state. Used in isSelected() for validaton
237                
238
239                onSelected: function( object ) {
240//                    $(object.selectableElement).css('background-color', 'blue');
241//                    $(object.selectableElement).addClass('selected');
242                },
243                
244                onDeselected: function( object ) {
245//                    $(object.selectableElement).css('background-color', 'green');
246//                    $(object.selectableElement).removeClass('selected');
247                }
248                
249                
250            }        
251            
252            if (typeof object.selectableParams === 'undefined') object.selectableParams = {};
253            $.extend( object.selectableParams, params );
254
255
256            object.selectableManager = manager;
257            object.selectableElement = element;
258            element.data('selectable', object);
259            
260            if (typeof manager.selectableParams.makeInitialize === 'function') manager.selectableParams.makeInitialize( object );
261            
262            
263            
264            object.select = function( quiet ) {
265                manager.select( object, quiet );
266            }
267            object.deselect = function( quiet ) {
268                manager.deselect( object, quiet );
269            }
270            object.toggleSelect = function( quiet ) {
271                manager.toggleSelect( object, quiet );
272            }
273                        
274            object.isSelected = function( quiet ){
275                // isSelected must be called by EACH DisplaySet of the SAME EntitySet. 
276                var result = object.selectableManager.selectableParams.handleSelectionValidation( object );
277                console.log( result );
278                if ( result == object.selectableParams.selected ) return result;                 
279                
280                // STATUS CHANGED, TRIGGER HANDLERS
281                
282                object.selectableParams.selected = result;
283                
284                
285                if ( jQuery.type( quiet ) === 'undefined' ) quiet = false;
286                
287                if ( quiet == false ) {
288                    if ( object.selectableParams.selected ) {
289                        $(object).triggerHandler('selected');
290                        object.selectableParams.onSelected( object );
291                        $(object.selectableManager).triggerHandler('selectableSelected', object);  
292                    } else {
293                        object.selectableParams.onDeselected( object );
294                        if (typeof manager.onSelectableDeselected === 'function') manager.onSelectableDeselected( object );
295                        $(object).triggerHandler('deselected');                        
296                    }
297                    $(object.selectableManager).triggerHandler('selectionChanged', object); 
298                    $(object).triggerHandler('selectionChanged');
299                }
300                
301            /*
302            if  (manager.selectableParams.type == 'single') {
303                $.each(manager.selectables, function(){
304                   if (object != this) manager.deselect(this); 
305                });
306            } 
307            if ( object.selectableParams.selected == false ){
308                object.selectableParams.selected = true;
309                if (quiet == false) {
310                    object.selectableParams.onSelected( object );
311                    if (typeof manager.onSelectableSelected === 'function') manager.onSelectableSelected( object );
312                    $(object).triggerHandler('selected');
313                    $(manager).triggerHandler('selectionChanged');                    
314                    $(manager).triggerHandler('selectableSelected', object);                    
315//                    $(manager).triggerHandler('displaySelected', object);       // LEGACY, use 'selected';             
316                }
317              
318                
319            }
320            */            
321                object.selectableManager.selectableParams.updateSelectionVisual( object );                   
322                return result;
323            }
324
325            object.getKey = function(){
326                // only works with INPUT currently
327                return object.hotspot.attr('value');
328            }
329                
330            var hotspot;
331            if ( manager.selectableParams.hotspotSelector != '' ) {
332                if ( manager.selectableParams.hotspotSelector != 'this' ) 
333                    hotspot = element.find(manager.selectableParams.hotspotSelector)
334                else hotspot = element;
335
336                if ( hotspot.get(0).tagName == 'INPUT' ){
337
338                    hotspot[0].addEventListener('change', (event) => {
339                        if ( hotspot.get(0).checked == true ) object.select();
340                            else object.deselect();
341                    });
342
343                } else {
344                    hotspot.on('click', function(){
345                        // console.log(object);    
346                        // alert(hotspot.get(0).tagName );
347                        object.toggleSelect();
348                    });    
349                }
350            }
351            object.hotspot = hotspot;
352            
353            $(object).on('selectionChanged', function(){
354                manager.selectableParams.updateSelectionVisual( object );
355            });  
356            
357            object.isSelected();
358            
359//            manager.selectableParams.updateSelectionVisual( object );  
360            return object;
361
362        }
363
364        manager.getValues = function(){
365            // CURRENTLY ONLY WORKING WITH INPUT
366            // RETURNS ARRAY
367            var values = [];
368            manager.getSelection().forEach( function( selectable ){
369                if ( selectable.hotspot.get(0).tagName == 'INPUT' ){
370                    values.push( selectable.getKey() );
371                }
372            });
373            return values;
374        }
375
376        manager.setValues = function( values, quiet ){
377            // // CURRENTLY ONLY WORKING WITH INPUT
378            // ACCEPTS STRING OR ARRAY VALUES 
379            try {
380                checks = JSON.parse( values );
381            } catch(e) {
382                checks = [ values ];
383            }
384
385
386            console.log( checks );
387            // for (var index in checks ){
388            // 	var check = checks[index];
389
390            manager.selectables.forEach( function( selectable ){
391                var checked = false;
392                var key = selectable.getKey();
393
394                checks.forEach( function( check ){
395                    if ( key == check ) checked = true;
396                });
397
398               
399
400                if (checked) console.log( key );
401                if (checked) selectable.select( quiet );
402                    else selectable.deselect( quiet );
403
404            });
405        }
406
407        // SYNC FIELD
408        if (typeof manager.selectableParams.field !== 'undefined'){
409
410
411            $(manager).on('selectionChanged', function(){
412                if (manager.selectableParams.type == 'single')
413                        manager.selectableParams.field.set( manager.getValues()[0], 'string' );
414                    else manager.selectableParams.field.set( JSON.stringify( manager.getValues() ), 'string' );
415            });  
416
417
418            $( manager.selectableParams.field ).on('changed', function(){
419                manager.setValues( manager.selectableParams.field.get('string') );
420            });
421
422        }
423    
424        return manager;
425    }
426    
427}( jQuery ));	

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.