component.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. function init_components_part(input){
  2. if(input.is(":visible")) {
  3. var partPicker = input.clone();
  4. input.before(partPicker);
  5. if(input.parent().hasClass("input-group")){
  6. input.parent().after(input.detach());
  7. input.before('<div id="part-anchor" class="dropdown-anchor"></div>');
  8. }
  9. input.hide();
  10. partPicker.addClass('data-type-part').removeAttr("data-type").removeAttr('name').removeAttr('id').removeAttr('onchange');
  11. partPicker.attr('data-source',input.attr('id'));
  12. }else{
  13. partPicker = $('[data-source="'+input.attr('id')+'"]');
  14. }
  15. input.change(function(){
  16. partPicker.prop('disabled',true).val('Chargement...');
  17. $.action({
  18. action : 'get_part_by_id',
  19. id : input.val(),
  20. before : input.attr('data-before'),
  21. },function(r){
  22. partPicker.prop('disabled',input.prop('disabled'));
  23. if(r.part && r.part.label){
  24. partPicker.val(r.part.label);
  25. }else{
  26. partPicker.val('');
  27. }
  28. });
  29. });
  30. if(input.val() !=''){
  31. partPicker.prop('disabled',true).val('Chargement...');
  32. $.action({
  33. action : 'get_part_by_id',
  34. id : input.val(),
  35. before : input.attr('data-before'),
  36. },function(r){
  37. partPicker.prop('disabled',input.prop('disabled'));
  38. if(r.part && r.part.label){
  39. partPicker.val(r.part.label);
  40. }else{
  41. partPicker.val('');
  42. }
  43. });
  44. }
  45. partPicker.keyup(function(){
  46. input.val('');
  47. });
  48. var parent = input.attr('data-parent');
  49. partPicker.autocomplete({
  50. action : 'autocomplete_part',
  51. data : {
  52. before : input.attr('data-before'),
  53. parent:function(){ return $(parent).val(); }
  54. },
  55. skin : function(item){
  56. var html = '';
  57. var re = new RegExp(partPicker.val(),"gi");
  58. name = item.name.replace(re, function (x) {
  59. return '<strong>'+x+'</strong>';
  60. });
  61. html += '<div class="part-logo d-inline mr-2"><img src="'+item.picture+'" class="avatar-mini avatar-rounded"></div>';
  62. html += '<div class="user-infos d-inline"><span>'+name+'</span>';
  63. html += '<div class="clear"></div>';
  64. return html;
  65. },
  66. onClick : function(selected,element){
  67. input.val(selected.id);
  68. input.trigger('change');
  69. },
  70. onBlur : function(selected,element){
  71. if(input.attr('data-force')!='false' && input.val()=='') partPicker.val('');
  72. if(partPicker.val()=='') {
  73. input.val('');
  74. }
  75. input.trigger('blur');
  76. }
  77. });
  78. }