package com.mozz.htmlnative.script.lua; import android.content.Intent; import android.net.Uri; import com.mozz.htmlnative.HNEnvironment; import com.mozz.htmlnative.HNSandBoxContext; import com.mozz.htmlnative.dom.AttachedElement; import com.mozz.htmlnative.dom.DomElement; import com.mozz.htmlnative.parser.CssParser; import org.luaj.vm2.LuaString; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; import org.luaj.vm2.lib.OneArgFunction; import org.luaj.vm2.lib.TwoArgFunction; import java.util.HashMap; import java.util.Map; /** * @author Yang Tao, 17/5/11. */ class LDocument extends LuaTable implements ILGlobalObject { LDocument(final HNSandBoxContext sandBoxContext) { super(); set("version", LuaString.valueOf(HNEnvironment.v)); set("jump", new OneArgFunction() { @Override public LuaValue call(LuaValue arg) { String uri = arg.tojstring(); Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); sandBoxContext.getAndroidContext().startActivity(i); return LuaValue.NIL; } }); set("createView", new TwoArgFunction() { @Override public LuaValue call(LuaValue tag, LuaValue style) { if (tag instanceof LuaString && style instanceof LuaString) { DomElement domElement = new AttachedElement(); domElement.setType(tag.tojstring()); Map<String, Object> styleSets = new HashMap<>(); CssParser.parseInlineStyle(style.tojstring(), new StringBuilder(), styleSets); String idStr = (String) styleSets.get("id"); if (idStr != null) { domElement.setId(idStr); styleSets.remove("id"); } String[] clazz = (String[]) styleSets.get("class"); if (clazz != null) { domElement.setClazz(clazz); styleSets.remove("class"); } return new LView(domElement, styleSets, sandBoxContext); } return LuaValue.NIL; } }); } @Override public int type() { return TUSERDATA; } @Override public String typename() { return TYPE_NAMES[3]; } @Override public String objectName() { return "document"; } }