Skip to content

Commit

Permalink
#8 - first version of modal component with form inside! :D all stuff …
Browse files Browse the repository at this point in the history
…finally migrated onto vue.js, lots of changes, new stuff introduced, yummy ;}
  • Loading branch information
activey committed Nov 8, 2016
1 parent 8a9667a commit b7771f9
Show file tree
Hide file tree
Showing 28 changed files with 609 additions and 384 deletions.
10 changes: 10 additions & 0 deletions licket-common/src/main/java/org/licket/core/id/CompositeId.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@

import com.google.common.base.CaseFormat;
import com.google.common.base.Splitter;
import com.google.common.collect.ObjectArrays;

import java.util.Arrays;

/**
* @author activey
Expand Down Expand Up @@ -57,4 +60,11 @@ public void forward() {
public String current() {
return idParts[index];
}

public final CompositeId join(CompositeId compositeId) {
if (compositeId == null) {
return new CompositeId(idParts);
}
return new CompositeId(concat(idParts, compositeId.idParts, String.class));
}
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,40 @@
package org.licket.demo.licket;

import org.licket.core.module.application.LicketComponentModelReloader;
import org.licket.demo.view.AddContactPanel;
import org.licket.demo.view.ContactsAppRoot;
import org.licket.demo.view.ContactsPanel;
import org.licket.semantic.SemanticUIPluginConfiguration;
import org.licket.semantic.component.modal.ModalSettings;
import org.licket.semantic.component.modal.ModalSettingsBuilder;
import org.licket.spring.annotation.LicketComponent;
import org.licket.spring.annotation.LicketRootContainer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

import static org.licket.semantic.component.modal.ModalSettingsBuilder.builder;

@Configuration
@Import(SemanticUIPluginConfiguration.class)
public class LicketConfiguration {

@LicketRootContainer
public ContactsAppRoot root(@Autowired LicketComponentModelReloader modelReloader) {
return new ContactsAppRoot("contacts-page", contactsPanel(modelReloader), modelReloader);
return new ContactsAppRoot("contacts-page", modelReloader);
}

@LicketComponent
public ContactsPanel contactsPanel(LicketComponentModelReloader modelReloader) {
public ContactsPanel contactsPanel(@Autowired LicketComponentModelReloader modelReloader) {
return new ContactsPanel("contacts-panel", modelReloader);
}

private ModalSettings modalDialogSettings() {
return builder().build();
}

@LicketComponent
public AddContactPanel addContactPanel(@Autowired LicketComponentModelReloader modelReloader) {
return new AddContactPanel("add-contact-panel", modelReloader, modalDialogSettings());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class AddContactForm extends AbstractLicketForm<Contact> {

public AddContactForm(String id, ContactsService contactsService, LicketRemote remoteCommunication,
LicketComponentModelReloader modelReloader) {
super(id, Contact.class, ofModelObject(new Contact()), fromComponentClass(AddContactForm.class), remoteCommunication, modelReloader);
super(id, Contact.class, ofModelObject(new Contact()), internalTemplateView(), remoteCommunication, modelReloader);
this.contactsService = checkNotNull(contactsService, "Contacts service has to be not null!");

add(new LicketInput("name"));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package org.licket.demo.view;

import org.licket.core.module.application.LicketComponentModelReloader;
import org.licket.core.module.application.LicketRemote;
import org.licket.core.view.container.AbstractLicketMultiContainer;
import org.licket.core.view.container.LicketInlineContainer;
import org.licket.core.view.link.AbstractLicketLink;
import org.licket.core.view.link.ComponentActionCallback;
import org.licket.core.view.link.ComponentFunctionCallback;
import org.licket.demo.model.Contact;
import org.licket.demo.service.ContactsService;
import org.licket.demo.view.modal.AddContactFormModalSection;
import org.licket.semantic.component.modal.AbstractSemanticUIModal;
import org.licket.semantic.component.modal.ModalSection;
import org.licket.semantic.component.modal.ModalSettings;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.function.BiConsumer;
import java.util.function.Consumer;

import static org.licket.core.model.LicketComponentModel.emptyComponentModel;
import static org.licket.core.view.LicketComponentView.internalTemplateView;

/**
* @author grabslu
*/
public class AddContactPanel extends AbstractLicketMultiContainer<Void> {

@Autowired
private ContactsService contactsService;

@Autowired
private LicketRemote remoteCommunication;

private final ModalSettings modalSettings;
private AbstractSemanticUIModal modal;
private BiConsumer<Contact, ComponentActionCallback> callback;

public AddContactPanel(String id, LicketComponentModelReloader modelReloader, ModalSettings modalSettings) {
super(id, Void.class, emptyComponentModel(), internalTemplateView(), modelReloader);
this.modalSettings = modalSettings;
}

public final void onContactAdded(BiConsumer<Contact, ComponentActionCallback> callback) {
this.callback = callback;
}

@Override
protected void onInitializeContainer() {
add(new AbstractLicketLink("add-contact") {
@Override
protected void onClick(ComponentFunctionCallback callback) {
callback.call(modal.callShow(this));
}
});

add(modal = new AbstractSemanticUIModal("form-modal", modalSettings, modelReloader()) {

@Override
protected void onInitializeBody(ModalSection bodySection, String contentId) {
bodySection.add(new AddContactFormModalSection(contentId, modelReloader()) {
@Override
protected void onInitializeContainer() {
add(new AddContactForm("new-contact-form", contactsService, remoteCommunication, modelReloader()) {

@Override
protected void onAfterSubmit(ComponentActionCallback componentActionCallback) {
if (callback != null) {
callback.accept(getComponentModel().get(), componentActionCallback);
}
onAfterContactAdded(componentActionCallback);
}
});
}
});
}

@Override
protected void onInitializeActions(ModalSection content, String contentId) {
content.add(new LicketInlineContainer<Void>(contentId, Void.class, modelReloader()) {
@Override
protected void onInitializeContainer() {
}
});
}
});

}

protected void onAfterContactAdded(ComponentActionCallback componentActionCallback) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,27 @@

import org.licket.core.module.application.LicketComponentModelReloader;
import org.licket.core.view.container.AbstractLicketMultiContainer;
import org.licket.core.view.container.LicketComponentContainer;
import org.springframework.beans.factory.annotation.Autowired;

public class ContactsAppRoot extends AbstractLicketMultiContainer<Void> {

public ContactsAppRoot(String id, LicketComponentContainer contactsPanel, LicketComponentModelReloader modelReloader) {
@Autowired
private ContactsPanel contactsPanel;

@Autowired
private AddContactPanel addContactPanel;

public ContactsAppRoot(String id, LicketComponentModelReloader modelReloader) {
super(id, Void.class, emptyComponentModel(), fromComponentClass(ContactsAppRoot.class), modelReloader);
}

@Override
protected void onInitializeContainer() {
addContactPanel.onContactAdded((contact, componentActionCallback) -> {
contactsPanel.reloadList();
componentActionCallback.reload(contactsPanel);
});
add(contactsPanel);
add(addContactPanel);
}
}
26 changes: 2 additions & 24 deletions licket-demo/src/main/java/org/licket/demo/view/ContactsPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@
import org.licket.core.module.application.LicketComponentModelReloader;
import org.licket.core.module.application.LicketRemote;
import org.licket.core.view.container.AbstractLicketMultiContainer;
import org.licket.core.view.container.LicketInlineContainer;
import org.licket.core.view.link.AbstractLicketActionLink;
import org.licket.core.view.link.AbstractLicketLink;
import org.licket.core.view.link.ComponentActionCallback;
import org.licket.core.view.link.ComponentFunctionCallback;
import org.licket.demo.model.Contacts;
import org.licket.demo.service.ContactsService;
import org.licket.demo.view.modal.AddContactFormModalSection;
import org.licket.semantic.component.modal.AbstractSemanticUIModal;
import org.licket.semantic.component.modal.ModalSection;
import org.licket.semantic.component.modal.ModalSettings;
Expand All @@ -32,7 +34,6 @@ public class ContactsPanel extends AbstractLicketMultiContainer<Contacts> {
private LicketRemote remoteCommunication;

private LicketComponentModelReloader modelReloader;
private AbstractSemanticUIModal modal;

public ContactsPanel(String id, LicketComponentModelReloader modelReloader) {
super(id, Contacts.class, emptyComponentModel(), internalTemplateView(), modelReloader);
Expand All @@ -41,29 +42,6 @@ public ContactsPanel(String id, LicketComponentModelReloader modelReloader) {

@Override
protected void onInitializeContainer() {
add(modal = new AbstractSemanticUIModal("form-modal", modalSettings(), modelReloader) {

@Override
protected void onInitializeBody(ModalSection bodySection, String contentId) {
bodySection.add(new AddContactForm(contentId, contactsService, remoteCommunication, modelReloader) {

@Override
protected void onAfterSubmit(ComponentActionCallback componentActionCallback) {
reloadList();

componentActionCallback.reload(ContactsPanel.this);
}
});
}
});

add(new AbstractLicketLink("add-contact") {
@Override
protected void onClick(ComponentFunctionCallback callback) {
callback.call(modal.callShow(this));
}
});

add(new ContactsList("contact", new LicketComponentModel("contacts"), modelReloader));
add(new AbstractLicketActionLink("reload", remoteCommunication, modelReloader) {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.licket.demo.view.modal;

import org.licket.core.module.application.LicketComponentModelReloader;
import org.licket.core.view.container.AbstractLicketMonoContainer;

import static org.licket.core.model.LicketComponentModel.emptyComponentModel;
import static org.licket.core.view.LicketComponentView.fromComponentClass;

/**
* @author grabslu
*/
public class AddContactFormModalSection extends AbstractLicketMonoContainer<Void> {

public AddContactFormModalSection(String id, LicketComponentModelReloader modelReloader) {
super(id, Void.class, emptyComponentModel(),
fromComponentClass(AddContactFormModalSection.class), modelReloader);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@
<div>
<h1 class="ui center aligned header">Contacts list</h1>

<div class="ui container" lick:id="contacts-panel">
<div lick:id="form-modal"></div>

<div class="ui container" lick:id="add-contact-panel">
<div class="ui submit button" lick:id="add-contact">
Add contact
</div>
<div lick:id="form-modal"></div>
</div>

<div class="ui container" lick:id="contacts-panel">
<div class="ui relaxed divided items">
<div class="item" lick:id="contact">
<div class="ui small image">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<div xmlns:lick="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">
<form lick:id="new-contact-form" class="ui form">
<div class="two fields">
<div class="field">
<label>Name</label>
<input type="text" placeholder="Full Name" lick:id="name" />
</div>

<div class="field">
<label>Description</label>
<input type="text" placeholder="Some description" lick:id="description" />
</div>
</div>

<div class="ui submit button" lick:id="add">
Add one
</div>
</form>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
import java.io.InputStream;
import java.io.OutputStream;

import org.licket.core.id.CompositeId;
import org.licket.surface.tag.ElementFactories;
import org.licket.xml.Builder;
import org.licket.xml.ParsingException;
import org.licket.xml.dom.Document;

import static org.licket.surface.SurfaceProcessingException.contentParsingException;
import static org.licket.surface.SurfaceProcessingException.ioException;
import static org.licket.surface.tag.ElementFactories.serviceLoaderFactories;

/**
*
Expand All @@ -20,17 +20,19 @@
public class SurfaceContext {

private final ElementFactories elementFactories;
private final CompositeId parentSurfaceContextRootId;
private boolean skipComments;

public SurfaceContext() {
this(serviceLoaderFactories());
public SurfaceContext(ElementFactories elementFactories, CompositeId parentSurfaceContextRootId) {
this.elementFactories = elementFactories;
this.parentSurfaceContextRootId = parentSurfaceContextRootId;
}

public SurfaceContext(ElementFactories elementFactories) {
this.elementFactories = elementFactories;
this(elementFactories, null);
}

public void processTemplateContent(InputStream templateContent, OutputStream output) {
public final void processTemplateContent(InputStream templateContent, OutputStream output) {
Builder builder = new Builder(new SurfaceNodeFactory(this, elementFactories));
try {
Document document = builder.build(templateContent);
Expand All @@ -42,11 +44,19 @@ public void processTemplateContent(InputStream templateContent, OutputStream out
}
}

public boolean isSkipComments() {
public final boolean isSubContext() {
return parentSurfaceContextRootId != null;
}

public final boolean isSkipComments() {
return skipComments;
}

public void setSkipComments(boolean skipComments) {
this.skipComments = skipComments;
public final CompositeId getParentSurfaceContextRootId() {
return parentSurfaceContextRootId;
}

public final SurfaceContext subContext(CompositeId parentContextId) {
return new SurfaceContext(elementFactories, parentContextId);
}
}
Loading

0 comments on commit b7771f9

Please sign in to comment.