admin.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /**
  2. * Admin JavaScript for Studiou WC Product Category Manager
  3. */
  4. (function($) {
  5. 'use strict';
  6. // Initialize admin scripts
  7. $(document).ready(function() {
  8. // Import form handling
  9. if ($('#studiou-wcpcm-import-form').length) {
  10. initImportForm();
  11. }
  12. // Export form handling
  13. if ($('#studiou-wcpcm-export-form').length) {
  14. initExportForm();
  15. }
  16. // Sample CSV download handler
  17. if ($('#studiou-wcpcm-download-sample').length) {
  18. initSampleDownload();
  19. }
  20. });
  21. /**
  22. * Initialize import form
  23. */
  24. function initImportForm() {
  25. $('#studiou-wcpcm-import-form').on('submit', function(e) {
  26. e.preventDefault();
  27. // Show spinner
  28. var $submitBtn = $(this).find('#studiou-wcpcm-import-button');
  29. var $spinner = $(this).find('.spinner');
  30. $submitBtn.prop('disabled', true);
  31. $spinner.css('visibility', 'visible');
  32. // Clear previous notices
  33. $('.studiou-wcpcm-notice-area').empty();
  34. // Create form data
  35. var formData = new FormData(this);
  36. formData.append('action', 'studiou_wcpcm_import');
  37. formData.append('nonce', studiouWcpcm.nonce);
  38. // Send AJAX request
  39. $.ajax({
  40. url: studiouWcpcm.ajaxUrl,
  41. type: 'POST',
  42. data: formData,
  43. processData: false,
  44. contentType: false,
  45. success: function(response) {
  46. if (response.success) {
  47. showNotice('success', studiouWcpcm.i18n.importSuccess);
  48. // Show results
  49. $('#studiou-wcpcm-import-results').text(response.data.message);
  50. $('.studiou-wcpcm-import-results').show();
  51. } else {
  52. showNotice('error', response.data.message);
  53. }
  54. },
  55. error: function() {
  56. showNotice('error', studiouWcpcm.i18n.importError);
  57. },
  58. complete: function() {
  59. // Hide spinner
  60. $submitBtn.prop('disabled', false);
  61. $spinner.css('visibility', 'hidden');
  62. }
  63. });
  64. });
  65. }
  66. /**
  67. * Initialize export form
  68. */
  69. function initExportForm() {
  70. $('#studiou-wcpcm-export-form').on('submit', function(e) {
  71. e.preventDefault();
  72. // Show spinner
  73. var $submitBtn = $(this).find('#studiou-wcpcm-export-button');
  74. var $spinner = $(this).find('.spinner');
  75. $submitBtn.prop('disabled', true);
  76. $spinner.css('visibility', 'visible');
  77. // Clear previous notices
  78. $('.studiou-wcpcm-notice-area').empty();
  79. // Send AJAX request
  80. $.ajax({
  81. url: studiouWcpcm.ajaxUrl,
  82. type: 'POST',
  83. data: {
  84. action: 'studiou_wcpcm_export',
  85. nonce: studiouWcpcm.nonce
  86. },
  87. success: function(response) {
  88. if (response.success) {
  89. showNotice('success', studiouWcpcm.i18n.exportSuccess);
  90. // Show download link
  91. $('#studiou-wcpcm-export-message').text(response.data.message);
  92. $('#studiou-wcpcm-download-export').attr('href', response.data.download_url);
  93. $('.studiou-wcpcm-export-results').show();
  94. } else {
  95. showNotice('error', response.data.message);
  96. }
  97. },
  98. error: function() {
  99. showNotice('error', studiouWcpcm.i18n.exportError);
  100. },
  101. complete: function() {
  102. // Hide spinner
  103. $submitBtn.prop('disabled', false);
  104. $spinner.css('visibility', 'hidden');
  105. }
  106. });
  107. });
  108. }
  109. /**
  110. * Initialize sample CSV download
  111. */
  112. function initSampleDownload() {
  113. $('#studiou-wcpcm-download-sample').on('click', function(e) {
  114. e.preventDefault();
  115. // Sample CSV content
  116. var csvContent = 'name,url-name,parent-name,description,display-type,visibility,protected-passwords,operation\n' +
  117. '"Clothing","clothing","","Top quality clothing","default","public","","A"\n' +
  118. '"Men","men","Clothing","Men\'s clothing","products","public","","A"\n' +
  119. '"Women","women","Clothing","Women\'s clothing","products","protected","password123","A"\n' +
  120. '"Kids","kids","Clothing","Kids clothing","products","public","","U"\n' +
  121. '"Accessories","accessories","","All accessories","default","public","","D"';
  122. // Create download link
  123. var blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
  124. var url = URL.createObjectURL(blob);
  125. var link = document.createElement('a');
  126. link.setAttribute('href', url);
  127. link.setAttribute('download', 'sample-product-categories.csv');
  128. link.style.visibility = 'hidden';
  129. document.body.appendChild(link);
  130. link.click();
  131. document.body.removeChild(link);
  132. });
  133. }
  134. /**
  135. * Show notice message
  136. *
  137. * @param {string} type Notice type (success, error)
  138. * @param {string} message Notice message
  139. */
  140. function showNotice(type, message) {
  141. var $notice = $('<div class="studiou-wcpcm-notice studiou-wcpcm-notice-' + type + '"></div>').text(message);
  142. $('.studiou-wcpcm-notice-area').append($notice);
  143. // Scroll to notice
  144. $('html, body').animate({
  145. scrollTop: $('.studiou-wcpcm-notice-area').offset().top - 50
  146. }, 500);
  147. }
  148. })(jQuery);