Skip to content

Commit

Permalink
remove Diff0 and Diff1, use FileDiffRootView instead, fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
kirillp committed Aug 19, 2024
1 parent 25bf2d9 commit f4baf0c
Show file tree
Hide file tree
Showing 18 changed files with 264 additions and 610 deletions.
8 changes: 6 additions & 2 deletions demo-edit-es-module/module/test/diffTool/testDiffTool.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import {newTextModel, newCodeDiff} from "../../src/editor.js";
import {initialTextJava, workerUrl} from "../utils.js";
const codiconUrl = "../../../../codicon/src/main/resources/fonts/codicon.ttf";

const editorArgs = {containerId: "editor", workerUrl: "./../" + workerUrl};
const editorArgs = {
containerId: "editor", workerUrl: "./../" + workerUrl,
codiconUrl : codiconUrl
};

function main() {
newCodeDiff(editorArgs).then(
Expand All @@ -10,7 +14,7 @@ function main() {
diff1.setLeftModel(model1)
let model2 = newTextModel(secondTextJava, "java", "url2")
diff1.setRightModel(model2)
diff1.setReadonly(true)
// diff1.setReadonly(true)
}
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,79 @@
package org.sudu.experiments;

import org.sudu.experiments.esm.EditArgs;
import org.sudu.experiments.esm.JsBaseControl;
import org.sudu.experiments.fonts.FontConfigJs;
import org.sudu.experiments.fonts.FontDesk;
import org.sudu.experiments.fonts.Fonts;
import org.sudu.experiments.js.*;
import org.sudu.experiments.math.ArrayOp;
import org.teavm.jso.JSObject;
import org.teavm.jso.core.JSString;

import java.util.function.BiFunction;
import java.util.function.Function;

public abstract class JsLauncher {

boolean fontsLoaded;
private JsArray<WebWorkerContext> workers;

public JsLauncher(boolean waitFonts) {
JsLauncher(boolean waitFonts) {
fontsLoaded = !waitFonts;
}

public void onWorkersStart(JsArray<WebWorkerContext> workers) {
void onWorkersStart(JsArray<WebWorkerContext> workers) {
this.workers = workers;
if (fontsLoaded) launch(workers);
}

public void onFontsLoaded(JsArrayReader<JSObject> fontFaces) {
void onFontsLoaded(JsArrayReader<JSObject> fontFaces) {
FontFace.addToDocument(fontFaces);
fontsLoaded = true;
if (workers != null) launch(workers);
}

public abstract void launch(JsArray<WebWorkerContext> workers);
abstract void launch(JsArray<WebWorkerContext> workers);

public static <T extends JsBaseControl> Promise<T> start(
EditArgs arguments,
Function<SceneApi, Scene> sf,
BiFunction<WebWindow, EditArgs, T> rf
) {
if (!JsCanvas.checkFontMetricsAPI())
return Promise.reject(FireFoxWarning.message);

return Promise.create((postResult, postError) -> {
boolean loadCodicon = arguments.hasCodiconUrl();
var l = new JsLauncher(loadCodicon) {
@Override
public void launch(JsArray<WebWorkerContext> workers) {
var w = new WebWindow(arguments.getContainerId(), workers);
if (w.init(sf)) {
postResult.f(rf.apply(w, arguments));
} else {
postError.f(JSString.valueOf(WebGLError.text));
}
}
};

if (loadCodicon) {
var url = arguments.getCodiconUrl().stringValue();
FontFace.loadFonts(codiconFontConfig(url))
.then(l::onFontsLoaded,
e -> postError.f(e.cast()));
}
WebWorkerContext.start(
l::onWorkersStart,
postError,
arguments.workerUrl(),
arguments.numWorkerThreads());
});
}

static FontConfigJs[] codiconFontConfig(String filename) {
return ArrayOp.array(
new FontConfigJs(Fonts.codicon, filename,
FontDesk.NORMAL, FontDesk.WEIGHT_REGULAR));
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.sudu.experiments.diff;

import org.sudu.experiments.Debug;
import org.sudu.experiments.WebGLError;
import org.sudu.experiments.JsLauncher;
import org.sudu.experiments.WebWindow;
import org.sudu.experiments.esm.*;
import org.sudu.experiments.js.*;
Expand All @@ -11,24 +10,22 @@
public class JsCodeDiff0 implements JsCodeDiff {

public final WebWindow window;
private Diff0 diff;
private FileDiffWindow w;

public JsCodeDiff0(
EditArgs args,
JsArray<WebWorkerContext> workers
WebWindow ww,
EditArgs args
) {
this.window = new WebWindow(
Diff0::new, WebGLError::onWebGlError,
args.getContainerId(), workers);
this.diff = (Diff0) window.scene();
this.window = ww;
this.w = ((FileDiffScene) window.scene()).w;
if (args.hasTheme()) setTheme(args.getTheme());
if (args.hasReadonly()) setReadonly(args.getReadonly());
}

@Override
public final void dispose() {
window.dispose();
diff = null;
w = null;
}

@Override
Expand All @@ -50,33 +47,28 @@ public void focus() {

@Override
public void setReadonly(boolean flag) {
diff.setReadonly(flag);
w.rootView.setReadonly(flag);
}

@Override
public void setFontFamily(JSString fontFamily) {
diff.setFontFamily(fontFamily.stringValue());
w.rootView.setFontFamily(fontFamily.stringValue());
}

@Override
public void setFontSize(float fontSize) {
diff.setFontSize(fontSize);
w.rootView.setFontSize(fontSize);
}

@Override
public void setTheme(JSString theme) {
switch (theme.stringValue()) {
case "light" -> diff.toggleLight();
case "darcula" -> diff.toggleDarcula();
case "dark" -> diff.toggleDark();
default -> Debug.consoleInfo("unknown theme: ", theme);
}
w.setTheme(theme.stringValue());
}

@Override
public void setLeftModel(JsITextModel model) {
if (model instanceof JsTextModel jsTextModel) {
diff.setLeftModel(jsTextModel.javaModel);
w.rootView.setLeftModel(jsTextModel.javaModel);
} else if (JSObjects.isUndefined(model)) {
throw new IllegalArgumentException("left model is undefined");
} else {
Expand All @@ -87,7 +79,7 @@ public void setLeftModel(JsITextModel model) {
@Override
public void setRightModel(JsITextModel model) {
if (model instanceof JsTextModel jsTextModel) {
diff.setRightModel(jsTextModel.javaModel);
w.rootView.setRightModel(jsTextModel.javaModel);
} else if (JSObjects.isUndefined(model)) {
throw new IllegalArgumentException("right model is undefined");
} else {
Expand All @@ -97,24 +89,19 @@ public void setRightModel(JsITextModel model) {

@Override
public JsITextModel getLeftModel() {
return JsTextModel.fromJava(diff.getLeftModel());
return JsTextModel.fromJava(w.rootView.getLeftModel());
}

@Override
public JsITextModel getRightModel() {
return JsTextModel.fromJava(diff.getRightModel());
return JsTextModel.fromJava(w.rootView.getRightModel());
}

public static Promise<JsCodeDiff> newDiff(EditArgs arguments) {
if (JsCanvas.checkFontMetricsAPI()) {
return Promise.create((postResult, postError) ->
WebWorkerContext.start(
workers -> postResult.f(new JsCodeDiff0(arguments, workers)),
postError,
arguments.workerUrl(),
arguments.numWorkerThreads()));
} else {
return Promise.reject(FireFoxWarning.message);
}
return JsLauncher.start(
arguments,
FileDiffScene::new,
JsCodeDiff0::new
);
}
}
Original file line number Diff line number Diff line change
@@ -1,37 +1,17 @@
package org.sudu.experiments.diff;

import org.sudu.experiments.JsLauncher;
import org.sudu.experiments.WebGLError;

import org.sudu.experiments.WebWindow;
import org.sudu.experiments.esm.*;
import org.sudu.experiments.fonts.FontConfigJs;
import org.sudu.experiments.fonts.FontDesk;
import org.sudu.experiments.fonts.Fonts;
import org.sudu.experiments.js.*;
import org.sudu.experiments.math.ArrayOp;
import org.teavm.jso.JSObject;
import org.teavm.jso.core.JSString;

public class JsFolderDiff0 implements JsFolderDiff {

public final WebWindow window;
protected FolderDiffScene folderDiff;

static void start(
EditArgs arguments,
JsArray<WebWorkerContext> workers,
JsFunctions.Consumer<JsFolderDiff> postResult,
JsFunctions.Consumer<JSObject> postError
) {
var window = new WebWindow(
arguments.getContainerId(), workers);
if (window.init(FolderDiffScene::new)) {
postResult.f(new JsFolderDiff0(window, arguments));
} else {
postError.f(JSString.valueOf(WebGLError.text));
}
}

protected JsFolderDiff0(WebWindow window, EditArgs args) {
this.window = window;
this.folderDiff = (FolderDiffScene) window.scene();
Expand Down Expand Up @@ -83,35 +63,9 @@ public void setTheme(JSString theme) {
}

public static Promise<JsFolderDiff> newDiff(EditArgs arguments) {
if (!JsCanvas.checkFontMetricsAPI())
return Promise.reject(FireFoxWarning.message);

return Promise.create((postResult, postError) -> {
boolean loadCodicon = arguments.hasCodiconUrl();
var l = new JsLauncher(loadCodicon) {
@Override
public void launch(JsArray<WebWorkerContext> workers) {
start(arguments, workers, postResult, postError);
}
};

if (loadCodicon) {
var url = arguments.getCodiconUrl().stringValue();
FontFace.loadFonts(codiconFontConfig(url))
.then(l::onFontsLoaded,
e -> postError.f(e.cast()));
}
WebWorkerContext.start(
l::onWorkersStart,
postError,
arguments.workerUrl(),
arguments.numWorkerThreads());
});
}

static FontConfigJs[] codiconFontConfig(String filename) {
return ArrayOp.array(
new FontConfigJs(Fonts.codicon, filename,
FontDesk.NORMAL, FontDesk.WEIGHT_REGULAR));
return JsLauncher.start(
arguments,
FolderDiffScene::new,
JsFolderDiff0::new);
}
}
Original file line number Diff line number Diff line change
@@ -1,40 +1,18 @@
package org.sudu.experiments.diff;

import org.sudu.experiments.Channel;
import org.sudu.experiments.JsLauncher;
import org.sudu.experiments.WebGLError;
import org.sudu.experiments.WebWindow;
import org.sudu.experiments.*;
import org.sudu.experiments.esm.EditArgs;
import org.sudu.experiments.esm.JsFolderDiff;
import org.sudu.experiments.fonts.FontConfigJs;
import org.sudu.experiments.fonts.FontDesk;
import org.sudu.experiments.fonts.Fonts;
import org.sudu.experiments.js.*;
import org.sudu.experiments.math.ArrayOp;
import org.teavm.jso.JSObject;
import org.teavm.jso.core.JSString;

import java.util.function.Function;

public class JsRemoteFolderDiff0 implements JsFolderDiff {

public final WebWindow window;
protected RemoteFolderDiffScene folderDiff;

static void start(
EditArgs arguments,
JsArray<WebWorkerContext> workers,
JsFunctions.Consumer<JsFolderDiff> postResult,
JsFunctions.Consumer<JSObject> postError,
Channel channel
) {
var window = new WebWindow(
arguments.getContainerId(), workers);
if (window.init(api -> new RemoteFolderDiffScene(api, channel))) {
postResult.f(new JsRemoteFolderDiff0(window, arguments));
} else {
postError.f(JSString.valueOf(WebGLError.text));
}
}

protected JsRemoteFolderDiff0(WebWindow window, EditArgs args) {
this.window = window;
this.folderDiff = (RemoteFolderDiffScene) window.scene();
Expand Down Expand Up @@ -85,36 +63,12 @@ public void setTheme(JSString theme) {
folderDiff.setTheme(theme.stringValue());
}

public static Promise<JsFolderDiff> newDiff(EditArgs arguments, Channel channel) {
if (!JsCanvas.checkFontMetricsAPI())
return Promise.reject(FireFoxWarning.message);

return Promise.create((postResult, postError) -> {
boolean loadCodicon = arguments.hasCodiconUrl();
var l = new JsLauncher(loadCodicon) {
@Override
public void launch(JsArray<WebWorkerContext> workers) {
start(arguments, workers, postResult, postError, channel);
}
};

if (loadCodicon) {
var url = arguments.getCodiconUrl().stringValue();
FontFace.loadFonts(codiconFontConfig(url))
.then(l::onFontsLoaded,
e -> postError.f(e.cast()));
}
WebWorkerContext.start(
l::onWorkersStart,
postError,
arguments.workerUrl(),
arguments.numWorkerThreads());
});
static Function<SceneApi, Scene> sf(Channel channel) {
return api -> new RemoteFolderDiffScene(api, channel);
}

static FontConfigJs[] codiconFontConfig(String filename) {
return ArrayOp.array(
new FontConfigJs(Fonts.codicon, filename,
FontDesk.NORMAL, FontDesk.WEIGHT_REGULAR));
public static Promise<JsFolderDiff> newDiff(EditArgs arguments, Channel channel) {
return JsLauncher.start(arguments,
sf(channel), JsRemoteFolderDiff0::new);
}
}
Loading

0 comments on commit f4baf0c

Please sign in to comment.