/mirror-manager/src/main/resources/static/repository-settings-panel.js

https://bitbucket.org/kostmo/stash-plugins · JavaScript · 206 lines · 174 code · 31 blank · 1 comment · 7 complexity · 3748145a356c154be38f6e1c4343997b MD5 · raw file

  1. define('plugin/mirror-ops/repository-settings', [
  2. 'jquery',
  3. 'aui',
  4. 'bitbucket/internal/util/ajax',
  5. 'bitbucket/internal/model/page-state',
  6. 'bitbucket/internal/util/error',
  7. 'exports'
  8. ], function (
  9. $,
  10. AJS,
  11. ajax,
  12. pageState,
  13. errorUtil,
  14. exports
  15. ) {
  16. function getProjectKey() {
  17. return pageState.getProject().getKey();
  18. }
  19. function getRepoSlug() {
  20. return pageState.getRepository().getSlug();
  21. }
  22. function getUrlBase() {
  23. return AJS.contextPath() + '/rest/mirror-manager/latest/projects/' + getProjectKey() + '/repos/' + getRepoSlug();
  24. }
  25. function fetchMirrorList(mirrors_box) {
  26. $.getJSON( getUrlBase() + '/settings', {},
  27. function(mirrors) {
  28. $.each(mirrors, function(index, mirror) {
  29. var mirror_id = mirror.id;
  30. var mirror_name = mirror.name;
  31. var mirror_url = mirror.url;
  32. var mirror_enabled = mirror.enabled;
  33. var single_mirror_div = $("<form>", {"class": "aui", "style": "margin-top: 1.5em"});
  34. var single_mirror_name = $("<h3>", {"class": "description"});
  35. single_mirror_name.text(mirror_name);
  36. single_mirror_div.append(single_mirror_name);
  37. var single_mirror_url = $("<div>", {"class": "description", "style": "font-weight: bold"});
  38. single_mirror_url.text(mirror_url);
  39. single_mirror_div.append(single_mirror_url);
  40. var single_mirror_enabled = $("<div>", {"class": "description", "style": "font-weight: bold"});
  41. if (mirror_enabled) {
  42. single_mirror_enabled.text("Enabled").css("color", "green");
  43. } else {
  44. single_mirror_enabled.text("Disabled").css("color", "red");
  45. }
  46. single_mirror_div.append(single_mirror_enabled);
  47. var $mirror_name_textbox = $("<input>", {"class": "text mirror-manager-textbox"}).val(mirror_name);
  48. var $mirror_url_textbox = $("<input>", {"class": "text mirror-manager-textbox"}).val(mirror_url);
  49. var $mirror_checkbox_div = $("<div>", {"class": "checkbox"});
  50. var checkbox_id = "id-mirror-" + mirror_id;
  51. var checkbox_name = "name-mirror-" + mirror_name;
  52. var $mirror_checkbox = $("<input>", {"id": checkbox_id, "class": "checkbox", "type": "checkbox", "name": checkbox_name});
  53. if (mirror_enabled)
  54. $mirror_checkbox.attr("checked", "checked");
  55. var $mirror_checkbox_label = $("<label>", {"for": checkbox_id});
  56. $mirror_checkbox_label.text("Enable automatic post-receive pushing");
  57. $mirror_checkbox_div.append($mirror_checkbox);
  58. $mirror_checkbox_div.append($mirror_checkbox_label);
  59. var update_button = $("<button>", {"class": "aui-button", "type": "button"});
  60. update_button.text("Update");
  61. single_mirror_div.append(update_button);
  62. var cancel_update_button = $("<button>", {"class": "aui-button", "type": "button"});
  63. cancel_update_button.text("Cancel");
  64. cancel_update_button.hide();
  65. cancel_update_button.click(function() {
  66. renderMirrorList();
  67. });
  68. single_mirror_div.append(cancel_update_button);
  69. update_button.click(function() {
  70. if (update_button.text() === "Update") {
  71. single_mirror_name.replaceWith($mirror_name_textbox);
  72. single_mirror_url.replaceWith($mirror_url_textbox);
  73. single_mirror_enabled.replaceWith($mirror_checkbox_div);
  74. update_button.text("Save");
  75. cancel_update_button.show();
  76. } else if (update_button.text() === "Save") {
  77. $.ajax( getUrlBase() + '/settings',
  78. {
  79. type: "POST",
  80. data: JSON.stringify({
  81. "id": mirror_id,
  82. "name": $mirror_name_textbox.val(),
  83. "url": $mirror_url_textbox.val(),
  84. "enabled": $mirror_checkbox.attr("checked") === "checked"
  85. }),
  86. contentType: "application/json",
  87. success: function(data) {
  88. renderMirrorList();
  89. }
  90. }
  91. );
  92. }
  93. });
  94. var deletion_button = $("<button>", {"class": "aui-button", "type": "button"});
  95. deletion_button.text("Remove");
  96. deletion_button.click(function() {
  97. if (confirm("Are you sure you want to remove this mirror?")) {
  98. $.ajax(
  99. getUrlBase() + '/settings',
  100. {
  101. type: "DELETE",
  102. data: JSON.stringify({
  103. "id": mirror_id,
  104. "name": mirror_name,
  105. "url": mirror_url
  106. }),
  107. contentType: "application/json",
  108. success: function(data) {
  109. renderMirrorList();
  110. }
  111. }
  112. );
  113. }
  114. });
  115. single_mirror_div.append(deletion_button);
  116. var manual_push_button = $("<button>", {"class": "aui-button", "type": "button"});
  117. manual_push_button.text("Manual push");
  118. manual_push_button.click(function() {
  119. $.ajax(
  120. getUrlBase() + '/manualPush',
  121. {
  122. type: "PUT",
  123. data: JSON.stringify({
  124. "id": mirror_id,
  125. "name": mirror_name,
  126. "url": mirror_url
  127. }),
  128. contentType: "application/json",
  129. success: function(data) {
  130. alert("Initiated asynchronous push to mirror: " + mirror_name);
  131. },
  132. error: function(jqXHR, textStatus, errorThrown) {
  133. alert("Failed in pushing to mirror: " + errorThrown);
  134. }
  135. }
  136. );
  137. });
  138. single_mirror_div.append(manual_push_button);
  139. mirrors_box.append(single_mirror_div);
  140. });
  141. }
  142. );
  143. }
  144. function renderMirrorList() {
  145. var mirrors_box = $("#mirror-selection");
  146. mirrors_box.empty();
  147. fetchMirrorList(mirrors_box);
  148. }
  149. function initAdderButtonBehavior() {
  150. var adder_button = $("#addMirror-button");
  151. adder_button.click(function() {
  152. var mirror_name = prompt("Choose an alias for this remote mirror:", "my_mirror")
  153. var mirror_url = prompt("Specify URL remote mirror: \"" + mirror_name + "\"", "file:///tmp/stash/mirror-test.git")
  154. $.ajax({
  155. url: getUrlBase() + "/settings",
  156. type: "PUT",
  157. data: JSON.stringify({
  158. "name": mirror_name,
  159. "url": mirror_url
  160. }),
  161. contentType: "application/json",
  162. success: function(data) {
  163. renderMirrorList();
  164. }
  165. });
  166. });
  167. }
  168. exports.onReady = function () {
  169. initAdderButtonBehavior();
  170. // FIXME Why is this required?
  171. setTimeout(function() {
  172. renderMirrorList();
  173. }, 0);
  174. }
  175. });