/** * Copyright 2013 European Parliament * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://joinup.ec.europa.eu/software/page/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and limitations under the Licence. */ package org.nsesa.editor.gwt.an.common.client.ui.overlay.document; import com.google.inject.Inject; import com.google.inject.name.Named; import org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.akomantoso20.*; import org.nsesa.editor.gwt.an.common.client.ui.overlay.document.resources.Messages; import org.nsesa.editor.gwt.core.client.ui.overlay.Formatter; import org.nsesa.editor.gwt.core.client.ui.overlay.document.DefaultOverlaySnippetFactory; import org.nsesa.editor.gwt.core.client.ui.overlay.document.OverlaySnippet; import org.nsesa.editor.gwt.core.client.ui.overlay.document.OverlayWidget; /** * Specialized factory for snippets that contain small 'templates' for a given overlay widget. For example, if you add * a paragraph, you'd want to retrieve a structure that resolves something like: * {@code <paragraph><num>${placeholder.num}</num><content><p>${placeholder.content}</p></content></paragraph>} * Rather than just the {@code <paragraph></paragraph>} structure. * <p/> * It also supports the ability to set a selection and caret position, for easier and quicker editing in the CKEditor. * <p/> * This class supports the AkomaNtoso 2.0 specification. * * @author <a href="mailto:stelian.groza@gmail.com">Stelian Groza</a> * Date: 8/04/13 14:09 */ public class AkomaNtosoOverlaySnippetFactory extends DefaultOverlaySnippetFactory { private final Formatter formatter; private final String caretPositionClassName; private final Messages messages; @Inject public AkomaNtosoOverlaySnippetFactory(@Named("html") final Formatter formatter, @Named("caretPositionClassName") final String caretPositionClassName, Messages messages) { this.formatter = formatter; this.caretPositionClassName = caretPositionClassName; this.messages = messages; // AN 2.0 registerSnippet(new Point(), new OverlaySnippet("point", getAN20DefaultSnippet())); registerSnippet(new Indent(), new OverlaySnippet("indent", getAN20DefaultSnippet())); registerSnippet(new Citation(), new OverlaySnippet("citation", getAN20DefaultUnnumberedSnippet())); registerSnippet(new Recital(), new OverlaySnippet("recital", getAN20RecitalSnippet())); registerSnippet(new Paragraph(), new OverlaySnippet("paragraph", getAN20DefaultSnippet())); registerSnippet(new Article(), new OverlaySnippet("article", getAN20ArticleSnippet())); registerSnippet(new Subparagraph(), new OverlaySnippet("subparagraph", getAN20DefaultSnippet())); // AN 3.0 - 02 registerSnippet(new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Point(), new OverlaySnippet("point", getAN30DefaultSnippet())); registerSnippet(new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Indent(), new OverlaySnippet("indent", getAN30DefaultSnippet())); registerSnippet(new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Citation(), new OverlaySnippet("citation", getAN30DefaultUnnumberedSnippet())); registerSnippet(new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Recital(), new OverlaySnippet("recital", getAN30RecitalSnippet())); registerSnippet(new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Paragraph(), new OverlaySnippet("paragraph", getAN30DefaultSnippet())); registerSnippet(new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Article(), new OverlaySnippet("article", getAN30ArticleSnippet())); registerSnippet(new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Subparagraph(), new OverlaySnippet("subparagraph", getAN30DefaultSnippet())); } protected String getAN20ArticleSnippet() { I i = new I(); i.html(messages.placeholderNumArticle()); Num num = new Num(); num.addI(i); Heading heading = new Heading(); B b = new B(); b.html("Heading"); heading.addB(b); setCaret(b); P p = new P(); p.html(messages.placeholderContentDefault()); setCaret(p); Content content = new Content(); content.addP(p); Paragraph paragraph = new Paragraph(); Num numP = new Num(); paragraph.setNum(numP); paragraph.setContent_(content); return formatter.format(num) + formatter.format(heading) + formatter.format(paragraph); } protected String getAN20DefaultSnippet() { Num num = new Num(); num.html(messages.placeholderNumDefault()); P p = new P(); // set an empty character - this acts as a caret anchor position. p.html(messages.placeholderContentDefault()); setCaret(p); Content content = new Content(); content.addP(p); return formatter.format(num) + formatter.format(content); } protected String getAN20RecitalSnippet() { Num num = new Num(); num.html(messages.placeholderNumDefault()); P p = new P(); // set an empty character - this acts as a caret anchor position. p.html(messages.placeholderContentDefault()); setCaret(p); return formatter.format(num) + formatter.format(p); } protected String getAN20DefaultUnnumberedSnippet() { P p = new P(); // set an empty character - this acts as a caret anchor position. p.html(messages.placeholderContentDefault()); setCaret(p); Content content = new Content(); content.addP(p); return formatter.format(content); } protected String getAN30ArticleSnippet() { org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.I i = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.I(); i.html(messages.placeholderNumArticle()); org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Num num = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Num(); num.addI(i); org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Heading heading = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Heading(); org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.B b = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.B(); b.html("Heading"); heading.addB(b); setCaret(b); org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.P p = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.P(); p.html(messages.placeholderContentDefault()); setCaret(p); org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Content content = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Content(); content.addP(p); org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Paragraph paragraph = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Paragraph(); org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Num numP = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Num(); paragraph.setNum(numP); paragraph.setContent_(content); return formatter.format(num) + formatter.format(heading) + formatter.format(paragraph); } protected String getAN30DefaultSnippet() { org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Num num = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Num(); num.html(messages.placeholderNumDefault()); org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.P p = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.P(); // set an empty character - this acts as a caret anchor position. p.html(messages.placeholderContentDefault()); setCaret(p); org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Content content = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Content(); content.addP(p); return formatter.format(num) + formatter.format(content); } protected String getAN30RecitalSnippet() { org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Num num = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Num(); num.html(messages.placeholderNumDefault()); org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.P p = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.P(); // set an empty character - this acts as a caret anchor position. p.html(messages.placeholderContentDefault()); setCaret(p); return formatter.format(num) + formatter.format(p); } protected String getAN30DefaultUnnumberedSnippet() { org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.P p = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.P(); // set an empty character - this acts as a caret anchor position. p.html(messages.placeholderContentDefault()); setCaret(p); org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Content content = new org.nsesa.editor.gwt.an.common.client.ui.overlay.document.gen.csd02.Content(); content.addP(p); return formatter.format(content); } @Override public String getCaretPositionClassName() { return caretPositionClassName; } protected void setCaret(final OverlayWidget overlayWidget) { overlayWidget.getOverlayElement().addClassName(caretPositionClassName); } }