Search in sources :

Example 11 with Page

use of lucee.transformer.bytecode.Page in project Lucee by lucee.

the class Sprite method evaluate.

@Override
public void evaluate(Tag tag, TagLibTag tagLibTag, FunctionLib[] flibs) throws EvaluatorException {
    String id = "sprite_" + IDGenerator.intId();
    try {
        Page page = ASMUtil.getAncestorPage(tag);
        SourceCode sc = page.getSourceCode();
        String key = sc.id();
        key = HashUtil.create64BitHashAsString(Thread.currentThread().getId() + ":" + key);
        Expression src = tag.getAttribute("src").getValue();
        // get data from previous sprites
        Previous previous = sprites.get(key);
        if (previous != null) {
            previous.tag.removeAttribute("_ids");
            previous.tag.removeAttribute("_srcs");
            previous.tag = tag;
        } else {
            sprites.put(key, previous = new Previous(tag));
        }
        previous.ids.add(id);
        if (previous.src == null)
            previous.src = src;
        else {
            previous.src = tag.getFactory().opString(previous.src, tag.getFactory().createLitString(","));
            previous.src = tag.getFactory().opString(previous.src, src);
        }
        tag.addAttribute(new Attribute(false, "_id", tag.getFactory().createLitString(id), "string"));
        tag.addAttribute(new Attribute(false, "_ids", tag.getFactory().createLitString(lucee.runtime.type.util.ListUtil.listToList(previous.ids, ",")), "string"));
        tag.addAttribute(new Attribute(false, "_srcs", previous.src, "string"));
    } catch (Throwable e) {
        // TODO handle Excpetion much more precise
        ExceptionUtil.rethrowIfNecessary(e);
        throw new PageRuntimeException(Caster.toPageException(e));
    }
}
Also used : SourceCode(lucee.transformer.util.SourceCode) Expression(lucee.transformer.expression.Expression) Attribute(lucee.transformer.bytecode.statement.tag.Attribute) Page(lucee.transformer.bytecode.Page) PageRuntimeException(lucee.runtime.exp.PageRuntimeException)

Aggregations

Page (lucee.transformer.bytecode.Page)11 Expression (lucee.transformer.expression.Expression)5 LitString (lucee.transformer.expression.literal.LitString)5 TemplateException (lucee.runtime.exp.TemplateException)4 TransformerException (lucee.transformer.TransformerException)4 Attribute (lucee.transformer.bytecode.statement.tag.Attribute)4 EvaluatorException (lucee.transformer.cfml.evaluator.EvaluatorException)4 SourceCode (lucee.transformer.util.SourceCode)4 TagLibTag (lucee.transformer.library.tag.TagLibTag)3 PageSourceCode (lucee.transformer.util.PageSourceCode)3 ByteArrayInputStream (java.io.ByteArrayInputStream)2 Resource (lucee.commons.io.res.Resource)2 ConfigImpl (lucee.runtime.config.ConfigImpl)2 Statement (lucee.transformer.bytecode.Statement)2 ComponentTemplateException (lucee.transformer.cfml.script.AbstrCFMLScriptTransformer.ComponentTemplateException)2 LitBoolean (lucee.transformer.expression.literal.LitBoolean)2 TagLib (lucee.transformer.library.tag.TagLib)2 IOException (java.io.IOException)1 Charset (java.nio.charset.Charset)1 ArrayList (java.util.ArrayList)1