package com.twasyl.slideshowfx.content.extension.link;
import com.twasyl.slideshowfx.content.extension.AbstractContentExtension;
import com.twasyl.slideshowfx.content.extension.link.controllers.LinkContentExtensionController;
import com.twasyl.slideshowfx.markup.IMarkup;
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
import javafx.fxml.FXMLLoader;
import javafx.scene.layout.Pane;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* The LinkContentExtension extends the AbstractContentExtension. It allows to build a content containing links to insert
* inside a SlideshowFX presentation.
* This extension doesn't use other resources
* This extension supports HTML and Textile markup languages.
*
* @author Thierry Wasylczenko
* @version 1.1n
* @since SlideshowFX 1.0
*/
public class LinkContentExtension extends AbstractContentExtension {
private static final Logger LOGGER = Logger.getLogger(LinkContentExtension.class.getName());
protected LinkContentExtensionController controller;
public LinkContentExtension() {
super("LINK", null,
FontAwesomeIcon.LINK,
"Insert a link",
"Insert a link");
}
@Override
public Pane getUI() {
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("/com/twasyl/slideshowfx/content/extension/link/fxml/LinkContentExtension.fxml"));
Pane root = null;
try {
loader.setClassLoader(getClass().getClassLoader());
root = loader.load();
this.controller = loader.getController();
} catch (IOException e) {
LOGGER.log(Level.SEVERE, "Can not load UI for LinkContentExtension", e);
}
return root;
}
@Override
public String buildContentString(IMarkup markup) {
final StringBuilder builder = new StringBuilder();
final boolean addressNotEmpty = this.controller.getAddress() != null && !this.controller.getAddress().trim().isEmpty();
if (addressNotEmpty) {
if (markup == null || "HTML".equals(markup.getCode())) {
builder.append(this.buildDefaultContentString());
} else if ("TEXTILE".equals(markup.getCode())) {
builder.append(this.buildTextileContentString());
} else if ("MARKDOWN".equals(markup.getCode())) {
builder.append(this.buildMarkdownContentString());
} else {
builder.append(this.buildDefaultContentString());
}
}
return builder.toString();
}
@Override
public String buildDefaultContentString() {
final StringBuilder builder = new StringBuilder();
builder.append("<a href=\"").append(this.controller.getAddress()).append("\">")
.append(this.controller.getText() == null || this.controller.getText().trim().isEmpty() ?
this.controller.getAddress() : this.controller.getText())
.append("</a>");
return builder.toString();
}
/**
* Build the string representing a link in textile.
*
* @return The built string in the textile markup language.
*/
private String buildTextileContentString() {
final StringBuilder builder = new StringBuilder("\"");
if (this.controller.getText() == null || this.controller.getText().trim().isEmpty()) {
builder.append(this.controller.getAddress());
} else {
builder.append(this.controller.getText());
}
builder.append("\":").append(this.controller.getAddress());
return builder.toString();
}
/**
* Build the string representing a link in markdown.
*
* @return The built string in the markdown language.
*/
private String buildMarkdownContentString() {
final StringBuilder builder = new StringBuilder();
final boolean emptyText = this.controller.getText() == null || this.controller.getText().trim().isEmpty();
if (!emptyText) {
builder.append("[").append(this.controller.getText().trim()).append("](");
}
builder.append(this.controller.getAddress());
if (!emptyText) {
builder.append(")");
}
return builder.toString();
}
}