Skip to content

Commit

Permalink
Merge branch 'master' into dynamic-bones
Browse files Browse the repository at this point in the history
LeoVgr committed Jan 30, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2 parents 96f9dfb + 91ea483 commit a91af8d
Showing 18 changed files with 392 additions and 190 deletions.
20 changes: 13 additions & 7 deletions bin/app.html
Original file line number Diff line number Diff line change
@@ -137,13 +137,19 @@
if (file == null)
return;
var ext = file.split(".").pop().toLowerCase();
if( ext != "js" && ext != "css" ) return;
if (timer != 0)
clearTimeout(timer);
timer = setTimeout(function() {
reloadWatcher.close();
hide.Ide.inst.reload();
}, 1000);
if( ext == "js")
{
if (timer != 0)
clearTimeout(timer);
timer = setTimeout(function() {
reloadWatcher.close();
hide.Ide.inst.reload();
}, 1000);
}

if (ext == "css") {
hide.Ide.inst.reloadCss(file);
};
});
</script>

16 changes: 16 additions & 0 deletions hide/Ide.hx
Original file line number Diff line number Diff line change
@@ -309,6 +309,12 @@ class Ide extends hide.tools.IdeData {
function get_isFocused() {
return js.Browser.document.hasFocus();
}
public function focus() {
window.focus();
}
public function blur() {
window.blur();
}

function onWindowChange() {
if( hasReloaded )
@@ -793,6 +799,16 @@ class Ide extends hide.tools.IdeData {
js.Browser.location.reload();
}

public function reloadCss(path: String = null) {
var css = new js.jquery.JQuery('link[type="text/css"]');
css.each(function(i, e) : Void {
var link : js.html.LinkElement = cast e;
if (path == null || StringTools.contains(link.href, path)) {
link.href = link.href + "?" + haxe.Timer.stamp();
}
});
}

public function getCDBContent<T>( sheetName : String ) : Array<T> {
for( s in database.sheets )
if( s.name == sheetName ) {
80 changes: 47 additions & 33 deletions hide/comp/DomkitEditor.hx
Original file line number Diff line number Diff line change
@@ -53,6 +53,7 @@ class DomkitChecker extends ScriptEditor.ScriptChecker {
var t_string : Type;
var parsers : Array<domkit.CssValue.ValueParser>;
var lastVariables : Map<String, domkit.CssValue> = new Map();
var currentComponent : hscript.Checker.CClass;
public var usedEnums : Array<{ path : String, constrs : Array<String> }> = [];
public var params : Map<String, Type> = new Map();
public var components : Map<String, TypedComponent>;
@@ -107,19 +108,31 @@ class DomkitChecker extends ScriptEditor.ScriptChecker {
var parser = new domkit.MarkupParser();
parser.allowRawText = true;
var expr = parser.parse(dmlCode,filePath, position);
switch( expr.kind ) {
case Node(null) if( expr.children.length == 1 ): expr = expr.children[0];
default:
}
switch( expr.kind ) {
case Node(name) if( name != null ):
var comp = resolveComp(name.split(":")[0]);
if( comp != null && comp.classDef != null )
checker.setGlobal("this",TInst(comp.classDef,[]));
default:
}
try {
checkDMLRec(expr, true);
for( c in expr.children ) {
var prev = @:privateAccess checker.locals.copy();
var prevGlobals = @:privateAccess checker.globals.copy();

currentComponent = null;
switch( c.kind ) {
case Node(name):
var comp = resolveComp(name.split(":")[0]);
if( comp != null && comp.classDef != null ) {
currentComponent = comp.classDef;
checker.setGlobals(comp.classDef, true);
checker.setGlobal("this",TInst(comp.classDef,[]));
}
defineComponent(name, c, params);
default:
continue;
}
for( c in c.children )
checkDMLRec(c);
@:privateAccess {
checker.locals = prev;
checker.globals = prevGlobals;
}
}
} catch( e : hscript.Expr.Error ) {
throw new domkit.Error(e.toString(), e.pmin, e.pmax);
}
@@ -310,13 +323,8 @@ class DomkitChecker extends ScriptEditor.ScriptChecker {
}
if( !dup )
pl.push(p);
} else {
switch( f.t ) {
case TFun(_):
default:
comp.vars.set(f.name, f.t);
}
}
} else if( f.canWrite )
comp.vars.set(f.name, f.t);
}
cdefs.push({ name : name, c : c });
}
@@ -341,14 +349,21 @@ class DomkitChecker extends ScriptEditor.ScriptChecker {
}

function resolveComp( name : String ) : TypedComponent {

var rootComp = name;
var index = name.indexOf(".");
if( index >= 0 ) {
rootComp = name.substr(0, index);
name = name.substr(index+1);
}
var c = components.get(name);
if( c != null )
return c;
// dynamic load from comps directories
var dirs : Array<String> = config.get("domkit.components");
if( dirs == null ) dirs = ["ui/comp"];
for( d in dirs ) {
var path = d+"/"+name+".domkit";
var path = d+"/"+rootComp.split("-").join("_")+".domkit";
var content = try sys.io.File.getContent(ide.getPath(path)) catch( e : Dynamic ) continue;
var data = hrt.impl.DomkitViewer.DomkitFile.parse(content);
var node = null, params = new Map();
@@ -544,7 +559,7 @@ class DomkitChecker extends ScriptEditor.ScriptChecker {
c.arguments = parent == null ? [] : parent.arguments;
else {
c.arguments = [];
for( a in e.arguments ) {
for( i => a in e.arguments ) {
var type = null;
var name = switch( a.value ) {
case Code(c) if( IDENT.match(c) ):
@@ -566,6 +581,11 @@ class DomkitChecker extends ScriptEditor.ScriptChecker {
domkitError("Invalid parameter", a.pmin, a.pmax);
continue;
}
if( type == null && currentComponent != null ) {
var args = switch( currentComponent.constructor?.t ) { case null: null; case TFun(args,_): args; default: null; };
if( args != null && args[i].name == name )
type = args[i].t;
}
if( type == null )
type = params.get(name);
if( type == null )
@@ -584,17 +604,8 @@ class DomkitChecker extends ScriptEditor.ScriptChecker {
return c;
}

function checkDMLRec( e : domkit.MarkupParser.Markup, isRoot=false ) {
function checkDMLRec( e : domkit.MarkupParser.Markup ) {
switch( e.kind ) {
case Node(null):
for( c in e.children )
checkDMLRec(c,isRoot);
case Node(name) if( isRoot ):
var prev = @:privateAccess checker.locals.copy();
defineComponent(name, e, params);
for( c in e.children )
checkDMLRec(c);
@:privateAccess checker.locals = prev;
case Node(name):
var c = resolveComp(name);
if( c == null )
@@ -752,8 +763,11 @@ class DomkitEditor extends CodeEditor {
}

public function getComponent() {
var compReg = ~/<([A-Za-z0-9_]+)/;
if( !compReg.match(code) )
var compReg = ~/<\/([A-Za-z0-9_-]+)/;
var last = code.lastIndexOf("</");
if( last < 0 )
return null;
if( !compReg.match(code.substr(last)) )
return null;
var name = compReg.matched(1);
return checker.components.get(name);
8 changes: 5 additions & 3 deletions hide/comp/SceneEditor.hx
Original file line number Diff line number Diff line change
@@ -2869,12 +2869,14 @@ class SceneEditor {

el.toggleClass("childSelected", selectedParents.exists(p));

el.toggleClass("disabled", !p.enabled);
el.toggleClass("editorOnly", p.editorOnly);
el.toggleClass("inGameOnly", p.inGameOnly);
el.toggleClass("locked", p.locked);

if(obj3d != null) {
el.toggleClass("disabled", !p.enabled || !obj3d.visible);
el.toggleClass("hidden", isHidden(obj3d));
el.toggleClass("locked", p.locked);
el.toggleClass("editorOnly", p.editorOnly);
el.toggleClass("inGameOnly", p.inGameOnly);

var visTog = el.find(".visibility-toggle").first();
if(visTog.length == 0) {
1 change: 1 addition & 0 deletions hide/comp/ScenePreview.hx
Original file line number Diff line number Diff line change
@@ -156,6 +156,7 @@ class ScenePreview extends Scene {
**/
public function setObjectPath(path: String) {
previewSettings.modelPath = path;
saveSettings();
reloadObject();
}

4 changes: 3 additions & 1 deletion hide/view/Domkit.hx
Original file line number Diff line number Diff line change
@@ -104,6 +104,8 @@ class Domkit extends FileView {
var allParams = new Map();
dmlEditor.checker.params = allParams;
var comp = dmlEditor.getComponent();
if( comp != null && comp.classDef != null )
paramsEditor.checker.checker.setGlobals(comp.classDef, true);
paramsEditor.doCheckScript();
var checker = cast(paramsEditor.checker,hide.comp.DomkitEditor.DomkitChecker);
var tparams = try @:privateAccess checker.typeCode(paramsEditor.code,0) catch( e : hscript.Expr.Error ) null;
@@ -167,7 +169,7 @@ class Domkit extends FileView {
}

override function getDefaultContent() {
var tag = getPath().split("/").pop().split(".").shift();
var tag = getPath().split("/").pop().split(".").shift().split("_").join("-");
return haxe.io.Bytes.ofString('<css>\n$tag {\n}\n</css>\n<$tag>\n</$tag>');
}

Loading

0 comments on commit a91af8d

Please sign in to comment.