eq2emu.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. var eq2 = {
  2. 'icons':{'items':[],'spells':[]}
  3. };
  4. /* ICOPICKER HANDLING & EVENTS */
  5. //Manually change item icon
  6. $(document).on('change', '.item-edit-input[data-field="icon"]', function() {
  7. var i = $(this).val(),
  8. ctn = $('.edit-item-ico-ctn'),
  9. ico = 'img/eq2/items/'+i+'.png';
  10. ctn.empty().append(''
  11. +'<img class="edit-item-ico vm animated tada" src="img/eq2/items/'+i+'.png">'
  12. +'<br>'
  13. +'<small><strong class="color-success-700">Icon ID</strong>: '+i+'</small>');
  14. });
  15. //Select icon.
  16. $(document).on('click', '.ico-picker-i', function() {
  17. var view = $('.edit-item-ico-ctn'),
  18. e = $('.item-edit-input[data-field="icon"]'),
  19. i = $(this).data('icon-id');
  20. e.trigger('change');
  21. $('.icon-picker-ctn').slideUp('slow');
  22. view.empty().append(''
  23. +'<img class="edit-item-ico vm animated tada" src="img/eq2/items/'+i+'.png"/>'
  24. +'<br>'
  25. +'<small><strong class="color-success-700">Icon ID</strong>: '+i+'</small>');
  26. e.val(i);
  27. });
  28. //Toggle icon picker tools
  29. $(document).on('click', '.ico-picker-btn, .cancel-icon-picker', function() {
  30. var c = $('.icon-picker-ctn'),
  31. visible = c.is(":visible");
  32. if(visible) {
  33. c.slideUp('slow');
  34. } else {
  35. c.slideDown('fast');
  36. }
  37. });
  38. var icoLoader = [];
  39. $(document).on('click', '.icopicker-category, .ico-picker-page', function() {
  40. var c = $(this).data('category'),
  41. ctn = $('.ico-picker-list'),
  42. p = 1;
  43. if($(this).hasClass('ico-picker-page')) {
  44. p = $(this).data('page');
  45. $(this).empty().append('<i class="fad fa-spinner fa-spin fast-spin"></i>');
  46. $('.ico-picker-page.btn-success').switchClass('btn-success', 'btn-warning');
  47. } else {
  48. $(this).parent().find('.btn-success').switchClass('btn-success','btn-default');
  49. $(this).switchClass('btn-default', 'btn-success');
  50. }
  51. //ctn.empty().append('<h2 class="text-center">Fetching icons ...</h2>');
  52. if(icoLoader.length > 0) {
  53. $.each(icoLoader, function(k,v) {
  54. clearTimeout(icoLoader[k]);
  55. icoLoader.splice(k,1);
  56. });
  57. }
  58. $.post('autoload.php', {'get-item-icons': c, 'page':p}, function(data) {
  59. ctn.empty().append(data);
  60. var intv = 0;
  61. icoLoader = $.each($('.ico-unloaded'), function(k,v) {
  62. var iconid = $(this).data('icon-id');
  63. icoLoader[icoLoader.length+1] = setTimeout(function() {
  64. $('.ico-picker-i[data-icon-id="'+iconid+'"]').removeClass('ico-unloaded');
  65. $('.ico-picker-i[data-icon-id="'+iconid+'"]').empty().append('<img class="ico-picker-img animated zoomIn" src="img/eq2/items/'+iconid+'.png" />');
  66. },intv);
  67. intv = intv+5;
  68. });
  69. });
  70. });
  71. /* NAVIGATION HANDLING & EVENTS */
  72. $(document).on('click', '.eq-nav-link', function() {
  73. var m = $(this).data('module'),
  74. e = $(this),
  75. t = $(this).find('.nav-link-text').text();
  76. console.log(t);
  77. $(this).find('a').empty().append('<span class="inline animated fadeInLeft"><i class="fad fa-spinner-third fa-spin fast-spin"></i></span>&nbsp;&nbsp;<span class="nav-link-text">'+t+'</span>');
  78. $.post('autoload.php', {'set-navigation':m}, function(data) {
  79. location.reload();
  80. });
  81. });
  82. /* ITEM EDITOR FUNCTIONS & EVENTS */
  83. //Save Changes to Item
  84. var confrmChanges;
  85. $(document).on('click', '.item-edit-save', function() {
  86. var f = $('.item-edit-changed'),
  87. b = $(this),
  88. confrm = b.hasClass('are-you-sure'),
  89. saving = b.hasClass('saving-item-changes');
  90. if(f.length > 0) {
  91. if(!confrm && !saving) {
  92. b.switchClass('btn-default', 'btn-warning');
  93. b.addClass('are-you-sure');
  94. b.empty().append('Are you sure?');
  95. confrmChanges = setTimeout(function() {
  96. b.switchClass('btn-warning','btn-default');
  97. b.removeClass('are-you-sure');
  98. b.empty().append('<i class="fas fa-save color-info-400"></i> Save');
  99. },3000);
  100. } else {
  101. clearTimeout(confrmChanges);
  102. b.switchClass('btn-warning', 'btn-info');
  103. b.removeClass('are-you-sure');
  104. b.addClass('saving-item-changes');
  105. b.empty().append('<i class="fas fa-draw-circle fa-spin"></i> Saving ...');
  106. var itemData = {};
  107. $.each(f, function() {
  108. var e = $(this),
  109. id = e.data('id'),
  110. key = e.data('key'),
  111. t = e.data('table'),
  112. f = e.data('field'),
  113. v = e.val();
  114. if(e.hasClass('custom-control-input')) {
  115. v = (e.is(":checked") ? 1:0);
  116. }
  117. if(e.is("select")) {
  118. v = $(e, 'option:selected').val();
  119. }
  120. if(!itemData[t]) { itemData[t] = {'fields':{},'key':key,'id':id}; }
  121. itemData[t]['fields'][f] = v;
  122. });
  123. $.post('autoload.php', { 'edit-item':true, 'data':itemData }, function(data) {
  124. b.switchClass('btn-info', 'btn-default');
  125. b.removeClass('saving-item-changes');
  126. setTimeout(function() {
  127. b.empty().append('<i class="fas fa-save color-info-400"></i> Save');
  128. },1000);
  129. $('.item-edit-changed').removeClass('item-edit-changed');
  130. $('.item-edit-changed-label').removeClass('item-edit-changed-label');
  131. $('.item-edit-changed-label-switch').removeClass('item-edit-changed-label-switch');
  132. console.log(data);
  133. }, 'json');
  134. }
  135. } else {
  136. b.removeClass('animated shake').addClass('animated shake');
  137. }
  138. });
  139. //Tier Range Slider Value Changes
  140. $(document).on('change', '.tier-range', function() {
  141. $('.tier-range-label').empty().append('Tier <strong class="text-success">'+$(this).val()+'</strong>');
  142. });
  143. //Item Editor Input Value Changes
  144. $(document).on('change', '.item-edit-input', function() {
  145. if(!$(this).hasClass('item-edit-changed')) {
  146. $(this).addClass('item-edit-changed');
  147. if($(this).hasClass('custom-control-input')) {
  148. $(this).parent().find('.custom-control-label').addClass('item-edit-changed-label-switch');
  149. } else {
  150. $(this).parent().find('.input-group-text').addClass('item-edit-changed-label');
  151. }
  152. }
  153. });
  154. //Load Item Editor Pane
  155. $(document).on('click', '.quick-item-search-row', function() {
  156. var id = $(this).data('id'),
  157. l = $('#item-editor-header-label'),
  158. c = $('#item-editor-content'),
  159. tb = $('.item-edit-toolbar');
  160. if(l.hasClass('hidden')) {
  161. l.removeClass('hidden').removeClass('animated').removeClass('fadeInRight');
  162. l.addClass('animated fadeInRight');
  163. l.empty().append('<i class="fad fa-caret-right"></i> Loading ...');
  164. tb.removeClass('hidden animated fadeInLeft').addClass('animated fadeInLeft');
  165. }
  166. c.empty().append('<p class="text-center"><div class="spinner-grow spinner-grow-lg text-primary" role="status"><span class="sr-only">Loading...</span></div></p>');
  167. $.post('autoload.php', {'get-edit-item':id}, function(data) {
  168. setTimeout(function() {
  169. c.empty().append(data);
  170. },700);
  171. });
  172. });
  173. //Quick Search Handler
  174. var quicksearchtimer,
  175. quicksearchdata;
  176. $(document).on('keyup', '#item-quick-search', function() {
  177. var s = $(this).val(),
  178. i = $('#quick-item-search-icon'),
  179. l = $('#quick-item-list');
  180. console.log('Keyup Detected');
  181. if(quicksearchtimer) { clearTimeout(quicksearchtimer) } //Clear timeout between keystrokes
  182. i.empty().append('<i class="fad fa-circle-notch text-success fa-spin fast-spin fs-xl"></i>');
  183. l.empty().append('<div class="panel-content text-center"><div class="spinner-grow spinner-grow-sm" role="status"><span class="sr-only"></span></div>&nbsp;&nbsp;&nbsp;<div class="spinner-grow spinner-grow-sm" role="status"><span class="sr-only"></span></div>&nbsp;&nbsp;&nbsp;<div class="spinner-grow spinner-grow-sm" role="status"><span class="sr-only"></span></div></div>');
  184. quicksearchtimer = setTimeout(function() {
  185. $.post('autoload.php', {'quick-item-search':s}, function(data) {
  186. quicksearchdata = data;
  187. build_quicksearch_list(data);
  188. },'json');
  189. }, 800);
  190. });
  191. function build_quicksearch_list(d) {
  192. var i = $('#quick-item-search-icon'),
  193. l = $('#quick-item-list');
  194. i.empty().append('<span class="animated zoomIn inline"><i class="fad fa-search fa-info fs-xl"></i></span>')
  195. console.log(d);
  196. if(d.rows.length > 0) {
  197. l.empty().append('<p class="text-center"><small><span class="text-success">'+d.found+'</span> item(s) found - results limited to <span class="text-danger">'+d.count+'</span>.</small></p>');
  198. $.each(quicksearchdata.rows, function(k,v) {
  199. l.append(''
  200. +'<div class="row quick-item-search-row" data-id="'+v.id+'">'
  201. +' <div class="hidden-xs-down col-sm-3 col-md-3 col-xl-2 text-center"><img class="quick-search-item-ico vm" src="img/eq2/items/'+v.icon+'.png"/></div>'
  202. +' <div class="col-xs-12 col-sm-9 col-md-7 col-xl-8 text-left">'
  203. +' <a href="#" class="text-primary">'+v.name+'</a> '
  204. +' <small class="text-muted"><br><span class="badge badge-primary"><strong>ID</strong>: '+v.id+'</span> '+v.item_type+'</small>'
  205. +' </div>'
  206. +' <div class="hidden-sm-down col-md-1 col-xl-2 text-right text-primary" style="font-size:15pt;"><span class="vm"><i class="fad fa-angle-right vm"></i></span></div>'
  207. +'</div>');
  208. });
  209. } else {
  210. l.empty().append(''
  211. +'<div class="col-xs-12">'
  212. +' <h4 style="padding-top:50px;padding-bottom:50px;" class="text-center">'
  213. +' <span class="animated bounceInDown inline"><i class="fad fa-minus-hexagon text-danger"></i></span>'
  214. +' No items were found matching your search.'
  215. +' </h4>'
  216. +'</div>');
  217. }
  218. }