editminiprogramcategory.ui.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. class aiCategoryManager extends zui.Component
  2. {
  3. static NAME = "aiCategoryManager";
  4. init() {
  5. this.render();
  6. }
  7. afterInit() {
  8. this.$element.on("click", ".btn-add", (e) => {
  9. const $target = $(e.currentTarget).closest(".category-item");
  10. const $newItem = this.createCustomItem();
  11. $target.after($newItem);
  12. });
  13. this.$element.on("click", ".btn-delete", (e) => {
  14. const $item = $(e.currentTarget).closest(".category-item");
  15. if ($item.find(".btn-delete").is(":disabled")) return;
  16. $item.remove();
  17. });
  18. }
  19. createCategoryItem(key, value, isBuiltIn, isUsed) {
  20. const $item = $(`
  21. <div class="category-item flex mt-4" data-key="${key}">
  22. <div class="category-input w-2/3">
  23. <input type="text" name="${key}" value="${value}" class="form-control" ${isBuiltIn || isUsed ? "disabled" : ""}>
  24. </div>
  25. <div class="category-actions">
  26. ${(isBuiltIn && key != 'others') ? '' : `<button type="button" class="btn ghost btn-add">
  27. <i class="icon icon-plus"></i>
  28. </button>`}
  29. ${!isBuiltIn ? `<button type="button" class="btn ghost btn-delete" ${isUsed ? "disabled" : ""}>
  30. <i class="icon icon-close"></i>
  31. </button>` : ""}
  32. </div>
  33. </div>
  34. `);
  35. return $item;
  36. }
  37. createCustomItem() {
  38. const timestamp = Date.now();
  39. return $(`
  40. <div class="category-item flex mt-4" data-key="custom-${timestamp}">
  41. <div class="category-input w-2/3">
  42. <input type="text" name="custom[]" value="" class="form-control">
  43. </div>
  44. <div class="category-actions">
  45. <button type="button" class="btn ghost btn-add">
  46. <i class="icon icon-plus"></i>
  47. </button>
  48. <button type="button" class="btn ghost btn-delete">
  49. <i class="icon icon-close"></i>
  50. </button>
  51. </div>
  52. </div>
  53. `);
  54. }
  55. render() {
  56. const options = this.options;
  57. const $element = this.$element;
  58. $element.empty();
  59. Object.entries(options.builtInList).forEach(([key, value]) => {
  60. const $item = this.createCategoryItem(key, value, true, false);
  61. $element.append($item);
  62. });
  63. Object.entries(options.customList).forEach(([key, value]) => {
  64. const isUsed = options.usedCustomList.includes(key);
  65. const $item = this.createCategoryItem(key, value, false, isUsed);
  66. $element.append($item);
  67. });
  68. }
  69. }
  70. aiCategoryManager.defineFn();
  71. /* Extend aiCategoryManager to zui object. */
  72. $.extend(zui, {aiCategoryManager});