diff --git a/jslib/src/core/core.kt b/jslib/src/core/core.kt index c70f0bddcc7..15c6847ac40 100644 --- a/jslib/src/core/core.kt +++ b/jslib/src/core/core.kt @@ -27,5 +27,9 @@ native fun setInterval(callback : ()-> Unit) {} -library("collectionsMax") -public fun max(col : Collection, comp : Comparator) : T = f +native +open class DomElement() { + val offsetLeft = 0.0; + val offsetTop = 0.0; + val offsetParent : DomElement? = DomElement(); +} diff --git a/jslib/src/core/javautil.kt b/jslib/src/core/javautil.kt index b2ea97fe65f..822741b81c8 100644 --- a/jslib/src/core/javautil.kt +++ b/jslib/src/core/javautil.kt @@ -2,6 +2,10 @@ package java.util import js.annotations.*; + +library("collectionsMax") +public fun max(col : Collection, comp : Comparator) : T = f + library public trait Comparator { fun compare(obj1 : T, obj2 : T) : Int; diff --git a/jslib/src/html5/core.kt b/jslib/src/html5/core.kt index 9e2c5611e34..c80fc13f363 100644 --- a/jslib/src/html5/core.kt +++ b/jslib/src/html5/core.kt @@ -1,6 +1,7 @@ package html5 import js.annotations.native +import js.DomElement native class Context() { @@ -11,6 +12,7 @@ class Context() { fun rotate(angle : Double) {} fun translate(x : Double, y : Double) {} + fun clearRect(x : Double, y : Double, w : Double, h : Double) {} fun fillRect(x : Double, y : Double, w : Double, h : Double) {} fun strokeRect(x : Double, y : Double, w : Double, h : Double) {} @@ -46,6 +48,12 @@ class Context() { fun measureText(text : String) : TextMetrics = TextMetrics(); } +native +class Canvas() : DomElement() { + val width = 0.0; + val height = 0.0; +} + native class TextMetrics() { val width : Int = 0 @@ -54,9 +62,5 @@ class TextMetrics() { /*custom helpers*/ native fun getContext() : Context = Context(); -//native -//fun random() : Double = 0.0 native -fun getCanvasWidth() : Double = 0.0 -native -fun getCanvasHeight() : Double = 0.0 \ No newline at end of file +fun getCanvas() : Canvas = Canvas(); \ No newline at end of file diff --git a/jslib/src/jquery/common.kt b/jslib/src/jquery/common.kt index dbac9a9892c..020f7a7fc3f 100644 --- a/jslib/src/jquery/common.kt +++ b/jslib/src/jquery/common.kt @@ -1,6 +1,7 @@ package jquery; import js.annotations.*; +import js.DomElement native class JQuery() { @@ -19,8 +20,16 @@ class JQuery() { fun removeClass(className : String) = this fun height() = 0 fun width() = 0 + fun click() = this; - fun click(handler : DomElement.()->Unit) = this; + + fun mousedown(handler : DomElement.(MouseEvent)->Unit) = this; + fun mouseup(handler : DomElement.(MouseEvent)->Unit) = this; + fun mousemove(handler : DomElement.(MouseEvent)->Unit) = this; + + fun dblclick(handler : DomElement.(MouseClickEvent)->Unit) = this; + fun click(handler : DomElement.(MouseClickEvent)->Unit) = this; + fun append(str : String) = this; fun ready(handler : ()->Unit) = this; fun text(text : String) = this; @@ -29,11 +38,20 @@ class JQuery() { fun hover(handlerIn : DomElement.() -> Unit, handlerOut : DomElement.() -> Unit) = this; } -open class DomElement() { - +native +open class MouseEvent() { + val pageX : Double = 0.0; + val pageY : Double = 0.0; + fun preventDefault() {} + fun isDefaultPrevented() : Boolean = true; } -//val document = object : DomElement() {} +native +class MouseClickEvent() : MouseEvent() { + val which : Int = 0; +} + + native("$") fun jq(selector : String) = JQuery(); diff --git a/translator/src/org/jetbrains/k2js/facade/K2JSTranslator.java b/translator/src/org/jetbrains/k2js/facade/K2JSTranslator.java index ac191a5992e..8d09bbe116b 100644 --- a/translator/src/org/jetbrains/k2js/facade/K2JSTranslator.java +++ b/translator/src/org/jetbrains/k2js/facade/K2JSTranslator.java @@ -19,10 +19,7 @@ import org.jetbrains.k2js.utils.JetFileUtils; import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.StringTokenizer; +import java.util.*; import static org.jetbrains.k2js.translate.utils.PsiUtils.getNamespaceName; import static org.jetbrains.k2js.utils.JetFileUtils.createPsiFileList; @@ -47,36 +44,32 @@ public final class K2JSTranslator { writer.close(); } - public static void testTranslateFile(@NotNull String inputFile, @NotNull String outputFile) throws Exception { + public static void testTranslateFile(@NotNull String inputFile, + @NotNull String outputFile) throws Exception { + testTranslateFiles(Collections.singletonList(inputFile), outputFile); + } + + public static void testTranslateFiles(@NotNull List inputFiles, + @NotNull String outputFile) throws Exception { K2JSTranslator translator = new K2JSTranslator(new TestConfig()); - JetFile psiFile = JetFileUtils.loadPsiFile(inputFile, translator.getProject()); - translator.generateAndSaveProgram(psiFile, outputFile); + List psiFiles = createPsiFileList(inputFiles, translator.getProject()); + JsProgram program = translator.generateProgram(psiFiles); + saveProgramToFile(outputFile, program); + } + + private static void saveProgramToFile(@NotNull String outputFile, @NotNull JsProgram program) throws IOException { + CodeGenerator generator = new CodeGenerator(); + generator.generateToFile(program, new File(outputFile)); } @NotNull private Config config; + public K2JSTranslator(@NotNull Config config) { this.config = config; } - - private void generateAndSaveProgram(@NotNull JetFile psiFile, - @NotNull String outputFile) throws IOException { - JsProgram program = generateProgram(Arrays.asList(psiFile)); - CodeGenerator generator = new CodeGenerator(); - generator.generateToFile(program, new File(outputFile)); - } - - public static void testTranslateFiles(@NotNull List inputFiles, @NotNull String outputFile) - throws Exception { - K2JSTranslator translator = new K2JSTranslator(new TestConfig()); - List psiFiles = createPsiFileList(inputFiles, translator.getProject()); - JsProgram program = translator.generateProgram(psiFiles); - CodeGenerator generator = new CodeGenerator(); - generator.generateToFile(program, new File(outputFile)); - } - @NotNull public String translateStringWithCallToMain(@NotNull String programText, @NotNull String argumentsString) { JetFile file = JetFileUtils.createPsiFile("test", programText, getProject()); diff --git a/translator/src/org/jetbrains/k2js/translate/reference/AccessTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/AccessTranslator.java index 6e7e05d277f..37afa67f257 100644 --- a/translator/src/org/jetbrains/k2js/translate/reference/AccessTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/reference/AccessTranslator.java @@ -19,7 +19,7 @@ public abstract class AccessTranslator extends AbstractTranslator { public static AccessTranslator getAccessTranslator(@NotNull JetExpression referenceExpression, @NotNull TranslationContext context) { assert ((referenceExpression instanceof JetReferenceExpression) || - (referenceExpression instanceof JetDotQualifiedExpression)); + (referenceExpression instanceof JetQualifiedExpression)); if (PropertyAccessTranslator.canBePropertyAccess(referenceExpression, context)) { if (referenceExpression instanceof JetQualifiedExpression) { return QualifiedExpressionTranslator.getAccessTranslator((JetQualifiedExpression) referenceExpression, context); diff --git a/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java b/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java index b12b3c36f8d..cadec44a064 100644 --- a/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java +++ b/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java @@ -67,12 +67,6 @@ public final class OperatorOverloadingTest extends TranslationTest { testFooBoxIsTrue("plusAssignNoReassign.kt"); } - - public void testPlusAssignReassign() throws Exception { - testFooBoxIsTrue("plusAssignReassign.kt"); - } - - public void testNotOverload() throws Exception { testFooBoxIsTrue("notOverload.kt"); } diff --git a/translator/test/org/jetbrains/k2js/test/TranslationTest.java b/translator/test/org/jetbrains/k2js/test/TranslationTest.java index 3136f468cc3..08e8366c93d 100644 --- a/translator/test/org/jetbrains/k2js/test/TranslationTest.java +++ b/translator/test/org/jetbrains/k2js/test/TranslationTest.java @@ -81,7 +81,8 @@ public abstract class TranslationTest extends BaseTest { } protected void translateFile(String filename) throws Exception { - K2JSTranslator.testTranslateFile(getInputFilePath(filename), getOutputFilePath(filename)); + K2JSTranslator.testTranslateFile(getInputFilePath(filename), + getOutputFilePath(filename)); } protected void translateFilesInDir(String dirName) throws Exception { @@ -92,7 +93,8 @@ public abstract class TranslationTest extends BaseTest { fullFilePaths.add(getInputFilePath(dirName) + "\\" + fileName); } assert dir.isDirectory(); - K2JSTranslator.testTranslateFiles(fullFilePaths, getOutputFilePath(dirName + ".kt")); + K2JSTranslator.testTranslateFiles(fullFilePaths, + getOutputFilePath(dirName + ".kt")); } protected List generateFilenameList(String inputFile) { diff --git a/translator/testFiles/canvas_helper.js b/translator/testFiles/canvas_helper.js index b1dd7ba9304..4544e7456ef 100644 --- a/translator/testFiles/canvas_helper.js +++ b/translator/testFiles/canvas_helper.js @@ -1,15 +1,7 @@ function getContext() { - return document.getElementsByTagName('canvas')[0].getContext('2d'); + return getCanvas().getContext('2d'); } -function random() { - return Math.random(); -} - -function getCanvasWidth() { - return document.getElementsByTagName('canvas')[0].width; -} - -function getCanvasHeight() { - return document.getElementsByTagName('canvas')[0].height; +function getCanvas() { + return document.getElementsByTagName('canvas')[0]; } \ No newline at end of file diff --git a/translator/testFiles/operatorOverloading/cases/overloadedCallOnProperty.kt b/translator/testFiles/operatorOverloading/cases/overloadedCallOnProperty.kt index 7693ad051ba..d3664d62609 100644 --- a/translator/testFiles/operatorOverloading/cases/overloadedCallOnProperty.kt +++ b/translator/testFiles/operatorOverloading/cases/overloadedCallOnProperty.kt @@ -5,9 +5,7 @@ var a = MyInt() class MyInt() { var b = 0 - fun inc() { - b = b + 1; - } + fun inc() = b + 1 } diff --git a/translator/testFiles/operatorOverloading/cases/plusAssignReassign.kt b/translator/testFiles/operatorOverloading/cases/plusAssignReassign.kt deleted file mode 100644 index 8a9df350fd1..00000000000 --- a/translator/testFiles/operatorOverloading/cases/plusAssignReassign.kt +++ /dev/null @@ -1,16 +0,0 @@ -package foo - -class A(i : Int) { - - val a = i - - fun plusAssign(other : A) = A(this.a + other.a) - -} - -fun box() : Boolean { - var c = A(2) - val d = c - c += A(3) - return (c.a == 5) && (d.a == 2) && (d != c) -} \ No newline at end of file