You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * Copyright 2013 gitblit.com.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.gitblit.wicket.panels;
  17. import org.apache.wicket.ajax.AjaxRequestTarget;
  18. import org.apache.wicket.ajax.markup.html.form.AjaxButton;
  19. import org.apache.wicket.markup.html.basic.Label;
  20. import org.apache.wicket.markup.html.form.Form;
  21. import org.apache.wicket.model.IModel;
  22. import org.apache.wicket.model.Model;
  23. import com.gitblit.models.RepositoryModel;
  24. import com.gitblit.models.TicketModel;
  25. import com.gitblit.models.TicketModel.Change;
  26. import com.gitblit.models.UserModel;
  27. import com.gitblit.wicket.WicketUtils;
  28. import com.gitblit.wicket.pages.BasePage;
  29. public class CommentPanel extends BasePanel {
  30. private static final long serialVersionUID = 1L;
  31. final UserModel user;
  32. final TicketModel ticket;
  33. final Change change;
  34. final Class<? extends BasePage> pageClass;
  35. private MarkdownTextArea markdownEditor;
  36. private Label markdownPreview;
  37. private String repositoryName;
  38. public CommentPanel(String id, final UserModel user, final TicketModel ticket,
  39. final Change change, final Class<? extends BasePage> pageClass) {
  40. super(id);
  41. this.user = user;
  42. this.ticket = ticket;
  43. this.change = change;
  44. this.pageClass = pageClass;
  45. }
  46. @Override
  47. protected void onInitialize() {
  48. super.onInitialize();
  49. Form<String> form = new Form<String>("editorForm");
  50. add(form);
  51. form.add(new AjaxButton("submit", new Model<String>(getString("gb.comment")), form) {
  52. private static final long serialVersionUID = 1L;
  53. @Override
  54. public void onSubmit(AjaxRequestTarget target, Form<?> form) {
  55. String txt = markdownEditor.getText();
  56. if (change == null) {
  57. // new comment
  58. Change newComment = new Change(user.username);
  59. newComment.comment(txt);
  60. if (!ticket.isWatching(user.username)) {
  61. newComment.watch(user.username);
  62. }
  63. RepositoryModel repository = app().repositories().getRepositoryModel(ticket.repository);
  64. TicketModel updatedTicket = app().tickets().updateTicket(repository, ticket.number, newComment);
  65. if (updatedTicket != null) {
  66. app().tickets().createNotifier().sendMailing(updatedTicket);
  67. setResponsePage(pageClass, WicketUtils.newObjectParameter(updatedTicket.repository, "" + ticket.number));
  68. } else {
  69. error("Failed to add comment!");
  70. }
  71. } else {
  72. // TODO update comment
  73. }
  74. }
  75. }.setVisible(ticket != null && ticket.number > 0));
  76. final IModel<String> markdownPreviewModel = new Model<String>();
  77. markdownPreview = new Label("markdownPreview", markdownPreviewModel);
  78. markdownPreview.setEscapeModelStrings(false);
  79. markdownPreview.setOutputMarkupId(true);
  80. add(markdownPreview);
  81. markdownEditor = new MarkdownTextArea("markdownEditor", markdownPreviewModel, markdownPreview);
  82. markdownEditor.setRepository(repositoryName);
  83. WicketUtils.setInputPlaceholder(markdownEditor, getString("gb.leaveComment"));
  84. add(markdownEditor);
  85. }
  86. public void setRepository(String repositoryName) {
  87. this.repositoryName = repositoryName;
  88. if (markdownEditor != null) {
  89. markdownEditor.setRepository(repositoryName);
  90. }
  91. }
  92. }