1function SelectObjectFieldWidget() { 2 3 this.selectedValueId = null; 4 this.values = []; 5 var self = this; 6 var selectedIds = []; 7 var preSelectedIds = []; 8 this.selectedTags = []; 9 var selectAllObjectsWithTags = false; 10 var allObjectWithTags = false; 11 this.previousModal = null; 12 var countLoader = 0; 13 14 this.initEl = function( $el, field, value ) { 15 16 this.field = field; 17 var $shortEl; 18 if (window.isPageRedesigned) { 19 20 var classes = this.field.isListSelectObject 21 ? 'select-object-widget rd-select-object-widget_not-table select-object-short' 22 : 'select-object-widget select-object-short'; 23 $shortEl = this.shortEl = $( 24 "<div class='"+classes+"'></div>") 25 } else { 26 $shortEl = this.shortEl = $("<div class='select-object-widget select-object-short'></div>") 27 } 28 29 if ( field.inputName ) { 30 this.valueInput = $('<input type="hidden" name="'+ field.inputName+ '"/>') 31 this.valueInput.appendTo( $el ); 32 } 33 $shortEl.appendTo( $el ) 34 35 if (field.linkEdit && value.selected_id) { 36 $linkEdit = $('<a href="' + field.linkEdit + value.selected_id + '" target="_blank"> ÑедакÑиÑоваÑÑ</a>'); 37 $linkEdit.appendTo($el); 38 } 39 40 $shortEl.click( function() { 41 self.openSearchModal(); 42 }) 43 44 if (!!window.UnsavedChangesFix) { 45 this.setValue(value, true); 46 } else { 47 this.setValue(value); 48 } 49 }; 50 51 this.searchModal = null; 52 this.openSearchModal = function() { 53 var self = this; 54 var field = this.field; 55 this.preSelectedIds = []; 56 for ( var key in this.selectedIds ) { 57 this.preSelectedIds.push( this.selectedIds[key]) 58 } 59 self.detectPreviousActiveModal(); 60 if( ! this.searchModal ) { 61 var modal = this.searchModal = window.gcModalFactory.create({ 62 show: false, 63 onShow: function() { 64 if (self.previousModal) { 65 self.previousModal.hide(); 66 } 67 }, 68 onHide: function() { 69 if (self.previousModal) { 70 setTimeout(function() { 71 self.previousModal.show(); 72 }, 10); 73 } 74 } 75 }); 76 77 modal.getContentEl().css('paddingRight', '20px'); 78 self.modalBody = modal.getContentEl().parents('.modal-body'); 79 if(window.isUserPageRedesignEnabled) { 80 modal.getHeaderEl().attr('id', 'rd-modal_offer-header'); 81 self.modalBody.attr('id', 'rd-modal_offer-body'); 82 }
83 var $searchContainer = $('<div class="rd-search-order-container"> </div>'); 84 var $selectedOrderContainer = $('<div class="rd-selected-order-container"> </div>'); 85 $tagsSelector = $('<input type="text" class="tags-input">') 86 87 if (window.isUserPageRedesignEnabled) { 88 $tagsSelector.appendTo( $searchContainer ) 89 } else { 90 $tagsSelector.appendTo( modal.getHeaderEl() ) 91 } 92 93 if ( this.selectedTags ) { 94 $tagsSelector.val( this.selectedTags ); 95 } 96 97 this.tagsCloud = $tagsSelector.tagsCloud( { 98 contextName: field.context, 99 objectTypeId: field.objectTypeId, 100 onChange: function() { 101 self.doSearch(); 102 } 103 } ); 104 105 modal.setContent("") 106 if (window.isUserPageRedesignEnabled) { 107 var $searchBlock = $('<div class="input-group flex-8 rd-order-search-input">' 108 + '<input placeholder="' + window.tt('common', 'search') 109 + '" type="text" class="rd-input-text rd-input-small w-100 search-str form-control">' 110 + '<span class="input-group-btn hidden">' 111 + '<button class="btn btn-primary search-btn" type="submit">' 112 + window.tt('common', 'Find') 113 + '</button>' 114 + '</span>' 115 + '</div>' 116 ); 117 } else { 118 var $searchBlock = $('<div class="input-group margin-bottom-10">' 119 + '<input placeholder="' + window.tt('common', 'search') + '" type="text" class="search-str form-control">' 120 + '<span class="input-group-btn">' 121 + '<button class="btn btn-primary search-btn" type="submit">' + window.tt('common', 'Find') + '</button>' 122 + '</span></div>' 123 ); 124 } 125 this.searchStrEl = $searchBlock.find( '.search-str' ); 126 this.searchButtonEl = $searchBlock.find( '.search-btn' ); 127 128 if (window.isUserPageRedesignEnabled) { 129 $searchBlock.appendTo($searchContainer) 130 } else { 131 $searchBlock.appendTo( modal.getContentEl() ); 132 } 133 modal.getHeaderEl().css('backgroundColor', '#F0F0F0') 134 135 self.tableContentEl = $('<div/>') 136 self.tableContentEl.appendTo( modal.getContentEl() ) 137 138 this.searchStrEl.keyup( function( e ) { 139 self.doSearch(); 140 }); 141 142 this.searchButtonEl.click( function() { 143 self.doSearch(); 144 }) 145 146 if (window.isUserPageRedesignEnabled) { 147 self.selectedEl = $selectedEl = $('<div class="select-object-preselect select-object-short"></div>') 148 $selectedEl.appendTo( $selectedOrderContainer ) 149 } else { 150 self.selectedEl = $selectedEl = $('<div style="margin-top: 10px;" class="select-object-preselect select-object-short"></div>') 151 $selectedEl.appendTo( modal.getHeaderEl() ) 152 } 153 154 if ( ! this.field.multi ) { 155 $selectedEl.hide(); 156 } 157 158 159 $buttonsEl = $('<div class="clearfix margin-top-5"/>') 160 161 if ( this.field.multi ) { 162 $buttonsEl.appendTo( $selectedEl ) 163 } 164 else { 165 $buttonsEl.appendTo( modal.getFooterEl() ) 166 } 167 168 var $saveBtn; 169 170 var $clearBtn; 171 172 if (window.isUserPageRedesignEnabled) { 173 $saveBtn = $('<button class="pull-left btn btn-success">' + Yii.t('common', 'ÐобавиÑÑ') + '</button>') 174 $clearBtn = $('<button class="pull-left margin-left-5 rd-btn rd-btn-small rd-btn-secondary btn-link">' 175 + window.tt('common', 'ÐÑмениÑÑ') 176 + '</button>' 177 ); 178 $saveBtn.prop('disabled', true);
179 var $saveBtnWrapper = $('<div class="rd-offer-btn-panel flex-8"></div>'); 180 $saveBtn.appendTo($saveBtnWrapper); 181 $clearBtn.appendTo($saveBtnWrapper); 182 $saveBtnWrapper.appendTo(modal.getContentEl()); 183 184 $searchContainer.appendTo(modal.getHeaderEl()) 185 $selectedOrderContainer.appendTo(modal.getHeaderEl()) 186 } else { 187 $saveBtn = $('<button class="pull-left btn btn-success">' + Yii.t('common', 'ÐÑбÑаÑÑ') + '</button>') 188 $clearBtn = $('<button class="pull-left margin-left-5 btn btn-link">' 189 + window.tt('common', 'Reset') 190 + '</button>' 191 ); 192 $saveBtn.appendTo( $buttonsEl ); 193 $clearBtn.appendTo( $buttonsEl ); 194 } 195 $saveBtn.click( function() { 196 if ( ! self.field.multi ) { 197 self.doSelect(); 198 } 199 self.saveValue() 200 }) 201 202 $clearBtn.click( function() { 203 self.preSelectedIds = []; 204 self.selectedTags = []; 205 self.allObjectWithTags = false; 206 self.saveValue() 207 }) 208 209 } 210 self.updateSelectedView(); 211 212 this.doSearch( field, this.searchModal ); 213 this.searchModal.show(); 214 }; 215 216 this.detectPreviousActiveModal = function() { 217 var active = window.gcModalActive(); 218 if (active && !active.isActive()) { 219 active = null; 220 } 221 222 if (!active || !this.searchModal || active.getId() !== this.searchModal.getId()) { 223 this.previousModal = active; 224 } 225 226 return this.previousModal; 227 }; 228 229 this.doSearch = function() { 230 var modal= this.searchModal; 231 var field = this.field; 232 233 this.selectedTags = this.tagsCloud.tagsCloud('getTags') 234 var archived = this.tagsCloud.tagsCloud('getArchived') 235 ++countLoader; 236 var url = window.isUserPageRedesignEnabled 237 ? '/pl/logic/context/select-object?isRedesign=1' 238 : '/pl/logic/context/select-object' 239 ajaxCall( 240 url, { 241 context: field.context, 242 searchStr: this.searchStrEl.val(), 243 tagNames: this.selectedTags.join(","), 244 archived: archived, 245 free: field.is_free, 246 excludeTypes: field.excludeTypes, 247 countLoader: countLoader 248 }, {}, 249 function (response) { 250 if (response.data.countLoader >= countLoader) { 251 self.tableContentEl.html(response.data.html) 252 self.makeSelectableTable(self.tableContentEl) 253 self.updateSelectedView(); 254 } 255 } 256 ); 257 } 258 259 this.makeSelectableTable = function( $contentEl ){ 260 $table = $contentEl.find('table') 261 $table.addClass( "table-selectable" ) 262 self.table = $table; 263 264 $contentEl.find('tr').click( function() { 265 $table.find('tr.selected').removeClass('selected') 266 $(this).addClass('selected'); 267 }) 268 269 $contentEl.find('tr').dblclick( function() { 270 self.doSelect() 271 }) 272 273 $contentEl.find('a.choose-row-button').click(function() { 274 $(this).parents('tr:first').click(); 275 self.doSelect(); 276 if (window.isUserPageRedesignEnabled) { 277 $('#rd-modal_offer-body .btn.btn-success').removeAttr('disabled'); 278 } 279 }); 280 } 281 282 this.doSelect = function() { 283 if ( ! self.table ) { 284 alert("ÐÐµÑ Ð²ÑбÑанного ÑлеменÑа"); 285 return; 286 } 287 var key = self.table.find('tr.selected').data('key') 288 289 if ( ! this.field.multi ) { 290 this.preSelectedIds = [ key ]; 291 this.saveValue(); 292 } 293 else { 294 this.preSelectedIds.push( key ); 295 this.updateSelectedView(); 296 } 297 } 298 299 this.updateSelectedView = function() { 300 var self = this; 301 if ( ! this.selectedEl || ! this.field.multi ) { 302 return; 303 } 304 305 self.selectedEl.find('.objects-list').detach(); 306 var $objectsList = $('<div class="objects-list margin-bottom-5 clearfix"></div>') 307 $objectsList.prependTo(self.selectedEl); 308 309 $selectAllTagsNode = window.isUserPageRedesignEnabled 310 ? `<div><label class="rd-flex gap-4 m-bottom-12">${window.tt('common', 'Select all with selected tags')}</label></div>` 311 : `<div><label> ${window.tt('common', 'Select all with selected tags')}</label></div>`; 312 313 $allWithTags = $($selectAllTagsNode); 314 315 $selectAllObjectsWithTagsEl = window.isUserPageRedesignEnabled 316 ? $('<input class="rd-checkbox rd-checkbox-small" type="checkbox">') 317 : $('<input class="margin-right-5" type="checkbox">'); 318 $selectAllObjectsWithTagsEl.prependTo( $allWithTags.find('label') ) 319 320 $selectAllObjectsWithTagsEl.click( function() { 321 self.allObjectWithTags = $(this).prop('checked'); 322 if ( self.allObjectWithTags ) { 323 if (window.isUserPageRedesignEnabled) { 324 self.tableContentEl.hide(); 325 $('#rd-modal_offer-body .btn.btn-success').removeAttr('disabled'); 326 } else { 327 self.modalBody.hide() 328 } 329 } 330 else { 331 window.isUserPageRedesignEnabled ? self.tableContentEl.show() : self.modalBody.show(); 332 } 333 }) 334 335 if ( this.allObjectWithTags ) { 336 //$selectAllObjectsWithTagsEl.prop( 'checked', true ) 337 $selectAllObjectsWithTagsEl.click(); 338 } 339 340 341 if ( this.field.multi && this.selectedTags.length == 0 || this.preSelectedIds.length > 1 ) { 342 self.modalBody.show(); 343 } 344 345 346 var somethingShown = false;
347 348 if( ! this.preSelectedIds.length || this.preSelectedIds.length == 0 ) { 349 //$objectsList.html( "ниÑего не вÑбÑано" ); 350 if ( this.selectedTags.length > 0 ) { 351 $allWithTags.appendTo( $objectsList ) 352 somethingShown = true; 353 } 354 } 355 else { 356 if ( this.preSelectedIds.length > 0 ) { 357 somethingShown = true; 358 } 359 var url = window.isUserPageRedesignEnabled 360 ? '/pl/logic/context/object-titles?isRedesign=1' 361 : '/pl/logic/context/object-titles' 362 ajaxCall(url, { context: this.field.context, ids: this.preSelectedIds }, {}, function (response) { 363 let preSelectedIds = self.preSelectedIds; 364 365 if (!Array.isArray(preSelectedIds)) { 366 preSelectedIds = [preSelectedIds]; 367 } 368 369 for (const id of preSelectedIds) { 370 const title = response.data.titles[id] 371 ? response.data.titles[id] 372 : Yii.t('common', 'УÑÑаÑевÑее знаÑение'); 373 const url = response.data.urls[id]; 374 var extraClassItem = ''; 375 var extraClassLink = ''; 376 if (window.isUserPageRedesignEnabled) { 377 extraClassItem = 'objects-list-item' 378 extraClassLink = 'class="rd-link"' 379 } 380 381 let $el; 382 383 if (url) { 384 $el = $( 385 "<div class='margin-bottom-5 " + extraClassItem + "'><span>" + title + 386 " (<a " + extraClassLink + " href='" + url + "'>id:" + id + "</a>)</span></div>" 387 ); 388 } else { 389 $el = $( 390 "<div class='margin-bottom-5 " + extraClassItem + "'><span>" + title + 391 "</span></div>" 392 ); 393 } 394 395 $el.appendTo( $objectsList ) 396 397 var $btnDel = $("<button class='btn btn-link btn-xs margin-right-5'>x</button>") 398 if (window.isUserPageRedesignEnabled) { 399 $btnDel = $("<div class='rd-order-unselect'><i class='gc-icon gc-close'></i></div>") 400 } 401 $btnDel.data('object-id', id) 402 $btnDel.click( function() { 403 var newIds = [] 404 for( var i in self.preSelectedIds ) { 405 if ( self.preSelectedIds[i] != $(this).data('object-id') ) newIds.push( self.preSelectedIds[i] ); 406 } 407 self.preSelectedIds = newIds 408 self.updateSelectedView(); 409 410 if (window.isUserPageRedesignEnabled) { 411 if (!$('.objects-list-item').length) { 412 $('button.pull-left.btn.btn-success').prop('disabled', true); 413 } 414 } 415 })
416 $btnDel.prependTo( $el ) 417 } 418 if (window.isUserPageRedesignEnabled) { 419 if ($('.objects-list-item').length) { 420 $('button.pull-left.btn.btn-success').prop('disabled', false); 421 } 422 } 423 }); 424 } 425 if ( this.selectedTags && this.selectedTags.length > 0 ) { 426 somethingShown = true; 427 } 428 429 if ( ! somethingShown ) { 430 self.selectedEl.hide(); 431 } 432 else { 433 self.selectedEl.show(); 434 } 435 436 if (window.isUserPageRedesignEnabled) { 437 $('.tag-editor-delete').on('click', (e) => { 438 const parentUl = $(e.target).closest('ul'); 439 const tagsLength = parentUl.children('li:not(.ui-sortable-handle)').length; 440 const tagsChecked = $selectAllObjectsWithTagsEl.prop('checked'); 441 if (tagsLength < 2 && tagsChecked) { 442 $selectAllObjectsWithTagsEl?.click(); 443 } 444 }) 445 } 446 }; 447 448 this.saveValue = function() { 449 this.selectedIds = []; 450 for ( var key in this.preSelectedIds ) { 451 this.selectedIds.push( this.preSelectedIds[key]); 452 } 453 454 if ( self.valueChanged ) { 455 self.valueChanged( this.field.multi ? self.selectedIds : self.selectedIds[0] , self.values ); 456 } 457 self.changed(); 458 self.loadData( this.shortEl ); 459 460 if (this.valueInput && this.selectedIds) { 461 this.valueInput.val(this.selectedIds); 462 this.valueInput.trigger('selectObjectFieldWidget_selected'); 463 } 464 465 this.searchModal.hide(); 466 }; 467 468 /*this.valueChanged = function( selectedId, models ) { 469 self.doSearch(); 470 };*/ 471 472 473 this.getValue = function() { 474 return { 475 selected_id: this.field.multi ? this.selectedIds : this.selectedIds[0], 476 selected_tags: this.selectedTags, 477 all_object_with_tags: this.allObjectWithTags 478 }; 479 }; 480 481 this.setValue = function (value, init = false) { 482 if ( value && value.selected_id && typeof value.selected_id.length != "undefined" ) { 483 this.selectedIds = value.selected_id; 484 } 485 else if ( value && value.selected_id ) { 486 this.selectedIds = [value.selected_id]; 487 } 488 else { 489 this.selectedIds = []; 490 } 491 if ( value ) { 492 if ( value.selected_tags ) { 493 this.selectedTags = value.selected_tags; 494 } 495 this.allObjectWithTags = value.all_object_with_tags ? value.all_object_with_tags : false 496 } 497 498 if (!!window.UnsavedChangesFix) { 499 this.loadData(this.shortEl, init); 500 } else { 501 this.loadData(this.shortEl); 502 } 503 }; 504 505 this.loadData = function (element, init = false) { 506 var emptyText = this.field.emptyText ? this.field.emptyText : Yii.t("common", "не вÑбÑано"); 507 var widget = this; 508 509 if( ! this.selectedIds.length ) { 510 if ( this.selectedTags.length > 0 && this.allObjectWithTags ) { 511 element.html( "<span class='fa fa-hand-o-up'></span> ÐÑе Ñ Ñегами: " + this.selectedTags.join(", ") ); 512 } 513 else { 514 if (window.isUserPageRedesignEnabled) { 515 element.html(`<div class="rd-btn rd-btn-secondary rd-btn-small"> 516 <i class="gc-icons gc-plus" style="font-size: 20px"></i> 517 <span class="rd-empty-text rd-body-s">${emptyText}</span></div>`); 518 } else { 519 element.html( "<span class='fa fa-hand-o-up'></span> " + emptyText ); 520 } 521 } 522 523 element.trigger('change'); 524 } else { 525 var url = window.isUserPageRedesignEnabled 526 ? '/pl/logic/context/object-titles?isRedesign=1' 527 : '/pl/logic/context/object-titles'; 528 ajaxCall(url, { context: this.field.context, ids: this.selectedIds }, {}, function (response) { 529 let selectedIds = self.selectedIds; 530 531 if (!Array.isArray(selectedIds)) { 532 selectedIds = [selectedIds]; 533 } 534 535 element.empty(); 536 537 for (const id of selectedIds) { 538 const title = response.data.titles[id] 539 ? response.data.titles[id] 540 : Yii.t('common', 'УÑÑаÑевÑее знаÑение'); 541 const $el = $("<div class='position-item'><span>" + title + "</span></div>"); 542 $el.appendTo(element); 543 544 if (widget.valueInput && widget.selectedIds) { 545 widget.valueInput.val(widget.selectedIds); 546 } 547 } 548 549 if (!!window.UnsavedChangesFix) { 550 $(element)[init ? 'addClass' : 'removeClass']('by-init'); 551 } 552 553 element.trigger('change'); 554 }); 555 } 556 } 557} 558 559extend( SelectObjectFieldWidget, FieldWidget ); 560SelectObjectFieldWidget.prototype = new FieldWidget(); 561 562window.logicFieldWidgets["selectObject"] = SelectObjectFieldWidget;
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.