[SYNCOPE-156] improve L&F mappings + fix connector creation. Still working on deletion of newly creted topology item
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/af8f263b Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/af8f263b Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/af8f263b Branch: refs/heads/master Commit: af8f263bf4e8e8eabdc889c96d269b4184fd7813 Parents: ddd7ce3 Author: fmartelli <[email protected]> Authored: Tue Sep 29 18:47:25 2015 +0200 Committer: fmartelli <[email protected]> Committed: Tue Sep 29 18:47:25 2015 +0200 ---------------------------------------------------------------------- .../client/console/panels/ConnectorModal.java | 5 +- .../console/panels/ResourceMappingPanel.java | 57 ++++--- .../client/console/topology/Topology.java | 5 +- .../console/topology/TopologyNodePanel.java | 3 + .../markup/html/bootstrap/dialog/BaseModal.java | 3 + .../wicket/markup/html/form/FieldPanel.java | 10 +- .../META-INF/resources/css/fieldstyle.css | 153 ++----------------- .../META-INF/resources/css/syncopeConsole.css | 4 + .../resources/META-INF/resources/js/topology.js | 7 +- .../client/console/panels/ListViewPanel.html | 3 +- .../console/panels/ResourceMappingPanel.html | 9 +- .../client/console/topology/Topology.html | 2 +- 12 files changed, 82 insertions(+), 179 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java index 6989135..95f013f 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnectorModal.java @@ -21,13 +21,13 @@ package org.apache.syncope.client.console.panels; import static org.apache.syncope.client.console.panels.AbstractModalPanel.LOG; import java.io.Serializable; +import java.net.URI; import java.util.ArrayList; import java.util.List; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.syncope.client.console.commons.Constants; import org.apache.syncope.client.console.pages.AbstractBasePage; -import org.apache.syncope.client.console.topology.Topology; import org.apache.syncope.client.console.topology.TopologyNode; import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.common.lib.to.ConnBundleTO; @@ -156,8 +156,7 @@ public class ConnectorModal extends AbstractResourceModal { connInstanceTO.getKey(), connInstanceTO.getDisplayName(), TopologyNode.Kind.CONNECTOR, - connInstanceTO.getLocation().startsWith(Topology.CONNECTOR_SERVER_LOCATION_PREFIX) - ? connInstanceTO.getLocation() : Topology.ROOT_NAME, + URI.create(connInstanceTO.getLocation()).toASCIIString(), target)); } else { connectorRestClient.update(connInstanceTO); http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java index 46cc21f..7a7295a 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java @@ -72,17 +72,17 @@ public class ResourceMappingPanel extends Panel { /** * Mapping field style sheet. */ - private static final String FIELD_STYLE = "ui-widget-content ui-corner-all short_fixedsize"; + private static final String FIELD_STYLE = "short_fixedsize"; /** * Mapping field style sheet. */ - private static final String DEF_FIELD_STYLE = "ui-widget-content ui-corner-all"; + private static final String DEF_FIELD_STYLE = ""; /** * Mapping field style sheet. */ - private static final String SHORT_FIELD_STYLE = "ui-widget-content ui-corner-all veryshort_fixedsize"; + private static final String SHORT_FIELD_STYLE = "veryshort_fixedsize"; /** * Schema rest client. @@ -268,12 +268,15 @@ public class ResourceMappingPanel extends Panel { } }); - final AjaxDropDownChoicePanel<String> intAttrNames = new AjaxDropDownChoicePanel<>("intAttrNames", + final AjaxDropDownChoicePanel<String> intAttrNames = new AjaxDropDownChoicePanel<>( + "intAttrNames", getString("intAttrNames"), - new PropertyModel<String>(mapItem, "intAttrName"), false); + new PropertyModel<String>(mapItem, "intAttrName"), + false); intAttrNames.setChoices(schemaNames); - intAttrNames.setRequired(true); - intAttrNames.setStyleSheet(FIELD_STYLE); + intAttrNames.setRequired(true).hideLabel(); + intAttrNames.setStyleSheet(false, FIELD_STYLE); + intAttrNames.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { private static final long serialVersionUID = -1107858522700306810L; @@ -289,20 +292,23 @@ public class ResourceMappingPanel extends Panel { "intMappingTypes", new ResourceModel("intMappingTypes", "intMappingTypes").getObject(), new PropertyModel<IntMappingType>(mapItem, "intMappingType")); - intMappingTypes.setRequired(true); + intMappingTypes.setRequired(true).hideLabel(); intMappingTypes.setChoices(attrTypes); - intMappingTypes.setStyleSheet(FIELD_STYLE); + intMappingTypes.setStyleSheet(false, FIELD_STYLE); item.add(intMappingTypes); - final AjaxDropDownChoicePanel<AnyTypeKind> entitiesPanel = new AjaxDropDownChoicePanel<>("entities", + final AjaxDropDownChoicePanel<AnyTypeKind> entitiesPanel = new AjaxDropDownChoicePanel<>( + "entities", new ResourceModel("entities", "entities").getObject(), new Model<>(entity)); + entitiesPanel.hideLabel(); entitiesPanel.setChoices(provisionTO.getAnyType().equals(AnyTypeKind.GROUP.name()) ? Collections.<AnyTypeKind>singletonList(AnyTypeKind.GROUP) : Arrays.asList(AnyTypeKind.values())); - entitiesPanel.setStyleSheet(DEF_FIELD_STYLE); + entitiesPanel.setStyleSheet(false, DEF_FIELD_STYLE); + entitiesPanel.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { private static final long serialVersionUID = -1107858522700306810L; @@ -321,7 +327,8 @@ public class ResourceMappingPanel extends Panel { }); item.add(entitiesPanel); - final FieldPanel<String> extAttrNames = new AjaxTextFieldPanel("extAttrName", + final FieldPanel<String> extAttrNames = new AjaxTextFieldPanel( + "extAttrName", new ResourceModel("extAttrNames", "extAttrNames").getObject(), new PropertyModel<String>(mapItem, "extAttrName")); ((AjaxTextFieldPanel) extAttrNames).setChoices(schemaNames); @@ -332,21 +339,26 @@ public class ResourceMappingPanel extends Panel { } else { required = true; } - extAttrNames.setRequired(required); + extAttrNames.setRequired(required).hideLabel(); extAttrNames.setEnabled(required); - extAttrNames.setStyleSheet(FIELD_STYLE); + extAttrNames.setStyleSheet(false, FIELD_STYLE); item.add(extAttrNames); - final AjaxTextFieldPanel mandatory = new AjaxTextFieldPanel("mandatoryCondition", + final AjaxTextFieldPanel mandatory = new AjaxTextFieldPanel( + "mandatoryCondition", new ResourceModel("mandatoryCondition", "mandatoryCondition").getObject(), new PropertyModel<String>(mapItem, "mandatoryCondition")); + mandatory.hideLabel(); mandatory.setChoices(Arrays.asList(new String[] { "true", "false" })); - mandatory.setStyleSheet(SHORT_FIELD_STYLE); + mandatory.setStyleSheet(false, SHORT_FIELD_STYLE); item.add(mandatory); - final AjaxCheckBoxPanel connObjectKey = new AjaxCheckBoxPanel("connObjectKey", + final AjaxCheckBoxPanel connObjectKey = new AjaxCheckBoxPanel( + "connObjectKey", new ResourceModel("connObjectKey", "connObjectKey").getObject(), new PropertyModel<Boolean>(mapItem, "connObjectKey")); + + connObjectKey.hideLabel(); connObjectKey.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { private static final long serialVersionUID = -1107858522700306810L; @@ -365,9 +377,12 @@ public class ResourceMappingPanel extends Panel { }); item.add(connObjectKey); - final AjaxCheckBoxPanel password = new AjaxCheckBoxPanel("password", + final AjaxCheckBoxPanel password = new AjaxCheckBoxPanel( + "password", new ResourceModel("password", "password").getObject(), new PropertyModel<Boolean>(mapItem, "password")); + + password.hideLabel(); password.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) { private static final long serialVersionUID = -1107858522700306810L; @@ -391,10 +406,10 @@ public class ResourceMappingPanel extends Panel { final WebMarkupContainer purpose = new WebMarkupContainer("purpose"); purpose.setOutputMarkupId(Boolean.TRUE); - final MappingPurposePanel panel = new MappingPurposePanel("purposeActions", - new PropertyModel<MappingPurpose>(mapItem, "purpose"), purpose); + final MappingPurposePanel panel = new MappingPurposePanel( + "purposeActions", new PropertyModel<MappingPurpose>(mapItem, "purpose"), purpose); - purpose.add(panel); + purpose.add(panel.setRenderBodyOnly(true)); item.add(purpose); http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java index 8b2fa75..7005143 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java @@ -18,6 +18,7 @@ */ package org.apache.syncope.client.console.topology; +import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal; import java.io.Serializable; import java.net.URI; import java.util.ArrayList; @@ -138,8 +139,8 @@ public class Topology extends BasePage { } public Topology() { - modal = new BaseModal<>("modal"); - add(modal); + modal = new BaseModal<>("resource-modal"); + add(modal.size(Modal.Size.Large)); modal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() { http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java index 8a68ca3..9545c31 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyNodePanel.java @@ -172,6 +172,7 @@ public class TopologyNodePanel extends Panel implements IAjaxIndicatorAware { error(getString(Constants.ERROR) + ": " + e.getMessage()); LOG.error("While deleting resource {}", node.getKey(), e); } + ((BasePage) pageRef.getPage()).getFeedbackPanel().refresh(target); } }; fragment.add(delete); @@ -250,6 +251,8 @@ public class TopologyNodePanel extends Panel implements IAjaxIndicatorAware { error(getString(Constants.ERROR) + ": " + e.getMessage()); LOG.error("While deleting resource {}", node.getKey(), e); } + + ((BasePage) pageRef.getPage()).getFeedbackPanel().refresh(target); } }; fragment.add(delete); http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java index 124b096..2b3c49d 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/bootstrap/dialog/BaseModal.java @@ -193,6 +193,9 @@ public class BaseModal<T extends Serializable> extends Modal<T> { protected void onInitialize() { super.onInitialize(); + final WebMarkupContainer dialog = (WebMarkupContainer) this.get("dialog"); + dialog.setMarkupId(this.getId()); + final WebMarkupContainer footer = (WebMarkupContainer) this.get("dialog:footer"); footer.addOrReplace(new ListView<Component>("inputs", components) { http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java index 89970f8..fe31dc9 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/FieldPanel.java @@ -64,7 +64,15 @@ public abstract class FieldPanel<T extends Serializable> extends AbstractFieldPa } public FieldPanel<T> setStyleSheet(final String... classes) { - field.add(AttributeModifier.replace("class", StringUtils.join(classes, ' '))); + return setStyleSheet(true, classes); + } + + public FieldPanel<T> setStyleSheet(final boolean replace, final String... classes) { + if (replace) { + field.add(AttributeModifier.replace("class", StringUtils.join(classes, ' '))); + } else { + field.add(AttributeModifier.append("class", StringUtils.join(classes, ' '))); + } return this; } http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/resources/META-INF/resources/css/fieldstyle.css ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/META-INF/resources/css/fieldstyle.css b/client/console/src/main/resources/META-INF/resources/css/fieldstyle.css index 23ef109..3ff5c29 100644 --- a/client/console/src/main/resources/META-INF/resources/css/fieldstyle.css +++ b/client/console/src/main/resources/META-INF/resources/css/fieldstyle.css @@ -17,175 +17,46 @@ * under the License. */ .drop_button{ - vertical-align: middle; + vertical-align: middle !important; } .add_button{ - vertical-align: middle; - margin-left: 6px; + vertical-align: middle !important; + margin-left: 6px !important; } .date_size{ - width: 90px; + width: 90px !important; } .long_dynamicsize{ - width: 80%; + width: 80% !important; } .medium_dynamicsize{ - width: 45%; + width: 45% !important; } .short_dynamicsize{ - width: 35%; + width: 35% !important; } .long_fixedsize{ - width: 500px; + width: 500px !important; } .medium_fixedsize{ - width: 300px; + width: 300px !important; } .short_fixedsize{ - width: 150px; + width: 150px !important; } .veryshort_fixedsize{ - width: 70px; + width: 70px !important; } .all_dynamicsize{ - width: 100%; -} - -div#formtable { - display: table; - width: 100%; -} - -div#formtable > span:first-of-type { - display: table-row-group; - width: 100%; -} - -div.tablerow { - display: inline-table; - padding: 5px; - width: 99%; -} - -div.tablerow.connectorProp { - height:22px; - vertical-align: middle; - font-size: 12px; -} - -div.tablecolumn_connPropAttr { - display: table-cell; - vertical-align: middle; -} - -div.tablerow2 { - display: inline-table; - padding: 5px 0px 5px 0px; - width: 99%; -} - -div.alt { - background: #eff3ea; -} - -div.tablecolumn_label{ - display: table-cell; - font-size: 12px; - vertical-align: middle; - font-family: Verdana,Tahoma,sans-serif; - width: 30%; -} - -div.tablecolumn_field{ - display: table-cell; - vertical-align: middle; - font-family: Verdana,Tahoma,sans-serif; - width: 70%; -} - -div.tablecolumn_check{ - display: table-cell; - margin-right: 5px; - margin-left: 2px; - vertical-align: middle; -} - -div.tablecolumn2_label{ - display: table-cell; - font-size: 12px; - vertical-align: middle; - font-family: Verdana,Tahoma,sans-serif; - padding-left: 5px; - width: 15%; -} - -div.tablecolumn2_field{ - display: table-cell; - vertical-align: middle; - font-family: Verdana,Tahoma,sans-serif; - width: 35%; -} - -.ui-tabs .ui-tabs-panel { - background: none repeat scroll 0 0 #FFFFFF; - border-width: 0; - display: block; - overflow: auto; - padding: 1em 1.4em; -} - -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { - font-family: Verdana,Arial,sans-serif; - font-size: 12px; - padding: 2px 4px; -} - -.ui-widget-header { - border: 1px solid #aaaaaa - /*{borderColorHeader}*/; - background: #cccccc - /*{bgColorHeader}*/ - url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) - /*{bgImgUrlHeader}*/ - 50%/*{bgHeaderXPos}*/ - 50%/*{bgHeaderYPos}*/ - repeat-x/*{bgHeaderRepeat}*/; - color: #222222/*{fcHeader}*/; - font-weight: bold; - padding: 7px 15px; -} - -.ui-button { - display: inline-block; - position: relative; - margin-right: .1em; - cursor: pointer; - text-align: center; - zoom: 1; - overflow: visible; - padding: 7px 15px; -} - -.ui-spinner-button { - cursor: default; - display: block; - font-size: 0.5em; - height: 50%; - margin: 0; - overflow: hidden; - padding: 0; - position: absolute; - right: 0; - text-align: center; - width: 16px; + width: 100% !important; } http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css index dbf377c..ad0f032 100644 --- a/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css +++ b/client/console/src/main/resources/META-INF/resources/css/syncopeConsole.css @@ -218,3 +218,7 @@ span.overridable div.checkbox { margin: 0px; padding: 0px; } + +div#resource-modal.modal-lg { + width: 1200px; +} http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/resources/META-INF/resources/js/topology.js ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/META-INF/resources/js/topology.js b/client/console/src/main/resources/META-INF/resources/js/topology.js index 9327b01..53494d0 100644 --- a/client/console/src/main/resources/META-INF/resources/js/topology.js +++ b/client/console/src/main/resources/META-INF/resources/js/topology.js @@ -267,15 +267,14 @@ window.checkConnection = function() { } window.addEndpoint = function(source, target, scope) { - var sourceElement = $('#' + source); - + var sourceElement = $(document.getElementById(source)); + var top = parseFloat(sourceElement.css("top")) + 10; var left = parseFloat(sourceElement.css("left")) - 150; setPosition(target, left, top); - jsPlumb.ready(function(){ - jsPlumb.draggable(jsPlumb.getSelector("#" + target)); + jsPlumb.draggable(jsPlumb.getSelector(document.getElementById(target))); jsPlumb.connect({ source:source, target:target, scope:scope }, def); }); } http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html index ec4cc94..8cad9d0 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html +++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html @@ -39,6 +39,7 @@ under the License. <tbody> <tr> <th wicket:id="names"><span wicket:id="name"/></th> + <th /> </tr> <tr wicket:id="beans"> <td wicket:id="fields"><span wicket:id="field"/></td> @@ -52,7 +53,7 @@ under the License. </div><!-- /.box-body --> </div><!-- /.box --> </div> - <div class="modal-footer"> + <div class="modal-footer" style="text-align: right"> <input type="submit" class="btn btn-primary" value="Add" wicket:message="value:listview.add" wicket:id="add"/> </div> </wicket:fragment> http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceMappingPanel.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceMappingPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceMappingPanel.html index 12ec5d2..ccedbb8 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceMappingPanel.html +++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceMappingPanel.html @@ -73,18 +73,17 @@ under the License. <span wicket:id="password">[password]</span> </td> <td> - <span wicket:id="purpose"> + <div wicket:id="purpose" style="margin: 10px 0px 10px 0px"> <span wicket:id="purposeActions">[purpose]</span> - </span> + </div> </td> </tr> </tbody> <tfoot> <tr> - <td colspan="7" style="padding: 5px"> - <input type="submit" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" - wicket:id="addMappingBtn" /> + <td colspan="9" style="padding: 5px; text-align: right"> + <input type="submit" class="btn btn-primary" wicket:id="addMappingBtn" /> </td> </tr> </tfoot> http://git-wip-us.apache.org/repos/asf/syncope/blob/af8f263b/client/console/src/main/resources/org/apache/syncope/client/console/topology/Topology.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/Topology.html b/client/console/src/main/resources/org/apache/syncope/client/console/topology/Topology.html index 4b6eff8..c9bd4f3 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/Topology.html +++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/Topology.html @@ -69,6 +69,6 @@ under the License. </div> <span wicket:id="jsPlace"></span> </div> - <div wicket:id="modal">[modal]</div> + <div wicket:id="resource-modal">[modal]</div> </wicket:extend> </html>
