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=""></span>'), 51 iconDeselected: ('<span class="iconDeselected" data-icon=""></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.