Skip to content

Commit 4756c04

Browse files
committed
fix context evaluation and single component dml
1 parent 4c7e295 commit 4756c04

File tree

3 files changed

+49
-15
lines changed

3 files changed

+49
-15
lines changed

hide/comp/DomkitEditor.hx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,6 @@ class DomkitChecker extends ScriptEditor.ScriptChecker {
108108
var parser = new domkit.MarkupParser();
109109
parser.allowRawText = true;
110110
var expr = parser.parse(dmlCode,filePath, position);
111-
switch( expr.kind ) {
112-
case Node(null) if( expr.children.length == 1 ): expr = expr.children[0];
113-
default:
114-
}
115111
try {
116112
for( c in expr.children ) {
117113
var prev = @:privateAccess checker.locals.copy();
@@ -760,8 +756,11 @@ class DomkitEditor extends CodeEditor {
760756
}
761757

762758
public function getComponent() {
763-
var compReg = ~/<([A-Za-z0-9_]+)/;
764-
if( !compReg.match(code) )
759+
var compReg = ~/<\/([A-Za-z0-9_-]+)/;
760+
var last = code.lastIndexOf("</");
761+
if( last < 0 )
762+
return null;
763+
if( !compReg.match(code.substr(last)) )
765764
return null;
766765
var name = compReg.matched(1);
767766
return checker.components.get(name);

hide/view/Domkit.hx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ class Domkit extends FileView {
104104
var allParams = new Map();
105105
dmlEditor.checker.params = allParams;
106106
var comp = dmlEditor.getComponent();
107+
if( comp != null && comp.classDef != null )
108+
paramsEditor.checker.checker.setGlobals(comp.classDef, true);
107109
paramsEditor.doCheckScript();
108110
var checker = cast(paramsEditor.checker,hide.comp.DomkitEditor.DomkitChecker);
109111
var tparams = try @:privateAccess checker.typeCode(paramsEditor.code,0) catch( e : hscript.Expr.Error ) null;

hrt/impl/DomkitViewer.hx

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ class DomkitViewer extends h2d.Object {
366366
function loadComponents( res : hxd.res.Resource ) {
367367
var fullText = res.entry.getText();
368368
var data = DomkitFile.parse(fullText);
369-
var inf = { comps : [], params : null };
369+
var inf = { comps : [], params : (null:Dynamic) };
370370
handleErrors(res, function() {
371371
var parser = new domkit.MarkupParser();
372372
parser.allowRawText = true;
@@ -384,13 +384,44 @@ class DomkitViewer extends h2d.Object {
384384
}
385385
}
386386
}
387-
var vparams : Dynamic = evalCode(interp,eparams);
388-
if( vparams != null ) {
389-
for( f in Reflect.fields(vparams) ) {
390-
var forceNull = res == resource && definedClasses.indexOf(f) >= 0;
391-
interp.variables.set(f, forceNull ? null : Reflect.field(vparams,f));
387+
var mainComp = null;
388+
for( i in 0...expr.children.length ) {
389+
var m = expr.children[expr.children.length - i - 1];
390+
switch( m.kind ) {
391+
case Node(name):
392+
var parts = name.split(":");
393+
var name = parts[0];
394+
mainComp = domkit.Component.get(name, true);
395+
break;
396+
default:
392397
}
393398
}
399+
400+
var prev = interp.variables.copy();
401+
var mainInst : Dynamic = null;
402+
if( mainComp != null ) {
403+
var cl = @:privateAccess mainComp.classValue;
404+
if( cl != null ) {
405+
mainInst = Type.createEmptyInstance(cl);
406+
interp.setContext(mainInst);
407+
}
408+
}
409+
var vparams = switch( eparams.e ) {
410+
case EObject(fl):
411+
[for( f in fl ) {
412+
var val : Dynamic = evalCode(interp,f.e);
413+
var forceNull = res == resource && definedClasses.indexOf(f.name) >= 0;
414+
if( forceNull ) val = null;
415+
interp.variables.set(f.name, val);
416+
if( mainInst != null ) try Reflect.setProperty(mainInst,f.name, val) catch( e : Dynamic ) {};
417+
{ name : f.name, value : val };
418+
}];
419+
default: throw "assert";
420+
}
421+
interp.variables = prev;
422+
for( f in vparams )
423+
interp.variables.set(f.name, f.value);
424+
394425
for( m in expr.children ) {
395426
switch( m.kind ) {
396427
case Node(name):
@@ -411,8 +442,8 @@ class DomkitViewer extends h2d.Object {
411442
if( compClass != null ) {
412443
inst = Type.createEmptyInstance(compClass);
413444
interp.setContext(inst);
414-
for( f in Reflect.fields(vparams) )
415-
try Reflect.setProperty(inst, f, Reflect.field(vparams,f)) catch( e : Dynamic ) {}
445+
for( f in vparams )
446+
try Reflect.setProperty(inst, f.name, f.value) catch( e : Dynamic ) {}
416447
}
417448
}
418449
var args = [];
@@ -438,7 +469,9 @@ class DomkitViewer extends h2d.Object {
438469
default:
439470
}
440471
}
441-
inf.params = vparams;
472+
inf.params = {};
473+
for( v in vparams )
474+
Reflect.setField(inf.params, v.name, v.value);
442475
});
443476
return inf;
444477
}

0 commit comments

Comments
 (0)