diff options
author | James Moger <james.moger@gitblit.com> | 2014-06-03 09:56:50 -0400 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2014-06-03 10:34:51 -0400 |
commit | ba516f6c6aaabf7935ef42292f446bf375bf542b (patch) | |
tree | 04488c7e724a53f7f0c2f45c344be49bb729cd4a | |
parent | 6cc8ec025ad26f1451f0947fa4ad79bb2f9c292a (diff) | |
download | gitblit-ba516f6c6aaabf7935ef42292f446bf375bf542b.tar.gz gitblit-ba516f6c6aaabf7935ef42292f446bf375bf542b.zip |
Extract re-usable conditional choice option panel
4 files changed, 120 insertions, 57 deletions
diff --git a/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.html b/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.html index df55381a..115b8c10 100644 --- a/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.html +++ b/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.html @@ -19,41 +19,13 @@ <hr/>
<h4><wicket:message key="gb.initialCommit"></wicket:message></h4>
- <div>
- <p><wicket:message key="gb.initialCommitDescription"></wicket:message></p>
- </div>
+ <p><wicket:message key="gb.initialCommitDescription"></wicket:message></p>
- <div style="clear:both;padding-top:10px;">
- <div style="display: inline-block;vertical-align: top;">
- <input type="checkbox" wicket:id="addReadme" />
- </div>
- <div style="display: inline-block;">
- <b><wicket:message key="gb.initWithReadme"></wicket:message></b><br/>
- <p><wicket:message key="gb.initWithReadmeDescription"></wicket:message></p>
- </div>
- </div>
+ <div wicket:id="addReadme"></div>
- <div style="clear:both;padding-top:10px;display:none;">
- <!-- future GitFlow -->
- <div style="display: inline-block;vertical-align: top;">
- <input type="checkbox" wicket:id="addGitflow" />
- </div>
- <div style="display: inline-block;">
- <b>Include a .gitflow file</b>
- <p>This will generate a config file which guides Git clients in setting up Gitflow branches.</p>
- </div>
- </div>
+ <div wicket:id="addGitIgnore"></div>
- <div style="clear:both;padding-top:10px;">
- <div style="display: inline-block;vertical-align: top;">
- <input type="checkbox" wicket:id="addGitignore" />
- </div>
- <div style="display:inline-block;">
- <b><wicket:message key="gb.initWithGitignore"></wicket:message></b><br/>
- <p><wicket:message key="gb.initWithGitignoreDescription"></wicket:message></p>
- <p style="padding-top:5px;"><select class="span2" wicket:id="gitignore" /></p>
- </div>
- </div>
+ <div wicket:id="addGitFlow"></div>
</div>
</div>
diff --git a/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java index d5ae3440..f0aa2241 100644 --- a/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java +++ b/src/main/java/com/gitblit/wicket/pages/NewRepositoryPage.java @@ -22,12 +22,8 @@ import java.util.ArrayList; import java.util.Collections;
import java.util.List;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.form.Button;
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
@@ -60,6 +56,8 @@ import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.panels.AccessPolicyPanel;
+import com.gitblit.wicket.panels.CheckboxOption;
+import com.gitblit.wicket.panels.ConditionalChoiceOption;
import com.gitblit.wicket.panels.RepositoryNamePanel;
public class NewRepositoryPage extends RootSubPage {
@@ -183,7 +181,10 @@ public class NewRepositoryPage extends RootSubPage { // add README
addReadmeModel = Model.of(false);
- form.add(new CheckBox("addReadme", addReadmeModel));
+ form.add(new CheckboxOption("addReadme",
+ getString("gb.initWithReadme"),
+ getString("gb.initWithReadmeDescription"),
+ addReadmeModel));
// add .gitignore
File gitignoreDir = app().runtime().getFileOrFolder(Keys.git.gitignoreFolder, "${baseFolder}/gitignore");
@@ -198,29 +199,22 @@ public class NewRepositoryPage extends RootSubPage { }
}
Collections.sort(gitignores);
- gitignoreModel = Model.of("");
- final DropDownChoice<String> gitignoreChoice = new DropDownChoice<String>("gitignore", gitignoreModel, gitignores);
- gitignoreChoice.setOutputMarkupId(true);
- form.add(gitignoreChoice.setEnabled(false));
+ gitignoreModel = Model.of("");
addGitignoreModel = Model.of(false);
- final CheckBox gitignoreCheckbox = new CheckBox("addGitignore", addGitignoreModel);
- form.add(gitignoreCheckbox);
-
- gitignoreCheckbox.add(new AjaxFormComponentUpdatingBehavior("onchange") {
-
- private static final long serialVersionUID = 1L;
-
- @Override
- protected void onUpdate(AjaxRequestTarget target) {
- gitignoreChoice.setEnabled(addGitignoreModel.getObject());
- target.addComponent(gitignoreChoice);
- }
- });
-
- // TODO add .gitflow
+ form.add(new ConditionalChoiceOption<String>("addGitIgnore",
+ getString("gb.initWithGitignore"),
+ getString("gb.initWithGitignoreDescription"),
+ addGitignoreModel,
+ gitignoreModel,
+ gitignores));
+
+ // TODO consider gitflow at creation (ticket-55)
addGitflowModel = Model.of(false);
- form.add(new CheckBox("addGitflow", addGitflowModel));
+ form.add(new CheckboxOption("addGitFlow",
+ "Include a .gitflow file",
+ "This will generate a config file which guides Git clients in setting up Gitflow branches.",
+ addGitflowModel).setVisible(false));
form.add(new Button("create"));
diff --git a/src/main/java/com/gitblit/wicket/panels/ConditionalChoiceOption.html b/src/main/java/com/gitblit/wicket/panels/ConditionalChoiceOption.html new file mode 100644 index 00000000..fb360d12 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/panels/ConditionalChoiceOption.html @@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
+ xml:lang="en"
+ lang="en">
+
+<body>
+<wicket:panel>
+ <div style="padding-top:4px;">
+ <div>
+ <label style="font-weight:bold;" class="checkbox"><input type="checkbox" wicket:id="checkbox" /> <span wicket:id="name"></span></label>
+ </div>
+ <label class="checkbox" style="color:#777;"> <span wicket:id="description"></span>
+ <p style="padding-top:5px;"><select class="span3" wicket:id="choice" /></p>
+ </label>
+ </div>
+</wicket:panel>
+</body>
+</html>
\ No newline at end of file diff --git a/src/main/java/com/gitblit/wicket/panels/ConditionalChoiceOption.java b/src/main/java/com/gitblit/wicket/panels/ConditionalChoiceOption.java new file mode 100644 index 00000000..07aaee84 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/panels/ConditionalChoiceOption.java @@ -0,0 +1,78 @@ +/*
+ * Copyright 2014 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gitblit.wicket.panels;
+
+import java.util.List;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.model.IModel;
+import org.parboiled.common.StringUtils;
+
+/**
+ * A re-usable conditional choice option panel.
+ *
+ * [x] title
+ * description
+ * [choices]
+ *
+ * @author James Moger
+ *
+ */
+public class ConditionalChoiceOption<T> extends BasePanel {
+
+ private static final long serialVersionUID = 1L;
+
+ final CheckBox checkbox;
+ final DropDownChoice<T> choice;
+
+ public ConditionalChoiceOption(String wicketId, String title, String description, IModel<Boolean> checkboxModel, IModel<T> choiceModel, List<T> choices) {
+ super(wicketId);
+ add(new Label("name", title));
+ add(new Label("description", description).setVisible(!StringUtils.isEmpty(description)));
+
+ this.checkbox = new CheckBox("checkbox", checkboxModel);
+ checkbox.setOutputMarkupId(true);
+
+ this.choice = new DropDownChoice<T>("choice", choiceModel, choices);
+ choice.setOutputMarkupId(true);
+
+ setup();
+ }
+
+ private void setup() {
+ add(checkbox);
+ add(choice.setMarkupId("choice").setEnabled(choice.getChoices().size() > 0));
+ choice.setEnabled(checkbox.getModelObject());
+
+ checkbox.add(new AjaxFormComponentUpdatingBehavior("onchange") {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void onUpdate(AjaxRequestTarget target) {
+ choice.setEnabled(checkbox.getModelObject());
+ target.addComponent(choice);
+ if (!choice.isEnabled()) {
+ choice.setModelObject(null);
+ }
+ }
+ });
+ }
+}
|